Работали ли вы с оркестрацией в Kubernetes?

«Работали ли вы с оркестрацией в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, Kubernetes — основной инструмент оркестрации в моей практике. Работал как с managed-сервисами (EKS, GKE, AKS), так и с self-hosted кластерами, развернутыми через kubeadm или RKE.

Ключевые направления работы:

  • Жизненный цикл кластера: Развертывание, обновление, масштабирование и устранение неисправностей.
  • Безопасность и управление доступом: Глубокая настройка RBAC, Pod Security Policies (или их замен), Network Policies (Calico, Cilium) для сегментации трафика.
  • Управление приложениями: Использование Helm для пакетирования и деплоя. Реализация стратегий GitOps с помощью ArgoCD для декларативного управления состоянием кластера.
  • Наблюдаемость: Внедрение стека мониторинга на основе Prometheus (часто через prometheus-operator) и Grafana для сбора метрик кластера и приложений. Настройка логирования через Loki или EFK-стек.

Пример: Манифест Deployment с учетом лучших практик — лимиты ресурсов, пробы жизнеспособности и готовности, anti-affinity:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-deployment
  labels:
    app: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: api
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - api
              topologyKey: kubernetes.io/hostname
      containers:
      - name: api
        image: my-registry/api:v1.2.3
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: "128Mi"
            cpu: "100m"
          limits:
            memory: "256Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 5

Также настраивал HorizontalPodAutoscaler, Ingress-контроллеры (Nginx, Traefik) и StatefulSets для stateful-приложений (например, базы данных).