Kubernetes изнутри
Покупка
Издательство:
ДМК Пресс
Перевод:
Киселев Артём Николаевич
Год издания: 2023
Кол-во страниц: 378
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Профессиональное образование
ISBN: 978-5-93700-153-5
Артикул: 817228.01.99
В этой книге подробно рассказывается о настройке и управлении платформой Kubernetes, а также о том, как быстро и эффективно устранять неполадки. Исследуется внутреннее устройство Kubernetes — от управления iptables до настройки динамически масштабируемых кластеров, реагирующих на изменение нагрузки. Советы профессионалов помогут вам поддерживать работоспособность ваших приложений. Особое внимание уделяется теме безопасности.
Книга адресована разработчикам и администраторам Kubernetes со средним уровнем подготовки.
- Полная коллекция по информатике и вычислительной технике
- DevOps
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Локальные компьютерные сети. Программное обеспечение локальных сетей. ОС
- Системное и сетевое администрирование
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 02.03.02: Фундаментальная информатика и информационные технологии
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Джей Вьяс Крис Лав 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