Чуть чуть про разработку, k8s и openshift

Выступение доступно по ссылке Презентация лежит в корне проекта

Вступление

Привет, сегодня я хочу рассказать про технологии виртуализации, k8s/ openshift. Часто кандидаты не знают базовых основ, так что цель этого мини туториала рассказать про основной концепции этих технологий.

Что такое docker и зачем он нужен?

Docker — это платформа, которая предназначена для разработки, развёртывания и запуска приложений в контейнерах.

Какие плюсы использование docker?

Изолированность - Вы не зависите от по, которое установлено на вашем железе. Конечно на нем должен установлен docker агент, но. Ваша программа требует для фрейворк который работает только с ubuntu? не проблема, берите ubuntu, либо может вам лень настаивать самому чистую ОС, где нет ни node js, ни python интерпретатора? не проблема? Берите уже готовый образ с предустановленным ПО из репозитория контейнеров

Версионировние - Из этого пункта вытекает еще один плюст - это возможность версионировать ваше приложение. Например, у вас есть готовое приложение к которому вы подготовили какую нибудь полезную фичу. Вы вакатили новую версию и оказалось что новый функционал аффектит и требуется быстро вернуть старую версию обратно. Не проблема, просто возьмите старый контейнер и начните исрользовать его

Легкость - Представьте, вы разрабатываете ПО, но окруженеи вашего железа отличавется от вашего, и в момент запустка вашего кода в другом окружении. Для отладки ваш важдый раз придется заливать ваш код на машину, что очень трудозатратно по времени. Docker решает эту проблему плюсом из пункта 1.

Практическая часть. Как использовать?

Быстрые команды

make devenv - Создать и установить тестововой окружение
make lin - Проверить код с помощью pylint
make postgres - Запустить контейнер с postgres
make test - запустить тесты
make docker - Собрать образ
make upload - Загрузить образ в хранилище

Как запусить?

Собираем образ

make upload - сбор образа и загрузка в центральное хранилище.

make run - запускам приложение на 8080 порту

Как подготовить тестовое окружение?

make devenv
make postgres
source env/bin/activate

Как запустить тесты?

make devenv
make postgres
source env/bin/activate
pytest

Как запустить нагрузочное тестирование?

Для запуска locust необходимо выполнить следующие команды:

make devenv
source env/bin/activate
locust

теперь lokust доступен на локальном хосту. Перейдите по ссылке и можно начинать нагрузочное тестирование.

K8s/OS

Что это?

K8S - это открытое программное обеспечение для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями.

Как и docker k8s произвел настоящую революцию в области эксплуатации высыконагруженных систем Какие плюсы дает платформа?

Масштабируемость любого уровня - Разработанный на тех же принципах, которые позволяют Google запускать миллиарды контейнеров в неделю, Kubernetes может масштабироваться без увеличения вашей технической команды.

Бесконечная гибкость - Будь то локальное тестирование или работа в корпорации, гибкость Kubernetes растёт вместе с вами, обеспечивая бесперебойную и простую доставку приложений, независимо от сложности ваших потребностей.

Может быть запущен где угодно - Kubernetes — это проект с открытым исходным кодом, который даёт вам полную свободу воспользоваться преимуществами локальной, гибридной или публичной облачной инфраструктуры, позволяя без усилий перераспределять рабочую нагрузку по мере необходимости.

Что такое OS?

OS - это k8s, но безопасней.

Где найти самый доступный вариант?

Например, gcloud. Google Cloud предоставляет тестовую учетку с 300$, где можно крутить тестовые приложения.

Тактика деплоя и основный команды

Деплой сервиса

Я уже настроил кластер и он доступен с моей локальной машины. Вообще если говорить про серьезную разработку, то данные шаги мы выполняем автоматически, этот процесс называется CI/CD конвеер. На этапе CI, робот(если его правильно настоить), гоняет тесты, смотрит на процент покрытия кода, проверяет на уязвимости(checkmarx)... и наконец собирает образ и отправляет в репозиторий контейнеров. На этапе CD робот берет наш готовый и оттестированный образ с приложением и применеяем готовую конфигурацю к нашему кластеру k8s.

Внимание, не забудьте развернуть базу, которая будет доступна из вашего кластера.

Пройдемся по шагам:

kubectl apply -f backend-deployments.yaml - данной командой мы применяем шаблон с деплойментом. кластер поднимает pod c контейнером внутри. Теперь нам требуется сделать наше приложение внутри кластера.

kubectl apply -f backend-service.yaml - данной командой мы делаем это. Обрати внимание что поле type.С помощью этого поля мы можем сделать приложение доступным как внутри кластера, так и снаружи.

Допустим, мы сделали нашего приложение доступным всему интернету и вот им уже начинаю пользоваться. Давайте посмотрим логи нашего прилоения? легко

kubectl logs -f -l app=simplebackend - k8s выведет вам все логи.

Что делать если вы хотите удалить приложение? досаточно удалить deployments и все копии приложения.

Настройка ingress

Шаг 1

На этом шаге мы развернем версию v0.26.1 контроллера Nginx Ingress, обслуживаемого Kubernetes. Существует несколько контроллеров Nginx Ingress. Сообщество Kubernetes обслуживает контроллер, используемый в этом обучающем модуле, а Nginx Inc. обслуживает kubernetes-ingress. Указания этого обучающего модуля основаны на приведенных в официальном руководстве по установке контроллера Kubernetes Nginx Ingress.

Контроллер Nginx Ingress состоит из пода, который запускает веб-сервер Nginx и наблюдает за плоскостью управления Kubernetes для обнаружения новых и обновленных объектов ресурсов Ingress. Ресурс Ingress фактически представляет собой список правил маршрутизации трафика для серверных служб. Например, правило Ingress может указывать, что входящий трафик HTTP на пути /web1 следует перенаправлять на веб-сервер web1. С помощью ресурсов Ingress также можно выполнять маршрутизацию на базе хоста: например, запросы маршрутизации для web1.your_domain.com на серверную службу Kubernetes web1.

В данном случае мы развертываем контроллер Ingress в кластере gcloud Kubernetes, и контроллер создаст службу LoadBalancer, запускающую балансировщик нагрузки gcloud, на который будет направлять весь внешний трафик. Балансировщик нагрузки будет направлять внешний трафик на под контроллера Ingress под управлением Nginx, откуда трафик будет перенаправляться в соответствующие серверные службы.

Для начала мы создадим необходимые ресурсы Kubernetes для контроллера Nginx Ingress. В их число входят карты ConfigMaps, содержащие конфигурацию контроллера, роли системы RBAC, предоставляющие контроллеру доступ к API Kubernetes, и фактическое развертывание контроллера Ingress, использующее версию 0.26.1 образа контроллера Nginx Ingress. Чтоб просмотреть полный список требуемых ресурсов, ознакомьтесь с манифестом репозитория контроллера Kubernetes Nginx Ingress на GitHub.

Для создания этих обязательных ресурсов используйте команду kubectl apply с флагом -f для указания файла манифеста:

kubectl apply -f ingress.yaml

Далее мы создадим службу LoadBalancer контроллера Ingress, которая создаст балансировщик нагрузки DigitalOcean для балансировки и маршрутизации трафика HTTP и HTTPS на под контроллера Ingress, который мы развернули предыдущей командой.

Для создания службы LoadBalancer мы снова используем команду kubectl apply с файлом манифеста, содержащим определение службы:

kubectl apply -f loadbalancer.yaml

тот балансировщик нагрузки принимает трафик на портах HTTP и HTTPS 80 и 443, и перенаправляет его на под контроллера Ingress. Контроллер Ingress перенаправляет трафик на соответствующую серверную службу.

Шаг 2

Для начала мы создадим минимальный ресурс Ingress для перенаправления трафика указанного субдомена на соответствующую серверную службу.

kubectl apply -f ingressrules.yaml

Чтобы протестировать Ingress подставить к ip адресу вашего баласировщика префикс echo1, echo2, simpleapp и удостоверьтесь что два разных сервиса отдают нужный ответ

Удаление ресурсов

После завершения обучения удалите все ресурсы kubectl delete deployments tlg-backend-deployment - удаление deployments и в следствии всех pod