Что такое Kubernetes (K8s) и его основные концепции?

«Что такое Kubernetes (K8s) и его основные концепции?» — вопрос из категории CI/CD и DevOps, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Kubernetes (K8s) — это платформа с открытым исходным кодом для оркестрации контейнеризированных приложений. Она автоматизирует развертывание, масштабирование и управление контейнерами (чаще всего Docker), обеспечивая отказоустойчивость и эффективное использование ресурсов.

Основные абстракции (концепции):

  1. Pod: Наименьшая и самая простая единица в Kubernetes. Это «обертка» для одного или нескольких контейнеров, которые разделяют сеть и хранилище. Контейнеры в одном Pod развертываются вместе на одном узле.
  2. Deployment: Объявляет желаемое состояние для Pod'ов (какой образ использовать, сколько реплик). Управляет обновлениями (rolling updates) и откатами (rollbacks).
  3. Service: Абстракция, которая определяет логический набор Pod'ов и политику доступа к ним (например, балансировку нагрузки). Дает стабильный IP-адрес и DNS-имя, даже если Pod'ы пересоздаются.
  4. Node (Worker Node): Виртуальная или физическая машина, на которой работают Pod'ы.
  5. ConfigMap & Secret: Объекты для хранения конфигурации и чувствительных данных (пароли, токены) отдельно от образа приложения.

Пример манифеста Deployment для веб-приложения:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend-deployment
spec:
  replicas: 3  # Желаемое количество идентичных копий Pod
  selector:
    matchLabels:
      app: frontend
  template:    # Шаблон для создания Pod'ов
    metadata:
      labels:
        app: frontend
    spec:
      containers:
      - name: nginx-container
        image: nginx:1.21-alpine
        ports:
        - containerPort: 80
        env:
        - name: ENV_VAR
          valueFrom:
            configMapKeyRef:
              name: app-config
              key: environment
---
apiVersion: v1
kind: Service
metadata:
  name: frontend-service
spec:
  selector:
    app: frontend  # Находит все Pod'ы с этим лейблом
  ports:
    - protocol: TCP
      port: 80      # Порт сервиса
      targetPort: 80 # Порт контейнера
  type: LoadBalancer # Внешний доступ (в облачных средах)

Почему это важно для тестирования: Современные приложения развертываются в Kubernetes. QA-инженеру нужно понимать:

  • Как развернуть тестовое окружение (используя kubectl apply -f deployment.yaml).
  • Как проверить логи (kubectl logs <pod-name>).
  • Как работает масштабирование и обновления, чтобы тестировать отказоустойчивость.
  • Как конфигурируются переменные окружения для разных сред (dev, staging, prod).