Нужно ли Kubernetes минимальное количество реплик для выполнения развертывания по очереди? - PullRequest
1 голос
/ 22 апреля 2020

Почти 3 года go, Kubernetes будет , а не выполнять скользящее развертывание, если у вас будет одна реплика ( В Kubernetes не выполняется скользящее обновление при использовании одной реплики ).

Это все еще так? Требуется ли какая-либо дополнительная конфигурация для этого?

1 Ответ

1 голос
/ 22 апреля 2020

Вам больше не нужно иметь минимальное количество реплик для развертывания обновления с использованием 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%).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...