Kubernetes изнутри

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 – от управления iptables до настройки динамически масштабируемых кластеров, реагирующих на изменение нагрузки. Советы профессионалов помогут вам поддерживать работоспособность ваших приложений. Особое внимание уделяется теме безопасности. Книга адресована разработчикам и администраторам Kubernetes со средним уровнем подготовки.

Author(s): Джей Вьяс, Крис Лав
Edition: 1
Publisher: ДМК Пресс
Year: 2022

Language: Russian
Commentary: Publisher's PDF
Pages: 378
City: М.
Tags: Linux; Security; DNS; Network Security; Troubleshooting; Kubernetes

Оглавление
Предисловие
Благодарности
О книге
Об авторах
Об иллюстрации на обложке
Глава 1. Почему появился Kubernetes
1.1 Предварительный обзор некоторых основных терминов
1.2 Проблема дрейфа инфраструктуры и Kubernetes
1.3 Контейнеры и образы
1.4 Базовая основа Kubernetes
1.4.1 Все инфраструктурные правила в Kubernetes определяются в обычных файлах YAML
1.5 Возможности Kubernetes
1.6 Компоненты и архитектура Kubernetes
1.6.1 Kubernetes API
1.6.2 Пример первый: интернет-магазин
1.6.3 Пример второй: онлайн-решение для благотворительности
1.7 Когда не стоит использовать Kubernetes
Итоги
Глава 2. Зачем нужны модули Pod?
2.1 Пример веб-приложения
2.1.1 Инфраструктура нашего веб-приложения
2.1.2 Эксплуатационные требования
2.2 Что такое Pod?
2.2.1 Пространства имен в Linux
2.2.2 Kubernetes, инфраструктура и Pod
2.2.3 Объект Node
2.2.4 Наше веб-приложение и плоскость управления
2.3 Создание веб-приложения с помощью kubectl
2.3.1 Сервер Kubernetes API: kube-apiserver
2.3.2 Планировщик Kubernetes: kube-scheduler
2.3.3 Контроллеры инфраструктуры
2.4 Масштабирование, высокодоступные приложения и плоскость управления
2.4.1 Автоматическое масштабирование
2.4.2 Управление затратами
Итоги
Глава 3. Создание модулей Pod
3.1 Общий обзор примитивов Kubernetes
3.2 Что такое примитивы Linux?
3.2.1 Примитивы Linux – это инструменты управления ресурсами
3.2.2 Все сущее является файлом (или файловым дескриптором)
3.2.3 Файлы можно комбинировать
3.2.4 Настройка kind
3.3 Использование примитивов Linux в Kubernetes
3.3.1 Предварительные условия для запуска модуля Pod
3.3.2 Запуск простого модуля Pod
3.3.3 Исследование зависимостей модуля Pod от Linux
3.4 Создание модуля Pod с нуля
3.4.1 Создание изолированного процесса с помощью chroot
3.4.2 Использование mount для передачи данных процессам
3.4.3 Защита процесса с помощью unshare
3.4.4 Создание сетевого пространства имен
3.4.5 Проверка работоспособности процесса
3.4.6 Ограничение потребления процессора с помощью cgroups
3.4.7 Создание раздела resources
3.5 Использование модуля Pod в реальном мире
3.5.1 Проблема сети
3.5.2 Как kube-proxy реализует сервисы Kubernetes с помощью iptables
3.5.3 Использование модуля kube-dns
3.5.4 Другие проблемы
Итоги
Глава 4. Использование контрольных групп для управления процессами в модулях Pod
4.1 Модули Pod простаивают до завершения подготовительных операций
4.2 Процессы и потоки в Linux
4.2.1 Процессы systemd и init
4.2.2 Контрольные группы для процессов
4.2.3 Реализация контрольных групп для обычного модуля Pod
4.3 Тестирование контрольных групп
4.4 Как kubelet управляет контрольными группами
4.5 Как kubelet управляет ресурсами
4.5.1 Почему ОС не может использовать подкачку в Kubernetes?
4.5.2 Хак: настройка приоритета «для бедных»
4.5.3 Хак: настройка HugePages с помощью контейнеров инициализации
4.5.4 Классы QoS: почему они важны и как они работают
4.5.5 Создание классов QoS путем настройки ресурсов
4.6 Мониторинг ядра Linux с помощью Prometheus, cAdvisor и сервера API
4.6.1 Публикация метрик обходится недорого и имеет большую ценность
4.6.2 Почему Prometheus?
4.6.3 Создание локального сервиса мониторинга Prometheus
4.6.4 Исследование простоев в Prometheus
Итоги
Глава 5. Интерфейсы CNI и настройка сети в модулях Pod
5.1 Зачем нужны программно-определяемые сети в Kubernetes
5.2 Реализация Kubernetes SDN на стороне сервиса: kube-proxy
5.2.1 Плоскость данных в kube-proxy
5.2.2 Подробнее о NodePort
5.3 Провайдеры CNI
5.4 Два плагина CNI: Calico и Antrea
5.4.1 Архитектура плагинов CNI
5.4.2 Давайте поэкспериментируем с некоторыми CNI
5.4.3 Установка провайдера CNI Calico
5.4.4 Организация сети в Kubernetes с OVS и Antrea
5.4.5 Замечание о провайдерах CNI и kube-proxy в разных ОС
Итоги
Глава 6. Устранение проблем в крупномасштабных сетях
6.1 Sonobuoy: инструмент подтверждения работоспособности кластера
6.1.1 Трассировка движения данных модулей Pod в кластере
6.1.2 Настройка кластера с CNI-провайдером Antrea
6.2 Исследование особенностей маршрутизации в разных провайдерах CNI с помощью команд arp и ip
6.2.1 Что такое IP-туннель и почему его используют провайдеры CNI?
6.2.2 Сколько пакетов проходит через сетевые интерфейсы CNI?
6.2.3 Маршруты
6.2.4 Инструменты для CNI: Open vSwitch (OVS)
6.2.5 Трассировка движения данных активных контейнеров с помощью tcpdump
6.3 kube-proxy и iptables
6.3.1 iptables-save и diff
6.3.2 Как сетевые политики изменяют правила CNI
6.3.3 Как реализуются политики?
6.4 Входные контроллеры
6.4.1 Настройка Contour и кластера kind для изучения входных контроллеров
6.4.2 Настройка простого модуля Pod с веб-сервером
Итоги
Глава 7. Хранилища в модулях Pod и CSI
7.1 Небольшое отступление: виртуальная файловая система (VFS) в Linux
7.2 Три вида хранилищ для Kubernetes
7.3 Создание PVC в кластере kind
7.4 Интерфейс контейнерного хранилища (CSI)
7.4.1 Проблема внутреннего провайдера
7.4.2 CSI как спецификация, работающая внутри Kubernetes
7.4.3 CSI: как работает драйвер хранилища
7.4.4 Привязка точек монтирования
7.5 Краткий обзор действующих драйверов CSI
7.5.1 Контроллер
7.5.2 Интерфейс узла
7.5.3 CSI в операционных системах, отличных от Linux
Итоги
Глава 8. Реализация и моделирование хранилищ
8.1 Микрокосм в экосистеме Kubernetes: динамическое хранилище
8.1.1 Оперативное управление хранилищем: динамическое выделение ресурсов
8.1.2 Локальное хранилище в сравнении с emptyDir
8.1.3 Тома PersistentVolume
8.1.4 Интерфейс контейнерного хранилища (CSI)
8.2 Динамическая подготовка выигрывает от CSI, но не зависит от него
8.2.1 Классы хранилищ (StorageClass)
8.2.2 Вернемся к центрам обработки данных
8.3 Варианты организации хранилищ в Kubernetes
8.3.1 Секреты: эфемерная передача файлов
8.4 Как выглядит типичный провайдер динамического хранилища?
8.5 hostPath для управления системой и/или доступа к данным
8.5.1 hostPath, CSI и CNI: канонический вариант использования
8.5.2 Cassandra: пример реального хранилища в Kubernetes
8.5.3 Дополнительные возможности и модель хранения в Kubernetes
8.6 Дополнительная литература
Итоги
Глава 9. Запуск модулей Pod: как работает kubelet
9.1 kubelet и узел
9.2 Основы kubelet
9.2.1 Среда выполнения контейнеров: стандарты и соглашения
9.2.2 Конфигурационные параметры и API агента kubelet
9.3 Создание модуля Pod и его мониторинг
9.3.1 Запуск kubelet
9.3.2 После запуска: жизненный цикл узла
9.3.3 Механизм аренды и блокировки в etcd, эволюция аренды узла
9.3.4 Управление жизненным циклом Pod в kubelet
9.3.5 CRI, контейнеры и образы: как они связаны
9.3.6 kubelet не запускает контейнеры: это делает CRI
9.3.7 Приостановленный контейнер: момент истины
9.4 Интерфейс времени выполнения контейнеров (CRI)
9.4.1 Сообщаем Kubernetes, где находится среда выполнения контейнеров
9.4.2 Процедуры CRI
9.4.3 Абстракция kubelet вокруг CRI: GenericRuntimeManager
9.4.4 Как вызывается CRI?
9.5. Интерфейсы kubelet
9.5.1 Внутренний интерфейс среды выполнения
9.5.2 Как kubelet извлекает образы: интерфейс ImageService
9.5.3 Передача ImagePullSecret в kubelet
9.6 Дополнительная литература
Итоги
Глава 10. DNS в Kubernetes
10.1 Краткое введение в DNS (и CoreDNS)
10.1.1 NXDOMAIN, записи A и записи CNAME
10.1.2 Модулям Pod нужен внутренний DNS
10.2 Почему StatefulSet, а не Deployment?
10.2.1 DNS и автономные сервисы
10.2.2 Постоянные записи DNS в StatefulSet
10.2.3 Развертывание с несколькими пространствами имен для изучения свойств модуля DNS
10.3 Файл resolv.conf
10.3.1 Краткое примечание о маршрутизации
10.3.2 CoreDNS: вышестоящий сервер имен для ClusterFirst DNS
10.3.3 Разбор конфигурации плагина CoreDNS
Итоги
Глава 11. Плоскость управления
11.1 Плоскость управления
11.2 Особенности сервера API
11.2.1 Объекты API и пользовательские ресурсы
11.2.2 Определения пользовательских ресурсов (CRD)
11.2.3 Планировщик
11.2.4 Краткий обзор фреймворка планирования
11.3 Диспетчер контроллеров
11.3.1 Хранилище
11.3.2 Учетные данные сервисов и токены
11.4 Облачные диспетчеры контроллеров Kubernetes (CCM)
11.5 Дополнительная литература
Итоги
Глава 12. etcd и плоскость управления
12.1 Заметки для нетерпеливых
12.1.1 Мониторинг производительности etcd с помощью Prometheus
12.1.2 Когда нужно настраивать etcd
12.1.3 Пример: быстрая проверка работоспособности etcd
12.1.4 etcd v3 и v2
12.2 etcd как хранилище данных
12.2.1 Можно ли запустить Kubernetes в других базах данных?
12.2.2 Строгая согласованность
12.2.3 Согласованность в etcd обеспечивают операции fsync
12.3 Обзор интерфейса Kubernetes с etcd
12.4 Задача etcd – надежное хранение фактов
12.4.1 Журнал упреждающей записи etcd
12.4.2 Влияние на Kubernetes
12.5 Теорема CAP
12.6 Балансировка нагрузки на уровне клиента и etcd
12.6.1 Ограничения по размеру: о чем (не) следует беспокоиться
12.7 Шифрование хранимых данных в etcd
12.8 Производительность и отказоустойчивость etcd в глобальном масштабе
12.9 Интервал отправки контрольных сообщений в высокораспределенной etcd
12.10 Настройка клиента etcd в кластере kind
12.10.1 Запуск etcd в окружении, отличном от Linux
Итоги
Глава 13. Безопасность контейнеров и модулей Pod
13.1 Радиус взрыва
13.1.1 Уязвимости
13.1.2 Вторжение
13.2 Безопасность контейнера
13.2.1 Планирование обновления контейнеров и пользовательского программного обеспечения
13.2.2 Контроль контейнеров
13.2.3 Пользователи в контейнерах – не запускайте ПО от имени root
13.2.4 Используйте наименьшие возможные контейнеры
13.2.5 Происхождение контейнера
13.2.6 Линтеры для контейнеров
13.3 Безопасность модулей Pod
13.3.1 Контекст безопасности
13.3.2 Расширение привилегий и возможностей
13.3.3 Политики безопасности Pod (PSP)
13.3.4 Не внедряйте автоматически токен учетной записи сервиса
13.3.5 Модули Pod с привилегиями root
13.3.6 Граница безопасности
Итоги
Глава 14. Безопасность узлов и Kubernetes
14.1 Безопасность узла
14.1.1 Сертификаты TLS
14.1.2 Неизменяемые ОС и применение исправлений на узлах
14.1.3 Изолированные среды выполнения контейнеров
14.1.4 Атаки на ресурсы
14.1.5 Единицы измерения потребления процессора
14.1.6 Единицы измерения объема памяти
14.1.7 Единицы измерения объема хранилища
14.1.8 Сети хостов и модулей Pod
14.1.9 Пример модуля Pod
14.2 Безопасность сервера API
14.2.1 Управление доступом на основе ролей (RBAC)
14.2.2 Определение RBAC API
14.2.3 Ресурсы и подресурсы
14.2.4 Субъекты и RBAC
14.2.5 Отладка RBAC
14.3 Authn, Authz и Secret
14.3.1 Учетные записи сервисов IAM: защита облачных API
14.3.2 Доступ к облачным ресурсам
14.3.3 Частные серверы API
14.4 Безопасность сети
14.4.1 Сетевые политики
14.4.2 Балансировщики нагрузки
14.4.3 Агент открытой политики (OPA)
14.4.4 Коллективная аренда
14.5 Советы по Kubernetes
Итоги
Глава 15. Установка приложений
15.1 Размышления о приложениях в Kubernetes
15.1.1 Масштаб приложения влияет на выбор инструментов
15.2 Приложения на основе микросервисов обычно требуют тысячи строк определения конфигурации
15.3 Переосмысление установки приложения Guestbook в реальных условиях
15.4 Установка набора инструментов Carvel
15.4.1 Часть 1: разделение ресурсов на отдельные файлы
15.4.2 Часть 2: исправление файлов приложения с помощью ytt
15.4.3 Часть 3: развертывание приложения Guestbook и управление им
15.4.4 Часть 4: создание оператора kapp для упаковки приложения и управления им
15.5 И снова об операторах Kubernetes
15.6 Tanzu Community Edition: пример комплексного набора инструментов Carvel
Итоги
Предметный указатель