Если при развертывании модуля вы указали ресурсы ЦП и памяти, для изменения размера ресурса потребуется перезапустить модуль. До сих пор перезагрузка мешала выполнению рабочих нагрузок.
Альфа-выпуск функции в Kubernetes 1.27. У одного есть возможность автоматически изменять размеры процессора и ограничений памяти модуля, просто исправляя определение работающего модуля, чтобы изменить их без его перезапуска.
Это также означает, что поля в спецификации ресурсов больше не могут использоваться в качестве индикаторов фактических ресурсов модуля. Инструменты мониторинга и другие подобные приложения теперь должны просматривать новые поля в статусе Pod, что также является большой проблемой для наших существующих оповещений мониторинга. Kubernetes запрашивает фактические запросы ЦП и памяти, а также ограничения, применяемые при запуске контейнеров, через вызовы API CRI (интерфейс выполнения контейнера) к среде выполнения (например,Containerd, который отвечает за запуск контейнеров). Использование ресурсов контейнера во время выполнения отражается в статусе модуля, который будет объяснен на примерах позже.
Помимо добавления политики перезапуска для изменения размера в спецификации модуля, в статус модуля были добавлены три новых поля.
Чтобы использовать эту функцию в версии 1.27, в InPlacePodVerticalScaling должен быть включен шлюз функции.
FEATURE_GATES=InPlacePodVerticalScaling=true ./hack/local-up-cluster.sh
После запуска локального кластера Kubernetes Пользователи могут пройти kubectl Планирование pod ресурсы и корректировать pod из размера. Использование этой функции будет продемонстрировано позже. Пример。
Эта функция входит Kubernetes v1.27 из alpha этап. Вот несколько примеров, с которыми могут столкнуться пользователи: проблемы:
Я использую Kubernetes из публичной облачной версии, но поскольку она еще не доступна в этих размещенных версиях 1.27 версия (по состоянию на 2023 Год 4 месяц), мы будем использовать minikube существования запускает версию локально. Есть много способов сделать это; это всего лишь простой пример.
Он выпущен под существующим флагом функции InPlacePodVerticalScaling. Используйте этот флаг для запуска кластера minikube и узлов узла:
minikube start --kubernetes-version=v1.27.0 --feature-gates=InPlacePodVerticalScaling=true --cni calico
minikube node add
Когда вы будете готовы, запустите тестовый контейнер. Например, для нашей программы-изприложения изменения можно безопасно вносить без перезапуска. CPU количество, но для изменения количества Память требуется перезагрузка. Например, запустите базу данных из pod во время выполнения CPU Изменения количества не представляют проблемы, но уменьшение объема памяти может привести к неожиданному поведению. Мы устанавливаем для RestartPolicy значение «memory», что означает, что перезапуск контейнера вступит в силу. В противном случае поведение по умолчанию будет пытаться обновить все имеющиеся ресурсы.
apiVersion: v1
kind: Pod
metadata:
name: inplacedemo
spec:
containers:
- name: inplacedemo
image: alpine
command: ["tail", "-f", "/dev/null"]
resizePolicy:
- resourceName: "memory"
restartPolicy: "RestartContainer"
resources:
limits:
cpu: 2
memory: "1Gi"
requests:
cpu: 1
memory: "500Mi"
Примените yaml и убедитесь, что он запущен, а затем, когда все будет готово, проверьте новые поля, получив информацию о модуле:
$ kubectl apply -f yaml_above.yaml
pod/inplacedemo created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
inplacedemo 1/1 Running 0 53s
$ kubectl get pod inplacedemo -o yaml
В определении существования обратите внимание, что это resizePolicy:
spec:
containers:
...
resizePolicy:
- resourceName: memory
restartPolicy: RestartContainer
- resourceName: cpu
restartPolicy: NotRequired
выделенные ресурсы выделяются для pod контейнеризресурс,И есть дополнительное поле ресурсов. Это отражает фактическое использование текущих ресурсов.,Вместо обязательных/обновляемых ресурсов.
containerStatuses:
- allocatedResources:
cpu: "1"
memory: 500Mi
...
resources:
limits:
cpu: "2"
memory: 1Gi
requests:
cpu: "1"
memory: 500Mi
Давайте сначала изменим ограничение ЦП модуля и увеличим его с 2 до 3.
kubectl patch pod inplacedemo --patch '{"spec":{"containers":[{"name":"inplacedemo", "resources":{"limits":{"cpu":"3"}}}]}}'
Проверьте характеристики модуля еще раз
spec:
...
resources:
limits:
cpu: "3"
memory: 1Gi
requests:
cpu: "1"
memory: 500Mi
status:
...
containerStatuses:
...
resources:
limits:
cpu: "2"
memory: 1Gi
requests:
cpu: "1"
memory: 500Mi
restartCount: 0
...
resize: InProgress
Pod от resize: Время, необходимое от InProgress до завершения (знак исчезает), варьируется. Если вы видите другие флаги, такие как изменение размера: Невозможно, проверьте ресурсы вашего узла и убедитесь, что их достаточно.
Продолжаем ограничивать от 1G увеличивать до 2G:
kubectl patch pod inplacedemo --patch '{ "spec" :{ "containers" :[{ "name" : "inplacedemo" , "resources" :{ "limits" :{ "memory" : "2Gi" }}}]} }'
Процесс такой же, как и раньше.
Kubernetes Обновите нижний слой на месте c-group распространять, использовать pod Определения ресурсов являются изменяемыми. Эта вертикальная экспансия существует pod Особенно полезно в ситуациях, например, при использовании Kubernetes Встроенный Вертикальный Pod Autoscaler (VPA), что позволяет приложению программы существовать так же pod Масштабируйте ресурсы вверх/вниз внутри (а не за счет большего количества модулей). Вход/выход для расширения) и традиционный уровень Pod то же, что масштабирование).
существуют во многих случаях использования,Вертикальное масштабирование помогает,Например некоторые Java Приложение существует, может потребоваться больше времени во время инициализации, чем при нормальной работе процесса. CPU Гораздо больше из ПРОЦЕССОР. Если такое приложение признано пригодным для нормальной работы. CPU запросы и ограничения, они могут страдать от длительного запуска. Этот тип Pod Можетсуществоватьсоздавать Pod При запросе более высокого из CPU значение, и его размер может быть изменен в соответствии с обычными эксплуатационными потребностями после завершения инициализации программы.