Ответ
Kubernetes (K8s) — это платформа с открытым исходным кодом для оркестрации контейнеризированных приложений. Она автоматизирует развертывание, масштабирование и управление контейнерами (чаще всего Docker), обеспечивая отказоустойчивость и эффективное использование ресурсов.
Основные абстракции (концепции):
- Pod: Наименьшая и самая простая единица в Kubernetes. Это «обертка» для одного или нескольких контейнеров, которые разделяют сеть и хранилище. Контейнеры в одном Pod развертываются вместе на одном узле.
- Deployment: Объявляет желаемое состояние для Pod'ов (какой образ использовать, сколько реплик). Управляет обновлениями (rolling updates) и откатами (rollbacks).
- Service: Абстракция, которая определяет логический набор Pod'ов и политику доступа к ним (например, балансировку нагрузки). Дает стабильный IP-адрес и DNS-имя, даже если Pod'ы пересоздаются.
- Node (Worker Node): Виртуальная или физическая машина, на которой работают Pod'ы.
- 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).