Введение: Склеиваем Kubernetes с помощью Bash
- Предварительные требования
- Почему Bash?
- Что мы строим
- Как организована книга
- Точка входа: setup.sh
- Запуск datacenter.sh
- Практические упражнения
Настройки безопасности, инициализация и хуки жизненного цикла
- Глобальные опции set
- Линтер для shell-скриптов: shellcheck
- Инициализация скрипта
- Главный контроллер
- Обработчик ошибок
- Обработчик выхода
- Собираем всё вместе
- Практические упражнения
Коды выхода и контролируемые выходы
- Функция script_exit
- Соглашения о кодах выхода
- Обзор паттернов безопасности Bash
- Обновлённый скрипт
- Практические упражнения
Режим Cron и перенаправление ввода-вывода
- Что делает режим Cron
- Файловые дескрипторы
- Перенаправление для режима Cron
- Обновление обработчика ошибок
- Обновление обработчика выхода
- Регистрация cron_init в main
- Обновлённый скрипт
- Практические упражнения
Паттерн библиотеки: организация кодовой базы Bash
- Каталог lib/
- Загрузка библиотек в main
- Написание библиотечного файла
- Соглашения об именовании
- Граф зависимостей
- Две полезные библиотеки, которые стоит знать сейчас
- Практические упражнения
Цвета терминала и логирование
- Библиотека логирования
- Инициализация цвета
- Функция log
- verbose_print — Вывод в режиме verbose
- Обновление init
- Обновление main
- Обновление обработчика ошибок
- Практические упражнения
Вспомогательные функции валидации и проверки бинарных файлов
- lib/script.sh
- check_binary — Обнаружение необходимых инструментов
- check_required_binaries — Системные предусловия
- is_kind — Определение режима
- check_arguments — Валидация наличия переменных
- check_directories — Валидация путей
- check_files — Валидация наличия файлов
- check_repos — Защита наличия репозиториев
- build_path — Конструирование PATH
- Использование помощников в цепочке init
- Практические упражнения
Управление конфигурацией
- Конфигурационный файл
- lib/config.sh
- get_configurations — Интерактивная настройка
- Чтение конфигурации в main
- Режимы сети Docker
- Практические упражнения
Блокировка скрипта: предотвращение параллельных запусков
- Почему каталог, а не файл
- lock_init
- Обработка устаревших блокировок
- Практические упражнения
Полный парсинг параметров
- parse_params
- script_usage — Текст справки
- Подключение parse_params к main
- Практические упражнения
Локальный режим и управление кластером Kind
- Почему Kind
- lib/kind.sh
- start_env — Создание кластера Kind
- stop_env — Остановка кластера
- delete_env — Удаление кластера
- Загрузка образов в Kind
- Без переключения окружения Docker
- Практические упражнения
Операции Docker
- lib/docker.sh
- safe_docker — Базовый враппер
- safe_docker_build — Сборка образов
- safe_docker_run — Запуск контейнеров
- Загрузка образов в Kind
- Операции Docker Compose
- docker_cleanup — Удаление мёртвых контейнеров и образов
- Практические упражнения
Kubernetes с kubectl
- lib/kubectl.sh
- safe_kubectl — Базовый враппер
- kubectl_install_resource_from_file
- kubectl_install_database — Настройка PostgreSQL
- kubectl_restart — Плавный перезапуск
- Управление DNS
- Перезапуск всех Deployment
- Практические упражнения
Helm: управление пакетами для Kubernetes
- lib/helm.sh
- safe_helm — Базовый враппер
- Helm-чарты в k8s/
- helm_install_service — Универсальный установщик сервисов
- helm_install_core_service — Сервисы на основе шаблонов
- Установка Config-релизов
- Функции обновления — Обновление на месте
- Traefik — Ingress-контроллер
- Практические упражнения
Сборка сервисов
- Пайплайн сборки
- lib/build.sh
- build_service — Основная функция сборки
- Функции групп сервисов
- build_images_init — Диспетчер сборки
- lib/install_deps.sh
- check_registry
- Практические упражнения
Provisioning с нуля
- Архитектура системы
- Полная последовательность Provisioning
- Пошаговое описание
- Вспомогательные функции
- Параметры кластера Kubernetes
- Справочник манифестов Kubernetes
- Практические упражнения
- Как выглядит успех
Операции перезагрузки и восстановления
- lib/reload_services.sh
- reload_services — Лёгкое обновление сервисов
- reload_services_init — Диспетчер перезагрузки
- lib/reload_kubernetes.sh
- reload_all_kubernetes — Полная перестройка кластера
- Практические упражнения
Демонтаж и очистка
- Остановка среды
- Удаление среды
- Полный демонтаж Kubernetes
- Очистка Docker
- Обработчик выхода: полная версия
- Собираем полный скрипт вместе
- Полная функция main()
- Полная функция init
- Полный жизненный цикл
- Опыт разработчика, который вы построили
- Практические упражнения
GitOps с ArgoCD
- lib/argocd.sh
- safe_argocd — Базовая обёртка
- helm_install_argocd — Установка контроллера
- argocd_wait_ready — Подтверждение запуска
- argocd_login — Аутентификация CLI
- argocd_create_app — Регистрация приложения
- argocd_sync — Запуск синхронизации
- argocd_wait_healthy — Ожидание завершения синхронизации
- argocd_delete_app — Удаление приложения
- Интеграция ArgoCD в datacenter.sh
- Замечание об OpenShift
- Практические упражнения
Метрики и дашборды с Prometheus и Grafana
- lib/monitoring.sh
- helm_install_monitoring — Полный стек
- monitoring_wait_ready — Подтверждение запуска
- monitoring_port_forward — Локальный доступ
- monitoring_apply_servicemonitor — Сбор метрик с ваших сервисов
- monitoring_get_grafana_password — Получение учётных данных
- Интеграция мониторинга в datacenter.sh
- Что даёт kube-prometheus-stack
- Практические упражнения
Распределённая трассировка с OpenTelemetry
- lib/otel.sh
- safe_otel — Базовая обёртка
- helm_install_otel_operator — Установка оператора
- otel_wait_ready — Подтверждение, что оператор запущен
- otel_apply_collector — Развёртывание collector
- otel_apply_instrumentation — Автоинструментация без изменения кода
- otel_wait_collector_ready — Подтверждение collector
- Grafana Tempo — Бэкенд трейсов
- Интеграция OTel в datacenter.sh
- Связь трейсов, метрик и логов
- Практические упражнения
Приложение: Справочник команд datacenter.sh
- setup.sh
- datacenter.sh
- Коды выхода
- Цепочечные и нецепочечные параметры
- Типичные рабочие процессы
- Устранение неполадок