# Полное руководство по работе с Kubernetes кластерами Автор: Сергей Антропов Сайт: https://devops.org.ru ## Содержание - [Введение](#введение) - [Создание кластера](#создание-кластера) - [Управление кластером](#управление-кластером) - [Работа с манифестами](#работа-с-манифестами) - [Работа с Helm](#работа-с-helm) - [Настройка Ingress](#настройка-ingress) - [Мониторинг и аддоны](#мониторинг-и-аддоны) - [Service Mesh с Istio](#service-mesh-с-istio) - [Примеры полных развертываний](#примеры-полных-развертываний) ## Введение AnsibleLab предоставляет полную поддержку создания и управления локальными Kubernetes кластерами на основе Kind (Kubernetes in Docker). Kind позволяет запускать Kubernetes кластеры внутри Docker контейнеров, что идеально подходит для разработки, тестирования и обучения. ### Основные возможности - Создание многоузловых Kubernetes кластеров - Установка и управление Helm чартами - Работа с манифестами YAML - Настройка Ingress контроллеров - Установка систем мониторинга (Prometheus, Grafana) - Развертывание Service Mesh (Istio, Kiali) - Изоляция сети и безопасность ### Преимущества - Не требует установки локального Kubernetes - Быстрое создание и удаление кластеров - Поддержка многоузловых конфигураций - Полная совместимость с production окружениями - Контейнеризация всех инструментов ## Создание кластера ### Базовое создание Простое создание минимального кластера без дополнительных компонентов: ```bash make k8s create ``` Создаст кластер с пресетом `k8s-minimal` - один control-plane узел без дополнительных компонентов. ### Создание полнофункционального кластера Создание кластера с предустановленными компонентами: ```bash make k8s create kubernetes ``` Этот пресет создает кластер со следующими компонентами: - 1 control-plane узел - 2 worker узла - Ingress NGINX Controller - Metrics Server - Istio Service Mesh - Kiali для визуализации Istio - Prometheus Stack (Prometheus + Grafana) ### Конфигурация пресета Пресеты находятся в `molecule/presets/k8s/`. Пример конфигурации: ```yaml kind_clusters: - name: lab workers: 2 api_port: 6443 addons: ingress_nginx: true metrics_server: true istio: true kiali: true prometheus_stack: true ingress_host_http_port: 8081 ingress_host_https_port: 8443 addon_ports: prometheus: 9090 grafana: 3000 kiali: 20001 ``` ### Проверка статуса кластера ```bash # Показать узлы кластера make k8s nodes kubernetes # Вывод: # NAME STATUS ROLES AGE VERSION # lab-control-plane Ready control-plane 5m v1.34.0 # lab-worker Ready 4m v1.34.0 # lab-worker2 Ready 4m v1.34.0 # Показать подробный статус make k8s status kubernetes ``` ### Подключение к кластеру ```bash # Получить kubeconfig make k8s config kubernetes # Использовать kubeconfig export KUBECONFIG=$(pwd)/kubeconfig kubectl get nodes ``` ## Управление кластером ### Остановка и запуск ```bash # Остановить кластер (без удаления) make k8s stop kubernetes # Запустить остановленный кластер make k8s start kubernetes # Перезапустить кластер make k8s stop kubernetes && make k8s start kubernetes ``` ### Удаление кластера ```bash # Полное удаление кластера и контейнера make k8s destroy kubernetes ``` ### Получение shell в контейнере ```bash # Открыть интерактивный shell make k8s shell kubernetes # Теперь доступны все команды kubectl, helm, kind внутри контейнера kubectl get nodes helm list kind get clusters ``` ## Работа с манифестами ### Применение манифеста Применение манифеста из URL: ```bash make k8s manifest apply kubernetes https://example.com/deploy.yaml ``` Применение локального манифеста: ```bash # Создайте файл example-deployment.yaml cat > example-deployment.yaml < wordpress.yaml < app.yaml < # Просмотр логов с follow kubectl --kubeconfig kubeconfig logs -f # Выполнить команду в поде kubectl --kubeconfig kubeconfig exec -it -- /bin/sh # Описание ресурса kubectl --kubeconfig kubeconfig describe pod kubectl --kubeconfig kubeconfig describe service ``` ### Масштабирование ```bash # Масштабировать Deployment kubectl --kubeconfig kubeconfig scale deployment --replicas=5 # Автомасштабирование (требует metrics-server) kubectl --kubeconfig kubeconfig autoscale deployment \ --cpu-percent=70 --min=2 --max=10 ``` ### Экспорт конфигурации ```bash # Экспортировать ресурс в YAML kubectl --kubeconfig kubeconfig get deployment -o yaml > exported.yaml # Экспортировать все ресурсы namespace kubectl --kubeconfig kubeconfig get all -n -o yaml > all-resources.yaml ``` ## Безопасность ### Использование Secrets ```bash # Создать Secret из файла kubectl --kubeconfig kubeconfig create secret generic my-secret \ --from-file=username=./username.txt \ --from-file=password=./password.txt # Создать Secret из литерала kubectl --kubeconfig kubeconfig create secret generic my-secret \ --from-literal=username=admin \ --from-literal=password=secret123 ``` ### Network Policies Создайте файл `network-policy.yaml`: ```yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: matchLabels: role: db policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: role: api ports: - protocol: TCP port: 5432 egress: - to: - podSelector: matchLabels: role: api ports: - protocol: TCP port: 5432 ``` Примените: ```bash make k8s manifest apply kubernetes ./network-policy.yaml ``` ## Заключение AnsibleLab предоставляет полный набор инструментов для работы с Kubernetes кластерами локально. Вы можете: - Создавать и управлять кластерами - Устанавливать и настраивать приложения - Работать с мониторингом и Service Mesh - Тестировать перед развертыванием в production Все инструменты работают внутри Docker контейнеров, что обеспечивает изоляцию и переносимость. ## Автор Сергей Антропов Сайт: https://devops.org.ru