Гайды

Kubernetes: Pods, Deployments и Services

Pod и эфемерность, Deployment с пробами, Service и ClusterIP, ConfigMap, Secret и requests/limits.

~12 мин чтения

Kubernetes: Pods, Deployments и Services

Kubernetes оркестрирует контейнеры: планирование на узлы, рестарты, масштабирование, сервис-дискавери. Этот гайд — три базовых объекта: Pod, Deployment, Service. Локальный кластер: minikube, kind, k3d. Docker-образы — Docker: контейнеризация; пакеты и маршрутизация — Helm, Ingress.


1. Pod

Минимальная единица планирования: один или несколько контейнеров с общей сетью (localhost между ними) и volumes.

yaml
apiVersion: v1
kind: Pod
metadata:
  name: demo
spec:
  containers:
    - name: app
      image: myapp:1.0.0
      ports:
        - containerPort: 8000

Pods эфемерны; напрямую их редко создают в проде без контроллера.


2. Deployment

Поддерживает желаемое число реплик, rolling update, откат.

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: myapp:1.0.0
          ports:
            - containerPort: 8000
          readinessProbe:
            httpGet:
              path: /health/ready
              port: 8000
          livenessProbe:
            httpGet:
              path: /health/live
              port: 8000

readinessProbe — трафик не идёт, пока не готов; livenessProbe — рестарт при зависании. Пример health — Деплой FastAPI: Docker и Nginx.


3. Service

Стабильный virtual IP (ClusterIP) или балансировщик облака (LoadBalancer) к подам по label selector.

yaml
apiVersion: v1
kind: Service
metadata:
  name: api
spec:
  selector:
    app: api
  ports:
    - port: 80
      targetPort: 8000
  type: ClusterIP

NodePort / LoadBalancer / Ingress — уровни доступа снаружи кластера.


4. ConfigMap и Secret

Конфиг без секретов — ConfigMap (env или volume). Пароли/TLS — Secret (base64 в манифесте — слабость; лучше Sealed Secrets, External Secrets Operator, cloud provider integration).


5. Ресурсы

yaml
resources:
  requests:
    cpu: "100m"
    memory: "256Mi"
  limits:
    memory: "512Mi"

Requests влияют на планирование; limits — ограничение и OOMKill.


6. Чек-лист

  • Образ с immutable tag (:1.2.3).
  • Пробы согласованы с реальными эндпоинтами.
  • PodDisruptionBudget для критичных сервисов (следующие шаги изучения k8s).
  • Логи через sidecar/агент или централизованный сбор кластера.

Дальше: Helm · Prometheus Operator · тег Kubernetes