ПР. Автомасштабирование в Yandex Managed Kubernetes
Кратко:
- Создание манифеста load-balancer-hpa.yaml для горизонтального автомасштабирования в Kubernetes.
- Использование меток (labels) для контейнеров с меткой "nginx-hpa".
- Изменение образа контейнера с Yandex Container Registry на k8s.gcr.io/hpa-example для создания высокой нагрузки на процессор.
- Добавление настроек ресурсов (requests и limits) для контейнера nginx-hpa.
- Создание манифеста Horizontal Pod Autoscaler с настройками minReplicas, maxReplicas и targetCPUUtilizationPercentage.
- Применение манифеста и ожидание запуска компонентов.
- Создание рабочей нагрузки с помощью утилиты wget.
- Наблюдение за увеличением числа подов и узлов в кластере.
Практическая работа. Автомасштабирование в Yandex Managed Kubernetes
В этой работе вы увидите, как в Kubernetes® выполняется горизонтальное автомасштабирование.
-
Создайте манифест
load-balancer-hpa.yaml.Для начала скопируйте в него настройки спецификаций, которые вы составляли на предыдущих уроках: изmy-nginx.yaml(в примере ниже это разделDeployment) и изload-balancer.yaml(разделService).Поскольку новый балансировщик должен отслеживать отдельную группу контейнеров, используйте для контейнеров другие метки (labels), напримерnginx-hpa.--- ### Deployment apiVersion: apps/v1 kind: Deployment metadata: name: my-loadbalancer-hpa labels: app: nginx-hpa spec: replicas: 1 selector: matchLabels: app: nginx-hpa template: metadata: name: nginx-hpa labels: app: nginx-hpa spec: containers: - name: nginx-hpa image: cr.yandex/<registry ID>/ubuntu-nginx:latest --- ### Service apiVersion: v1 kind: Service metadata: name: my-loadbalancer-hpa spec: selector: app: nginx-hpa ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer
- В разделе
Deploymentсмените образ с Yandex Container Registry наk8s.gcr.io/hpa-example— это специальный тестовый образ из публичного репозитория, создающий высокую нагрузку на процессор. Так вам будет удобно отслеживать работу Horizontal Pod Autoscaler.... spec: containers: - name: nginx-hpa image: k8s.gcr.io/hpa-example
- Теперь добавьте в шаблон контейнера настройки
requestsиlimits: мы попросим по умолчанию 256 мебибайтов памяти и 500 милли-CPU (половину ядра), а ограничим контейнер 500 мебибайтами и 1 CPU.... spec: containers: - name: nginx-hpa image: k8s.gcr.io/hpa-example resources: requests: memory: "256Mi" cpu: "500m" limits: memory: "500Mi" cpu: "1"
- Дополните манифест настройками для Horizontal Pod Autoscaler:
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: my-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: my-nginx-deployment-hpa minReplicas: 1 maxReplicas: 5 targetCPUUtilizationPercentage: 20
- В результате должен получиться такой манифест:
--- ### Deployment apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx-deployment-hpa labels: app: nginx-hpa spec: replicas: 1 selector: matchLabels: app: nginx-hpa template: metadata: name: nginx-hpa labels: app: nginx-hpa spec: containers: - name: nginx-hpa image: k8s.gcr.io/hpa-example resources: requests: memory: "256Mi" cpu: "500m" limits: memory: "500Mi" cpu: "1" --- ### Service apiVersion: v1 kind: Service metadata: name: my-loadbalancer-hpa spec: selector: app: nginx-hpa ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer --- ### HPA apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: my-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: my-nginx-deployment-hpa minReplicas: 1 maxReplicas: 5 targetCPUUtilizationPercentage: 20
- Примените манифест:
kubectl apply -f <путь_к_load-balancer-hpa.yaml>
Вы увидите три сообщения:
deployment.apps/my-nginx-deployment-hpa created
service/my-loadbalancer-hpa created
horizontalpodautoscaler.autoscaling/my-hpa created
- В консоли управления перейдите в раздел Network Load Balancer. Дождитесь, пока статус
my-nginx-deployment-hpaстанетRunning, после чего посмотрите IP-адрес балансировщика. Убедитесь, что в браузере этот адрес доступен. В терминале сохраните IP-адрес в переменную. Например, так:LOAD_BALANCER_IP=<IP-адрес балансировщика>
- Запустите в отдельном окне отслеживание интересующих вас компонентов кластера Kubernetes:
while true; do kubectl get pod,svc,hpa,nodes -o wide; sleep 5; done
- Теперь сымитируйте рабочую нагрузку на приложение. Для этого подойдёт утилита
wget(установите её с помощью пакетного менеджера или с сайта).while true; do wget -q -O- http://$LOAD_BALANCER_IP; done
Вы увидите, что сначала увеличится число подов, а затем добавятся узлы. Число узлов ограничено настройками группы узлов кластера, которые вы задали при создании кластера (в нашем случае максимальное количество узлов — пять).
- Остановите цикл создания нагрузки на приложение (комбинация клавиш
Ctrl + C). В окне консоли с отслеживанием компонентов кластера вы увидите, как удаляются узлы и поды без нагрузки.