DevOps2. Использование Kubernetes
Программа курса
Модуль 0. Подготовка к занятию
Узнать и записать свой номер стенда: X=
Сообщить его в чат преподавателю
Модуль 1. Развертывание стенда и kubernetes кластера
Теория
Лабораторные работы: Развертывание стенда и kubernetes кластера
1.1 Схема стенда, импорт, настройка и запуск VM gate и server
Запустите с правами Administrator
C:\cmder\cmder.exe
bash
cd
test -d conf && rm -rf conf
git clone http://val.bmstu.ru/unix/conf.git
cd conf/virtualbox/
!!! 9 - это номер курса, вместо X укажите Ваш номер стенда, если не знаете его, спросите преподавателя !!!
./setup.sh X 9
1.2 Настройка сети VM gate и server
# sh net_gate.sh
# init 6
# sh net_server.sh
# init 6
1.3 Подготовка инфраструктуры для kubespray
server:~# git -C conf/ pull
server:~# sh conf/dns.sh
-
Настройка клиента
DNS на gate и server
# cat /etc/resolv.conf
search corpX.un
nameserver 192.168.X.10
# nslookup kubeN
gate:~# git -C conf/ pull
gate:~# sh conf/dhcp.sh
Настройка MAC адресов 08:00:27:12:34:5N (для получения назначенного IP через
Сервис DHCP) и запуск kube1-4
1.4 Разворачивание кластера Kubernetes через Kubespray
1.5 Развертывание GitLab (для 3-го модуля)
-
-
-
-
-
Подключаемся с хост системы по FQDN (для правильного Project
URL) и создаем УЗ student с правами администратора (можно в следующую паузу)
1.6 Развертывание рабочей станции пользователя (для 4-го модуля)
server# apt install apache2
server# rm /var/www/html/index.html
server# cp wild.crt /var/www/html/ca.crt
Проверяем в
Chrome доступность GitLab по https
1.7 Разработка образов приложений (для 2-го модуля)
Только преподаватель
-
-
Создаем проект
pywebd (Public (Private на следующей итерации), без README) и
Использование Private Registry для хранения образа (метки latest и ver1.1)
1.8 Работа с кластером Kubernetes
bash -c '
scp /var/www/html/ca.crt kube1:/usr/local/share/ca-certificates/
ssh kube1 update-ca-certificates
ssh kube1 systemctl restart containerd
scp /var/www/html/ca.crt kube2:/usr/local/share/ca-certificates/
ssh kube2 update-ca-certificates
ssh kube2 systemctl restart containerd
scp /var/www/html/ca.crt kube3:/usr/local/share/ca-certificates/
ssh kube3 update-ca-certificates
ssh kube3 systemctl restart containerd
'
kubeN#
crictl pull server.corpX.un:5000/student/gowebd
crictl images
crictl rmi server.corpX.un:5000/student/gowebd
Модуль 2. Объекты kubernetes, helm
Теория
Теория через лабораторные работы: Управление объектами Kubernetes
2.1 deployment, service, проверка статуса пода, настройка лимитов
kube1:~# mkdir pywebd-k8s;cd $_
kube1:~/pywebd-k8s# kubectl -n my-ns exec -ti pods/my-webd-<TAB> -- sh
~ $ kill -STOP 16
kube1:~/pywebd-k8s# kubectl get pods -n my-ns --watch
2.2 volumes, nodeAffinity, helm
2.3 ingress
Предоставляем доступ к приложниям в k8s по
URL
Deployment с emptyDir для демонстрации балансировки
server.corpX.un:~# cat /etc/bind/corpX.un
...
pywebd A 192.168.X.221
A 192.168.X.222
A 192.168.X.223
...
$ curl http://pywebd.corpX.un
2.4 configmap, secret
$ curl --connect-to "":"":server.corpX.un:4443 https://pywebd.corpX.un
Service LoadBalancer, port: 443, targetPort: 4443
$ curl --connect-to "":"":192.168.X.64:443 https://pywebd.corp24.un
server# cat /etc/bind/corpX.un
...
pywebd A 192.168.X.64
...
Модуль 3. Создание CI/CD в kubernetes
3.1 Запуск gitlab-runner в kubernetes
3.2 Сборка докер контейнера в kubernetes
-
Используя “подсказки” размещаем проект в GitLab
В GitLab наблюдаем сборку образа
В GitLab добавляем тег ver1.1 и проверяем наличие образов
3.3 Разворачивание нужной версии приложения в kubernetes
kube1:~# mkdir gowebd-k8s;cd $_
kube1:~/gowebd-k8s# cp my-webd-deployment.yaml my-webd-deployment-env.yaml
kube1:~/gowebd-k8s# cat my-webd-deployment-env.yaml
...
image: server.corpX.un:5000/student/gowebd:$VER
...
kube1:~/gowebd-k8s# export VER=ver1.2
kube1:~/gowebd-k8s# envsubst < my-webd-deployment-env.yaml | kubectl apply -f - -n my-ns
kubeN# curl my-webd.my-ns.svc.cluster.local
Устанавливаем из dpkg
GitLab Runner на server и регистрируем как общий с тегом “k8s-deploy” и shell executor
-
-
Преподаватель демонстрирует
-
Создаем проект gowebd-k8s (без Readme)
Деплоим нужную версию в ручную (New Pipeeline MY_WEBD_VER=ver1.1)
Преподаватель удаляет проект gowebd-k8s
server.corpX.un:~# cat /etc/bind/corpX.un
...
gowebd A 192.168.X.221
A 192.168.X.222
A 192.168.X.223
...
$ curl http://gowebd.corpX.un
gitlab-runner@server:~$ helm list -n my-ns
Ожидая процесс сборки, обсуждаем
Версии deployment, недостатки Gitlab CD и варианты, например Argo CD
Модуль 4. Дополнительные материалы
server:~# ssh-copy-id gate
4.2 Стратегии деплоя в Kubernetes
4.3 Работа с хранилищами в Kubernetes и восстановление после аварии
“Хором” в классе можно выполнить
Добавление узла через Kubespray и, параллельно, шаги 4, 5, 3, можно, добавить мониторинг (VictoriaMetrics Cluster), перед аварией узла
4.4 Продолжение восстановления после аварии и Обновление кластера Kubernetes
“Хором” в классе можно выполнить шаг 4
выполняем работы:
с 00:09:10 до 00:34:25 (восстанавливаем etcd)
с 00:48:55 до 00:51:25 (добавляем kube3 как worker)
с 00:54:50 до 01:03:33 (обновляем кластер)
4.5 Мониторинг кластера Kubernetes