Pod Detached: работа с контейнерами в Kubernetes
Когда Pod-объект открепляется от управляющего контроллера, он перестает подчиняться его автоматической управляемости и становится изолированным. Это означает, что управляющий контроллер не будет обновлять его автоматически, не будет запускать его при аварийном завершении и так далее.
Например, можно открепить под из реплицированного контроллера, чтобы его больше не запускали; в этом случае павильон будет остановлен, но его манифест останется в силе. Это может быть полезно, если вы хотите остановить конкретный экземпляр пода для тестирования или отладки.
Вот пример команды kubectl, которая вручную открепит под с именем my-pod от реплицированного контроллера:
kubectl delete pod my-pod --cascade=false
В этом примере мы указали флаг --cascade=false, чтобы открепить под от реплицирующего контроллера без удаления его манифеста. Теперь под my-pod не будет повторно создан автоматически при достижении текущего уровня репликации.
Кроме того, можно отказаться от автоматического удаления старого пода при выполнении обновления на новый. Для этого в манифесте Deployment нужно указать стратегию обновления типа RollingUpdate и флаг podRetentionDeadlineSeconds:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: my-image:v1
terminationGracePeriodSeconds: 30
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
podRetentionDeadlineSeconds: 3600
В этом примере мы указали, что Pod-объекты могут отсутствовать на 1 и создаваться новые объекты на 1 во время обновления. А флаг podRetentionDeadlineSeconds установлен на 3600 секунд (1 час), что означает, что старые поды будут оставаться активными в течение 1 часа после обновления, даже если они откреплены от управляющего контроллера.