Какие базовые ресурсы (resources) в Kubernetes ты используешь чаще всего?

«Какие базовые ресурсы (resources) в Kubernetes ты используешь чаще всего?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В повседневной работе с Kubernetes я постоянно взаимодействую со следующими основными ресурсами:

  • Pod: Минимальная единица развёртывания. На практике редко создаю Pod напрямую, вместо этого использую контроллеры.
  • Deployment: Основной ресурс для развёртывания stateless-приложений. Он управляет ReplicaSet'ами и обеспечивает стратегические обновления (rolling update) и откаты (rollback).
  • Service: Абстракция для доступа к группе Pod'ов. ClusterIP для внутреннего доступа, NodePort для тестирования, LoadBalancer для облачных провайдеров.
  • ConfigMap & Secret: Хранение конфигурации. ConfigMap — для несекретных данных (например, флагов функциональности), Secret — для паролей, токенов (хранятся в base64, но лучше использовать внешние секреты, например, из HashiCorp Vault).
  • PersistentVolume (PV) / PersistentVolumeClaim (PVC): Для предоставления постоянного хранилища stateful-приложениям (например, базам данных).

Типичный манифест для развёртывания веб-приложения:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
      - name: app
        image: myregistry/web-app:v1.2.0
        ports:
        - containerPort: 8080
        envFrom:
        - configMapRef:
            name: app-config
        resources:
          requests:
            memory: "256Mi"
            cpu: "250m"
          limits:
            memory: "512Mi"
            cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
  name: web-app-service
spec:
  selector:
    app: web-app
  ports:
    - port: 80
      targetPort: 8080
  type: ClusterIP