User Tools

Site Tools


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

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
devops2._использование_kubernetes_2025 [2025/03/18 14:29]
val [Черновик]
— (current)
Line 1: Line 1:
-====== DevOps2. Использование Kubernetes 2025 ====== 
- 
-===== При вводе в эксплуатацию учесть ===== 
- 
-  * 4GB на узел для лонгхорн и кейклоак 
-  * 12-й дебиан 
-  * Нужен работающий k8s для демонстрации,​ в ожидании Kubespray ​ 
- 
-===== Модуль 0. Подготовка к занятию ===== 
- 
-  - Узнать и записать свой номер стенда:​ X= 
-  - Сообщить его в чат преподавателю 
- 
-===== Модуль 1. Развертывание стенда и kubernetes кластера ===== 
- 
-==== Теория ==== 
- 
-==== Лабораторные работы:​ Развертывание стенда и kubernetes кластера ==== 
- 
-  * Разворачиваем стенд курса [[https://​www.specialist.ru/​course/​yun2-b|Linux. Уровень 2. Администрирование сервисов и сетей]] или [[https://​rutube.ru/​video/​18b52d9721f7464b4485fec7d894e8ca/​|Развертывание стенда дома (смотреть с 13-й минуты)]] 
- 
-==== 1.1 Схема стенда,​ импорт,​ настройка и запуск VM gate и server ==== 
-<​code>​ 
-Запустите с правами 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 
-</​code>​ 
-==== 1.2 Настройка сети VM gate и server ==== 
- 
-  * [[Настройка стендов слушателей#​Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#​Скрипты автоконфигурации]] 
- 
-  * gate 
-<​code>​ 
-# sh net_gate.sh 
- 
-# init 6 
-</​code>​ 
- 
-  * server 
-<​code>​ 
-# sh net_server.sh 
- 
-# init 6 
-</​code>​ 
- 
-  * Создать в Putty профили gate, server и подключиться 
- 
-==== 1.3 Подготовка инфраструктуры для kubespray ==== 
- 
-  * [[Финальная настройка DNS сервера]] на server 
-<​code>​ 
-server:~# git -C conf/ pull 
- 
-server:~# sh conf/dns.sh 
-</​code>​ 
- 
-  * Добавляем DNS записи kubeN A 192.168.X.220+N в [[Сервис DNS#​Настройка мастер сервера зоны corpX.un]] 
-  * Настройка клиента DNS на gate и server 
-<​code>​ 
-# cat /​etc/​resolv.conf 
-</​code><​code>​ 
-search corpX.un 
-nameserver 192.168.X.10 
-</​code><​code>​ 
-# nslookup kubeN 
-</​code>​ 
- 
-  * Настройка сервера DHCP на gate 
-<​code>​ 
-gate:~# git -C conf/ pull 
- 
-gate:~# sh conf/​dhcp.sh 
-</​code>​ 
-  * Настройка MAC адресов 08:​00:​27:​12:​34:​5N (для получения назначенного IP через [[Сервис DHCP]]) и запуск kube1-4 ​ 
- 
- 
-==== 1.4 Разворачивание кластера Kubernetes через Kubespray ==== 
- 
-  * [[Система Kubernetes#​Развертывание через Kubespray]] 
- 
- 
-==== 1.5 Развертывание GitLab (для 3-го модуля) ==== 
- 
-  * [[Пакет OpenSSL#​Создание самоподписанного сертификата]] (wild) 
-  * [[Пакет OpenSSL#​Импорт сертификата центра сертификации]] на server (что бы не пере запускать docker) 
-  * Установка [[Технология Docker#​docker-compose]] 
-  * Подготовка к [[Инструмент GitLab#​Включение TLS]] в GitLab 
-  * [[Инструмент GitLab#​Установка через docker-compose|Установка GitLab через docker-compose]] 
-  * Подключаемся с хост системы по FQDN (для правильного Project URL) и создаем УЗ student с правами администратора (можно в следующую паузу) 
- 
-==== 1.6 Развертывание рабочей станции пользователя (для 4-го модуля) ==== 
- 
-  * Разворачиваем win client2 (ip/m: 172.16.1.100+X/​24,​ dns: 192.168.X.10) 
-  * Копируем ca.crt 
-<​code>​ 
-server# apt install apache2 
- 
-server# rm /​var/​www/​html/​index.html 
- 
-server# cp wild.crt /​var/​www/​html/​ca.crt 
-</​code>​ 
- 
-  * Проверяем в [[Chrome]] доступность GitLab по https 
- 
-==== 1.7 Разработка образов приложений (для 2-го модуля) ==== 
- 
-  * [[Язык программирования Golang]] на server, берем только код программы для следующего пункта 
-  * Создаем Docker **файл** для [[Технология Docker#​Приложение golang gowebd]] (multistage для уменьшения размера) 
-  * Проводим [[Технология Docker#​Аутентификация в Registry]] по **https** 
-  * Создаем проект **gowebd** (Public, без README) 
-  * Отключаем Auto DevOps для проекта 
-  * Собираем и загружаем образ (latest), используя [[Технология Docker#​Инструмент kaniko]], тестируем результат 
- 
-  * Только преподаватель 
-  * [[Язык программирования 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 ==== 
- 
- 
-==== 2.1 deployment, service, проверка статуса пода, настройка лимитов ==== 
- 
-  * Запуск и доступ к приложениям в k8s  
- 
-  * [[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]] 
- 
- 
-<​code>​ 
-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 
- 
-~ $ kill -STOP 16 
- 
-kube1:​~/​pywebd-k8s#​ kubectl get pods -n my-ns --watch 
-</​code>​ 
- 
-==== 2.2 volumes, nodeAffinity,​ helm ==== 
- 
-  * Хранение данных приложений в k8s 
- 
-  * [[Система Kubernetes#​hostPath и nodeSelector]] (lifecycle и initContainers снова пригодятся на следующем шаге) 
-  * [[Система Kubernetes#​Установка Helm]] на kube1 (**делаем все**) 
-  * [[Система Kubernetes#​PersistentVolume и PersistentVolumeVolumeClaim]] (убрать nodeSelector) 
- 
- 
- 
-==== 2.3 ingress ==== 
- 
-  * Предоставляем доступ к приложниям в k8s по URL 
- 
-  * Вариант [[Система Kubernetes#​Ingress baremetal DaemonSet]] (**делаем все**) 
- 
-  * [[Система Kubernetes#​Deployment]] с emptyDir для демонстрации балансировки 
- 
-<​code>​ 
-server.corpX.un:​~#​ cat /​etc/​bind/​corpX.un 
-</​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>​ 
- 
- 
-==== 2.4 configmap, secret ==== 
- 
-  * Управление конфигурацией и доступ к приложеням в k8s по https 
- 
-  * Добавляем 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 и делаем проект приватным 
- 
-  * [[Система Kubernetes#​ConfigMap,​ Secret]] 
- 
-  * [[Система Kubernetes#​LoadBalancer]] 
- 
-  * [[Система 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>​ 
- 
-  * Тестируем с win client https://​pywebd.corpX.un/​ 
-  * Удаляем my-ns 
-  * Удаляем [[Система Kubernetes#​LoadBalancer]] 
- 
- 
-===== Модуль 3. Создание CI/CD в kubernetes ===== 
- 
- 
-==== 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 ==== 
- 
-<​code>​ 
-kube1:~# mkdir gowebd-k8s;​cd $_ 
-</​code>​ 
-  * [[Система Kubernetes#​Deployment]] ver1.1 
-  * [[Система Kubernetes#​Service]],​ [[Система Kubernetes#​ClusterIP]] 
- 
-  * В GitLab создаем версию ver1.2 и назначаем тэг 
-<​code>​ 
-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>​ 
- 
-  * Устанавливаем из dpkg [[Инструмент GitLab#​GitLab Runner]] на server и регистрируем как общий с тегом "​k8s-deploy"​ и shell executor 
-  * Устанавливаем [[Система Kubernetes#​Инструмент командной строки kubectl]] на server 
-  * Настраиваем [[Система Kubernetes#​Подключение к кластеру]] для пользователя gitlab-runner на server 
- 
-  * Настраиваем stage deploy через envsubst используя [[Инструмент GitLab#​Пример shell Kubernetes]] 
-  * Создаем проект gowebd-k8s (Public, без Readme) 
-  * Деплоим нужную версию в ручную (New Pipeeline MY_WEBD_VER=ver1.1) 
- 
-  * Через WebIDE 
-  * Настраиваем зависимость между проектами gowebd и gowebd-k8s через stage deploy в [[Инструмент GitLab#​Пример CI с использованием контейнеров]] 
-  * Увеличиваем версию,​ добавляем соответствующий тег, проверяем версию приложения в k8s 
- 
-  * Обсуждаем [[Система Kubernetes#​Версии deployment]],​ недостатки Gitlab CD и варианты,​ например Argo CD 
- 
-  * [[Система Kubernetes#​Удаление объектов]] (весь namespace) 
-  * [[Система Kubernetes#​Установка Helm]] (если еще не установлен) на kube1 
-  * [[Система Kubernetes#​Развертывание своего приложения]] (webd-chart с образом gowebd) 
- 
-<​code>​ 
-server.corpX.un:​~#​ cat /​etc/​bind/​corpX.un 
-</​code><​code>​ 
-... 
-gowebd ​ A       ​192.168.X.221 
-        A       ​192.168.X.222 
-        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>​ 
-  * Исправляем [[Инструмент GitLab#​Пример shell Kubernetes]] с использованим helm и push-им все в репозиторий gowebd-k8s 
-  * В проекте gowebd увеличиваем версию,​ добавляем соответствующий тег, проверяем версию приложения в k8s 
- 
-  * [[Система Kubernetes#​Работа со своим репозиторием]] для размещения helm пакета (будет использоваться в дополнительном материале) 
-===== Модуль 4. Дополнительные материалы ===== 
- 
-==== 4.1 Доступ к приложениям в Bare-Metal Kubernetes ==== 
- 
- 
-Необходимо:​ 
- 
-  * удалить NS my-ns 
-  * Удаляем [[Система Kubernetes#​Ingress baremetal DaemonSet]] в вебинаре будет повтор через helm) 
- 
-<​code>​ 
-server:~# ssh-copy-id gate 
-</​code>​ 
- 
-  * Видео [[Доступ к приложениям в Bare-Metal Kubernetes]] с 00:28:30 до 01:39:00 
- 
-==== 4.2 Стратегии деплоя в Kubernetes ==== 
- 
-  * Видео [[Стратегии деплоя в Kubernetes]] (выполняем работы с 00:05:30 до конца) 
- 
-==== 4.3 Работа с хранилищами в Kubernetes и восстановление после аварии ==== 
- 
-  * Видео [[Работа с хранилищами в Kubernetes]] (выполняем работы с 00:04:00 до конца) 
- 
-==== 4.4 Продолжение восстановления после аварии и Обновление кластера Kubernetes ==== 
- 
-  * Видео [[Обновление кластера Kubernetes]] ​ 
- 
-выполняем работы: ​ 
- 
-  * с 00:09:10 до 00:34:25 (восстанавливаем etcd) 
-  * с 00:48:55 до 00:51:25 (добавляем kube3 как worker) 
-  * с 00:54:50 до 01:03:33 (обновляем кластер) 
- 
  
devops2._использование_kubernetes_2025.1742297352.txt.gz · Last modified: 2025/03/18 14:29 by val