ustinsky Platform repository
Домашняя работа 1 ( hw1 intro )
kubelet запущен как сервис systemd. Он занимается процессом запуска pod-ов. Если выполнить
sudo systemctl stop kubelet; docker rm -f $(docker ps -a -q)
то кластер не восстанавливается автоматически
для запуска кластера
sudo systemctl start kubelet;
после чего кластер запускает необходимые контейнеры
core-dns - реализован как Deployment с параметром replicas: 2. При его удалении ReplicaSet восстанавливает его работу
kube-proxy управляется и создается Daemonset.
kube-apiserver, etcd, kube-controller-manager, kube-scheduler - запускает kubelet ноды (/etc/kubernetes/manifests/)
Создан самая простая программа http server на golang, взятая из учебника. Создан Dockerfile. Образ залит на DockerHub.
Создан файл манифеста и запущен под. Пробрасываем подключение к поду и убеждаемся в его работоспособности
kubectl port-forward --address 0.0.0.0 pod/web 8000:8000
Создать файл описания пода можно с помощью команды
kubectl run frontend --image evgeniim/hipster-frontend --restart=Never --dry-run -o yaml > frontend-pod.yaml
Под не запускался из-за отсутсвия переменных окружений.
Домашняя работа 2 ( hw2 controlers ) ![Build Status](https://camo.githubusercontent.com/62a80b0b962a7f46a12e052b6eb10957f77b8550bf6d4c1a981866f72c5f77ed/68747470733a2f2f7472617669732d63692e636f6d2f6f7475732d6b756265722d323031392d31322f757374696e736b795f706c6174666f726d2e7376673f6272616e63683d6b756265726e657465732d636f6e74726f6c6c657273)
otus-kuber-2019-12/ustinsky_platform/
kind create cluster --config kind-config.yaml
Содержимое kind-config.yaml
kind: Cluster
apiVersion: kind.sigs.k8s.io/v1alpha3
nodes:
- role: control-plane
- role: control-plane
- role: control-plane
- role: worker
- role: worker
- role: worker
Ответ: Replicaset не умеет обновлять некоторые свой свойства - в частности шаблоны контейнеров (template). Шаблоны используются только при создании объекта ReplicaSet.
4. Поигрались с обновлениями и откатами новых версии приложений с использованием методов Blue-Green и Reverse Rolling Update
5. Посмотрели на встроенные механизмы k8s управления готовностью пода к работе - readinessProbe и livenessProbe
6. Нашли в интернете DaemonSet для node-exporter и развернули его на всех нодах кластера (мастер и воркер нодах).
Чтобы развернуть на мастер нодах нужно настроить параметр tolerations
Домашняя работа 3 ( hw3 security ) ![Build Status](https://camo.githubusercontent.com/e858700d19b8159fd6f7a5fc8423d7d56c515968db9fa7c89faa8ed0be8ba6f2/68747470733a2f2f7472617669732d63692e636f6d2f6f7475732d6b756265722d323031392d31322f757374696e736b795f706c6174666f726d2e7376673f6272616e63683d6b756265726e657465732d7365637572697479)
- Создан Service Account bob , дана ему роль admin в рамках всего кластера
- Создать Service Account dave без доступа к кластеру
- Создан Namespace prometheus
- Создан Service Account carol в namespace prometheus
- Дан всем Service Account в Namespace prometheus возможность делать get , list , watch в отношении Pods всего кластера
- Создан Namespace dev
- Создан Service Account jane в Namespace dev
- Дана jane роль admin в рамках Namespace dev
- Создан Service Account ken в Namespace dev
- Дана ken роль view в рамках Namespace dev
Домашняя работа 4 ( hw4 networks )
-
- Добавлен проверок Pod (ReadinessProbe, LivenessProbe)
-
- Создан объект Deployment
-
- Добавлен сервис в кластер (ClusterIP)
-
- Включен режима балансировки IPVS
-
- Установлен MetaILB в Layer2 режиме
-
- Добавлен сервис LoadBalancer
-
- Установлен ingress-контроллер и прокси ingress-nginx
-
- Созданы правила Ingress
kubectl apply -f web-deploy.yaml
kubectl apply -f web-svc-cip.yaml
# меняем настройки minikube
kubectl --namespace kube-system edit configmap/kube-proxy (ищем KubeProxyConfig и меняем mode: "" => mode: "ipvs")
kubectl --namespace kube-system delete pod --selector='k8s-app=kube-proxy'
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.0/manifests/metallb.yaml
kubectl apply -f metallb-config.yaml
kubectl apply -f web-svc-lb.yaml
# получаем IP
minikube ip
ip route add 172.17.255.0/24 via <IP>
kubectl apply -f coredns-svc-lb.yaml
kubeclt apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.1/deploy/static/mandatory.yaml
kubectl apply -f nginx-lb.yaml
kubectl apply -f web-svc-headless.yaml
kubectl apply -f web-ingress.yaml
Домашняя работа 5 ( hw5 volumes ) ![Build Status](https://camo.githubusercontent.com/ba7a09988ab38987fcdcaf8ce97b82d601f23bf48c1e4960a6d263b6dfecc69c/68747470733a2f2f7472617669732d63692e636f6d2f6f7475732d6b756265722d323031392d31322f757374696e736b795f706c6174666f726d2e7376673f6272616e63683d6b756265726e657465732d766f6c756d6573)
- Развернули minio
- Спрятали секреты в secrets
Домашняя работа 6 ( hw6 templating )
В ходе работы сделано:
- Установлен helm 3
- Установлен Cert-manager
- Установлен Harbor
- Рассмотрен процесс создания своего chart-a
- Рассмотрен helm secret
- Рассмотрен kubecfg
- Рассмотрен kustomize
Домашняя работа 7 ( hw7 operators ) ![Build Status](https://camo.githubusercontent.com/b5eea81612339898e483608abf7cd34ae647b5cf06c6f2c66063fdad4916539d/68747470733a2f2f7472617669732d63692e636f6d2f6f7475732d6b756265722d323031392d31322f757374696e736b795f706c6174666f726d2e7376673f6272616e63683d6b756265726e657465732d6f70657261746f7273)
В работе выполнено:
- Написали оператор
- Поправили оператор из методички - чтобы он стабильно удалял и восстанавливал (добавили удаление recovery job при удалении instance)
- Посмотрели kopf и добавили код для обновления пароля и записи event и status в describe
Домашняя работа 8 ( hw8 monitoring )
В работе выполнено:
- Установили prometheus с помощью helm3
- Создали тестовый сервер nginx
- Зашли на Grafana и Prometheus и увидели метрики
Домашняя работа 9 ( hw9 logging )
В работе выполнено:
- Установили EFK
- Посмотрели на отработку дашборда при отказе ноды с ElasticSearch
- Создали дашборд в Kibana
- Создали дашборд в Loki
Домашняя работа 10 ( hw10 vault )
В ходе работы:
- Установили Vault
- Сгенерировали сертификаты
- Настроили работу vault по HTTPS
- Настроили динамическое обновление сертификатов
Домашняя работа 11 ( hw11 gitops )
В ходе работы:
- Установили Flux, Flagger
- Посмотрели обновление манифестов при разверывании нового образа docker
- Посмотрели на канареечное развертывание с помощью Flagger
Ссылка на репозиторий: https://gitlab.com/ustinsky/microservices-demo-1.git
Домашняя работа 12 ( hw12 debug )
В работе делали:
- Поигрались с strace
- Установили кластер с calico
- Поигрались с calico, netperf, iptables-tailer.
Домашняя работа 13 ( hw13 storage ) ![Build Status](https://camo.githubusercontent.com/03de0429e7b0a9c2020f71dc4b6e289712f76583aac9f66e256c5faaf28ae2cd/68747470733a2f2f7472617669732d63692e636f6d2f6f7475732d6b756265722d323031392d31322f757374696e736b795f706c6174666f726d2e7376673f6272616e63683d6b756265726e657465732d73746f72616765)
git clone https://github.com/maniaque/k1s.git
cd k1s/vagrant/single/
vagrant up
vagrant ssh -c 'cat /home/vagrant/.kube/config' > ~/.kube/config
git clone https://github.com/kubernetes-csi/csi-driver-host-path.git
bash deploy_snap
cd csi-driver-host-path/
git checkout 99036d47eab
deploy/kubernetes-1.17/deploy.sh
kubectl apply -f hw/01-sc.yaml
kubectl apply -f hw/02-pvc.yaml
kubectl apply -f hw/03-pod.yaml
Установили и поигрались с ISCSI
Домашняя работа 14 ( hw14 kubernetes-production-clusters ) ![Build Status](https://camo.githubusercontent.com/ed2bd367541d64e9d5d501761bf00f3187993f6203ac00b8db58b0db7135bc7c/68747470733a2f2f7472617669732d63692e636f6d2f6f7475732d6b756265722d323031392d31322f757374696e736b795f706c6174666f726d2e7376673f6272616e63683d6b756265726e657465732d70726f64756374696f6e2d636c757374657273)
В работе выполнено:
- Установили кластер k8s с помощью kubeadm
- Обновили кластер до версии 18
- Установили кластер с помошью kubespray
Файлы в папке kubernetes-production-clusters:
- deployment.yml - развертывание nginx
- inventory.ini - playbook для kuberspray с 1 мастер нодой и 3 воркер нодами
- inventory2.ini - playbook для kuberspray с 3 мастер нодами и 2 воркер нодами