====== Зачем нужен 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 ===== Вопросы =====