Код-ревью 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 без создания объекта.
Что должен найти ревьюер
- Ошибкастрока 1Deployment находится в группе
apps: нуженapiVersion: apps/v1. Сv1API ответит, что такого ресурса нет. - Стильстрока 3Не указан namespace: объект уйдёт в namespace текущего контекста, это источник ошибок. Лучше явно
namespace: prodили задавать через kustomize. - Ошибкастрока 13Метки шаблона
app: webне совпадают с селекторомapp: api: API отклонит Deployment (selector does not match template labels). - Ошибкастрока 17Образ без тега означает
latest: версия непредсказуема, аimagePullPolicyпо умолчанию станетAlways. Указать версию. - ПроизводительностьНет
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 ошибок.