Вам больше не нужно иметь минимальное количество реплик для развертывания обновления с использованием Kubernetes Rolling Update.
Я протестировал его в своей лаборатории (v1.17.4), и он работал как брелок, имеющий только одну реплику.
Вы можете самостоятельно протестировать его с помощью этой лаборатории Katakoda: Интерактивное учебное пособие - обновление вашего приложения
Эта лаборатория предназначена для создания развертывания с 3 репликами. Перед началом лабораторной работы отредактируйте развертывание и измените количество реплик на одну и выполните лабораторные действия.
Я создал лабораторию, используя другой пример, похожий на ваш предыдущий сценарий. Вот мое развертывание:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:1.16.1
ports:
- containerPort: 80
Развертывание выполняется только с одной репликой:
kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-6c4699c59c-w8clt 1/1 Running 0 5s
Здесь я отредактировал свой nginx -deployment.yaml и изменил версию nginx на nginx:latest
и развернуло мое развертывание, работающее на замену:
$ kubectl replace -f nginx-deployment.yaml
deployment.apps/nginx-deployment replaced
Другой вариант - изменить версию nginx с помощью команды kubectl set image
:
kubectl set image deployment/nginx-deployment nginx-container=nginx:latest --record
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-566d9f6dfc-hmlf2 0/1 ContainerCreating 0 3s
nginx-deployment-6c4699c59c-w8clt 1/1 Running 0 48s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-566d9f6dfc-hmlf2 1/1 Running 0 6s
nginx-deployment-6c4699c59c-w8clt 0/1 Terminating 0 51s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-566d9f6dfc-hmlf2 1/1 Running 0 13s
Как видите, все работало нормально только с одной репликой.
В последней версии документации мы можем прочитать:
Развертывание гарантирует, что только определенное количество модулей отключено во время их обновления. По умолчанию это гарантирует, что по крайней мере 75% от желаемого количества модулей было увеличено (максимум 25% недоступно).
Развертывание также гарантирует, что только определенное количество модулей создается выше желаемого количества модулей. По умолчанию это гарантирует, что не более 125% от желаемого количества стручков (максимальный всплеск 25%).