Sobes.tech
Назад к вопросам
Junior — Middle
65

Какие основные компоненты и их настройки вы выполняли в Kubernetes для развертывания и управления приложениями?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Ожидают, что кандидат знает базовые Kubernetes-объекты и понимает, как ими управлять приложением в кластере. Важно уметь объяснить, как настраиваются контейнеры, сеть, конфигурация, доступ и масштабирование. Для middle-уровня также важны практические детали: health checks, rollout, ресурсы и работа с секретами.

Определение:

Kubernetes — это система оркестрации контейнеров, которая запускает, масштабирует и обновляет приложения в кластере. Основные компоненты для прикладной работы — это Pod, Deployment, Service, ConfigMap, Secret, Ingress, Namespace, PersistentVolume/PersistentVolumeClaim, а также механизмы readiness/liveness probes и ограничения ресурсов.

Pod описывает один или несколько контейнеров, которые запускаются вместе. Deployment управляет жизненным циклом Pod’ов и обновлениями. Service дает стабильный способ доступа к Pod’ам. ConfigMap и Secret выносят настройки и чувствительные данные из образа. Ingress используется для внешнего HTTP/HTTPS-доступа. Томa нужны для хранения данных, которые должны переживать пересоздание Pod’ов.

Пример использования:

Типичный сценарий: Python-приложение упаковано в Docker-образ, после чего в Kubernetes создаются манифесты для запуска нескольких реплик, передачи конфигурации через ConfigMap, пароля к БД через Secret и публикации сервиса через Service.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: python-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: python-app
  template:
    metadata:
      labels:
        app: python-app
    spec:
      containers:
        - name: app
          image: myrepo/python-app:1.0.0
          ports:
            - containerPort: 8000
          envFrom:
            - configMapRef:
                name: python-app-config
            - secretRef:
                name: python-app-secret
          readinessProbe:
            httpGet:
              path: /health
              port: 8000
            initialDelaySeconds: 5
            periodSeconds: 10
          livenessProbe:
            httpGet:
              path: /health
              port: 8000
            initialDelaySeconds: 15
            periodSeconds: 20
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "500m"
              memory: "256Mi"
---
apiVersion: v1
kind: Service
metadata:
  name: python-app
spec:
  selector:
    app: python-app
  ports:
    - port: 80
      targetPort: 8000
  type: ClusterIP

Пояснение кода:

Код показывает связку из двух основных объектов.

Сначала Deployment:

  1. replicas: 2 — приложение запускается в двух экземплярах для отказоустойчивости.
  2. selector и template.labels — связывают Deployment с Pod’ами.
  3. image — указывает Docker-образ Python-приложения.
  4. containerPort: 8000 — порт внутри контейнера, на котором слушает приложение.
  5. envFrom — подгружает переменные из ConfigMap и Secret.
  6. readinessProbe — проверяет, готов ли контейнер принимать трафик.
  7. livenessProbe — проверяет, жив ли процесс и нужен ли перезапуск.
  8. resources — задает гарантии и лимиты по CPU и памяти.

Потом Service:

  1. selector выбирает Pod’ы с меткой app: python-app.
  2. port: 80 — внешний порт сервиса внутри кластера.
  3. targetPort: 8000 — порт контейнера, куда проксируется трафик.
  4. type: ClusterIP — сервис доступен внутри кластера; для внешнего доступа обычно добавляют Ingress или другой тип Service.

Если нужна конфигурация в реальном проекте, отдельно создаются ConfigMap и Secret, а для хранения данных — PersistentVolumeClaim. Для обновлений используют rollout через Deployment, а масштабирование делают изменением числа реплик.

Ключевые моменты:

  • Deployment — основной объект для запуска, обновления и отката приложения.
  • Service — стабильная точка доступа к Pod’ам, которые могут пересоздаваться.
  • ConfigMap и Secret позволяют отделить конфигурацию и чувствительные данные от образа.
  • readinessProbe и livenessProbe критичны для корректного трафика и самовосстановления.
  • resources requests/limits нужны для планирования нагрузки и защиты кластера.
  • Ingress и PersistentVolumeClaim подключают внешний доступ и постоянное хранение, когда это требуется.