Олег Марков
Гайд по DevOps инструментам в Kubernetes
Введение
Kubernetes стал стандартом для управления контейнерами в современной разработке. Однако чтобы получать настоящие преимущества от Kubernetes, важно выстроить грамотные DevOps процессы: автоматизировать развертывание, мониторинг, масштабирование, хранение секретов и многое другое. В этой статье я расскажу, какие DevOps инструменты чаще всего используют вместе с Kubernetes и покажу на примерах, как их применять в реальной работе.
Я расскажу о типовых задачах, которые решают DevOps-инструменты в Kubernetes, покажу основные команды, приведу рабочие примеры манифестов и дам объяснения к каждому шагу. Вы узнаете, как использовать Helm для управления релизами, ArgoCD и Flux для GitOps, Prometheus и Grafana для мониторинга, а также познакомитесь с другими важными решениями. Давайте разберёмся, как все это интегрировано в единую DevOps экосистему.
Основные DevOps задачи в Kubernetes
Перед тем как перейти к обзору инструментов, кратко остановимся на ключевых процессах DevOps, которые обычно автоматизируют в кластере Kubernetes:
- CI/CD — автоматизация сборки, тестирования, выката приложения.
- Мониторинг и алертинг — контроль метрик и автоматическое оповещение об ошибках и отклонениях.
- Управление релизами (release management) — унифицированный и предсказуемый деплой новых версий.
- Управление секретами и конфигурациями — безопасное хранение, шифрование и ротация данных.
- Автоматизация тестирования/бэкапов — регулярное тестирование и сохранение данных без ручного вмешательства.
Теперь подробно рассмотрим инструменты, которые помогут вам автоматизировать эти задачи в Kubernetes.
Helm — управление пакетами и релизами
Helm — это менеджер пакетов для Kubernetes. Он позволяет повторно использовать шаблоны манифестов с параметрами (charts), управлять установкой, обновлением и удалением комплексов ресурсов.
Установка и настройка Helm
Установите Helm согласно официальной документации. На Linux это делается так:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Проверьте, что Helm установлен:
helm version
Создание и деплой Helm-чарта
Давайте создадим простой Helm chart для тестового приложения и посмотрим, как это работает:
helm create my-app
В папке my-app
появятся шаблоны манифестов. Для деплоя в Kubernetes используйте:
helm install my-app ./my-app
Для обновления приложения:
# Внесите изменения в шаблоны и примените update
helm upgrade my-app ./my-app
Удалить релиз:
helm uninstall my-app
Примеры helm values
В файле values.yaml
можно указать переменные:
replicaCount: 2
image:
repository: nginx
tag: "1.24"
Это удобно для смены окружений или параметров без переписывания манифестов.
ArgoCD и Flux — GitOps для Kubernetes
GitOps — подход, при котором конфигурации продакшн окружения хранятся в git-репозитории и любое изменение проходит через pull request. Основные инструменты: ArgoCD и Flux.
ArgoCD: Автоматизация деплоймента через git
ArgoCD автоматически синхронизирует состояние кластера с git-репозиторием, в котором лежат ваши Kubernetes-манифесты или Helm charts.
Установка ArgoCD
Можно развернуть через kubectl:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Далее получите пароль для доступа в UI:
# Имя пользователя обычно admin, пароль (инициальный) — хэш argocd-server под именем admin
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
Описание приложения в ArgoCD
Создайте приложение для ArgoCD через CRD:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-nginx
namespace: argocd
spec:
destination:
namespace: default
server: https://kubernetes.default.svc
project: default
source:
repoURL: https://github.com/username/my-nginx-app
targetRevision: HEAD
path: deploy
syncPolicy:
automated: {} # Автосинхронизация
ArgoCD будет поддерживать кластер в актуальном состоянии — пристально следите за логами и статусов приложений.
Flux: Альтернатива ArgoCD
Flux — тоже инструмент для GitOps. Отличается глубиной интеграции с Kubernetes, поддержкой Helm-чартов, набором специальных контроллеров.
Установка Flux
Быстрый запуск на кластер:
curl -s https://toolkit.fluxcd.io/install.sh | sudo bash
flux bootstrap github \
--owner=your-github-username \
--repository=your-repo \
--branch=main \
--path=clusters/my-cluster
Далее можно описывать ресурсы в git и flux будет следить за ними.
Jenkins и GitLab CI — CI/CD под Kubernetes
Для автоматизации пайплайнов в Kubernetes используют Jenkins, GitLab CI, Tekton CI и другие.
Jenkins
Jenkins можно запускать как pod с помощью Helm:
helm repo add jenkins https://charts.jenkins.io
helm repo update
helm install jenkins jenkins/jenkins
Jenkinsfile для CD пайплайна в Kubernetes может выглядеть так:
pipeline {
agent any
stages {
stage('Build') {
steps {
// Сборка Docker-образа
sh 'docker build -t registry.example.com/app:$GIT_COMMIT .'
}
}
stage('Push') {
steps {
// Пушим образ в реестр
sh 'docker push registry.example.com/app:$GIT_COMMIT'
}
}
stage('Deploy') {
steps {
// Деплой в кластер через kubectl
sh 'kubectl set image deployment/my-app app=registry.example.com/app:$GIT_COMMIT -n default'
}
}
}
}
GitLab CI
Для подстановки Kubernetes используйте раздел jobs и интеграцию через .gitlab-ci.yml
:
stages:
- build
- push
- deploy
build:
stage: build
script:
- docker build -t registry.example.com/app:$CI_COMMIT_SHA .
push:
stage: push
script:
- docker push registry.example.com/app:$CI_COMMIT_SHA
deploy:
stage: deploy
script:
# Обновить деплоймент в Kubernetes
- kubectl set image deployment/my-app app=registry.example.com/app:$CI_COMMIT_SHA -n default
Не забудьте настроить переменные окружения и Service Account для доступа к Kubernetes API.
Prometheus и Grafana — мониторинг кластера
Prometheus и Grafana — фактический стандарт мониторинга Kubernetes. Prometheus собирает метрики, Grafana отображает их в виде дашбордов.
Установка Prometheus и Grafana через Helm
Добавим репозитории:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add grafana https://grafana.github.io/helm-charts
Устанавливаем стек мониторинга:
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring --create-namespace
Grafana устанавливается вместе с этим стеком.
Доступ к Grafana
kubectl get secret --namespace monitoring prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 --decode
# Получаете пароль для пользователя admin
kubectl port-forward svc/prometheus-grafana 3000:80 -n monitoring
После этого заходите на http://localhost:3000.
Добавление графиков
В Grafana уже есть дашборды для kubernetes, но вы можете добавить свои, настроить оповещения и построить любые графики по метрикам Prometheus.
Kustomize — кастомизация манифестов
Если вам нужно управлять разными параметрами для разных окружений (prod, staging) и не хочется использовать Helm, удобен будет Kustomize — инструмент для модификации и сборки manifests "на лету".
Пример использования Kustomize
Директория:
.
├── base
│ └── deployment.yaml
│ └── kustomization.yaml
└── overlays
├── prod
│ └── kustomization.yaml
└── staging
└── kustomization.yaml
В overlays/prod/kustomization.yaml:
bases:
- ../../base
patchesStrategicMerge:
- deployment-patch.yaml
Kustomize применяет overlay к базовому manifest-у.
Применить изменения можно:
kubectl apply -k overlays/prod
Hashicorp Vault, Sealed Secrets — управление секретами
Kubernetes по умолчанию хранит секреты как base64-encoded строки, что не защищает данные. Для более безопасной работы используют HashiCorp Vault (для хранения секретов вне кластера) и Sealed Secrets от Bitnami (для безопасного хранения секретов в git).
Sealed Secrets
Sealed Secrets криптует ваш секрет публичным ключом контроллера:
kubectl create secret generic mysecret --from-literal=password=123456 --dry-run=client -o yaml > mysecret.yaml
kubeseal < mysecret.yaml > mysealedsecret.yaml
kubectl apply -f mysealedsecret.yaml
Контроллер Sealed Secrets автоматически расшифрует секрет и создаст его в кластере.
Автоматизация очистки через Garbage Collection
DevOps инженер часто сталкивается с тем, что ресурсы в Kubernetes "заводят" неконтролируемый рост. Здесь поможет Garbage Collection через метки и ownerReferences (см. документацию kubernetes).
Пример: автоматическое удаление завершённых подов:
kubectl get pods --field-selector=status.phase=Succeeded,metadata.namespace=default -o name | xargs kubectl delete
Интеграция и расширяемость
Обратите внимание, что Kubernetes хорошо интегрируется с другими DevOps инструментами через API.
- External DNS — автоматическое обновление DNS записей для сервисов.
- cert-manager — автоматизация TLS сертификатов.
- Crossplane — создание cloud ресурсов через Kubernetes манифесты.
- Velero — создание резервных копий ресурсов и PVC.
- Kubecost — контроль затрат на инфраструктуру.
Интеграция чаще всего делается через CRD (Custom Resource Definitions) — новые типы ресурсов, которые расширяют стандартные возможности Kubernetes.
Заключение
В современных инфраструктурах Kubernetes становится центром DevOps процессов. Освоив такие инструменты, как Helm, ArgoCD, Prometheus, Kustomize и решения для безопасности, вы сможете строить максимально автоматизированные, контролируемые и удобные пайплайны деплоймента и поддержки сервисов. Большая часть инструментов предоставляют простые CLI или CRD интерфейсы, что делает их освоение и интеграцию доступными как для начинающих, так и для опытных инженеров.
Частозадаваемые технические вопросы по теме статьи и ответы
Как работать с приватными Docker registry из Kubernetes?
Чтобы pod мог тянуть образы из приватного Docker registry, создайте secret типа
docker-registry
:kubectl create secret docker-registry regcred \ --docker-server=YOUR_REGISTRY \ --docker-username=USER \ --docker-password=PASSWORD \ --docker-email=EMAIL
Затем подключите его к вашему deployment: ```yaml spec: template: spec: imagePullSecrets:- name: regcred
```
Как автоматизировать ротацию TLS сертификатов в ingress?
Используйте cert-manager. Установите:
helm repo add jetstack https://charts.jetstack.io helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set installCRDs=true
Далее настройте ClusterIssuer и Ingress с аннотациями, чтобы вручную ничего не продлевать.Что если Helm chart требует переменных, которых нет в values.yaml по-умолчанию?
Укажите их явно при установке:
helm install my-release ./my-chart --set key1=value1,key2=value2
Или добавьте в свой values-production.yaml и примените с-f values-production.yaml
.Как контролировать версии Kubernetes ресурсов и Helm в CI?
Всегда используйте фиксированные версии Helm charts в CI/CD и явно указывайте apiVersion в манифестах. Для Helm:
helm dependency update helm install my-app ./my-app --version 1.2.3
Как отлаживать новый CRD контроллер в Kubernetes?
Добавьте ресурсы с аннотацией
kubectl.kubernetes.io/last-applied-configuration
и используйте логи pod контроллера:kubectl logs -n your-namespace deployment/your-controller
Для диагностики событий используйтеkubectl describe <ресурс>
— так увидите ошибки и жатые события для CRD.
Постройте личный план изучения Kubernetes до уровня Middle — бесплатно!
Kubernetes — часть карты развития DevOps
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Kubernetes
Лучшие курсы по теме

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