Алексей Романов
Управление и мониторинг Kubernetes
Введение
Kubernetes стал стандартом де-факто для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Однако развертывание приложения — это только начало истории. По-настоящему эффективная эксплуатация начинается после запуска, когда критично видеть состояние компонентов, быстро реагировать на сбои и управлять ресурсами кластера.
В этой статье вы узнаете, зачем нужен мониторинг в Kubernetes, какие средства предоставляет система для управления, как отслеживать метрики, события и логи, а также познакомитесь с основными инструментами, которые помогают удерживать кластер под контролем. Рассмотрим примеры настройки и практики, которые позволят максимально эффективно управлять инфраструктурой.
Обзор управления и мониторинга в Kubernetes
Kubernetes предоставляет множество встроенных механизмов для управления кластером и следит за его состоянием автоматически. Но чтобы обеспечить отказоустойчивость и производительность, часто требуется интеграция с внешними инструментами мониторинга.
Почему важно управлять и мониторить кластер Kubernetes
- Своевременное обнаружение проблем — можно предотвратить деградацию сервиса, отследив падение подов или рост нагрузки.
- Автоматизация восстановления — Kubernetes умеет перезапускать контейнеры, но мониторинг помогает узнать причину проблем.
- Продуктивное использование ресурсов — контроль над метриками позволяет выявлять узкие места и оптимизировать расходы.
- Безопасность и соответствие стандартам — правильное ведение журналов, аудит и мониторинг событий критичны для соблюдения требований.
Kubernetes по умолчанию отслеживает состояние подов, нод и сервисов, но за сбор детальных метрик и удобную визуализацию отвечают внешние инструменты, такие как Prometheus, Grafana и другие.
Встроенные инструменты мониторинга и управления в Kubernetes
Kubernetes оснащён разнообразными средствами для получения информации о состоянии кластера и его ресурсов.
Стандартизированные объекты и команды управления
Система управляется через объекты, описываемые в YAML/JSON, и команды kubectl.
Пример просмотра состояния подов
kubectl get pods -n my-namespace
Здесь отображается список подов в указанном пространстве имен.
Получение информации о нодах
kubectl get nodes
kubectl describe node worker-1
Команды показывают список нод и подробную информацию по конкретной ноде.
События кластера
kubectl get events -n my-namespace
Вы видите, что команда выводит недавние события, которые подсказывают, что изменилось в кластере (перезапуски, сбои, scheduling).
Логи подов
Логи помогают понять, что происходит внутри контейнера.
kubectl logs my-pod -n my-namespace
Здесь мы выводим стандартный вывод приложения, запущенного в поде.
Использование Health checks
Kubernetes позволяет настраивать liveness и readiness probes, с помощью которых система автоматически выявляет и устраняет проблемные поды.
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 15
timeoutSeconds: 2
Этот блок конфигурации проверяет работоспособность приложения по HTTP каждые несколько секунд.
Интеграция с системой мониторинга: Prometheus и Grafana
Хотя kubectl предоставляет много информации, для долгосрочного хранения метрик, построения алертов и визуализации нужны специализированные инструменты.
Prometheus: Сбор метрик
Prometheus — популярная система для сбора и хранения временных рядов метрик, легко интегрируется с Kubernetes.
Установка Prometheus с помощью Helm
Helm — инструмент управления пакетами для Kubernetes. Давайте поставим Prometheus:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack
Эти команды добавляют репозиторий Helm и устанавливают Prometheus вместе с поддерживающими компонентами.
Что мониторит Prometheus
Prometheus, запущенный в кластере, отслеживает:
- Загруженность CPU, RAM, диска на нодах
- Состояние подов и контейнеров
- Количество запросов и ошибки в приложениях (если есть экспортеры)
- Внутренние метрики компонентов Kubernetes (apiserver, scheduler и т.д.)
Экспортеры метрик
Экспортер — компонент, который собирает метрики с определённого сервиса и представляет их в формате, понятном Prometheus.
- Node Exporter — состояние виртуальных/физических серверов
- Kube-State-Metrics — состояние объектов Kubernetes
- Custom Exporter — для сбора бизнес-метрик ваших приложений
Пример: Получение метрик подов
После установки kube-prometheus-stack, метрики становятся доступны по HTTP-эндпоинтам, например:
http://prometheus-operated.monitoring.svc:9090/metrics
Настройка алертов
Алерты настраиваются в виде Alertmanager правил. Давайте посмотрим на пример:
groups:
- name: pod-alerts
rules:
- alert: PodCrashLooping
expr: kube_pod_container_status_restarts_total > 3
for: 5m
labels:
severity: "critical"
annotations:
summary: "Падение контейнера более 3 раз"
Здесь задается правило, при котором возникает алерт, если контейнер за последние 5 минут перезапустился больше трех раз.
Grafana: Визуализация данных
Grafana используется для построения дашбордов на основе прометеусовских метрик.
Быстрый старт Grafana
Grafana разворачивается в том же kube-prometheus-stack:
kubectl get pods -n monitoring
kubectl port-forward svc/prometheus-grafana 3000:80 -n monitoring
Теперь зайдите на http://localhost:3000, используйте логин/пароль admin/admin по умолчанию.
Использование дашбордов
В Grafana множество готовых дашбордов для Kubernetes, воспользуйтесь поиском на https://grafana.com/grafana/dashboards/. Их можно импортировать на лету.
Дополнительные методы мониторинга и управление конфигурациями
Мониторинг логов: EFK/ELK стэк
- Elasticsearch для хранения логов
- Fluentd/Fluent Bit для сбора и передачи
- Kibana для визуализации
Пример сбора логов
В каждой Pod можно поднимать Fluent Bit как sidecar контейнер, который пересылает логи в Elasticsearch. Подключение Kibana позволит визуализировать логи и искать ошибки или несанкционированные доступы.
Инструменты для аудита и обнаружения проблем
- kubectl Top для получения текущей загрузки по CPU и памяти:
bash kubectl top pods -n my-namespace
- Kubeaudit, kube-bench — анализ конфигураций на соответствие best-practices и стандартам безопасности.
Управление конфигурациями через GitOps
GitOps позволяет управлять всей конфигурацией кластера через git-репозитории. Популярные решения — ArgoCD и Flux.
Пример: развёртывание приложения через ArgoCD
- Установите ArgoCD:
bash kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
- Добавьте в ArgoCD репозиторий с манифестами:
bash argocd repo add https://github.com/example/my-k8s-apps.git --username myuser --password mypass
- Создайте приложение:
bash argocd app create my-app \ --repo https://github.com/example/my-k8s-apps.git \ --path myapp \ --dest-server https://kubernetes.default.svc \ --dest-namespace default
Теперь все изменения в репозитории будут автоматически применяться в кластер.
Управление ресурсами и автоматизация
Horisontal Pod Autoscaler (HPA)
Автоматически масштабирует число подов в зависимости от метрик нагрузки.
Пример настройки HPA
kubectl autoscale deployment myapp --cpu-percent=80 --min=2 --max=10
Теперь если нагрузка по CPU превысит 80%, количество подов вырастет до 10.
NetworkPolicy и RBAC
Ограничивайте сетевое взаимодействие и доступы между сервисами, используя NetworkPolicy и RBAC.
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: allow-http
spec:
podSelector:
matchLabels:
role: frontend
ingress:
- from:
- podSelector:
matchLabels:
role: backend
ports:
- protocol: TCP
port: 80
Этот пример разрешает входящий трафик на порту 80 только от подов с ролью backend.
Использование операторов для расширенного управления
Kubernetes Operator — это способ автоматизации управления сложными приложениями.
- Они позволяют автоматизировать рутинные задачи (бэкапы, масштабирование, обновление)
- Популярные операторы: для PostgreSQL, Redis, Kafka и других систем
Пример: установка и использование оператора
kubectl apply -f https://operatorhub.io/install/postgresql-operator.yaml
После установки оператор будет автоматически мониторить состояние БД и реагировать на сбои.
Заключение
Мониторинг и управление в Kubernetes — это связанная область, обеспечивающая стабильность, доступность и эффективность кластера. Система предоставляет базовые возможности, но чтобы оперативно выявлять и устранять проблемы, настраивайте сбор метрик, анализ логов, аудит и автоматизацию через внешние инструменты: Prometheus, Grafana, EFK/ELK, ArgoCD или Flux. Задумывайтесь о безопасности через RBAC и NetworkPolicy, используйте операторов для управления сложными сервисами. Эти практики жизненно необходимы для эксплуатации сервисов в production среде, когда даже небольшая ошибка может дорого обойтись.
Частозадаваемые технические вопросы по теме и ответы на них
Как быстро собрать метрики только с определённого пространства имён?
Используйте kubectl и Prometheus-Query:
kubectl top pods -n <namespace>
В Prometheus используйте фильтр label:
sum(rate(container_cpu_usage_seconds_total{namespace="my-namespace"}[5m]))
Как отфильтровать логи для конкретного пода и времени?
Через kubectl:
kubectl logs my-pod --since=10m
Покажет только логи за последние 10 минут.
Что делать, если Prometheus быстро заполняет диск?
- Очистите старые метрики в Prometheus: уменьшите retention
- Настройте retention, например:
yaml --storage.tsdb.retention.time=7d
- Используйте remote storage для холодных данных
Как добавить собственные бизнес-метрики в Prometheus?
- Импортируйте клиентскую библиотеку (Go, Python, etc.).
- Реализуйте endpoint
/metrics
в приложении. - Зарегистрируйте endpoint как target в values.yaml Helm чарта Prometheus.
Как мониторить внутренние сервисы, доступные только внутри кластера Kubernetes?
- Настройте Prometheus ServiceMonitor с правильной label-селекцией
- Либо используйте kubectl port-forward для доступа извне
- Убедитесь, что сервисы имеют ClusterIP и доступны из namespace, где работает Prometheus
Постройте личный план изучения Kubernetes до уровня Middle — бесплатно!
Kubernetes — часть карты развития DevOps
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Kubernetes
Лучшие курсы по теме

Kubernetes и Helm
Антон Ларичев
Docker и Ansible
Антон Ларичев