Объектная модель — Примеры
Пример 1 — Service, который стоит ни перед чем
Deployment и service применили вместе. Pod’ы работают, но запросы к service истекают по тайм-ауту. Найдите недостающую связь и исправьте её.
# service
spec:
selector:
app: api
# deployment
spec:
template:
metadata:
labels:
app: api-server
Решение
# service
spec:
selector:
app: api-server
$ kubectl get endpoints api
NAME ENDPOINTS AGE
api <none> 4m
$ kubectl get pods --show-labels
NAME READY STATUS LABELS
api-6c9f9 1/1 Running app=api-server
Ничто в Kubernetes не содержит указателя на что-либо другое; service находит pod’ы только там, где метка равна его селектору, поэтому несовпадающее значение оставило service с пустым списком endpoints. Опечатка — обычная ошибка, а здоровый pod рядом с пустыми endpoints — доказательство, отличающее её от упавшего приложения.
Пример 2 — Правка, которая исчезает
Разработчик исправляет неверную настройку, правя работающий pod, видит, что изменение применилось, и закрывает задачу. Позже значение возвращается. Объясните, что произошло, и перенесите изменение туда, где оно выживет.
$ kubectl edit pod api-6c9f9
pod/api-6c9f9 edited
Решение
# шаблон pod'а deployment, а не работающий pod
spec:
template:
spec:
containers:
- name: api
env:
- name: LOG_LEVEL
value: debug
$ kubectl get pods
NAME READY STATUS AGE
api-7d4b2 1/1 Running 12s
Pod — единица выполнения, но не та единица, которую пишут: им владеет контроллер и создаёт его заново из шаблона, поэтому pod, правленный руками, — это расхождение, которое контроллер и предназначен исправлять. Заменяющий pod был построен из неизменённого шаблона, потому значение и вернулось. Вносите изменение во владеющий объект: применённый файл — не то состояние, что работает.
Подставьте свои имена объектов и детали кластера там, где эти наброски используют заполнители.