Kubernetes для DevOps: развертывание, запуск и масштабирование в облаке

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Kubernetes — один из ключевых элементов современной облачной экосистемы. Эта технология обеспечивает надежность, масштабируемость и устойчивость контейнерной виртуализации. Джон Арундел и Джастин Домингус рассказывают об экосистеме Kubernetes и знакомят с проверенными решениями повседневных проблем. Шаг за шагом вы построите собственное облачно-ориентированное приложение и создадите инфраструктуру для его поддержки, настроите среду разработки и конвейер непрерывного развертывания, который пригодится вам при работе.

Author(s): Джон Арундел, Джастин Домингус
Series: Бестселлеры O’REILLY
Edition: 1
Publisher: Питер
Year: 2020

Language: Russian
Commentary: True PDF
Pages: 384
City: СПб.
Tags: DevOps; Google Cloud Platform; Amazon Web Services; Cloud Computing; Security; Monitoring; Logging; Performance Metrics; Clusters; Backup; Deployment; Kubernetes; YAML; Container Orchestration; Continuous Deployment

Предисловие
Введение
Чему вы научитесь
Для кого предназначена книга
На какие вопросы отвечает книга
Условные обозначения
Использование примеров кода
Благодарности
От издательства
Глава 1. Революция
в облаке
Создание облака
Покупаем время
Инфраструктура как услуга
Расцвет DevOps
Никто не понимает DevOps
Бизнес-преимущество
Инфраструктура как код
Учимся вместе
Пришествие контейнеров
Последние веяния
«Коробочное» мышление
Размещение программного обеспечения в контейнерах
Динамически подключаемые приложения
Дирижирование оркестром контейнеров
Kubernetes
От Borg до Kubernetes
Что делает платформу Kubernetes такой ценной
Не исчезнет ли Kubernetes?
Kubernetes не решает все проблемы
Облачная ориентированность
Будущее системного администрирования
Распределенный DevOps
Некоторые элементы останутся централизованными
Планирование продуктивности разработчиков
Вы — будущее
Резюме
Глава 2. Первые шаги с Kubernetes
Запускаем наш первый контейнер
Установка Docker Desktop
Что такое Docker
Запуск образа контейнера
Демонстрационное приложение
Рассмотрение исходного кода
Введение в Go
Как работает демонстрационное приложение
Построение контейнера
Что собой представляет Dockerfile
Минимальные образы контейнеров
Выполнение команды docker image build
Выбор имен для ваших образов
Перенаправление портов
Реестры контейнеров
Аутентификация в реестре
Выбор имени для вашего образа и загрузка его в реестр
Запуск вашего образа
Здравствуй, Kubernetes
Запуск демонстрационного приложения
Если контейнер не запускается
Minikube
Резюме
Глава 3. Размещение Kubernetes
Архитектура кластера
Управляющий уровень
Компоненты узлов
Высокая доступность
Стоимость самостоятельного размещения Kubernetes
Это сложнее, чем вам кажется
Начальная настройка — это далеко не все
Инструменты не сделают за вас всю работу
Kubernetes — это сложно
Накладные расходы на администрирование
Начните с управляемых сервисов
Управляемые сервисы Kubernetes
Google Kubernetes Engine (GKE)
Amazon Elastic Container Service для Kubernetes
Azure Kubernetes Service (AKS)
OpenShift
IBM Cloud Kubernetes Service
Heptio Kubernetes Subscription (HKS)
Решения для Kubernetes «под ключ»
Stackpoint
Containership Kubernetes Engine (CKE)
Установщики Kubernetes
kops
Kubespray
TK8
Kubernetes: трудный путь
kubeadm
Tarmak
Rancher Kubernetes Engine (RKE)
Модуль Puppet для Kubernetes
Kubeformation
Покупать или строить: наши рекомендации
Используйте как можно меньше программного обеспечения
По возможности используйте Kubernetes в виде управляемого сервиса
Но что насчет привязки к поставщику?
При необходимости используйте стандартные инструменты Kubernetes для самостоятельного размещения
Если ваш выбор ограничен
Локально размещенные физические серверы
Бескластерные контейнерные сервисы
Amazon Fargate
Azure Container Instances (ACI)
Резюме
Глава 4. Работа с объектами Kubernetes
Развертывания
Надзор и планирование
Перезапуск контейнеров
Обращение к развертываниям
Pod-оболочки
Объекты ReplicaSet
Поддержание желаемого состояния
Планировщик Kubernetes
Манифесты ресурсов в формате YAML
Ресурсы являются данными
Манифесты развертываний
Использование команды kubectl apply
Ресурсы типа «сервис»
Обращение к кластеру с помощью kubectl
Выводим ресурсы на новый уровень
Helm: диспетчер пакетов для Kubernetes
Установка Helm
Установка чарта Helm
Чарты, репозитории и выпуски
Вывод списка выпусков Helm
Резюме
Глава 5. Управление ресурсами
Понимание ресурсов
Единицы измерения ресурсов
Запросы ресурсов
Лимиты на ресурсы
Делайте ваши контейнеры небольшими
Управление жизненным циклом контейнера
Проверки работоспособности
Задержка и частота проверки
Другие типы проверок
Проверки gRPC
Проверки готовности
Проверки готовности на основе файла
minReadySeconds
PodDisruptionBudget
Использование пространств имен
Работа с пространствами имен
Какое пространство имен следует использовать?
Адреса сервисов
Квоты на ресурсы
Запросы и лимиты на ресурсы по умолчанию
Оптимизация стоимости кластера
Оптимизация развертываний
Оптимизация pod-оболочек
Vertical Pod Autoscaler
Оптимизация узлов
Оптимизация хранилища
Избавление от неиспользуемых ресурсов
Проверка резервной мощности
Использование зарезервированных серверов
Использование прерываемых (spot) серверов
Балансировка вашей рабочей нагрузки
Резюме
Глава 6. Работа с кластерами
Масштабирование и изменение размеров кластера
Планирование мощности
Узлы и серверы
Масштабирование кластера
Проверка на соответствие
Сертификация CNCF
Проверка на соответствие с помощью Sonobuoy
Проверка конфигурации и аудит
K8Guard
Copper
kube-bench
Ведение журнала аудита для Kubernetes
Хаотическое тестирование
Промышленные условия только в промышленной среде
chaoskube
kube-monkey
PowerfulSeal
Резюме
Глава 7. Продвинутые инструменты для работы с Kubernetes
Осваиваем kubectl
Псевдонимы командной оболочки
Использование коротких флагов
Сокращение названий типов ресурсов
Автодополнение команд kubectl
Справка
Справка по ресурсам Kubernetes
Отображение более подробного вывода
Работа с jq и данными в формате JSON
Наблюдение за объектами
Описание объектов
Работа с ресурсами
Императивные команды kubectl
Когда не следует использовать императивные команды
Генерация манифестов ресурсов
Исследование ресурсов
Сравнение ресурсов
Работа с контейнерами
Просмотр журнальных записей контейнера
Подключение к контейнеру
Наблюдение за ресурсами Kubernetes с помощью kubespy
Перенаправление порта контейнера
Выполнение команд внутри контейнеров
Запуск контейнеров с целью отладки
Использование команд BusyBox
Добавление BusyBox в ваш контейнер
Установка программ в контейнер
Отладка в режиме реального времени с помощью kubesquash
Контексты и пространства имен
kubectx и kubens
kube-ps1
Командные оболочки и инструменты Kubernetes
kube-shell
Click
kubed-sh
Stern
Создание собственных инструментов для работы с Kubernetes
Резюме
Глава 8. Работа
с контейнерами
Контейнеры и pod-оболочки
Что такое контейнер
Что должно находиться в контейнере
Что должно находиться в pod-оболочке?
Манифесты контейнеров
Идентификаторы образов
Тег latest
Контрольные суммы контейнеров
Теги базового образа
Порты
Запросы и лимиты на ресурсы
Политика загрузки образов
Переменные среды
Безопасность контейнеров
Запуск контейнеров от имени обычного пользователя
Блокирование контейнеров с администраторскими привилегиями
Настройка файловой системы только для чтения
Отключение повышения привилегий
Мандаты
Контексты безопасности pod-оболочки
Политики безопасности pod-оболочки
Служебные учетные записи pod-оболочек
Тома
Тома emptyDir
Постоянные тома
Политики перезапуска
imagePullSecrets
Резюме
Глава 9. Управление pod-оболочками
Метки
Что такое метки
Селекторы
Более сложные селекторы
Другие способы использования меток
Метки и аннотации
Принадлежность к узлам
Жесткая принадлежность
Мягкая принадлежность
Принадлежность и непринадлежность pod-оболочек
Размещение pod-оболочек вместе
Размещение pod-оболочек порознь
Мягкая непринадлежность
Когда использовать правила принадлежности pod-оболочек
Ограничения и допуски
Контроллеры pod-оболочек
Объекты DaemonSet
Объект StatefulSet
Запланированные задания
Задания Cronjob
Горизонтальное автомасштабирование pod-оболочек
PodPreset
Операторы и определение пользовательских ресурсов
Ресурсы Ingress
Правила Ingress
Терминация TLS с помощью Ingress
Контроллеры Ingress
Istio
Envoy
Резюме
Глава 10. Конфигурация и объекты Secret
Объекты ConfigMap
Создание ConfigMap
Задание переменных среды из ConfigMap
Установка всей среды из ConfigMap
Использование переменных среды в аргументах командной строки
Создание конфигурационных файлов из объектов ConfigMap
Обновление pod-оболочек при изменении конфигурации
Конфиденциальные данные в Kubernetes
Использование объектов Secret в качестве переменных среды
Запись объектов Secret в файлы
Чтение объектов Secret
Доступ к объектам Secret
Пассивное шифрование данных
Хранение конфиденциальных данных
Стратегии управления объектами Secret
Шифрование конфиденциальных данных в системе контроля версий
Удаленное хранение конфиденциальных данных
Использование специального инструмента для управления конфиденциальными данными
Рекомендации
Шифрование конфиденциальных данных с помощью Sops
Знакомство с Sops
Шифрование файла с помощью Sops
Использование внутреннего механизма KMS
Резюме
Глава 11. Безопасность и резервное копирование
Управление доступом и права доступа
Управление доступом в кластере
Введение в управление доступом на основе ролей
Понимание ролей
Привязка ролей к пользователям
Какие роли вам нужны?
Обращение с ролью cluster-admin
Приложения и развертывание
Решение проблем с RBAC
Сканирование безопасности
Clair
Aqua
Anchore Engine
Резервное копирование
Нужно ли выполнять резервное копирование в Kubernetes?
Резервное копирование etcd
Резервное копирование состояния ресурсов
Резервное копирование состояния кластера
Крупные и мелкие аварии
Velero
Мониторинг состояния кластера
kubectl
Загруженность процессора и памяти
Консоль облачного провайдера
Kubernetes Dashboard
Weave Scope
kube-ops-view
node-problem-detector
Дополнительный материал
Резюме
Глава 12. Развертывание приложений Kubernetes
Построение манифестов с помощью Helm
Что внутри у чарта Helm?
Шаблоны Helm
Интерполяция переменных
Цитирование значений в шаблонах
Задание зависимостей
Развертывание чартов Helm
Задание переменных
Задание значений в выпуске Helm
Обновление приложения с помощью Helm
Откат к предыдущей версии
Создание репозитория с чартами Helm
Управление конфиденциальными данными чартов Helm с помощью Sops
Управление несколькими чартами с помощью Helmfile
Что такое Helmfile?
Метаданные чарта
Применение Helmfile
Продвинутые инструменты управления манифестами
ksonnet
Kapitan
kustomize
kompose
Ansible
kubeval
Резюме
Глава 13. Процесс разработки
Инструменты разработки
Skaffold
Draft
Telepresence
Knative
Стратегии развертывания
Плавающие обновления RollingUpdate
Стратегия Recreate
maxSurge и maxUnavailable
Сине-зеленые развертывания
Rainbow-развертывания
Канареечные развертывания
Выполнение миграции с помощью Helm
Хуки Helm
Обработка неудачных хуков
Другие хуки
Создание цепочки хуков
Резюме
Глава 14. Непрерывное развертывание в Kubernetes
Что такое непрерывное развертывание?
Какие инструменты следует использовать для CD?
Jenkins
Drone
Google Cloud Build
Concourse
Spinnaker
GitLab CI
Codefresh
Azure Pipelines
Компоненты непрерывного развертывания
Docker Hub
Gitkube
Flux
Keel
Процесс CD с использованием Cloud Build
Настройка Google Cloud и GKE
Создание копии репозитория demo
Знакомство с Cloud Build
Сборка контейнера с тестами
Выполнение тестов
Собираем контейнер приложения
Проверка манифестов Kubernetes
Публикация образа
Теги на основе Git SHA
Создание первого триггера сборки
Проверка триггера
Развертывание из конвейера CD
Создание триггера развертывания
Оптимизация процесса сборки
Адаптация демонстрационного конвейера
Резюме
Глава 15. Наблюдаемость и мониторинг
Что такое наблюдаемость
Что такое мониторинг
Мониторинг методом черного ящика
Что означает «работает»?
Ведение журнала
Введение в показатели
Трассировка
Наблюдаемость
Процесс наблюдаемости
Мониторинг в Kubernetes
Внешние проверки методом черного ящика
Внутренние проверки работоспособности
Резюме
Глава 16. Показатели в Kubernetes
Что на самом деле представляют собой показатели
Хронологические данные
Счетчики и измерители
О чем нам могут поведать показатели
Выбор подходящих показателей
Сервисы: шаблон RED
Ресурсы: шаблон USE
Бизнес-показатели
Показатели Kubernetes
Анализ показателей
Что не так с простым средним значением?
Средние значения, медианы и выбросы
Вычисление перцентилей
Применение перцентилей к показателям
Обычно нас интересуют наихудшие показатели
Не перцентилями едиными
Визуализация показателей с помощью информационных панелей
Использование стандартной компоновки для всех сервисов
Информационный излучатель на основе обобщенных панелей данных
Отслеживайте то, что может сломаться
Уведомления о показателях
Что не так с уведомлениями
Дежурство не должно быть пыткой
Неотложные, важные и решаемые уведомления
Отслеживайте свои уведомления и их последствия
Инструменты и сервисы для работы с показателями
Prometheus
Google Stackdriver
AWS Cloudwatch
Azure Monitor
Datadog
New Relic
Резюме
Заключение
Что дальше?
Добро пожаловать на борт
Об авторах
Об обложке