логотип PurpleSchool
логотип PurpleSchool

Гайд по 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 интерфейсы, что делает их освоение и интеграцию доступными как для начинающих, так и для опытных инженеров.


Частозадаваемые технические вопросы по теме статьи и ответы

  1. Как работать с приватными 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

    ```

  2. Как автоматизировать ротацию 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 с аннотациями, чтобы вручную ничего не продлевать.

  3. Что если Helm chart требует переменных, которых нет в values.yaml по-умолчанию?

    Укажите их явно при установке: helm install my-release ./my-chart --set key1=value1,key2=value2 Или добавьте в свой values-production.yaml и примените с -f values-production.yaml.

  4. Как контролировать версии Kubernetes ресурсов и Helm в CI?

    Всегда используйте фиксированные версии Helm charts в CI/CD и явно указывайте apiVersion в манифестах. Для Helm: helm dependency update helm install my-app ./my-app --version 1.2.3

  5. Как отлаживать новый CRD контроллер в Kubernetes?

    Добавьте ресурсы с аннотацией kubectl.kubernetes.io/last-applied-configuration и используйте логи pod контроллера: kubectl logs -n your-namespace deployment/your-controller Для диагностики событий используйте kubectl describe <ресурс> — так увидите ошибки и жатые события для CRD.

Стрелочка влевоИнтеграция Kubernetes с GitLab - Автоматизация CI CD в облачной инфраструктуреОсобенности платформы Deckhouse в KubernetesСтрелочка вправо

Постройте личный план изучения Kubernetes до уровня Middle — бесплатно!

Kubernetes — часть карты развития DevOps

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по Kubernetes

Terraform и Kubernetes инфраструктура как кодНастройка и использование Runners в KubernetesНастройка и деплой PostgreSQL в KubernetesСравнение и интеграция Openshift и KubernetesПримеры интеграции GitHub Actions и KubernetesDeploy приложений в Kubernetes - пошаговое руководство для начинающих и не толькоКак настроить CD в KubernetesИнтеграция Ansible в KubernetesИнтеграция CI/CD с Jenkins и KubernetesИнтеграция Kubernetes с GitLab - Автоматизация CI CD в облачной инфраструктуреГайд по DevOps инструментам в KubernetesОсобенности платформы Deckhouse в Kubernetes
Открыть базу знаний

Лучшие курсы по теме

изображение курса

Kubernetes и Helm

Антон Ларичев
AI-тренажеры
Гарантия
Бонусы
иконка звёздочки рейтинга4.9
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Docker и Ansible

Антон Ларичев
AI-тренажеры
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Микросервисы

Антон Ларичев
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий