Ответ
YAML (YAML Ain't Markup Language) — это человекочитаемый формат сериализации данных, использующий отступы для обозначения структуры. В DevOps это де-факто стандарт для декларативных конфигурационных файлов, описывающих инфраструктуру, пайплайны и развёртывания.
Основные конструкции в DevOps-контексте:
- Скаляры: Строки, числа, булевы значения.
- Списки (Sequences): Элементы, начинающиеся с
-. - Словари (Mappings): Пары ключ-значение.
Типичные примеры использования:
- Kubernetes манифесты: Описание Pod'ов, Deployment'ов, Service'ов.
- CI/CD конфигурации:
.gitlab-ci.yml, GitHub Actions Workflows (.yml). - Конфигурация инфраструктуры как код: Ansible Playbooks, Docker Compose файлы.
Пример: простой Kubernetes Deployment и Service в одном файле:
# Разделитель '---' позволяет объединить несколько документов в одном файле
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21-alpine
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
Плюсы:
- Читаемость и лаконичность по сравнению с JSON/XML.
- Широкая поддержка инструментами.
Минусы и подводные камни:
- Чувствительность к отступам (пробелам, не табам). Это частая причина ошибок.
- Сложность с многострочными строками: Нужно знать разницу между
|(сохранить переносы),>(свернуть в одну строку),|-/>-(отрезать последний перенос). - Потенциальная уязвимость: Некоторые парсеры YAML могут выполнять произвольный код при загрузке ненадёжных файлов. Всегда используйте безопасные загрузчики (например,
yaml.safe_loadв Python).