User Tools

Site Tools


devops1._основные_инструменты

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
devops1._основные_инструменты [2025/03/19 07:46]
val [DevOps2. Использование Kubernetes 2025]
devops1._основные_инструменты [2025/06/18 06:58] (current)
val [Модуль 7. Дополнительные материалы]
Line 1: Line 1:
-====== ​DevOps2Использование ​Kubernetes ​======+====== ​DevOps1Основные инструменты ​======
  
-===== При вводе в эксплуатацию ​учесть =====+===== Программа курса =====
  
-  * 4GB на узел для лонгхорн и кейклоак +  * [[https://​www.specialist.ru/​course/​kuber|DevOps. Уровень 1. Инфраструктура ​как кодосновные инструменты]] 
-  * 12-й дебиан +  * [[https://​www.specialist.ru/​track/​dp-devops|ДП-ДЕВОПС-М]]
-  * Нужен ​работающий k8s для демонстрации, в ожидании Kubespray ​+
  
 +===== Практикум =====
 +
 +  * [[https://​val.bmstu.ru/​~val/​pract/​dev1/​|Записи практикума]] ​
 ===== Модуль 0. Подготовка к занятию ===== ===== Модуль 0. Подготовка к занятию =====
  
Line 12: Line 14:
   - Сообщить его в чат преподавателю   - Сообщить его в чат преподавателю
  
-===== Модуль 1. Развертывание стенда и kubernetes кластера =====+===== Модуль 1: Введение и развертывание стенда =====
  
 ==== Теория ==== ==== Теория ====
  
-==== Лабораторные работы:​ Развертывание стенда и kubernetes кластера ====+  * [[https://​landscape.cncf.io/​]] 
 +  * [[https://​dzen.ru/​a/​ZVIBk2kT0ntemhwK|∞ Дорожная карта DevOps-инженера в 2023 году]] 
 +  * Ссылки в разделе [[Сервис Git]] 
 + 
 + 
 +==== Лабораторные работы:​ Развертывание стенда и инициализация репозитория Git ====
  
   * Разворачиваем стенд курса [[https://​www.specialist.ru/​course/​yun2-b|Linux. Уровень 2. Администрирование сервисов и сетей]] или [[https://​rutube.ru/​video/​18b52d9721f7464b4485fec7d894e8ca/​|Развертывание стенда дома (смотреть с 13-й минуты)]]   * Разворачиваем стенд курса [[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 37:
 cd cd
  
-test -d conf && rm -rf conf+test -d conf && rm -conf
  
 git clone http://​val.bmstu.ru/​unix/​conf.git git clone http://​val.bmstu.ru/​unix/​conf.git
Line 36: Line 43:
 cd conf/​virtualbox/​ cd conf/​virtualbox/​
  
-!!! - это номер курса, вместо X укажите Ваш номер стенда,​ если не знаете его, спросите преподавателя !!!+!!! - это номер курса, вместо X укажите Ваш номер стенда,​ если не знаете его, спросите преподавателя !!!
  
-./setup.sh X 9+./setup.sh X 8
 </​code>​ </​code>​
-==== 1.2 Настройка сети VM gate и server ​====+=== 1.2 Настройка сети VM gate и server ===
  
   * [[Настройка стендов слушателей#​Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#​Скрипты автоконфигурации]]   * [[Настройка стендов слушателей#​Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#​Скрипты автоконфигурации]]
Line 60: Line 67:
   * Создать в Putty профили gate, server и подключиться   * Создать в Putty профили gate, server и подключиться
  
-==== 1.3 Подготовка инфраструктуры для kubespray ====+=== 1.3 Инициализация ​репозитория Git ===
  
-  * [[Финальная настройка DNS сервера]] ​на server+  ​* [[Сервис Git]], команды init, add, commit для каталога /etc на server 
 + 
 +  ​* [[Финальная настройка DNS сервера]] ​
 <​code>​ <​code>​
 server:~# git -C conf/ pull server:~# git -C conf/ pull
Line 69: Line 78:
 </​code>​ </​code>​
  
-  * Добавляем DNS записи kubeN A 192.168.X.220+N в [[Сервис DNS#​Настройка мастер сервера зоны corpX.un]] 
   * Настройка клиента DNS на gate и server   * Настройка клиента DNS на gate и server
 <​code>​ <​code>​
Line 77: Line 85:
 nameserver 192.168.X.10 nameserver 192.168.X.10
 </​code><​code>​ </​code><​code>​
-# nslookup ​kubeN+# nslookup ​ns
 </​code>​ </​code>​
  
-  * Настройка сервера ​DHCP на gate+=== 1.4 Работа с репозиторием Git === 
 + 
 +!!! Методическая рекомендация,​ запустить установку Docker (только на server) из лабораторной работы 2.1 
 <​code>​ <​code>​
-gate:~git -C confpull +servercat /etc/​bind/​corpX.un 
- +</code><​code>​ 
-gate:~# sh conf/dhcp.sh+... 
 +webd            A       ​192.168.X.10
 </​code>​ </​code>​
-  * Настройка MAC адресов 08:​00:​27:​12:​34:​5N (для получения назначенного IP через [[Сервис DHCP]]) и запуск kube1-4 ​ 
  
 +  * [[Сервис Git]], команды git -C /etc/ ..., log, show, diff, reset
 +==== Вопросы ====
  
-==== 1.4 Разворачивание кластера Kubernetes через Kubespray ====+  - Перечислите и объясните команды git
  
-  * [[Система Kubernetes#​Развертывание через Kubespray]]+===== Модуль 2: Docker =====
  
 +==== Теория ====
  
-==== 1.5 Развертывание ​GitLab (для 3-го модуля) ====+  * Ссылки в разделах [[Технология cgroup]], [[Технология namespaces]] и [[Технология Docker]] 
 +  * [[https://​ru.wikipedia.org/​wiki/​Микросервисная_архитектура|Микросервисная архитектура]]
  
-  * [[Пакет OpenSSL#Создание самоподписанного сертификата]] (wild) +==== Лабораторные работыУстановка docker и работа с контейнерами ​====
-  * [[Пакет OpenSSL#​Импорт сертификата центра сертификации]] на server (что бы не пере запускать docker) +
-  * Установка ​[[Технология Docker#docker-compose]] +
-  * Подготовка к [[Инструмент GitLab#​Включение TLS]] в GitLab +
-  * [[Инструмент GitLab#​Установка через docker-compose|Установка GitLab через docker-compose]] +
-  * Подключаемся с хост системы по FQDN (для правильного Project URL) и создаем УЗ student с правами ​администратора (можно в следующую паузу)+
  
-===1.6 Развертывание рабочей станции пользователя (для 4-го модуля) ====+=== 2.Собираем docker контейнер ===
  
-  * Разворачиваем win client2 (ip/m: 172.16.1.100+X/​24,​ dns: 192.168.X.10) +  * [[Технология Docker#​Установка]] Docker из базового репозитория на **server** и из репозитория вендора на **gate**
-  ​Копируем ca.crt +
-<​code>​ +
-server# apt install apache2+
  
-server# rm /​var/​www/​html/​index.html+!!! Методическая рекомендация,​ запустить установку Golang на gate из этой лабораторной работы 2.1.3
  
-servercp wild.crt /​var/​www/​html/​ca.crt +  * Обсудить [[Технология Docker#Создание образа для приложения вручную]] было в ЛИН3
-</​code>​+
  
-  * Проверяем ​в [[Chrome]] ​доступность GitLab по https+!!! Методическая рекомендация, запустить ​установку docker-compose из лабораторной работы 2.2
  
-==== 1.7 Разработка образов приложений (для 2-го модуля) ====+  * Обсудить [[Технология Docker#​Создание ​образа для ​приложения ​с использованием Dockerfile]] будет в доп. практикуме
  
-  * [[Язык программирования Golang]] на server, берем только код программы для следующего пункта +== 2.1.2 Приложение на Python ==
-  * Создаем Docker **файл** для [[Технология Docker#Приложение golang gowebd]] (multistage для уменьшения размера) +
-  * Проводим [[Технология Docker#​Аутентификация в Registry]] по **https** +
-  * Создаем проект **gowebd** (Public, без README) +
-  * Отключаем Auto DevOps для проекта +
-  * Собираем и загружаем образ (latest), используя [[Технология Docker#​Инструмент kaniko]], тестируем результат+
  
-  ​* Только преподаватель +  * [[Язык программирования Pythonиртуальная среда Python]] (учетная ​запись root на server
-  ​* [[Язык программирования Python]] (в venv2, без ssl (добавим в теме ingress), с конфигурацией и с /var/www, для демонстрации работы) +  * Создаем ​[[Язык ​программирования ​Python#Web приложение]] на Python
-  * Создаем и тестируем Docker образ для [[Технология Docker#​Приложение python pywebd]] (безопасный вариант, для демонстрации всех нюансов в k8s+
-  * Создаем проект **pywebd** (Public (Private на следующей ​итерации), без README) и [[Технология Docker#Использование ​Private Registry]] для хранения образа (метки latest и ver1.1)+
  
-==== 1.8 Работа с кластером Kubernetes ====+!!! Методическая рекомендация, запустить установку Vagrant из лабораторной работы 3.1
  
-  * Добавляем корпоративный сертификат в кластер kubernetes +  * Собираем образ [[Технология Docker#Приложение python pywebd]] 
-<​code>​ +  * Вопросы оптимизации Dockerfile и безопасности
-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+  * [[Технология Docker#Анализ параметров запущенного контейнера]] 
-crictl pull server.corpX.un:​5000/​student/​gowebd + 
-crictl images +== 2.1.3 Приложение на Go == 
-crictl rmi server.corpX.un:​5000/​student/gowebd+ 
 +!!! Методическая рекомендация,​ запустить установку GitLab из лабораторной работы 4.
 + 
 +  * [[Язык программирования Golang]] (учетная запись root на gate) 
 +  * Создаем [[Язык программирования Golang#Web приложение]] на Golang 
 + 
 +<​code>​ 
 +~/gowebd# apt purge golang-go; apt autoremove -y
 </​code>​ </​code>​
  
-  * Используем на kube1 [[Система Kubernetes#​Инструмент командной строки kubectl]] ​+  * Собираем образ [[Технология Docker#Приложение golang gowebd]] 
 +  * Вопросы оптимизации ​размера ​образа
  
-===== Модуль 2. Объекты kubernetes, helm =====+  * Расширение [[Технология Docker#​docker buildx]] 
 +  * Вопросы оптимизации времени сборки образа
  
-==== Теория ====+  * [[Технология Docker#​Обзор и удаление]] ненужных ресурсов Docker
  
-  * [[https://​habr.com/​ru/​companies/​slurm/​articles/​783708/​|Что происходит,​ когда ​вы создаёте Pod в Kubernetes?​]] +=== 2.2 Связываем и деплоим контейнеры ​с помощью docker-compose ​===
-==== Теория через ​лабораторные работы: Управление ​объектами Kubernetes ====+
  
 +  * [[Технология Docker#​Использование готовых образов приложений]]
 +  * Использование [[Технология Docker#​docker-compose]]
  
-==== 2.1 deployment, service, ​проверка статуса пода, настройка лимитов ​====+  * Можно ​показать "кубернетес" - [[Сервис HTTP#​Прокси "красивого"​ URL в приложение (пример 3)|Использование прокси Nginx]] для доступа к приложению (если установился GitLab)
  
-  * Запуск и доступ к приложениям в k8s +==== Вопросы ====
  
-  ​* [[https://​kubernetes.io/​docs/​tasks/​inject-data-application/​define-environment-variable-container/​|Define Environment Variables for a Container]] +  - Зачем нужен Docker? 
-  ​[[https://​kubernetes.io/​docs/​concepts/​workloads/​pods/​sidecar-containers/​|Sidecar Containers]] +  ​Чем Docker отличается от LXC? 
-  ​* [[https://​www.kryukov.biz/​kubernetes/​lokalnye-volumes/​emptydir/​|emptyDir]] +  ​Чем Docker контейнер отличается от Docker образа?​ 
-  ​* [[https://​kubernetes.io/​docs/​tasks/​configure-pod-container/​configure-liveness-readiness-startup-probes/​|Configure Liveness, Readiness and Startup Probes]]+  ​Как ПО в Docker контейнере может взаимодействовать с системой и другими контейнерами?​ 
 +  ​Зачем нужен Dockerfile? 
 +  ​- Как указать агрументы для entrypoint в команде run ([[Технология Docker#​Запуск контейнеров]]) 
 +  - Зачем "​запихивать"​ сразу много инструкций в команду RUN? 
 +  - Зачем нужен docker-compose? 
 +===== Модуль 3. Инфраструктура как код =====
  
 +==== Теория ====
  
-<​code>​ +  ​Построение ландшафта инфраструктуры на примере [[Технология Vagrant]] 
-kube1:~# mkdir pywebd-k8s;​cd $_ +  * Построение ландшафта облачной инфраструктуры ​с использованием [[https://​ru.wikipedia.org/​wiki/​Terraform|HashiCorp Terraform]] 
-</​code>​ +  * Видео урок: ​[[On-premise Terraform]] 
-  ​!!! Можно начать с использования образа gowebd, ​а потом усложнить +  * Управление инфраструктурой с использованием [[Сервис Ansible]]
-  * [[Система 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+=== 3.1 Управление инфраструктурой с использованием Vagrant ===
  
-kube1:​~/​pywebd-k8s#​ kubectl get pods -n my-ns --watch +!!! Методическая рекомендация,​ запустить установку Ansible из лабораторной работы 3.2
-</​code>​+
  
-==== 2.2 volumesnodeAffinityhelm ====+  * Добавляем DNS записи nodeN A 192.168.X.200+N в [[Сервис DNS#​Настройка мастер сервера зоны corpX.un]] 
 +  * Обзор команд [[Технология VirtualBox]] 
 +  * Обзор [[Технология Vagrant]] 
 +  * Развертываем с использованием [[Технология Vagrant#​Multi-Machine Vagrant Environments]] узлы кластера node1,2,3
  
-  * Хранение ​данных приложений в k8s+=== 3.2 Управление ​инфраструктурой с использованием Ansible ===
  
-  * [[Система ​Kubernetes#​hostPath ​и nodeSelector]] ​(lifecycle ​и initContainers ​снова пригодятся на следующем шаге) +  * Общие принципы и модели управления (Push and Pull) 
-  * [[Система ​Kubernetes#Установка ​Helm]] на kube1 (**делаем все**+  * Ansible - [[Сервис Ansible#​Установка на управляющей системе]] 
-  * [[Система ​Kubernetes#PersistentVolume ​и PersistentVolumeVolumeClaim]] (убрать ​nodeSelector)+  * [[Сервис Ansible#​Настройка групп управляемых систем]] 
 +  * [[Сервис Ansible#​Настройка транспорта ssh]] с [[Сервис SSH#​Парольная аутентификация]] 
 +  * [[Сервис Ansible#​Использование модулей]] для тестирования связи с управляемыми системами 
 +  * Установка ​Docker с помощью [[Сервис Ansible#​Использование playbook|Ansible playbook]] на node1,​2,​3 ​учше во время перерыва
 +  * [[Сервис Ansible#​Использование шаблонов]] Jinja в playbook для установки Nginx (на gate, по окончании демонстрации удалить!!) 
 +  * Обсудить варианты [[Сервис Ansible#Использование handlers]] 
 +  * Развертывание кластера приложения с [[Сервис Ansible#​Использование ролей]] Ansible
  
 +==== Вопросы ====
  
 +  - Что общего и в чем отличие между Ansible, Vagrant и Terraform?
 +  - Что означает термин Provision в Vagrant?
 +  - Что такое module, playbook, role в Ansible?
 +  - Назовите каталоги в роли Ansible
 +  - Что должно быть установлено на целевой системе для управления через Ansible?
 +  - Каким образом Vagrant управляет VM?
 +  - Как реализован Ansible provision в Vagrant?
  
-==== 2.3 ingress ​====+===== Модуль 4Continuous Integration =====
  
-  * Предоставляем доступ к приложниям в k8s по URL+==== Теория ​====
  
-  * Вариант [[Система Kubernetes#​Ingress baremetal DaemonSet]] (**делаем все**)+  * [[https://​ru.wikipedia.org/​wiki/​Непрерывная_интеграция]] 
 +  ​[[https://​simpleone.ru/​glossary/​ci-cd-cd-continuous-integration-continuous-delivery-continuous-deployment|CI/​CD/​CD. Continuous Integration / Continuous Delivery / Continuous Deployment]]
  
-  * [[Система Kubernetes#​Deployment]] с emptyDir ​для демонстрации балансировки+  * [[https://​youtu.be/​FeD6VBY2Xss|Вебинар: Вход в CI/CD для ​Linux-админа]] 
 +  * [[https://​habr.com/​ru/​articles/​716454/​|Статья: Самый простой пример CI/CD]]
  
-<​code>​ +==== Лабораторные работы: От Git к CI/CD ====
-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>​ +=== 4.1 Обзор GitLab ===
-$ curl http://​pywebd.corpX.un +
-</​code>​+
  
 +  * [[Инструмент GitLab#​Установка из репозитория]]
  
-==== 2.4 configmapsecret ====+!!! Методическая рекомендацияскачать gitlab-runner из лабораторной работы 4.2
  
-  * Управление ​конфигурацией и доступ к приложеням в k8s по https+  * [[Инструмент GitLab#Управление ​пользователями]] (назначить УЗ student ​администратором) 
 +  * Создаем новый репозиторий (Project name: openvpn1, Private, без README) в GitLab  
 +  * Пользуясь инструкцией ​к проекту, включаем [[Сервис Git]] для каталога openvpn1 и помещаем его в GitLab
  
-  * Добавляем ssl в приложение на [[Язык программирования Python]] (в venv2, с конфигурацией (скопируем в k8s) и проверки работоспособности+=== 4.2 Запуск пайплайнов из .gitlab-ci в gitlab-runners ===
-<​code>​ +
-$ curl --connect-to "":"":​server.corpX.un:​4443 https://​pywebd.corpX.un +
-</​code>​ +
-  * Создаем Docker образ ver1.2 для [[Технология Docker#​Приложение python pywebd]] +
-  * Push-им в Gitlab и делаем проект приватным+
  
-  * [[Система Kubernetes#ConfigMap, Secret]]+  * [[Инструмент GitLab#​Установка из пакета]] GitLab Runner на server и его [[Инструмент GitLab#Регистрация]] с меткой **ansible** и исполнителем **shell**
  
-  * [[Система Kubernetes#LoadBalancer]]+  * Используя GitLab Pipeline Editor добавляем в проект openvpn1 ​[[Инструмент GitLab#Пример shell ansible]] Pipeline и наблюдаем "​выкатку"​ в "​прод"​ после Commit в ветку main
  
-  * [[Система Kubernetes#​Service]] LoadBalancer,​ port: 443, targetPort: 4443+==== Вопросы ====
  
-<​code>​ +  - Чем отличается GitLab от Git? 
-$ curl --connect-to "":"":​192.168.X.64:​443 https://pywebd.corp24.un+  Для чего нужен GitLab Runner? 
 +  ​Как называется файл для CI/CD в GitLab?
  
-server# cat /​etc/​bind/​corpX.un +===== Модуль 5Обзор задач QA =====
-</​code><​code>​ +
-... +
-pywebd ​         A       ​192.168.X.64 +
-... +
-</​code>​+
  
-  * Тестируем с win client https://​pywebd.corpX.un/​ +==== Теория ====
-  * Удаляем my-ns +
-  * Удаляем [[Система Kubernetes#​LoadBalancer]]+
  
 +  * [[https://​testengineer.ru/​dorogostoyashchie-bagi/​|7 эпичнейших багов в истории человечества]]
  
-===== Модуль 3Создание ​CI/CD в kubernetes =====+  * [[https://​ru.wikipedia.org/​wiki/​Тестирование_программного_обеспечения]] 
 +  * [[https://​www.atlassian.com/​ru/​continuous-delivery/​software-testing/​types-of-software-testing|Различные ​виды тестирования ПО]]
  
 +  * [[https://​ru.wikipedia.org/​wiki/​Ручное_тестирование]]
 +  * [[https://​ru.wikipedia.org/​wiki/​Автоматизированное_тестирование]]
 +  * [[https://​ru.wikipedia.org/​wiki/​Lint]]
 +  * [[https://​ru.wikipedia.org/​wiki/​Smoke_test]]
 +  * [[https://​eurobyte.ru/​articles/​v-chem-otlichiya-nagruzochnogo-ot-stress-testirovaniya/​|В чем отличия нагрузочного от стресс-тестирования]]
 +==== Лабораторные работы:​ Задачи тестирования ====
  
-==== 3.1 Запуск ​gitlab-runner ​в kubernetes ====+=== 5.1 Ручное тестирование функциональности и работа с ветками проекта ​===
  
-  * Сделать ​общий [[Система Kubernetes#​gitlab-runner kubernetes]] ​с тегом "​build"​+  * Понадобится win client2 (ip/m: 172.16.1.100+X/​24,​ dns: 172.16.1.254)
  
 +  * Для подключения используем [[Сервис Keepalived]] в режиме [[Сервис Keepalived#​Настройка балансировки нагрузки]] и corpX.ovpn ([[Пакет OpenVPN#​Настройка клиента]]) в windows или linux
 +  * Добавить [[Сервисы Gateway и routing#​Управление таблицей маршрутизации]] на gate (можно отключить маршрут в LAN и настроить [[Сервис NAT]] для зрелищности,​ !!! вернуть обратно для доп. работ)
  
-==== 3.2 Сборка докер контейнера в kubernetes ====+  * Добавляем параметры dhcp-option,​block-outside-dns и Commit в test с созданием Merge requests и наблюдаем "выкатку"​ в "​тестовую"​ среду, проверяем работу сервиса в ней 
 +  * Одобряем Merge requests и наблюдаем "выкатку"​ в "​прод" ​
  
-  * Добавляем [[Инструмент GitLab#Пример CI с использованием контейнеров]] в каталог gowebd на server +=== 5.2 Тестирование в этапах развертывания образа приложения в Docker среде ===
-  * Используя "​подсказки" ​размещаем проект в GitLab +
-  * В GitLab ​наблюдаем сборку ​образа ​ +
-  * В GitLab добавляем тег ver1.1 и проверяем ​наличие образов+
  
-==== 3.3 Разворачивание нужной версии приложения в kubernetes ====+!!! Методическая рекомендация, включить GitLab Docker Registry ​из этой ​лабораторной работы ​
  
-<​code>​ +  ​* [[Язык программирования Golang#golangci-lint]] кода приложения 
-kube1:~# mkdir gowebd-k8s;​cd $_ +  * Сборка образа ​[[Технология Docker#Приложение golang gowebd]] 
-</​code>​ +  * [[Технология Docker#Smoke test]] работоспособности приложения
-  ​* [[Система Kubernetes#Deployment]] ver1.1 +
-  * [[Система Kubernetes#Service]][[Система Kubernetes#ClusterIP]]+
  
-  * В GitLab создаем версию ver1.2 ​и назначаем тэг +  * Размещение ​образа приложения ​в Registry 
-<​code>​ +  * Включаем [[Инструмент GitLab#​GitLab Docker Registry]] 
-kube1:~/gowebd-k8scp my-webd-deployment.yaml my-webd-deployment-env.yaml+  * Включаем [[Технология Docker#​Insecure Private Registry]] и [[Технология Docker#​Аутентификация в Registry]] ​на gate 
 +  * Создаем ​(Public, без README) проект gowebd 
 +  * Cохраняем образ, [[Технология Docker#Использование Private Registry]]
  
-kube1:​~/​gowebd-k8s#​ cat my-webd-deployment-env.yaml +!!! Методическая рекомендация,​ запустить установку minikube из лабораторной работы 6.1
-</​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+  * Можно продемонстрировать развертывание приложения на nodeN
  
-kubeN# curl my-webd.my-ns.svc.cluster.local +=== 5.3 Тестирование в процессе CI и управление версиями ===
-</​code>​+
  
-  * Устанавливаем из dpkg [[Инструмент GitLab#GitLab Runner]] на server и регистрируем как общий с тегом "​k8s-deploy"​ и shell executor +  * Проводим [[Инструмент GitLab#​Установка в виде контейнера]] gitlab-runner ​на gate 
-  * Устанавливаем [[Система Kubernetes#​Инструмент командной строки kubectl]] на server +  * Используем [[Инструмент GitLab#Регистрация DooD]] для ​добавления runner ​в проект gowebd ​
-  * Настраиваем [[Система Kubernetes#Подключение к кластеру]] для ​пользователя gitlab-runner ​на server+
  
-  * Настраиваем ​stage deploy через envsubst используя [[Инструмент GitLab#​Пример ​shell Kubernetes]] +  * Отключаем ​gowebd->​CI/​CD Settings->​Auto DevOps 
-  * Создаем проект ​gowebd-k8s (Public, ​без ​Readme) +  * Добавляем в папку gowebd ​[[Инструмент GitLab#​Пример ​CI с использованием контейнеров]] 
-  * Деплоим нужную ​версию в ручную (New Pipeeline MY_WEBD_VER=ver1.1)+  * Используя инструкции из GitLab ​добавляем папку в проект ​и наблюдаем сборку образа с тэгом commit hash 
 +  * Можно ​продемонстрировать Smoke test, заменив порт в коде ​
  
-  * Через WebIDE +  * Останавливаем, очищаем конфигурацию [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate 
-  * Настраиваем ​зависимость между проектами gowebd и gowebd-k8s через stage deploy в [[Инструмент GitLab#Пример CI с использованием контейнеров]] +  * Удаляем Runner ​в GitLab 
-  * Увеличиваем версию, добавляем соответствующий тег, проверяем версию приложения в k8s+  * [[Технология Docker#​Обзор ​и удаление]] (преподавателю можно всех) образов c gate 
 +  * Отключаем [[Технология Docker#​Insecure Private Registry]]
  
-  * Обсуждаем [[Система Kubernetes#Версии deployment]]недостатки ​Gitlab CD и вариантынапример Argo CD+  * Повторяем [[Инструмент GitLab#​Установка в виде контейнера]] gitlab-runner на gate 
 +  * Используем [[Инструмент GitLab#Регистрация DinD]] для добавления runner в проект gowebd 
 +  * Добавляем необходимые для DinD элементы конфигурации в [[Инструмент GitLab#​Пример CI с использованием ​контейнеров]] 
 +  * Увеличиваем версию и наблюдаем сборку образа с тэгом commit hash 
 +  * Можно продемонстрировать Lint testдобавив лишнюю ​переменную в коде
  
-  * [[Система Kubernetes#​Удаление объектов]] ​(весь namespace) +  * Используем Git тэги ([[Сервис ​Git#Обновление сетевого ​репозитория из локального]] или Code->Tags) для указания версии Docker ​образов
-  * [[Система 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  +  ​- Что такое "ветка" в Git и почему ​переименовали master в main? 
-<​code>​ +  ​Из каких частей состоит ​имя ​образа? 
-gitlab-runner@server:​~$ helm list -n my-ns +  ​- Как ​работает DooD и DinD? 
-</​code>​ +  - Что такое Linter? 
-  * Исправляем [[Инструмент GitLab#Пример shell Kubernetes]] с использованим helm и pushм все в репозиторий gowebd-k8s +  - Что такое Smoke test?
-  ​* В проекте gowebd увеличиваем версию, добавляем соответствующий тег, проверяем версию приложения в k8s+
  
-  * [[Система Kubernetes#​Работа со своим репозиторием]] для размещения helm пакета (будет использоваться в дополнительном материале) +===== Модуль ​6Kubernetes ​=====
-===== Модуль ​4Дополнительные материалы ​=====+
  
-==== 4.1 Доступ к приложениям в Bare-Metal Kubernetes ​====+==== Теория ====
  
-  * Удаляем NS my-ns+  * [[https://​timeweb.cloud/​blog/​sistemy-orkestracii-kontejnerov|Системы оркестрации контейнеров:​ что такое и лучше ​для вашего проекта]] 
 +  * [[https://​habr.com/​ru/​articles/​589415/​|K8S для начинающих. Первая часть]] 
 +  * [[https://​habr.com/​ru/​amp/​publications/​651653/​|K8S для начинающих. Часть вторая]] 
 +==== Лабораторные работы:​ Работа с minikube, cоздание deployment и service ====
  
-  * "​Хором"​ в классе можно выполнить шаги 10, 12, 13+=== 6.1 Установка minikube ===
  
-  * В формате "Открытого/Персонального обучения":+  * Для доступа ​к репозиторию, понадобится включить [[Сервисы Gateway и routing]] 
 +  * [[Система Kubernetes#​Установка minikube]] для gitlab-runner@server (можно, если ​будет время, показать CD)
  
-  * Удаляем [[Система Kubernetes#​Ingress baremetal DaemonSet]] в вебинаре будет повтор через helm)+=== 6.2 Создание deployment ​и service ===
  
 +  * Изучаем [[Система Kubernetes#​Базовые объекты k8s]] - [[Система Kubernetes#​Deployment]] и [[Система Kubernetes#​Service]]
 +  * Для понимания работы [[Система Kubernetes#​Ingress]] (будет в следующем курсе),​ можно продемонстрировать использование [[Сервис HTTP#​Прокси "​красивого"​ URL в приложение (пример 3)|Nginx]] для доступа к приложению webd в minikube с хост системы ​
 +
 +  * Если есть 30 минут, можно показать CD через envsubst "​**Развертывание нужной версии приложения в kubernetes**"​ из Девопс2 ​
 +  * Понадобится назначить метку k8s-deploy ранеру и
 <​code>​ <​code>​
-server:~ssh-copy-id gate+server# ​cp -v /​home/​gitlab-runner/​.minikube/​cache/​linux/​amd64/​v*/​kubectl /​usr/​local/​bin/​
 </​code>​ </​code>​
 +  * Можно показать все, используя Web IDE
 +==== Вопросы ====
  
-  * Видео [[Доступ ​к приложениям в Bare-Metal Kubernetes]] ​с 00:28:30 до 01:39:00+  * Почему Kubernetes часто обозначают K8s? 
 +  * Чем K8s отличается от Docker-Compose?​ 
 +  * Что используется для описания состояния ​объектов в K8s? 
 +  * Как ​связаны понятия Deployment, Replica Sets, Pods? 
 +  * Для чего используются Namespace?
  
 +===== Модуль 7. Дополнительные материалы =====
  
-==== 4.2 Стратегии деплоя в Kubernetes ​====+==== 7.1 Вход в Jenkins ​====
  
-  * Видео ​[[Стратегии деплоя в Kubernetes]] ​(выполняем работы с 00:05:30 до конца)+  * [[Вход в Jenkins]] и процесс непрерывной интеграции для ​администратора Linux (выполняем работы с 00:05:30 до конца)
  
-==== 4.3 Работа с хранилищами в Kubernetes и восстановление после аварии ​====+==== 7.2 Зачем нужен Kubernetes ​====
  
-  * Видео ​[[Работа с хранилищами в Kubernetes]] (выполняем работы с 00:04:00 до конца)+  * [[Зачем нужен ​Kubernetes]] (выполняем работы с 00:02:45 до 00:53:00 и с 01:​08:​33 ​до конца), понадобятся [[Средства программирования shell#​Ресурсы Web сервера на shell]]
  
-==== 4.4 Продолжение восстановления ​после аварии и Обновление кластера Kubernetes ​====+==== 7.3 Что должен ​знать DevOps ​про ​Python ​====
  
-  * Видео [[Обновление кластера Kubernetes]] +  * [[Все что должен знать DevOps про Python]]
  
-выполняем работы:  +==== 7.4 Развертывание инфраструктуры с использованием Terraform ====
- +
-  * с 00:09:10 до 00:34:25 (восстанавливаем etcd) +
-  * с 00:48:55 до 00:51:25 (добавляем kube3 как worker) +
-  * с 00:54:50 до 01:03:33 (обновляем кластер)+
  
 +  * [[On-premise Terraform|Развертывание инфраструктуры в On-premise облаке с использованием Terraform]] (выполняем работы с 00:10:15 до 00:35:30 и с 00:40:45 до конца)
 +  * Понадобится освободить ресурсы и исключить кофликт по IP адресам,​ остановив узлы кластера ​
 +<​code>​
 +Administrator@RAZLIV_48 ~/​conf/​vagrant/​nodes (master)
  
 +λ vagrant halt
 +</​code>​
 +  * Понадобится развернуть VM home-computer ([[Технология VirtualBox#​Вложенная виртуализация]]) подключить к сети класса (WAN), увеличить RAM до 8192, запустить,​ назначить hostname, выяснить IP адрес и подключиться PuTTY
 +  * Понадобится установить VNC [[https://​www.tightvnc.com/​download.php]],​ все по умолчанию
 +  * Перед "​Шаг 3": перенести home-computer в LAN, назанчить IP .200 из сети 192.168.X.0/​24 и считать ее "​домашней сетью"​
 +  * Шаг 4 - в режиме просмотра
devops1._основные_инструменты.1742359611.txt.gz · Last modified: 2025/03/19 07:46 by val