Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Kubernetes изнутри

Покупка
Артикул: 817228.01.99
В этой книге подробно рассказывается о настройке и управлении платформой Kubernetes, а также о том, как быстро и эффективно устранять неполадки. Исследуется внутреннее устройство Kubernetes — от управления iptables до настройки динамически масштабируемых кластеров, реагирующих на изменение нагрузки. Советы профессионалов помогут вам поддерживать работоспособность ваших приложений. Особое внимание уделяется теме безопасности. Книга адресована разработчикам и администраторам Kubernetes со средним уровнем подготовки.
Вьяс, Д. Kubernetes изнутри : практическое руководство / Д. Вьяс, К. Лав ; пер. с англ. А. Н. Киселева. - Москва : ДМК Пресс, 2023. - 378 с. - ISBN 978-5-93700-153-5. - Текст : электронный. - URL: https://znanium.com/catalog/product/2109508 (дата обращения: 27.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Джей Вьяс 
Крис Лав 

Kubernetes изнутри
Core Kubernetes

JAY VYAS
CHRIS LOVE
Kubernetes изнутри

ДЖЕЙ ВЬЯС
КРИС ЛАВ

Москва, 2023
УДК 004.042Kubernetes
ББК 32.372
В96

Вьяс Дж., Лав К.
В96    Kubernetes изнутри / пер. с англ. А. Н. Киселева. – М.: ДМК Пресс, 2023. – 378 с.: 

ил. 

ISBN 978-5-93700-153-5

В этой книге подробно рассказывается о настройке и управлении платформой 
Kubernetes, а также о том, как быстро и эффективно устранять неполадки. Исследуется 
внутреннее устройство Kubernetes – от управления iptables до настройки динамически 
масштабируемых кластеров, реагирующих на изменение нагрузки. Советы профессионалов 
помогут вам поддерживать работоспособность ваших приложений. Особое 
внимание уделяется теме безопасности.
Книга адресована разработчикам и администраторам Kubernetes со средним 
уровнем подготовки.

УДК 004.042Kubernetes
ББК 32.372

Copyright © DMK Press 2022. Authorized translation of the English edition © 2022 Manning 
Publications. This translation is published and sold by permission of Manning Publications, the owner 
of all rights to publish and sell the same.

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

ISBN 978-1-6172-9755-7 (англ.) 
© Manning Publications, 2022
ISBN 978-5-93700-153-5 (рус.) 
© Перевод, оформление, издание, ДМК Пресс, 2022
Амиму Кнаббену (Amim Knabben), Рикардо Кацу (Ricardo Katz), Мэт-
ту Фенвику (Matt Fenwick), Антонио Охеа (Antonio Ojea), Раджасу 
Какодару (Rajas Kakodar) и Микаэлю Клюзо (Mikael Cluseau) за многочасовые 
исследования K8s по ночам и выходным и увлекательные 
соревнования по крику. Эндрю Стойокосу (Andrew Stoyocos), возглавлявшему 
группу политик в SIG Network. Моей жене и семье, позволившим 
мне писать эту книгу по субботам. Гари (Gary), Роне (Rona), 
Норе (Nora) и Джинджину (Gingin) за помощь моей маме.
– Джей

Кейт (Kate) и всем моим близким, поддерживавшим меня в этом 
путешествии. Спасибо команде LionKube, особенно Одри (Audrey) 
за организацию работы и Шарифу (Sharif) за помощь и поддержку. 
Также моему соавтору Джею (Jay), предложившему мне принять 
участие в работе над этой книгой вместе с ним, я благодарю тебя 
за это! Без твоей целеустремленности и упорства у нас ничего не 
получилось бы.
– Крис
Оглавление

 1  Почему появился Kubernetes............................................................................... 24
 2  Зачем нужны модули Pod? ................................................................................... 40
 3  Создание модулей Pod .......................................................................................... 68
 4  Использование контрольных групп для управления процессами  
в модулях Pod .........................................................................................................103
 5  Интерфейсы CNI и настройка сети в модулях Pod .......................................132
 6  Устранение проблем в крупномасштабных сетях .........................................154
 7  Хранилища в модулях Pod и CSI ........................................................................179
 8  Реализация и моделирование хранилищ ........................................................198
 9  Запуск модулей Pod: как работает kubelet ......................................................221
 10  DNS в Kubernetes ...................................................................................................243
 11  Плоскость управления .........................................................................................257
 12  etcd и плоскость управления ..............................................................................272
 13  Безопасность контейнеров и модулей Pod .....................................................296
 14  Безопасность узлов и Kubernetes ......................................................................312
 15  Установка приложений ........................................................................................343
Содержание

Оглавление ............................................................................................................ 6
Предисловие ........................................................................................................ 14
Благодарности .................................................................................................... 15
О книге ................................................................................................................ 17
Об авторах ......................................................................................................... 21
Об иллюстрации на обложке .............................................................................. 23

1 

Почему появился Kubernetes ...................................................... 24

1.1 
Предварительный обзор некоторых основных терминов ................... 25

1.2 
Проблема дрейфа инфраструктуры и Kubernetes ................................ 26

1.3 
Контейнеры и образы ............................................................................ 27
1.4 
Базовая основа Kubernetes ............................................................. 29
1.4.1 
Все инфраструктурные правила в Kubernetes определяются  
 
в обычных файлах YAML ................................................................ 31

1.5 
Возможности Kubernetes........................................................................ 32

1.6 
Компоненты и архитектура Kubernetes ................................................ 34
1.6.1 
Kubernetes API ............................................................................... 35
1.6.2 
Пример первый: интернет-магазин ............................................. 37
1.6.3 
Пример второй: онлайн-решение для благотворительности ........ 37

1.7 
Когда не стоит использовать Kubernetes .............................................. 38

Итоги  ................................................................................................................. 38

2 

Зачем нужны модули Pod? .......................................................... 40

2.1 
Пример веб-приложения ....................................................................... 42
2.1.1 
Инфраструктура нашего веб-приложения .................................... 44
2.1.2 
Эксплуатационные требования .................................................... 45

2.2 
Что такое Pod? ......................................................................................... 46
2.2.1 
Пространства имен в Linux .......................................................... 47
2.2.2 
Kubernetes, инфраструктура и Pod ............................................... 49
2.2.3 
Объект Node ................................................................................. 51
2.2.4 
Наше веб-приложение и плоскость управления ............................. 55

2.3 
Создание веб-приложения с помощью kubectl ......................................56
2.3.1 
Сервер Kubernetes API: kube-apiserver ............................................ 57
2.3.2 
Планировщик Kubernetes: kube-scheduler ....................................... 58
Содержание

2.3.3 
Контроллеры инфраструктуры .................................................... 59

2.4 
Масштабирование, высокодоступные приложения и плоскость  
 
управления .............................................................................................. 63
2.4.1 
Автоматическое масштабирование ............................................. 65
2.4.2 
Управление затратами ................................................................ 66

Итоги  ................................................................................................................. 67

3 

Создание модулей Pod ...................................................................... 68

3.1 
Общий обзор примитивов Kubernetes .................................................. 71

3.2 
Что такое примитивы Linux? ................................................................. 72
3.2.1 
Примитивы Linux – это инструменты управления ресурсами ...... 73
3.2.2 
Все сущее является файлом (или файловым дескриптором) .......... 74
3.2.3 
Файлы можно комбинировать ...................................................... 75
3.2.4 
Настройка kind............................................................................. 76

3.3 
Использование примитивов Linux в Kubernetes .................................. 78
3.3.1 
Предварительные условия для запуска модуля Pod ........................ 78
3.3.2 
Запуск простого модуля Pod .......................................................... 79
3.3.3 
Исследование зависимостей модуля Pod от Linux .......................... 81

3.4 
Создание модуля Pod с нуля .................................................................. 86
3.4.1 
Создание изолированного процесса с помощью chroot .................... 87
3.4.2 
Использование mount для передачи данных процессам ................... 89
3.4.3 
Защита процесса с помощью unshare ............................................ 91
3.4.4 
Создание сетевого пространства имен ........................................ 92
3.4.5 
Проверка работоспособности процесса ........................................ 93
3.4.6 
Ограничение потребления процессора с помощью cgroups ............. 94
3.4.7 
Создание раздела resources ............................................................ 95

3.5 
Использование модуля Pod в реальном мире ...................................... 96
3.5.1 
Проблема сети ............................................................................. 97
3.5.2 
Как kube-proxy реализует сервисы Kubernetes с помощью iptables .... 98
3.5.3 
Использование модуля kube-dns ..................................................... 98
3.5.4 
Другие проблемы ..........................................................................100

Итоги  ................................................................................................................102

4 

Использование контрольных групп  
 
для управления процессами  в модулях Pod ...................103

4.1 
Модули Pod простаивают до завершения подготовительных  
 
операций ................................................................................................104

4.2 
Процессы и потоки в Linux ...................................................................106
4.2.1 
Процессы systemd и init .................................................................108
4.2.2 
Контрольные группы для процессов ..............................................109
4.2.3 
Реализация контрольных групп для обычного модуля Pod .............112

4.3 
Тестирование контрольных групп .......................................................114

4.4 
Как kubelet управляет контрольными группами ................................115

4.5 
Как kubelet управляет ресурсами .........................................................116
4.5.1 
Почему ОС не может использовать подкачку в Kubernetes? ..........117
4.5.2 
Хак: настройка приоритета «для бедных» ...................................118
4.5.3 
Хак: настройка HugePages с помощью контейнеров  
 
инициализации ............................................................................119
4.5.4 
Классы QoS: почему они важны и как они работают ....................120
4.5.5 
Создание классов QoS путем настройки ресурсов ........................121
Содержание

4.6 
Мониторинг ядра Linux с помощью Prometheus, cAdvisor  
 
и сервера API ..........................................................................................122
4.6.1 
Публикация метрик обходится недорого и имеет большую  
 
ценность .....................................................................................124
4.6.2 
Почему Prometheus? .....................................................................125
4.6.3 
Создание локального сервиса мониторинга Prometheus ................126
4.6.4 
Исследование простоев в Prometheus............................................129

Итоги  ................................................................................................................131

5 

Интерфейсы CNI и настройка сети  
 
в модулях Pod .........................................................................................132

5.1 
Зачем нужны программно-определяемые сети в Kubernetes ............134

5.2 
Реализация Kubernetes SDN на стороне сервиса: kube-proxy .............136
5.2.1 
Плоскость данных в kube-proxy ....................................................138
5.2.2 
Подробнее о NodePort ...................................................................140

5.3 
Провайдеры CNI ....................................................................................141

5.4 
Два плагина CNI: Calico и Antrea ..........................................................143
5.4.1 
Архитектура плагинов CNI .........................................................143
5.4.2 
Давайте поэкспериментируем с некоторыми CNI .......................144
5.4.3 
Установка провайдера CNI Calico ................................................146
5.4.4 
Организация сети в Kubernetes с OVS и Antrea ..............................149
5.4.5 
Замечание о провайдерах CNI и kube-proxy в разных ОС ...............152

Итоги  ................................................................................................................153

6 

Устранение проблем в крупномасштабных  
 
сетях .............................................................................................................154

6.1 
Sonobuoy: инструмент подтверждения работоспособности  
 
кластера ..................................................................................................155
6.1.1 
Трассировка движения данных модулей Pod в кластере ................156
6.1.2 
Настройка кластера с CNI-провайдером Antrea ..........................157

6.2 
Исследование особенностей маршрутизации в разных  
 
провайдерах CNI  с помощью команд arp и ip .....................................158
6.2.1 
Что такое IP-туннель и почему его используют провайдеры  
 
CNI? ............................................................................................159
6.2.2 
Сколько пакетов проходит через сетевые интерфейсы CNI?........160
6.2.3 
Маршруты ..................................................................................161
6.2.4 
Инструменты для CNI: Open vSwitch (OVS) ..................................163
6.2.5 
Трассировка движения данных активных контейнеров  
 
с помощью tcpdump ......................................................................164

6.3 
kube-proxy и iptables ..............................................................................166
6.3.1 
iptables-save и diff .........................................................................166
6.3.2 
Как сетевые политики изменяют правила CNI ............................167
6.3.3 
Как реализуются политики? ........................................................170

6.4 
Входные контроллеры ...........................................................................172
6.4.1 
Настройка Contour и кластера kind для изучения входных  
 
контроллеров ..............................................................................173
6.4.2 
Настройка простого модуля Pod с веб-сервером ..........................174

Итоги  ................................................................................................................178
Содержание
7 

Хранилища в модулях Pod и CSI ............................................179

7.1 
Небольшое отступление: виртуальная файловая система (VFS)  
 
в Linux ....................................................................................................181

7.2 
Три вида хранилищ для Kubernetes .....................................................182

7.3 
Создание PVC в кластере kind ...............................................................184

7.4 
Интерфейс контейнерного хранилища (CSI) ......................................188
7.4.1 
Проблема внутреннего провайдера ..............................................189
7.4.2 
CSI как спецификация, работающая внутри Kubernetes ...............191
7.4.3 
CSI: как работает драйвер хранилища ........................................193
7.4.4 
Привязка точек монтирования....................................................193

7.5 
Краткий обзор действующих драйверов CSI .......................................194
7.5.1 
Контроллер .................................................................................194
7.5.2 
Интерфейс узла ...........................................................................195
7.5.3 
CSI в операционных системах, отличных от Linux .......................196

Итоги  ................................................................................................................196

8 

Реализация и моделирование хранилищ .........................198

8.1 
Микрокосм в экосистеме Kubernetes: динамическое хранилище .....199
8.1.1 
Оперативное управление хранилищем: динамическое  
 
выделение ресурсов ......................................................................200
8.1.2 
Локальное хранилище в сравнении с emptyDir ...............................201
8.1.3 
Тома PersistentVolume ..................................................................203
8.1.4 
Интерфейс контейнерного хранилища (CSI) ................................204

8.2 
Динамическая подготовка выигрывает от CSI, но не зависит  
 
от него ....................................................................................................205
8.2.1 
Классы хранилищ (StorageClass) ...................................................206
8.2.2 
Вернемся к центрам обработки данных .......................................207

8.3 
Варианты организации хранилищ в Kubernetes .................................209
8.3.1 
Секреты: эфемерная передача файлов .........................................209

8.4 
Как выглядит типичный провайдер динамического хранилища? ....212

8.5 
hostPath для управления системой и/или доступа к данным ............214
8.5.1 
hostPath, CSI и CNI: канонический вариант использования ...........214
8.5.2 
Cassandra: пример реального хранилища в Kubernetes ..................217
8.5.3 
Дополнительные возможности и модель хранения в Kubernetes....218

8.6 
Дополнительная литература .................................................................219

Итоги  ................................................................................................................220

9 

Запуск модулей Pod: как работает kubelet .................221

9.1 
kubelet и узел .........................................................................................222

9.2 
Основы kubelet.......................................................................................223
9.2.1 
Среда выполнения контейнеров: стандарты и соглашения ..........224
9.2.2 
Конфигурационные параметры и API агента kubelet ....................225

9.3 
Создание модуля Pod и его мониторинг ..............................................228
9.3.1 
Запуск kubelet ..............................................................................229
9.3.2 
После запуска: жизненный цикл узла ............................................230
9.3.3 
Механизм аренды и блокировки в etcd, эволюция аренды узла .......230
9.3.4 
Управление жизненным циклом Pod в kubelet................................231
9.3.5 
CRI, контейнеры и образы: как они связаны .................................233
9.3.6 
kubelet не запускает контейнеры: это делает CRI .......................233
9.3.7 
Приостановленный контейнер: момент истины .........................235
Содержание

9.4 
Интерфейс времени выполнения контейнеров (CRI) .........................235
9.4.1 
Сообщаем Kubernetes, где находится среда выполнения  
 
контейнеров ................................................................................235
9.4.2 
Процедуры CRI .............................................................................236
9.4.3 
Абстракция kubelet вокруг CRI: GenericRuntimeManager ...............236
9.4.4 
Как вызывается CRI? ...................................................................237

9.5. Интерфейсы kubelet ...................................................................................237
9.5.1 
Внутренний интерфейс среды выполнения ...................................237
9.5.2 
Как kubelet извлекает образы: интерфейс ImageService ................239
9.5.3 
Передача ImagePullSecret в kubelet ................................................240

9.6 
Дополнительная литература .................................................................241

Итоги  ................................................................................................................241

10 

DNS в Kubernetes .................................................................................243

10.1 
Краткое введение в DNS (и CoreDNS) ...................................................243
10.1.1 NXDOMAIN, записи A и записи CNAME ........................................244
10.1.2 Модулям Pod нужен внутренний DNS ...........................................246

10.2 
Почему StatefulSet, а не Deployment? ...................................................248
10.2.1 DNS и автономные сервисы .........................................................248
10.2.2 Постоянные записи DNS в StatefulSet ...........................................250
10.2.3 Развертывание с несколькими пространствами имен  
 
для изучения свойств модуля DNS ................................................250

10.3 
Файл resolv.conf .....................................................................................252
10.3.1 Краткое примечание о маршрутизации .......................................252
10.3.2 CoreDNS: вышестоящий сервер имен для ClusterFirst DNS .............254
10.3.3 Разбор конфигурации плагина CoreDNS ........................................255

Итоги  ................................................................................................................256

11 

Плоскость управления ...................................................................257

11.1 
Плоскость управления ..........................................................................258

11.2 
Особенности сервера API ......................................................................259
11.2.1 Объекты API и пользовательские ресурсы ....................................259
11.2.2 Определения пользовательских ресурсов (CRD) ............................261
11.2.3 Планировщик ...............................................................................261
11.2.4 Краткий обзор фреймворка планирования ...................................267

11.3 
Диспетчер контроллеров ......................................................................267
11.3.1 Хранилище ...................................................................................268
11.3.2 Учетные данные сервисов и токены .............................................269

11.4 
Облачные диспетчеры контроллеров Kubernetes (CCM) ....................269

11.5 
Дополнительная литература .................................................................271

Итоги  ................................................................................................................271

12 

etcd и плоскость управления ....................................................272

12.1 
Заметки для нетерпеливых ..................................................................273
12.1.1 Мониторинг производительности etcd с помощью Prometheus .....274
12.1.2 Когда нужно настраивать etcd ....................................................278
12.1.3 Пример: быстрая проверка работоспособности etcd ...................280
12.1.4 etcd v3 и v2 ...................................................................................280

12.2 
etcd как хранилище данных .................................................................281
12.2.1 Можно ли запустить Kubernetes в других базах данных? ..............281