Расскажите о вашем опыте работы с Kubernetes. Какие сущности использовали и для каких целей?

Ответ

Да, я активно использовал Kubernetes для оркестрации контейнеризированных приложений. Он является стандартом де-факто для развертывания, масштабирования и управления микросервисами.

Основные сущности и задачи:

  • Pod: Базовая единица развертывания. Обычно я не управляю подами напрямую, а использую более высокоуровневые абстракции.
  • Deployment: Использовал для декларативного описания и управления жизненным циклом stateless-приложений. Обеспечивает репликацию, развертывание и откаты.
  • StatefulSet: Применял для stateful-приложений, таких как базы данных, которым требуется стабильное сетевое имя и постоянное хранилище.
  • Service: Для обеспечения сетевого доступа к подам. Использовал ClusterIP для внутреннего взаимодействия, NodePort для отладки и LoadBalancer для предоставления доступа извне.
  • Ingress: Управлял внешним доступом к сервисам в кластере, обычно для HTTP/HTTPS. Настраивал маршрутизацию на основе хоста или пути.
  • ConfigMap / Secret: Для управления конфигурацией и секретами (пароли, токены) отдельно от кода приложения.
  • PersistentVolume (PV) / PersistentVolumeClaim (PVC): Для организации постоянного хранилища данных для stateful-приложений.
  • Liveness / Readiness Probes: Настраивал пробы для автоматического контроля состояния приложений. Readiness-проба определяет, готово ли приложение принимать трафик, а liveness-проба — нужно ли его перезапускать.

Пример манифеста Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: go-app
  template:
    metadata:
      labels:
        app: go-app
    spec:
      containers:
      - name: go-app-container
        image: my-registry/go-app:1.0.0
        ports:
        - containerPort: 8080
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 10

Инструменты экосистемы:

  • Helm: Использовал для пакетирования и управления приложениями (чарты).
  • Prometheus + Grafana: Настраивал для мониторинга метрик приложений и инфраструктуры.
  • client-go: Применял эту Go-библиотеку для программного взаимодействия с Kubernetes API, например, для написания собственных операторов или контроллеров.