Писал ли YAML-манифесты для проектов на Kubernetes?

«Писал ли YAML-манифесты для проектов на Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, YAML — это основной язык декларативного описания всей инфраструктуры в Kubernetes. Я регулярно пишу и поддерживаю манифесты для различных ресурсов.

Пример Deployment с ConfigMap и Service для stateless-приложения:

# configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  LOG_LEVEL: "INFO"
  API_ENDPOINT: "https://api.example.com"
---
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-deployment
  labels:
    app: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
      - name: api-container
        image: my-registry/api:${IMAGE_TAG}
        ports:
        - containerPort: 8080
        envFrom:
        - configMapRef:
            name: app-config
        resources:
          requests:
            memory: "128Mi"
            cpu: "100m"
          limits:
            memory: "256Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
---
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: api-service
spec:
  selector:
    app: api
  ports:
  - port: 80
    targetPort: 8080
  type: ClusterIP

Мой подход к работе с YAML в Kubernetes:

  • Использую Kustomize или Helm для управления различиями между средами (dev/staging/prod) и избежания дублирования кода.
  • Внедряю PodDisruptionBudgets, ResourceQuotas и NetworkPolicies для повышения отказоустойчивости и безопасности.
  • Проверяю манифесты с помощью kubectl apply --dry-run=client и kubeval перед применением.
  • Храню всё как код (GitOps) в репозитории и применяю через CI/CD пайплайн или инструменты вроде ArgoCD.