====== Зачем нужен Kubernetes ======
===== Реклама =====
* Если Вы администрируете Linux, но такие понятия, как Docker или Kubernetes все еще не входят в круг Ваших понятий, это не значит, что Ваши понятия слабы, возможно, Вам нужно просто посмотреть наш вебинар. Опираясь на знания типичного Linux администратора мы рассмотри простую задачу, которая приведет нас к пониманию, зачем использовать эти технологии и они войдут в арсенал Ваших знаний и навыков
===== Техническое задание =====
* Разработать простое Web приложение на bash
* Столкнуться с необходимостью горизонтального масштабирования приложения
* Решить задачу с помощью Docker и Docker Compose
* Развернуть настоящий Kubernetes и решить задачу с помощью него
===== Запись вебинара =====
* Тэги: Stress Testing, Docker, Docker Compose, Kubernetes, Deployment, Service, Keepalived
===== Методическая подготовка =====
==== В паузах рассказать про ====
* Протокол HTTP
* BASH
* Vagrant
===== Шаг 1. Что у нас есть для начала =====
* По окончании основной части курса ДЕВОПС1:
- [[Технология Docker]] на server
- [[Инструмент GitLab]]
- [[Инструмент GitLab#GitLab Docker Registry]]
- [[Технология Vagrant]]
- [[Технология Docker]] на nodes через [[Сервис Ansible]]
===== Шаг 2. Web сервер на shell =====
* [[Средства программирования shell#Web сервер на shell]] (добавить демонстрацию через STDIN, log и hostname)
* Сервис HTTP [[Сервис HTTP#Нагрузочное тестирование]]
===== Шаг 3. Зачем нужен Docker =====
* [[Технология Docker#Создание образа для приложения с использованием Dockerfile]]
* [[Технология Docker#Запуск в режиме демона и подключение к контейнеру]]
server# docker run --name webd0N -h webd0N -itd -v /var/www/:/var/www/ --rm -P test/webd
* [[Сервис Keepalived#Установка]] и Настройка балансировки нагрузки]]
* Сервис HTTP [[Сервис HTTP#Нагрузочное тестирование]] (-rate=5000)
===== Шаг 4. Kubernetes своими руками =====
* [[Технология Docker#Insecure Private Registry]] на server и nodeN
* Создание Public проекта webd в GitLab
* [[Технология Docker#Аутентификация в Registry]] и [[Технология Docker#Использование Private Registry]] для размещения образа webd
* [[Сервис NFS]] сервер на server
* [[Сервис NFS#Установка nfs клиента]] на node1,2,3
node1,2,3# mkdir /var/www
node1,2,3# cat /etc/fstab
...
server:/var/www /var/www nfs rw,soft 0 0
root@node1:~# systemctl daemon-reload
node1,2,3# mount /var/www
* [[Технология Docker#docker-compose]]
node1,2,3# cat docker-compose.yml
services:
webd:
image: server.corpX.un:5000/student/webd
ports:
- "80"
volumes:
- /var/www/:/var/www/
deploy:
mode: replicated
replicas: 3
node1,2,3# docker compose up -d
node1,2,3# docker ps -q | xargs -l docker port | sort -n
node1,2,3# docker compose logs webd -f
* [[Сервис Keepalived#Настройка балансировки нагрузки]]
* Сервис HTTP [[Сервис HTTP#Нагрузочное тестирование]]
node1,2,3# docker compose down
===== Шаг 5. Развертываем Kubernetes =====
* [[Система Kubernetes#Развертывание через kubeadm]]
* [[Система Kubernetes#Настройка доступа к Insecure Private Registry]]
===== Шаг 6. Деплоим приложение в Kubernetes =====
* [[Сервис NFS#Установка nfs клиента]] на nodeN
* [[Система Kubernetes#Настройка автодополнения]] для kubectl
* Deployment с livenessProbe и nfs-volume в [[Система Kubernetes#namespace для своего приложения]]
* [[Система Kubernetes#Service]] type: NodePort
* [[Сервис Keepalived#Настройка балансировки нагрузки]]
===== Шаг 7. Тестируем =====
* Сервис HTTP [[Сервис HTTP#Нагрузочное тестирование]]
* "Ломаем" один из Worker-ов
* [[Сервис Keepalived]]
root@node1:~# kubectl get pods -n my-ns -o wide --watch
===== Вопросы =====