Использовали ли вы Kubernetes в продакшн-среде?

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

Ответ

Да, разворачивал и поддерживал production-окружение на Kubernetes для микросервисной архитектуры.

Мой опыт включает:

  • Развертывание и управление: Создание Deployments, StatefulSets (для stateful-сервисов, например, Kafka), DaemonSets (для агентов мониторинга).
  • Сетевое взаимодействие: Настройка Services (ClusterIP, NodePort, LoadBalancer) для внутреннего и внешнего доступа. Конфигурация Ingress-контроллеров (чаще Nginx) для маршрутизации HTTP/HTTPS трафика.
  • Конфигурация и секреты: Использование ConfigMaps и Secrets для отделения конфигурации от образов контейнеров.
  • Хранение данных: Работа с PersistentVolumeClaims для подключения сетевых хранилищ к подам.
  • Мониторинг и логи: Интеграция стека Prometheus/Grafana для сбора метрик и EFK/ELK (Elasticsearch, Fluentd/Fluent Bit, Kibana) для агрегации логов.

Пример манифеста Deployment для PHP-FPM сервиса:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api-service
  template:
    metadata:
      labels:
        app: api-service
    spec:
      containers:
      - name: php-fpm
        image: my-registry/api-service:latest
        ports:
        - containerPort: 9000
        envFrom:
        - configMapRef:
            name: api-config
        - secretRef:
            name: api-secrets
        resources:
          requests:
            memory: "256Mi"
            cpu: "250m"
          limits:
            memory: "512Mi"
            cpu: "500m"
        livenessProbe:
          tcpSocket:
            port: 9000
          initialDelaySeconds: 30
          periodSeconds: 10

Основные сложности, с которыми сталкивался, — это отладка сетевых проблем, управление обновлениями приложений без downtime (используя стратегии RollingUpdate) и тонкая настройка лимитов ресурсов (resources.limits/requests) для стабильной работы кластера.