Обновление Kubernetes Rolling не подчиняется репликам maxUnavailable при повторном развертывании в условиях автоматического масштабирования - PullRequest
0 голосов
/ 19 декабря 2018

В двух словах, большинство наших приложений настроены на следующие значения: strategy в разделе Развертывание -

  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate

. Horizonatal Pod Autoscaler настроен следующим образом:

spec:
  maxReplicas: 10
  minReplicas: 2

СейчасКогда наше приложение было повторно развернуто, вместо того, чтобы запускать обновление, оно мгновенно завершило работу 8 наших модулей и уменьшило количество модулей до 2, что является минимальным числом доступных реплик.Это произошло за доли секунды, как вы можете видеть здесь.

enter image description here

Вот результат kubectl get hpa -

enter image description here

Поскольку maxUnavailable составляет 25%, разве не должно быть максимум около 2-3 стручков?Почему так много стручков падает сразу?Похоже, что обновление работает бесполезно, если оно работает таким образом.

Чего мне не хватает?

1 Ответ

0 голосов
/ 26 декабря 2018

Посмотрев на этот вопрос, я решил попробовать это в тестовой среде, в которой я хотел проверить, не работает ли она.

Я настроил metrics-server для выборки сервера метрик и установкиHPA.Я выполнил следующие шаги для настройки HPA и развертывания:

Как включить сервер KubeAPI для метрик автоматического масштабирования HPA

Однажды у меня работает HPA и макс 10 pods работая в системе, я обновил изображения, используя:

[root@ip-10-0-1-176 ~]# kubectl get hpa
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   49%/50%   1         10        10         87m

[root@ip-10-0-1-176 ~]# kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
load-generator-557649ddcd-6jlnl   1/1     Running   0          61m
php-apache-75bf8f859d-22xvv       1/1     Running   0          91s
php-apache-75bf8f859d-dv5xg       1/1     Running   0          106s
php-apache-75bf8f859d-g4zgb       1/1     Running   0          106s
php-apache-75bf8f859d-hv2xk       1/1     Running   0          2m16s
php-apache-75bf8f859d-jkctt       1/1     Running   0          2m46s
php-apache-75bf8f859d-nlrzs       1/1     Running   0          2m46s
php-apache-75bf8f859d-ptg5k       1/1     Running   0          106s
php-apache-75bf8f859d-sbctw       1/1     Running   0          91s
php-apache-75bf8f859d-tkjhb       1/1     Running   0          55m
php-apache-75bf8f859d-wv5nc       1/1     Running   0          106s
[root@ip-10-0-1-176 ~]# kubectl set image deployment php-apache php-apache=hpa-example:v1 --record
deployment.extensions/php-apache image updated

[root@ip-10-0-1-176 ~]# kubectl get pods
NAME                              READY   STATUS              RESTARTS   AGE
load-generator-557649ddcd-6jlnl   1/1     Running             0          62m
php-apache-75bf8f859d-dv5xg       1/1     Terminating         0          2m40s
php-apache-75bf8f859d-g4zgb       1/1     Terminating         0          2m40s
php-apache-75bf8f859d-hv2xk       1/1     Terminating         0          3m10s
php-apache-75bf8f859d-jkctt       1/1     Running             0          3m40s
php-apache-75bf8f859d-nlrzs       1/1     Running             0          3m40s
php-apache-75bf8f859d-ptg5k       1/1     Terminating         0          2m40s
php-apache-75bf8f859d-sbctw       0/1     Terminating         0          2m25s
php-apache-75bf8f859d-tkjhb       1/1     Running             0          56m
php-apache-75bf8f859d-wv5nc       1/1     Terminating         0          2m40s
php-apache-847c8ff9f4-7cbds       1/1     Running             0          6s
php-apache-847c8ff9f4-7vh69       1/1     Running             0          6s
php-apache-847c8ff9f4-9hdz4       1/1     Running             0          6s
php-apache-847c8ff9f4-dlltb       0/1     ContainerCreating   0          3s
php-apache-847c8ff9f4-nwcn6       1/1     Running             0          6s
php-apache-847c8ff9f4-p8c54       1/1     Running             0          6s
php-apache-847c8ff9f4-pg8h8       0/1     Pending             0          3s
php-apache-847c8ff9f4-pqzjw       0/1     Pending             0          2s
php-apache-847c8ff9f4-q8j4d       0/1     ContainerCreating   0          4s
php-apache-847c8ff9f4-xpbzl       0/1     Pending             0          1s

Кроме того, я сохранил задание в фоновом режиме, которое выдавало вывод kubectl get pods каждую секунду в файле.Никогда, пока все изображения не будут обновлены, количество модулей никогда не опускалось ниже 8.

Я считаю, что вам нужно проверить, как вы настраиваете свое обновление.Вы используете развертывание или репликацию?Я оставил стратегию rolling update такой же, как у вас maxUnavailable: 25% и maxSurge: 25% при развертывании, и она хорошо работает для меня.

...