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 (безопасный вариант, с конфигурацией и с /var/www, для начальных простых развертываний в 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, а после демонстрации балансировки заменить на pywebd
  • Предоставляем доступ к приложениям в 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.corpX.un

server# cat /etc/bind/corpX.un
...
pywebd          A       192.168.X.64
...

Практикум

Модуль 3. Создание CI/CD в kubernetes

3.1 Запуск gitlab-runner в kubernetes

  • Методически, можно показать: “Развертывание своего приложения (webd-chart с образом gowebd)”
  • Сделать общий gitlab-runner kubernetes с тегом “build”

3.2 Сборка докер контейнера в kubernetes

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

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

kube1:~# mkdir -p 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

4.6 Бюджетная безотказная сеть для кластера

4.7 Все что должен знать DevOps про PostgreSQL

Доп. занятие

Причины

Много материала в 3 дня не помещается никак

Мало часов

Очень сложная тема, необходимо еще несколько раз переслушать материал

Много, сложно. Даже в том что я думаю, что усвоил, на самом деле не уверен

Объем данных создал в голове кашу

Еще причины и пожелания

Было очень тяжело. Во первых удерживать постоянно внимание. Это очень трудно Второй день была лекция почти 4 часа и там удержание внимание превращается в подвиг.

Поэтому нужны перерывы. Хотя бы 5 минут на 40-60 минут освободить внимание.

Второй момент связан с той ситуацией, когда на второй день на самой тяжёлой лекции один студент сказал, а чем вы вообще занимаемся занимаемся. На мой взгляд его вопрос связан не с пониманием каких-то конкретных вещей, а с потерей общего понимания занятия, его цели и смысла.

И тут, на мой взгляд, просто нужен общий план лекций или план работ.

Без такого плана непонятно как распределять силы. Непонятно что важно, что не очень важно. Непонятно что из чего вытекает.

Как правило по ходу лекции ты улавливаешь, что из чего вытекает в данный конкретный момент, но при этом через некоторый промежуток времени теряется общий план задачи. А что бы собственного говоря делаем, к чему идём? Зачем все эти шаги?

Если студент имеют возможность смотреть на такой план, то он может понять на каком этапе он находится, что он уже сделал и что ему предстоит.

А если не может, то преподавателю при наличии такого плана достаточно будет 2-3 минут что бы вернуть к сути «заблудившегося» студента.

Мы сейчас находимся условно в пункте II.5. То есть мы проделали то, то и то. Сейчас мы делаем это, а после этого у нас по плану то-то, то.

Вопросы

Как реализуется управление конфигурацией и секретами в Kubernetes, и чем это лучше или хуже по сравнению с Ansible Vault?

Как Docker сети (bridge, host, overlay) работают и взаимодействуют между контейнерами на одном хосте и в кластере Kubernetes?

Какие подходы существуют для организации сетевого взаимодействия и безопасности (например, через Service и Ingress) при масштабном развертывании микросервисов в Kubernetes?

Очень хотелось бы рассмотреть https://github.com/rancher/rancher на живом примере (подготовка к развертыванию, работа в его веб-интерфейсе) Rancher — это платформа для управления контейнерами с открытым исходным кодом. Rancher позволяет легко запускать Kubernetes в любом месте, соответствовать требованиям ИТ и расширять возможности команд DevOps.

1 Базовые и продвинутые сущности k8s

2 Стратегии deploy и rollback с реальными примерами из практики

3 Работу с облаками

Хотелось бы рассмотреть поподробнее компоненты k8s

Такие как

Coredns

Ingress

Sidecar

Istio

Может рассмотреть подробно как работает например kube api и etcd, scheduler, kube-proxy

Можно показать визуально как это выглядит в k9s

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