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

# 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
# cat /etc/resolv.conf
search corpX.un
nameserver 192.168.X.10
# nslookup kubeN
gate:~# git -C conf/ pull

gate:~# sh conf/dhcp.sh

1.4 Разворачивание кластера Kubernetes через Kubespray

1.5 Развертывание GitLab (для 3-го модуля)

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

server# apt install apache2

server# rm /var/www/html/index.html

server# cp wild.crt /var/www/html/ca.crt

1.7 Разработка образов приложений (для 2-го модуля)

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

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
$ 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

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

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

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

Практикум

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

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

server:~# ssh-copy-id gate

4.2 Стратегии деплоя в Kubernetes

4.3 Работа с хранилищами в Kubernetes и восстановление после аварии

4.4 Продолжение восстановления после аварии и Обновление кластера Kubernetes

“Хором” в классе можно выполнить шаг 4

выполняем работы:

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