Kubernetes: Как применить автоматическое масштабирование по горизонтали (HPA) для RC, который содержит несколько контейнеров?
Я попытался использовать HPA для RC, который содержит только один контейнер, и он прекрасно работает. Но когда у меня есть RC с несколькими контейнерами (т. Е. Блок, содержащий несколько контейнеров), HPA не может очистить загрузку ЦП и отображает состояние "Неизвестно", как показано ниже. Как я могу успешно реализовать HPA для RC с несколькими контейнерами. Документы Kuberentes не имеют никакой информации по этому поводу, а также я не нашел никаких упоминаний о том, что это невозможно. Может кто-нибудь, пожалуйста, поделитесь своим опытом или точкой зрения, по этому вопросу. Большое спасибо.
prometheus-watch-ssltargets-hpa ReplicationController/prometheus <unknown> / 70% 1 10 0 4s
Также для справки ниже мой файл HPA yaml.
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: prometheus-watch-ssltargets-hpa
namespace: monitoring
spec:
scaleTargetRef:
apiVersion: v1
kind: ReplicationController
name: prometheus
minReplicas: 1
maxReplicas: 5
targetCPUUtilizationPercentage: 70
1 ответ
Безусловно, можно установить HPA для набора RC/Deployment/Replica с несколькими контейнерами. В моем случае проблема заключалась в формате запроса лимита ресурсов. По этой ссылке я выяснил, что если контейнеры модуля не имеют соответствующего набора запросов ресурсов, загрузка ЦП для модуля не будет определена, и HPA не предпримет никаких действий для этого показателя. В моем случае я использовал запрос ресурсов, как показано ниже, что вызвало ошибку (Но, пожалуйста, обратите внимание, что следующий формат запроса ресурсов работает абсолютно нормально, когда я использую его с развертываниями, контроллерами репликации и т. Д. Это только когда, кроме того, я хотел внедрить HPA, вызвавший проблему, упомянутую в вопросе.)
resources:
limits:
cpu: 2
memory: 200M
requests:
cpu: 1
memory: 100Mi
Но после его изменения, как показано ниже (т. Е. С соответствующим набором запросов ресурсов, который HPA может понять), он работает нормально.
resources:
limits:
cpu: 2
memory: 200Mi
requests:
cpu: 1
memory: 100Mi