Код-ревью Junior Архитектура Kubernetes обновлено

Ревью: первый манифест

Вопрос

Найди ошибки в манифесте Deployment.

apiVersion: v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: api
          image: registry.example.com/api

Коротко

Исправленный манифест: Селектор Deployment неизменяем после создания, поэтому ошибку в метках проще поймать до первого apply: kubectl apply --dry-run=server прогонит манифест через валидацию API без создания объекта.

Что должен найти ревьюер

  1. Ошибкастрока 1
    Deployment находится в группе apps: нужен apiVersion: apps/v1. С v1 API ответит, что такого ресурса нет.
  2. Стильстрока 3
    Не указан namespace: объект уйдёт в namespace текущего контекста, это источник ошибок. Лучше явно namespace: prod или задавать через kustomize.
  3. Ошибкастрока 13
    Метки шаблона app: web не совпадают с селектором app: api: API отклонит Deployment (selector does not match template labels).
  4. Ошибкастрока 17
    Образ без тега означает latest: версия непредсказуема, а imagePullPolicy по умолчанию станет Always. Указать версию.
  5. Производительность
    Нет resources.requests и limits: планировщик не знает потребностей, под получит QoS BestEffort и первым пойдёт на вытеснение.

Разбор

Исправленный манифест:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
  namespace: prod
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: registry.example.com/api:1.4.2
          resources:
            requests: { cpu: 100m, memory: 256Mi }
            limits: { memory: 256Mi }

Селектор Deployment неизменяем после создания, поэтому ошибку в метках проще поймать до первого apply: kubectl apply --dry-run=server прогонит манифест через валидацию API без создания объекта.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме