====== Все что должен знать DevOps про Python ====== * [[https://habr.com/ru/articles/571786/|Про DevOps для тех, кто изучает Python]] ===== Реклама ===== * Всем привет! Продолжаем цикл вебинаров на тему "Что должен знать Ops из области Dev". Сегодня нас с Вами ждет один из популярнейших языков программирования. Зачем он нужен DevOps-су? Да хотя бы потому, что Ansible и YAML имеют прямое отношение к Python. А еще, иногда не хватает возможностей Bash и Python - прекрасный кандидат на роль "когда надо в пайплайне запрограммировать что-то посложнее ..." ===== Техническое задание ===== * Научиться использовать базовые элементы языка - структуры данных, алгоритмические конструкции, файловый ввод/вывод, пакеты и модули * Научиться использовать Python для рабы с протоколом HTTP, данными в формате JSON/YAML и регулярными выражениями * Научиться использовать возможности Python в Ansible Playbooks и Jinja2 template * Сделать Python привычным инструментом для автоматизации - наравне с Bash ===== Запись вебинара ===== * [[https://youtu.be/dNwCQ4xx98Q|YouTube]], [[https://rutube.ru/video/private/81a077f638a21917e0055407e84b3ee4/|RuTube]] * Тэги: Python, Gunicorn, FastAPI, Uvicorn, Unittest, Ansible, Docker, Kubernetes ===== Методическая подготовка ===== * С использованием образа [[https://val.bmstu.ru/unix/img/My%20Documents/debian_12.5_64_02.ova|debian_12]], выполнены 1-ый и 3-ий (student, так же, назначен администратором GitLab) шаги из статьи [[https://habr.com/ru/articles/716454/|Самый простой пример CI/CD]] * Добавляем [[Инструмент GitLab#GitLab Docker Registry]] (IP вместо server.corpX.un) ===== Где Девопс может встретиться с Python? ===== ==== Случай 1. Развертывание Kubernetes ==== - [[https://github.com/kubernetes-sigs/kubespray/]] - [[https://github.com/kubernetes-sigs/kubespray/blob/master/docs/getting_started/getting-started.md#setting-up-your-first-cluster]] - [[https://github.com/kubernetes-sigs/kubespray/blob/master/docs/getting_started/setting-up-your-first-cluster.md#set-up-kubespray]] * [[Язык программирования Python#Виртуальная среда Python]] * [[Система Kubernetes#Развертывание через Kubespray]] (kube1 заменяем на localhost) ==== Случай 2. Тестовое задание ==== * [[https://github.com/smenateam/assignments/blob/master/devops/docs/assignment.md|Тестовое задание DevOps разработчик]] * [[https://metanit.com/python/fastapi/1.1.php|Основы FastAPI]] * [[https://webadventures.ru/sravnenie-wsgi-serverov-uvicorn-i-gunicorn/|Сравнение WSGI-серверов:uvicorn и Gunicorn]] (узнать у ИИ, откуда название) * Обсудить Python [[Язык программирования Python#Flask Gunicorn]] приложение pywebd (подключение модулей, декораторы, варианты запуска) * Создать Python приложение [[Язык программирования Python#FastAPI Uvicorn]] pywebd2 * [[Технология Docker#Установка]] Docker * Dockerfile для [[Технология Docker#Приложение python pywebd2]] * Docker - Настройка [[Технология Docker#Insecure Private Registry]] (IP вместо server.corpX.un) * Docker - [[Технология Docker#Аутентификация в Registry]] (IP вместо server.corpX.un) * Создаем в GitLab проект **pywebd2** (публичный, без Readme) * Загружаем образ pywebd2 в GitLab - [[Технология Docker#Использование Private Registry]] (IP вместо server.corpX.un) * Kubernetes - [[Система Kubernetes#Настройка доступа к Insecure Private Registry]] (IP вместо server.corpX.un) * [[Система Kubernetes#Deployment]] и [[Система Kubernetes#Service]] для приложения pywebd2 в Kubernetes ==== Случай 3. Проект ==== * [[https://team.vk.company/projects/285/|Проект VK People Hub]] ===== Для чего еще может понадобиться Python НЕ разработчику? ===== ==== Генерация множества файлов по шаблону ==== * [[Сервис Asterisk#Provisioning|Bash]] или Ansible [[Сервис Ansible#Провижининг IP телефонов]] на примере [[SIP Phone Panasonic KX-HDVXXX]] и [[Linksys SPA-3102]] ==== Обработка сложных структур данных ==== * [[Язык программирования Python#Интерактивная оболочка REPL (Read-Eval-Print Loop)]] * Сервис Zabbix [[Сервис Zabbix#Статистика DHCP сервера]] ==== Выгрузить что-то через API ==== * Сервис Zabbix [[Сервис Zabbix#API]] ==== Даже, для сетевых инженеров) ==== * [[https://pyneng.readthedocs.io/ru/latest/|Python для сетевых инженеров]] ===== Что, насчет других языков? ===== * [[https://www.freecodecamp.org/news/learn-kubernetes-in-under-3-hours-a-detailed-guide-to-orchestrating-containers-114ff420e882|Learn Kubernetes in Under 3 Hours: A Detailed Guide to Orchestrating Containers]] ===== Черновик ===== ==== Темы ==== * [[Сервис Asterisk#Asterisk ARI]] * Тестирование web приложений * Парсинг ответов Ansible * Prometheus exporter * Работа с SQL, JSON, YAML * Веб сервис провиженинг для телефонов ==== Разное ==== * https://github.com/smenateam/assignments/blob/master/devops/docs/project_install.md * gitignore server# docker run -ti python:3.9-alpine sh * [[Управление ПО в Linux#APK Alpine Linux]] / # cd ~ # git clone https://github.com/smenateam/assignments.git ~ # cd assignments/devops ~/assignments/devops # pip install poetry ~/assignments/devops # poetry lock ~/assignments/devops # poetry install ~/assignments/devops # eval $(poetry env activate) (hello-world-py3.9) ~/assignments/devops # cat Makefile (hello-world-py3.9) ~/assignments/devops # uvicorn main:app --port=8000 --reload --host 0.0.0.0 (hello-world-py3.9) ~/assignments/devops # gunicorn main:app --bind 0.0.0.0:8000 -k uvicorn.workers.UvicornWorker poetry install --no-root apk add --no-cache build-base 10 pip install gunicorn 11 /gunicorn.sh 12 pip install uvicorn 13 /gunicorn.sh 14 pip install fastapi