User Tools

Site Tools


devops2._использование_kubernetes

Table of Contents

DevOps2. Использование Kubernetes

Программа курса

Модуль 0. Подготовка к занятию

  1. Узнать и записать свой номер стенда: X=
  2. Сообщить его в чат преподавателю

Модуль 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

  • gate
# sh net_gate.sh

# init 6
  • server
# sh net_server.sh

# init 6
  • Создать в Putty профили gate, server и подключиться

1.3 Подготовка инфраструктуры для kubespray

server:~# git -C conf/ pull

server:~# sh conf/dns.sh
# cat /etc/resolv.conf
search corpX.un
nameserver 192.168.X.10
# nslookup kubeN
  • Настройка сервера DHCP на gate
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-го модуля)

1.6 Развертывание рабочей станции пользователя (для 4-го модуля)

  • Разворачиваем win client2 (ip/m: 172.16.1.100+X/24, dns: 192.168.X.10)
  • Копируем ca.crt
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-го модуля)

  • Только преподаватель
  • Язык программирования Python (в venv2, без ssl (добавим в теме ingress), с конфигурацией и с /var/www, для демонстрации работы)
  • Создаем и тестируем Docker образ для Приложение python pywebd (безопасный вариант, для демонстрации всех нюансов в k8s)
  • Создаем проект pywebd (Public (Private на следующей итерации), без README) и Использование Private Registry для хранения образа (метки latest и ver1.1)

1.8 Работа с кластером Kubernetes

  • Добавляем корпоративный сертификат в кластер 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, проверка статуса пода, настройка лимитов

  • Запуск и доступ к приложениям в k8s
kube1:~# mkdir pywebd-k8s;cd $_
  • !!! Можно начать с использования образа gowebd, а потом усложнить
  • Предоставляем доступ к приложниям в k8s по NodePort
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

  • Хранение данных приложений в k8s

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

  • Управление конфигурацией и доступ к приложеням в k8s по https
$ 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

  • Добавляем Пример CI с использованием контейнеров в каталог gowebd на server
  • Используя “подсказки” размещаем проект в GitLab
  • В GitLab наблюдаем сборку образа
  • В GitLab добавляем тег ver1.1 и проверяем наличие образов

3.3 Разворачивание нужной версии приложения в kubernetes

kube1:~# mkdir gowebd-k8s;cd $_
  • В GitLab создаем версию ver1.2 и назначаем тэг
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
  • Преподаватель демонстрирует
  • Настраиваем stage deploy через envsubst используя Пример shell Kubernetes
  • Создаем проект 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
  • Настраиваем stage deploy с helm используя Пример shell Kubernetes
  • Создаем проект gowebd-k8s (Public, без Readme)
  • Через WebIDE
  • Настраиваем зависимость между проектами gowebd и gowebd-k8s через stage deploy в Пример CI с использованием контейнеров
  • Увеличиваем версию, добавляем соответствующий тег, проверяем версию приложения в k8s
  • Ожидая процесс сборки, обсуждаем Версии deployment, недостатки Gitlab CD и варианты, например Argo CD

Модуль 4. Дополнительные материалы

4.1 Доступ к приложениям в Bare-Metal Kubernetes

  • Удаляем NS my-ns
  • “Хором” в классе можно выполнить шаги 10, 12, 13
  • В формате “Открытого/Персонального обучения”:
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

devops2._использование_kubernetes.txt · Last modified: 2025/03/29 06:06 by val