This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
devops2._использование_kubernetes [2024/11/02 14:01] val [Лабораторные работы: CD приложения] |
devops2._использование_kubernetes [2025/03/29 06:06] (current) val [При вводе в эксплуатацию учесть] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== DevOps2. Использование Kubernetes ====== | ====== DevOps2. Использование Kubernetes ====== | ||
+ | |||
+ | |||
+ | |||
===== Программа курса ===== | ===== Программа курса ===== | ||
* [[https://www.specialist.ru/course/devops2|DevOps. Уровень 2. Использование Kubernetes]] | * [[https://www.specialist.ru/course/devops2|DevOps. Уровень 2. Использование Kubernetes]] | ||
- | * [[https://www.specialist.ru/track/dp-devops|ДП-ДЕВОПС-М]] | ||
- | ===== Модуль 0. Подготовка стенда в классе ===== | + | ===== Модуль 0. Подготовка к занятию ===== |
- | * Узнать свой номер стенда | + | - Узнать и записать свой номер стенда: X= |
- | * Проверить наличие дистрибутивов и образов (будет сделано) | + | - Сообщить его в чат преподавателю |
- | * Использовать кэширующий прокси для ускорения загрузки | + | |
- | ===== Модуль 1: Развертывание стенда ===== | + | ===== Модуль 1. Развертывание стенда и kubernetes кластера ===== |
==== Теория ==== | ==== Теория ==== | ||
- | * Разворачиваем стенд курса [[https://www.specialist.ru/course/yun2-b|Linux. Уровень 2. Администрирование сервисов и сетей]] | + | ==== Лабораторные работы: Развертывание стенда и kubernetes кластера ==== |
- | ==== Лабораторные работы: Развертывание стенда ==== | + | * Разворачиваем стенд курса [[https://www.specialist.ru/course/yun2-b|Linux. Уровень 2. Администрирование сервисов и сетей]] или [[https://rutube.ru/video/18b52d9721f7464b4485fec7d894e8ca/|Развертывание стенда дома (смотреть с 13-й минуты)]] |
- | === 1.1 Схема стенда, импорт, настройка и запуск VM gate и server === | + | ==== 1.1 Схема стенда, импорт, настройка и запуск VM gate и server ==== |
<code> | <code> | ||
Запустите с правами Administrator | Запустите с правами Administrator | ||
Line 30: | Line 31: | ||
cd | cd | ||
- | test -d conf && rm -r conf | + | test -d conf && rm -rf conf |
git clone http://val.bmstu.ru/unix/conf.git | git clone http://val.bmstu.ru/unix/conf.git | ||
Line 40: | Line 41: | ||
./setup.sh X 9 | ./setup.sh X 9 | ||
</code> | </code> | ||
- | === 1.2 Настройка сети VM gate и server === | + | ==== 1.2 Настройка сети VM gate и server ==== |
* [[Настройка стендов слушателей#Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#Скрипты автоконфигурации]] | * [[Настройка стендов слушателей#Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#Скрипты автоконфигурации]] | ||
Line 60: | Line 61: | ||
* Создать в Putty профили gate, server и подключиться | * Создать в Putty профили gate, server и подключиться | ||
- | === 1.3 настройка сервисов DNS и DHCP === | + | ==== 1.3 Подготовка инфраструктуры для kubespray ==== |
* [[Финальная настройка DNS сервера]] на server | * [[Финальная настройка DNS сервера]] на server | ||
<code> | <code> | ||
+ | server:~# git -C conf/ pull | ||
+ | |||
server:~# sh conf/dns.sh | server:~# sh conf/dns.sh | ||
</code> | </code> | ||
+ | * Добавляем DNS записи kubeN A 192.168.X.220+N в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]] | ||
* Настройка клиента DNS на gate и server | * Настройка клиента DNS на gate и server | ||
<code> | <code> | ||
Line 74: | Line 78: | ||
nameserver 192.168.X.10 | nameserver 192.168.X.10 | ||
</code><code> | </code><code> | ||
- | # nslookup ns | + | # nslookup kubeN |
</code> | </code> | ||
- | * Настройка клиента DHCP на gate | + | * Настройка сервера DHCP на gate |
<code> | <code> | ||
+ | gate:~# git -C conf/ pull | ||
+ | |||
gate:~# sh conf/dhcp.sh | gate:~# sh conf/dhcp.sh | ||
</code> | </code> | ||
- | ==== Вопросы ==== | + | * Настройка MAC адресов 08:00:27:12:34:5N (для получения назначенного IP через [[Сервис DHCP]]) и запуск kube1-4 |
- | ===== Модуль 2: Развертывание кластера через kubeadm ===== | + | ==== 1.4 Разворачивание кластера Kubernetes через Kubespray ==== |
- | ==== Теория ==== | + | * [[Система Kubernetes#Развертывание через Kubespray]] |
- | ==== Лабораторные работы: Развертывание учебного кластера ==== | ||
- | * !!! Параллельно в паузах !!! | + | ==== 1.5 Развертывание GitLab (для 3-го модуля) ==== |
- | * [[Переменные окружения#Установка переменных окружения]] http_proxy, https_proxy и no_proxy | + | * [[Пакет OpenSSL#Создание самоподписанного сертификата]] (wild) |
- | * Hа server запускаем установку [[Технология Docker]], [[Сервис Ansible]], [[Инструмент GitLab]] (через docker-compose) и [[Инструмент GitLab#GitLab Runner]] (из dpkg) | + | * [[Пакет OpenSSL#Импорт сертификата центра сертификации]] на server (что бы не пере запускать docker) |
- | * Hа gate запускаем установку [[Технология Docker]] и gitlab-runner из [[Инструмент GitLab#Установка в виде контейнера]] | + | * Установка [[Технология Docker#docker-compose]] |
- | * Разворачиваем систему client1 для разработчика ([[Настройка сети в Linux]], [[Технология Docker]]) | + | * Подготовка к [[Инструмент GitLab#Включение TLS]] в GitLab |
+ | * [[Инструмент GitLab#Установка через docker-compose|Установка GitLab через docker-compose]] | ||
+ | * Подключаемся с хост системы по FQDN (для правильного Project URL) и создаем УЗ student с правами администратора (можно в следующую паузу) | ||
- | === 2.1 Развертывание кластера === | + | ==== 1.6 Развертывание рабочей станции пользователя (для 4-го модуля) ==== |
- | * Развертываем с использованием [[Технология Vagrant]] узлы node1,2,3 (!!! в provision_once.sh раскомментировать docker) для кластера | + | * Разворачиваем win client2 (ip/m: 172.16.1.100+X/24, dns: 192.168.X.10) |
- | * Добавляем DNS записи nodeN A 192.168.X.200+N в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]] | + | * Копируем ca.crt |
- | * [[Система Kubernetes#Развертывание через kubeadm]] | + | <code> |
+ | server# apt install apache2 | ||
- | === 2.2 Знакомство с k8s === | + | server# rm /var/www/html/index.html |
- | * [[Система Kubernetes#Настройка автодополнения]] | + | server# cp wild.crt /var/www/html/ca.crt |
- | * [[Система Kubernetes#Базовые объекты k8s]] (c node1#) | + | </code> |
- | * [[Система Kubernetes#Volumes]] [[Команда dd#Создание пустого файла]] (внутри пода) | + | |
- | * [[Система Kubernetes#ConfigMap]] + Service | + | |
- | ==== Вопросы ==== | + | * Проверяем в [[Chrome]] доступность GitLab по https |
+ | ==== 1.7 Разработка образов приложений (для 2-го модуля) ==== | ||
+ | * [[Язык программирования Golang]] на server, берем только код программы для следующего пункта | ||
+ | * Создаем Docker **файл** для [[Технология Docker#Приложение golang gowebd]] (multistage для уменьшения размера) | ||
+ | * Проводим [[Технология Docker#Аутентификация в Registry]] по **https** | ||
+ | * Создаем проект **gowebd** (Public, без README) | ||
+ | * Отключаем Auto DevOps для проекта | ||
+ | * Собираем и загружаем образ (latest), используя [[Технология Docker#Инструмент kaniko]], тестируем результат | ||
- | ===== Модуль 3: Развертывание кластера через Kubespray ===== | + | * Только преподаватель |
+ | * [[Язык программирования Python]] (в venv2, без ssl (добавим в теме ingress), с конфигурацией и с /var/www, для демонстрации работы) | ||
+ | * Создаем и тестируем Docker образ для [[Технология Docker#Приложение python pywebd]] (безопасный вариант, для демонстрации всех нюансов в k8s) | ||
+ | * Создаем проект **pywebd** (Public (Private на следующей итерации), без README) и [[Технология Docker#Использование Private Registry]] для хранения образа (метки latest и ver1.1) | ||
+ | |||
+ | ==== 1.8 Работа с кластером Kubernetes ==== | ||
+ | |||
+ | * Добавляем корпоративный сертификат в кластер kubernetes | ||
+ | <code> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | * Используем на kube1 [[Система Kubernetes#Инструмент командной строки kubectl]] | ||
+ | |||
+ | ===== Модуль 2. Объекты kubernetes, helm ===== | ||
==== Теория ==== | ==== Теория ==== | ||
- | ==== Лабораторные работы: Развертывание кластера предприятия ==== | + | * [[https://habr.com/ru/companies/slurm/articles/783708/|Что происходит, когда вы создаёте Pod в Kubernetes?]] |
+ | ==== Теория через лабораторные работы: Управление объектами Kubernetes ==== | ||
- | === 3.1 Подготовка узлов === | ||
- | * Добавляем DNS записи kubeN A 192.168.X.220+N в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]] | + | ==== 2.1 deployment, service, проверка статуса пода, настройка лимитов ==== |
- | * Настройка IP на kube1-4 ( через [[Сервис DHCP]]) | + | |
- | * Настройка файлов конфигурации сети через Ansible([[Сервис Ansible#Настройка групп управляемых систем]], [[Сервис Ansible#Настройка транспорта ssh]] и [[Сервис Ansible#Использование ролей]] | + | |
- | * [[Сервис Ansible#Использование модулей]] для отключения swap на kube1-4 | + | |
- | === 3.2 Развертывание кластера === | + | * Запуск и доступ к приложениям в k8s |
- | * [[Система Kubernetes#Развертывание через Kubespray]] | + | * [[https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/|Define Environment Variables for a Container]] |
+ | * [[https://kubernetes.io/docs/concepts/workloads/pods/sidecar-containers/|Sidecar Containers]] | ||
+ | * [[https://www.kryukov.biz/kubernetes/lokalnye-volumes/emptydir/|emptyDir]] | ||
+ | * [[https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/|Configure Liveness, Readiness and Startup Probes]] | ||
- | === 3.3 Управление кластером === | ||
- | * [[Система Kubernetes#Добавление узла через Kubespray]] | + | <code> |
- | * [[Система Kubernetes#Добавление insecure_registries через Kubespray]] | + | kube1:~# mkdir pywebd-k8s;cd $_ |
+ | </code> | ||
+ | * !!! Можно начать с использования образа gowebd, а потом усложнить | ||
+ | * [[Система Kubernetes#Deployment]] | ||
+ | * [[Система Kubernetes#Service]], [[Система Kubernetes#ClusterIP]] | ||
+ | * Предоставляем доступ к приложниям в k8s по [[Система Kubernetes#NodePort]] | ||
- | ==== Вопросы ==== | + | <code> |
+ | kube1:~/pywebd-k8s# kubectl -n my-ns exec -ti pods/my-webd-<TAB> -- sh | ||
- | ===== Модуль 4: Разработка и CI приложения ===== | + | ~ $ kill -STOP 16 |
- | ==== Теория ==== | + | kube1:~/pywebd-k8s# kubectl get pods -n my-ns --watch |
+ | </code> | ||
- | ==== Лабораторные работы: Разработка и CI приложения ==== | + | ==== 2.2 volumes, nodeAffinity, helm ==== |
- | * Разворачиваем систему client1 для разработчика ([[Настройка сети в Linux]]) | + | * Хранение данных приложений в k8s |
- | * [[Настройка командных интерпретаторов]] | + | |
- | === 4.1 Разработка приложения и упаковка его в Docker образ === | + | * [[Система Kubernetes#hostPath и nodeSelector]] (lifecycle и initContainers снова пригодятся на следующем шаге) |
+ | * [[Система Kubernetes#Установка Helm]] на kube1 (**делаем все**) | ||
+ | * [[Система Kubernetes#PersistentVolume и PersistentVolumeClaim]] (убрать nodeSelector) | ||
- | * Как student@client1 | + | * Можно показать [[Система Kubernetes#rancher local-path-provisioner]] |
- | * [[Язык программирования Golang]] | + | |
- | * [[Технология Docker]], [[Технология Docker#Предоставление прав непривилегированным пользователям]], [[Технология Docker#Dockerfile Multistage Building]] на client1 | + | |
- | === 4.2 Размещение кода и образа приложения в GitLab === | ||
- | * [[Инструмент GitLab#Установка через docker-compose]] GitLab | ||
- | * Создаем и подключаемся учетной записью student ([[Инструмент GitLab#Управление пользователями]] GitLab) | ||
- | * Можно использовать ключи ssh ([[Сервис SSH#Настройка ssh клиента]]) | ||
- | * Создаем новый публичный проект gowebd без Readme и копируем инструкции из подсказки | ||
- | * Перед git push... отключаем Auto DevOps и !!! проверить еще раз после push | ||
- | * [[Сервис Git#Обновление сетевого репозитория из локального]] | ||
- | * [[Инструмент GitLab#GitLab Docker Registry]] | + | ==== 2.3 ingress ==== |
- | * Docker [[Технология Docker#Insecure Private Registry]] на client1 для проверки, можно использовать подсказки из раздела container_registry а затем удалить образ из GitLab | + | |
- | * [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate | + | * Предоставляем доступ к приложниям в k8s по URL |
- | * Включаем [[Технология Docker#Insecure Private Registry]] (можно [[Сервис SSH#SCP]] c client1), копируем "Registration token" для gitlab-runner в режиме [[Инструмент GitLab#Регистрация DooD]] | + | |
- | * Добавляем в проект [[Инструмент GitLab#Пример CI с использованием контейнеров]] и используем Git тэги ([[Сервис Git#Обновление сетевого репозитория из локального]]) для сборки Docker образов | + | * Вариант [[Система Kubernetes#Ingress baremetal DaemonSet]] (**делаем все**) |
- | * Останавливаем, очищаем конфигурацию [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate | + | * [[Система Kubernetes#Deployment]] с emptyDir для демонстрации балансировки |
- | * Удаляем Runner в GitLab | + | |
- | * [[Технология Docker#Обзор и удаление]] образов gowebd c gate (может понадобиться -f) | + | |
- | * Отключаем [[Технология Docker#Insecure Private Registry]] | + | |
- | * Повторяем [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate | + | <code> |
- | * Копируем "Registration token" для gitlab-runner в режиме [[Инструмент GitLab#Регистрация DinD]] | + | server.corpX.un:~# cat /etc/bind/corpX.un |
- | * Добавляем необходимые для DinD элементы конфигурации в [[Инструмент GitLab#Пример CI с использованием контейнеров]] | + | </code><code> |
+ | ... | ||
+ | pywebd A 192.168.X.221 | ||
+ | A 192.168.X.222 | ||
+ | A 192.168.X.223 | ||
+ | ... | ||
+ | </code> | ||
+ | * [[Система Kubernetes#ingress example]] | ||
+ | <code> | ||
+ | $ curl http://pywebd.corpX.un | ||
+ | </code> | ||
- | === 4.3 Сборка образа в k8s === | ||
- | 8 DEVOPS2 | + | ==== 2.4 configmap, secret ==== |
- | * После того, как пройдем helm | + | * Управление конфигурацией и доступ к приложеням в k8s по https |
- | * Останавливаем gitlab-runner на gate и удаляем его из проекта gowebd | + | |
- | * [[Система Kubernetes#Работа с публичными репозиториями]] на примере gitlab-runner | + | |
- | * [[Инструмент GitLab#Пример CI с использованием контейнеров]] в k8s | + | |
- | ==== Вопросы ==== | + | * Добавляем ssl в приложение на [[Язык программирования Python]] (в venv2, с конфигурацией (скопируем в k8s) и проверки работоспособности) |
+ | <code> | ||
+ | $ curl --connect-to "":"":server.corpX.un:4443 https://pywebd.corpX.un | ||
+ | </code> | ||
+ | * Создаем Docker образ ver1.2 для [[Технология Docker#Приложение python pywebd]] | ||
+ | * Push-им в Gitlab и делаем проект приватным | ||
- | ===== Модуль 5: CD приложения ===== | + | * [[Система Kubernetes#ConfigMap, Secret]] |
- | ==== Теория ==== | + | * [[Система Kubernetes#LoadBalancer]] |
- | ==== Лабораторные работы: CD приложения ==== | + | * [[Система Kubernetes#Service]] LoadBalancer, port: 443, targetPort: 4443 |
+ | <code> | ||
+ | $ curl --connect-to "":"":192.168.X.64:443 https://pywebd.corp24.un | ||
+ | server# cat /etc/bind/corpX.un | ||
+ | </code><code> | ||
+ | ... | ||
+ | pywebd A 192.168.X.64 | ||
+ | ... | ||
+ | </code> | ||
- | === 5.1 Вручную === | + | * Тестируем с win client https://pywebd.corpX.un/ |
+ | * Удаляем my-ns | ||
+ | * Удаляем [[Система Kubernetes#LoadBalancer]] | ||
- | 5 DEVOPS2 | ||
- | * С node1 разворачиваем gowebd используя [[Система Kubernetes#namespace для своего приложения]] (меняем имя образа, не меняем имена файлов манифестов и метки), потребуется выполнить следующий шаг | + | ===== Модуль 3. Создание CI/CD в kubernetes ===== |
- | * [[Система Kubernetes#Настройка доступа к Insecure Private Registry]] для kubeadm кластера | + | |
- | * Демонстрация использования Deployment для управления версиями | + | |
- | * [[Система Kubernetes#Добавление insecure_registries через Kubespray]] | + | |
- | * Использование [[Система Kubernetes#Ingress]] вариант [[Система Kubernetes#Baremetal ingress-nginx-controller]] на [[Система Kubernetes#ingress example]] в kubeadm кластере | + | |
- | * Использование [[Система Kubernetes#Управление дополнениями через Kubespray]] для включения Ingress | + | |
- | * [[Пакет OpenSSL#Создание самоподписанного сертификата]] (gowebd без altdns) | + | |
- | * [[Система Kubernetes#secrets tls]] | + | |
- | === 5.2 GitOps === | ||
- | 6 DEVOPS2 | + | ==== 3.1 Запуск gitlab-runner в kubernetes ==== |
+ | |||
+ | * Сделать общий [[Система Kubernetes#gitlab-runner kubernetes]] с тегом "build" | ||
+ | |||
+ | |||
+ | ==== 3.2 Сборка докер контейнера в kubernetes ==== | ||
+ | |||
+ | * Добавляем [[Инструмент GitLab#Пример CI с использованием контейнеров]] в каталог gowebd на server | ||
+ | * Используя "подсказки" размещаем проект в GitLab | ||
+ | * В GitLab наблюдаем сборку образа | ||
+ | * В GitLab добавляем тег ver1.1 и проверяем наличие образов | ||
+ | |||
+ | ==== 3.3 Разворачивание нужной версии приложения в kubernetes ==== | ||
- | * Воспроизводим и качественно продолжаем то, на чем остановились на 1-м курсе | ||
- | * Устанавливаем [[Инструмент GitLab#GitLab Runner]] на server (из dpkg) | ||
- | * Устанавливаем [[Система Kubernetes#Инструмент командной строки kubectl]] на server | ||
- | * Настраиваем [[Система Kubernetes#Подключение к кластеру]] для пользователя gitlab-runner на server | ||
- | * Создаем каталог gowebd-k8s пользователем gitlab-runner, [[Инструмент GitLab#Пример shell Kubernetes]], service и ingress можно оставить из лаборатороной работы 5.1 | ||
- | * Настраиваем stage deploy через envsubst ([[Инструмент GitLab#Пример shell Kubernetes]], см. выше) | ||
- | * Создаем проект gowebd-k8s, что-бы не "возиться" с ключами ssh, указать: | ||
<code> | <code> | ||
- | gitlab-runner@server:~/gowebd-k8s$ git remote add origin http://server.corpX.un/student/gowebd-k8s.git | + | kube1:~# mkdir gowebd-k8s;cd $_ |
</code> | </code> | ||
- | * Проводим [[Инструмент GitLab#Регистрация]] gitlab runner в этом проекте (вариант из командной строки) | + | * [[Система Kubernetes#Deployment]] ver1.1 |
- | * Настраиваем зависимость между проектами через stage deploy в [[Инструмент GitLab#Пример CI с использованием контейнеров]] | + | * [[Система Kubernetes#Service]], [[Система Kubernetes#ClusterIP]] |
- | * Увеличиваем версию, добавляем соответствующий тег, проверяем | + | |
+ | * В GitLab создаем версию ver1.2 и назначаем тэг | ||
<code> | <code> | ||
- | $ curl https://gowebd.corpX.un -k | + | kube1:~/gowebd-k8s# cp my-webd-deployment.yaml my-webd-deployment-env.yaml |
+ | |||
+ | kube1:~/gowebd-k8s# cat my-webd-deployment-env.yaml | ||
+ | </code><code> | ||
+ | ... | ||
+ | image: server.corpX.un:5000/student/gowebd:$VER | ||
+ | ... | ||
+ | </code><code> | ||
+ | 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 | ||
</code> | </code> | ||
- | === 5.3 Helm === | + | * Устанавливаем из dpkg [[Инструмент GitLab#GitLab Runner]] на server и регистрируем как общий с тегом "k8s-deploy" и shell executor |
+ | * Устанавливаем [[Система Kubernetes#Инструмент командной строки kubectl]] на server | ||
+ | * Настраиваем [[Система Kubernetes#Подключение к кластеру]] для пользователя gitlab-runner на server | ||
- | 8 DEVOPS2 | + | * Преподаватель демонстрирует |
+ | * Настраиваем stage deploy через envsubst используя [[Инструмент GitLab#Пример shell Kubernetes]] | ||
+ | * Создаем проект gowebd-k8s (без Readme) | ||
+ | * Деплоим нужную версию в ручную (New Pipeeline MY_WEBD_VER=ver1.1) | ||
+ | * Преподаватель удаляет проект gowebd-k8s | ||
* [[Система Kubernetes#Удаление объектов]] (весь namespace) | * [[Система Kubernetes#Удаление объектов]] (весь namespace) | ||
- | * [[Система Kubernetes#Установка Helm]] | ||
- | * Использование [[Система Kubernetes#Управление дополнениями через Kubespray]] для включения Helm | ||
* [[Система Kubernetes#Развертывание своего приложения]] (webd-chart с образом gowebd) | * [[Система Kubernetes#Развертывание своего приложения]] (webd-chart с образом gowebd) | ||
- | * Настраиваем stage deploy через helm ([[Инструмент GitLab#Пример shell Kubernetes]], см. выше) | + | |
- | * [[Система Kubernetes#Работа со своим репозиторием]] для развертывания приложения на kube кластере (используем проект gowebd) | + | |
- | * Настраиваем DNS на кластер kube | + | |
<code> | <code> | ||
- | server# cat /etc/bind/corpX.un | + | server.corpX.un:~# cat /etc/bind/corpX.un |
+ | </code><code> | ||
... | ... | ||
- | webd A 192.168.X.222 | + | gowebd A 192.168.X.221 |
- | A 192.168.X.223 | + | A 192.168.X.222 |
- | gowebd CNAME webd | + | A 192.168.X.223 |
... | ... | ||
+ | </code><code> | ||
+ | $ curl http://gowebd.corpX.un | ||
+ | </code> | ||
+ | |||
+ | * [[Система Kubernetes#Установка Helm]] на server | ||
+ | <code> | ||
+ | gitlab-runner@server:~$ helm list -n my-ns | ||
+ | </code> | ||
+ | |||
+ | * Настраиваем stage deploy с helm используя [[Инструмент GitLab#Пример shell Kubernetes]] | ||
+ | * Создаем проект gowebd-k8s (Public, без Readme) | ||
+ | |||
+ | * Через WebIDE | ||
+ | * Настраиваем зависимость между проектами gowebd и gowebd-k8s через stage deploy в [[Инструмент GitLab#Пример CI с использованием контейнеров]] | ||
+ | * Увеличиваем версию, добавляем соответствующий тег, проверяем версию приложения в k8s | ||
+ | |||
+ | * Ожидая процесс сборки, обсуждаем [[Система Kubernetes#Версии deployment]], недостатки Gitlab CD и варианты, например Argo CD | ||
+ | |||
+ | * [[Система Kubernetes#Работа со своим репозиторием]] для размещения helm пакета (будет использоваться в дополнительном материале) | ||
+ | ===== Модуль 4. Дополнительные материалы ===== | ||
+ | |||
+ | ==== 4.1 Доступ к приложениям в Bare-Metal Kubernetes ==== | ||
+ | |||
+ | * Удаляем NS my-ns | ||
+ | |||
+ | * "Хором" в классе можно выполнить шаги 10, 12, 13 | ||
+ | |||
+ | * В формате "Открытого/Персонального обучения": | ||
+ | |||
+ | * Удаляем [[Система Kubernetes#Ingress baremetal DaemonSet]] в вебинаре будет повтор через helm) | ||
+ | |||
+ | <code> | ||
+ | server:~# ssh-copy-id gate | ||
</code> | </code> | ||
- | * Возвращаем DNS на кластер node | ||
- | * Лабораторная работа 4.3 | ||
- | === 5.4 ArgoCD === | + | * Видео [[Доступ к приложениям в Bare-Metal Kubernetes]] с 00:28:30 до 01:39:00 |
- | !!! ВНИМАНИЕ !!! Вместо 9-го фрагмента записи (его лучше просто просмотреть) рекомендую выполнить лабораторные работы из вебинара [[https://rutube.ru/video/356186164509624a323079127c4bd690/|Доступ к приложениям в Bare-Metal Kubernetes]], там есть все что нужно, плюс, много дополнительного материала !!! | ||
- | * [[Система Kubernetes#Работа со своим репозиторием]] для удаления приложения с kube кластера | + | ==== 4.2 Стратегии деплоя в Kubernetes ==== |
- | * Настраиваем DNS на кластер kube | + | |
- | * Используем [[Контроллер ArgoCD]] на kube кластере для деплоя приложения | + | |
- | === 5.5 Работа с хранилищами в Kubernetes === | + | * Видео [[Стратегии деплоя в Kubernetes]] (выполняем работы с 00:05:30 до конца) |
- | !!! Если есть "настрой", можно выполнить лабораторные работы из этого вебинара: | + | ==== 4.3 Работа с хранилищами в Kubernetes и восстановление после аварии ==== |
- | * [[https://rutube.ru/video/9c55de0f39d761d569761d2f553e0f61/|Работа с хранилищами в Kubernetes]] | + | * “Хором” в классе можно выполнить [[Система Kubernetes#Добавление узла через Kubespray]] и, параллельно, шаги 4, 5, 3, можно, добавить мониторинг (VictoriaMetrics Cluster), перед аварией узла |
- | === 5.6 Обновление кластера Kubernetes === | + | * Видео [[Работа с хранилищами в Kubernetes]] (выполняем работы с 00:04:00 до конца) |
- | !!! Если Вы "еще здесь")), есть можно выполнить лабораторные работы из этого вебинара: | + | ==== 4.4 Продолжение восстановления после аварии и Обновление кластера Kubernetes ==== |
- | * [[https://rutube.ru/video/1b0cde4db02403e1e2a8a79cafda4131/|Обновление кластера Kubernetes]] | + | “Хором” в классе можно выполнить шаг 4 |
- | ==== Вопросы ==== | + | * Видео [[Обновление кластера Kubernetes]] |
+ | выполняем работы: | ||
+ | * с 00:09:10 до 00:34:25 (восстанавливаем etcd) | ||
+ | * с 00:48:55 до 00:51:25 (добавляем kube3 как worker) | ||
+ | * с 00:54:50 до 01:03:33 (обновляем кластер) | ||
+ | ==== 4.5 Мониторинг кластера Kubernetes ==== | ||
+ | * Видео [[Мониторинг кластера Kubernetes]] (выполняем работы с 00:04:50 до конца) |