Есть ли какой-то способ только увеличить реплики statefulset и НЕТ уменьшить реплики? - PullRequest
0 голосов
/ 23 октября 2019

Я не хочу уменьшать количество модулей, контролируемых StatefulSet, и я думаю, что уменьшение количества модулей - опасная операция в рабочей среде.

, так что ..., есть ли какой-нибудь способ? спасибо ~

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Я не уверен, что это то, что вы ищете, но вы можете масштабировать StatefulSet

Использовать kubectl для масштабирования StatefulSets

Сначала найдите StatefulSet, который вы хотите масштабировать.

kubectl get statefulsets <stateful-set-name>

Измените количество реплик вашего StatefulSet:

kubectl scale statefulsets <stateful-set-name> --replicas=<new-replicas>

Чтобы показать вам пример,Я развернул 2-х модульный StatefulSet с именем web:

$ kubectl get statefulsets.apps web 
NAME   READY   AGE
web    2/2     60s
$ kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
web-0   1/1     Running   0          63s
web-1   1/1     Running   0          44s

$ kubectl describe statefulsets.apps web
Name:               web
Namespace:          default
CreationTimestamp:  Wed, 23 Oct 2019 13:46:33 +0200
Selector:           app=nginx
Labels:             <none>
Annotations:        kubectl.kubernetes.io/last-applied-configuration:
                      {"apiVersion":"apps/v1","kind":"StatefulSet","metadata":{"annotations":{},"name":"web","namespace":"default"},"spec":{"replicas":2,"select...
Replicas:           824643442664 desired | 2 total
Update Strategy:    RollingUpdate
  Partition:        824643442984
Pods Status:        2 Running / 0 Waiting / 0 Succeeded / 0 Failed
...

Теперь, если мы масштабируем этот StatefulSet до 5 реплик:

$ kubectl scale statefulset web --replicas=5
statefulset.apps/web scaled

$ kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
web-0   1/1     Running   0          3m41s
web-1   1/1     Running   0          3m22s
web-2   1/1     Running   0          59s
web-3   1/1     Running   0          40s
web-4   1/1     Running   0          27s

$ kubectl get statefulsets.apps web
NAME   READY   AGE
web    5/5     3m56s

У вас нет простоев вуже работающие капсулы.

0 голосов
/ 23 октября 2019

Я думаю, что уменьшение количества контейнеров - опасная операция в производственной среде.

Я согласен с вами.

Как писал Кроу, эту операцию можно выполнитьс kubectl scale statefulsets <stateful-set-name>, но это императивная операция, и не рекомендуется выполнять обязательные операции в рабочей среде .

В производственной среде лучшеиспользуйте декларативную операцию , например, укажите количество реплик в текстовом файле (например, stateful-set-name.yaml) и разверните их с помощью kubectl apply -f <stateful-set-name>.yaml с таким способом работы, легко сохранитьyaml-файлы в Git , так что вы имеете полный контроль над всеми изменениями и можете вернуться / вернуться к предыдущей конфигурации. Когда вы сохраняете декларативные файлы в репозитории Git, вы можете использовать решение CICD, например, Jenkins или ArgoCD to 1) для проверки операции (например, не разрешать уменьшение ) и 2) сначала развернуть втестовую среду и убедитесь, что она работает, прежде чем применить изменения к производственной среде.

Я рекомендую книгу (новое издание) Kubernetes Up & Running 2nd ed , в которой описана эта процедура в главе 18. (новая глава).

...