Ответ
YAML (YAML Ain't Markup Language) — это основной формат декларативных конфигурационных файлов в Kubernetes (K8s). Он используется для описания всех объектов кластера: Pod'ов, Deployments, Services, ConfigMaps и т.д.
Пример Deployment для веб-приложения:
apiVersion: apps/v1 # Версия API Kubernetes
kind: Deployment # Тип объекта
metadata: # Метаданные объекта
name: my-webapp # Уникальное имя Deployment
labels: # Метки для селекторов
app: my-webapp
tier: frontend
spec: # Спецификация желаемого состояния
replicas: 3 # Количество идентичных копий Pod'ов
selector: # Как Deployment находит свои Pod'ы
matchLabels:
app: my-webapp
template: # Шаблон для создания Pod'ов
metadata:
labels:
app: my-webapp # Метки Pod'а должны совпадать с selector.matchLabels
spec: # Спецификация Pod'а
containers:
- name: web-container # Имя контейнера внутри Pod'а
image: nginx:1.25 # Образ Docker
ports:
- containerPort: 80 # Порт, который слушает контейнер
env: # Переменные окружения
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: app-config
key: database.host
resources: # Ограничения и запросы ресурсов
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
Ключевые особенности и правила YAML в K8s:
- Отступы: Используются пробелы (обычно 2), табы не допускаются.
- Структура: Определяется отступами (как Python).
- Многострочные строки: Можно использовать
|(сохраняет переносы) или>(складывает в одну строку).
Основные объекты Kubernetes, описываемые в YAML:
- Pod: Наименьшая единица развертывания (один или несколько контейнеров).
- Deployment: Управляет жизненным циклом Pod'ов (обновления, откаты).
- Service: Постоянная конечная точка для доступа к группе Pod'ов (балансировщик).
- ConfigMap / Secret: Хранение конфигурации и чувствительных данных отдельно от образа.
- PersistentVolumeClaim: Запрос на постоянное хранилище.
Практики и инструменты:
- Валидация:
kubectl apply --dry-run=client -f deployment.yaml - Шаблонизация: Используйте Helm для управления сложными наборами чартов с параметризацией.
- Генерация:
kubectl create deployment nginx --image=nginx:1.25 --dry-run=client -o yaml > deployment.yaml - Пространства имен: Всегда указывайте
namespace:в metadata для продакшена. - Безопасность: Для секретов используйте объект
Secret, а не ConfigMap, и избегайте хранения секретов в Git (используйте инструменты типа Sealed Secrets, Vault).