За последнее десятилетие технологии сильно изменились. Данные стали хитом, облака — вездесущими, и всем организациям понадобилась автоматизация. В ходе таких преобразований Python оказался одним из самых популярных языков программирования. Это практическое руководство научит вас использовать Python для повседневных задач администрирования Linux с помощью наиболее удобных утилит DevOps, включая Docker, Kubernetes и Terraform.
Author(s): Ной Гифт, Кеннеди Берман, Альфредо Деза, Григ Георгиу
Series: Бестселлеры O’Reilly
Edition: 1
Publisher: Питер
Year: 2022
Language: Russian
Commentary: Vector PDF
Pages: 544
City: СПб.
Tags: DevOps;Google Cloud Platform;Microsoft Azure;Cloud Computing;Command Line;Machine Learning;Programming;Python;Big Data;Concurrency;Virtualization;Distributed Systems;Monitoring;Stream Processing;Logging;Clusters;Docker;Cryptography;Flask;Continuous Delivery;Kubernetes;Continuous Integration;Containerization;SSH;Automation;YAML;PyTest;Hashing;Performance;AWS Lambda;Container Orchestration;Grafana;Docker Compose;Terraform;Prometheus;Infrastructure as Code;Serverless Applications;Process Management
Предисловие
Что DevOps означает для авторов
Как использовать эту книгу
Соглашения, используемые в данной книге
Использование примеров кода
Благодарности
От издательства
Глава 1. Основы Python
для DevOps
Установка и запуск Python
Командная оболочка Python
Блокноты Jupiter
Процедурное программирование
Переменные
Основные математические операции
Комментарии
Встроенные функции
Print
Range
Контроль выполнения
if/elif/else
Циклы for
Циклы while
Обработка исключений
Встроенные объекты
Что такое объект?
Методы и атрибуты объектов
Последовательности
Функции
Анатомия функции
Функции как объекты
Анонимные функции
Регулярные выражения
Поиск
Наборы символов
Классы символов
Группы
Поименованные группы
Найти все
Поисковый итератор
Подстановка
Компиляция
Отложенное вычисление
Генераторы
Генераторные включения
Дополнительные возможности IPython
Выполнение инструкций командной оболочки Unix с помощью IPython
Упражнения
Глава 2. Автоматизация работы с файлами и файловой системой
Чтение и запись файлов
Поиск в тексте с помощью регулярных выражений
Обработка больших файлов
Шифрование текста
Хеширование с помощью пакета hashlib
Шифрование с помощью библиотеки cryptography
Модуль os
Управление файлами и каталогами с помощью os.path
Обхода дерева каталогов с помощью os.walk
Пути как объекты: библиотека pathlib
Глава 3. Работа с командной строкой
Работа с командной оболочкой
Взаимодействие с интерпретатором с помощью модуля sys
Взаимодействие с операционной системой с помощью модуля os
Порождение процессов с помощью модуля subprocess
Создание утилит командной строки
Использование sys.argv
argparse
click
fire
Реализация плагинов
Ситуационный анализ: разгоняем Python с помощью утилит командной строки
Динамический компилятор Numba
Использование GPU с помощью CUDA Python
Многоядерное многопоточное выполнение кода Python с помощью Numba
Кластеризация методом k-средних
Упражнения
Глава 4. Полезные утилиты Linux
Дисковые утилиты
Измерение быстродействия
Разделы диска
Получение информации о конкретном устройстве
Сетевые утилиты
SSH-туннелирование
Оценка быстродействия HTTP с помощью Apache Benchmark (ab)
Нагрузочное тестирование с помощью molotov
Утилиты для получения информации о загрузке CPU
Просмотр процессов с помощью htop
Работаем с Bash и ZSH
Настройка командной оболочки Python под свои нужды
Рекурсивные подстановки
Поиск и замена с запросами подтверждения
Удаление временных файлов Python
Вывод списка процессов и его фильтрация
Метка даты/времени Unix
Комбинирование Python с Bash и ZSH
Генератор случайных чисел
Существует ли нужный мне модуль?
Переходим из текущего каталога по пути к модулю
Преобразование CSV-файла в JSON
Однострочные сценарии Python
Отладчики
Быстро ли работает конкретный фрагмент кода?
strace
Вопросы и упражнения
Задача на ситуационный анализ
Глава 5. Управление пакетами
Почему пакетная организация программ так важна
Случаи, когда пакетная организация программ не нужна
Рекомендации по пакетной организации программ
Информативный контроль версий
Журнал изменений
Выбор стратегии
Решения для создания пакетов
Нативные пакеты Python
Создание пакетов для Debian
Создание пакетов RPM
Диспетчеризация с помощью systemd
Долгоживущие процессы
Настройка
Юниты systemd
Установка юнита
Управление журналами
Вопросы и упражнения
Задача на ситуационный анализ
Глава 6. Непрерывная интеграция и непрерывное развертывание
Ситуационный анализ примера из практики: перевод плохо работавшего сайта с WordPress на Hugo
Настройка Hugo
Преобразование WordPress в посты Hugo
Создание поискового индекса Algolia и его обновление
Координация с помощью Makefile
Развертывание с помощью AWS CodePipeline
Ситуационный анализ примера из практики: развертывание приложения Python App Engine с помощью Google Cloud Build
Ситуационный анализ примера из практики: NFSOPS
Глава 7. Мониторинг и журналирование
Ключевые понятия создания надежных систем
Неизменные принципы DevOps
Централизованное журналирование
Ситуационный анализ: база данных при промышленной эксплуатации разрушает жесткие диски
Производить или покупать?
Отказоустойчивость
Мониторинг
Graphite
StatsD
Prometheus
Телеметрия
Соглашения о наименованиях
Журналирование
Почему это так трудно
basicconfig
Углубляемся в конфигурацию
Распространенные паттерны
Стек ELK
Logstash
Elasticsearch и Kibana
Вопросы и упражнения
Задача на ситуационный анализ
Глава 8. Pytest для DevOps
Сверхспособности тестирования фреймворка pytest
Начало работы с pytest
Тестирование с помощью pytest
Отличия от unittest
Возможности pytest
conftest.py
Этот замечательный оператор assert
Параметризация
Фикстуры
Приступим
Встроенные фикстуры
Инфраструктурное тестирование
Что такое проверка системы
Введение в Testinfra
Подключение к удаленным узлам
Фикстуры и особые фикстуры
Примеры
Тестирование блокнотов Jupyter с помощью pytest
Вопросы и упражнения
Задача на ситуационный анализ
Глава 9. Облачные вычисления
Основы облачных вычислений
Типы облачных вычислений
Типы облачных сервисов
Инфраструктура как сервис
«Железо» как сервис
Платформа как сервис
Бессерверная обработка данных
Программное обеспечение как сервис
Инфраструктура как код
Непрерывная поставка
Виртуализация и контейнеры
Аппаратная виртуализация
Программно определяемые сети
Программно определяемое хранилище
Контейнеры
Трудные задачи и потенциальные возможности распределенной обработки данных
Конкурентное выполнение на Python, быстродействие и управление процессами в эпоху облачных вычислений
Управление процессами
Процессы и дочерние процессы
Решение задач с помощью библиотеки multiprocessing
Ветвление процессов с помощью Pool()
Функция как сервис и бессерверная обработка данных
Повышение производительности Python с помощью библиотеки Numba
Динамический компилятор Numba
Высокопроизводительные серверы
Заключение
Вопросы
Вопросы на ситуационный анализ
Глава 10. Инфраструктура как код
Классификация инструментов автоматизации выделения инфраструктуры
Выделение инфраструктуры вручную
Автоматическое выделение инфраструктуры с помощью Terraform
Выделение корзины S3
Предоставление SSL-сертификата с помощью ACM AWS
Выделение раздачи Amazon CloudFront
Создание записи DNS Route 53
Копирование статических файлов в корзину S3
Удаление всех ресурсов AWS, выделенных с помощью Terraform
Автоматическое выделение инфраструктуры с помощью Pulumi
Создание нового проекта Pulumi на Python для AWS
Создание значений параметров конфигурации для стека staging
Создаем SSL-сертификат ACM
Выделение зоны Route 53 и записей DNS
Выделение раздачи CloudFront
Создание записи DNS Route 53 для URL сайта
Создание и развертывание нового стека
Упражнения
Глава 11. Контейнерные технологии: Docker
и Docker Compose
Что такое контейнер Docker
Создание, сборка, запуск и удаление образов и контейнеров Docker
Публикация образов Docker в реестре Docker
Запуск контейнера Docker из одного образа на другом хост-компьютере
Запуск нескольких контейнеров Docker с помощью Docker Compose
Портирование сервисов docker-compose на новый хост-компьютер и операционную систему
Упражнения
Глава 12. Координация работы контейнеров: Kubernetes
Краткий обзор основных понятий Kubernetes
Создание манифестов Kubernetes на основе файла docker_compose.yaml с помощью Kompose
Развертывание манифестов Kubernetes на локальном кластере Kubernetes, основанном на minikube
Запуск кластера GKE Kubernetes в GCP с помощью Pulumi
Развертывание примера приложения Flask в GKE
Установка чартов Helm для Prometheus и Grafana
Удаление кластера GKE
Упражнения
Глава 13. Технологии бессерверной обработки данных
Развертывание одной и той же функции Python в облака большой тройки поставщиков облачных сервисов
Установка фреймворка Serverless
Развертывание функции Python в AWS Lambda
Развертывание функции Python в Google Cloud Functions
Развертывание функции на Python в Azure
Развертывание функции на Python на самохостируемых FaaS-платформах
Развертывание функции на Python в OpenFaaS
Выделение таблиц DynamoDB, функций Lambda и методов API Gateway с помощью AWS CDK
Упражнения
Глава 14. MLO и разработка ПО для машинного
обучения
Что такое машинное обучение
Машинное обучение с учителем
Моделирование
Экосистема машинного обучения языка Python
Глубокое обучение с помощью PyTorch
Платформы облачного машинного обучения
Модель зрелости машинного обучения
Основная терминология машинного обучения
Уровень 1. Очерчивание рамок задачи и области определения, а также формулировка задачи
Уровень 2. Непрерывная поставка данных
Уровень 3. Непрерывная поставка очищенных данных
Уровень 4. Непрерывная поставка разведочного анализа данных
Уровень 5. Непрерывная поставка обычного ML и AutoML
Уровень 6. Цикл обратной связи эксплуатации ML
Приложение sklearn Flask с использованием Docker и Kubernetes
Разведочный анализ данных
Моделирование
Тонкая настройка масштабированного GBM
Подгонка модели
Оценка работы модели
adhoc_predict
Технологический процесс JSON
Масштабирование входных данных
adhoc_predict на основе выгрузки
Масштабирование входных данных
Вопросы и упражнения
Задача на ситуационный анализ
Вопросы на проверку усвоения материала
Глава 15. Инженерия данных
Малые данные
Обработка файлов малых данных
Запись в файл
Чтение файла
Конвейер с генератором для чтения и обработки строк
YAML
Большие данные
Утилиты, компоненты и платформы для работы с большими данными
Источники данных
Файловые системы
Хранение данных
Ввод данных в режиме реального времени
Ситуационный анализ: создание доморощенного конвейера данных
Бессерверная инженерия данных
AWS Lambda и события CloudWatch
Журналирование Amazon CloudWatch для AWS Lambda
Наполнение данными Amazon Simple Queue Service с помощью AWS Lambda
Подключение срабатывающего по событию триггера CloudWatch
Создание событийно-управляемых функций Lambda
Чтение событий Amazon SQS из AWS Lambda
Заключение
Упражнения
Задача на ситуационный анализ
Глава 16. Истории из практики DevOps и интервью
Киностудия не может снять фильм
Разработчик игр не может обеспечить поставку игрового ПО
Сценарии Python, запуск которых требует 60 секунд
Решаем горящие проблемы с помощью кэша и интеллектуальной телеметрии
Доавтоматизироваться до увольнения
Антипаттерны DevOps
Антипаттерн: отсутствие автоматизированного сервера сборки
Работать вслепую
Сложности координации как постоянная проблема
Отсутствие командной работы
Интервью
Гленн Соломон
Эндрю Нгуен
Габриэлла Роман
Ригоберто Рош
Джонатан Лакур
Вилле Туулос
Джозеф Рис
Тейо Хольцер
Мэтт Харрисон
Майкл Фоорд
Рекомендации
Вопросы
Интересные задачи
Дипломный проект
Об авторах
Об иллюстрации на обложке