Загрузка...

Блог

Kubernetes: поды, деплойменты и сервисы

Kubernetes: поды, деплойменты и сервисы

Kubernetes управляет контейнерами через абстракции: Pod — минимальная единица запуска; Deployment — желаемое состояние реплик; Service — стабильный доступ к подам. Без этих трёх не обойтись ни в проде, ни в учёбе.

Связь ресурсов

flowchart LR A[Deployment] -->|управляет| B[ReplicaSet] B -->|создаёт| C[Pod] C -->|один или несколько| D[Контейнеры] E[Service] -->|selector по меткам| C E -.->|стабильный DNS/IP| F[Клиент]

Deployment декларирует образ и число реплик; ReplicaSet поддерживает нужное количество подов; Service даёт подам стабильный DNS и порт для доступа изнутри или снаружи кластера.

Pod

Один или несколько контейнеров в общем сетевом и файловом пространстве. Живёт на ноде; при падении не восстанавливается сам — для этого нужен контроллер (Deployment, StatefulSet). Описывается в YAML: image, ports, env, resources, probes.

Deployment

Декларация: сколько реплик, какой образ, стратегия обновления (rolling update или recreate). Контроллер поддерживает нужное количество подов и обновляет их при изменении манифеста. Rollback — через историю ревизий.

Service

Постоянный DNS и IP для набора подов (по селектору). ClusterIP — доступ внутри кластера; NodePort или LoadBalancer — снаружи. Без Service поды меняют IP при пересоздании; с Service приложение обращается по имени сервиса.

Ресурс и назначение

РесурсНазначение
PodМинимальная единица запуска; один или несколько контейнеров, общая сеть и том
DeploymentДекларативное управление репликами подов; rolling update, rollback
ReplicaSetПоддерживает нужное число подов; обычно создаётся Deployment'ом
ServiceСтабильный DNS и доступ к подам по селектору; ClusterIP, NodePort, LoadBalancer

Минимальный манифест

Deployment с одной репликой и Service типа ClusterIP — образ, порты, readiness probe; Service выбирает поды по метке app и отдаёт стабильный порт.

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
        - name: app
          image: your-registry/web-app:latest
          ports:
            - containerPort: 8080
          readinessProbe:
            httpGet:
              path: /health
              port: 8080
            initialDelaySeconds: 5
            periodSeconds: 10
---
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: web-app
  namespace: default
spec:
  type: ClusterIP
  selector:
    app: web-app
  ports:
    - port: 80
      targetPort: 8080
      name: http

Применение: kubectl apply -f deployment.yaml -f service.yaml. Внутри кластера приложение доступно по http://web-app.default.svc.cluster.local. Свои манифесты и типичные операции (kubectl get/describe/logs) храните в базе знаний. Дальше — ConfigMap, Secret, Ingress, RBAC.

Практики применения

  • Начните с Pod, Deployment, Service; затем ConfigMap, Secret, Ingress.
  • Документируйте манифесты и типичные операции в базе знаний — ускорит онбординг и расследование инцидентов.

Итого: Pod — минимальная единица; Deployment — декларативное управление подами; Service — стабильный доступ к подам. Манифесты и runbook'и — в базе знаний.