0

practicum

Практическая работа. Автомасштабирование в Yandex Managed Kubernetes

26.04.2022

На этой работе вы увидите, как в Kubernetes® выполняется горизонтальное автомасштабирование.

  1. Создайте манифест 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
spec:
  replicas: 1
  selector:
    matchLabels:
           app: nginx-hpa
  template:
    metadata:
         labels:
              app: nginx-hpa
    spec:
          containers:
              - name: nginx-hpa
              image: k8s.gcr.io/hpa-example
 
 
---
### Service
apiVersion: v1
kind: Service
metadata:
  name: my-loadbalancer-hpa
spec:
  selector:
     app: nginx-hpa
  ports:
  - port: 80
    targetPort: 80
  type: LoadBalancer 
  1. В разделе Deployment смените образ с Yandex Container Registry на k8s.gcr.io/hpa-example — это специальный тестовый образ из публичного репозитория, создающий высокую нагрузку на процессор. Так вам будет удобно отслеживать работу Horizontal Pod Autoscaler.
       ...
       spec:
          containers:
              - name: nginx-hpa
              image: k8s.gcr.io/hpa-example 
  1. Теперь добавьте в шаблон контейнера настройки 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" 
  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 
  1. В результате должен получиться такой манифест:
---
### 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 
  1. Примените манифест:
kubectl apply -f load-balancer-hpa.yaml 

Вы увидите три сообщения:

deployment.apps/my-nginx-deployment-hpa created
service/my-loadbalancer-hpa created
horizontalpodautoscaler.autoscaling/my-hpa created 
  1. В веб-консоли перейдите в раздел Network Load Balancer. Дождитесь, пока статус my-nginx-deployment-hpa станет Running, после чего посмотрите IP-адрес балансировщика. Убедитесь, что в браузере этот адрес доступен. В терминале сохраните IP-адрес в переменную. Например, так:
LOAD_BALANCER_IP=84.201.147.8 
  1. Запустите в отдельном окне отслеживание интересующих вас компонентов кластера Kubernetes:
while true; do kubectl get pod,svc,hpa,nodes -o wide; sleep 5; done  
  1. Теперь сымитируйте рабочую нагрузку на приложение. Для этого подойдёт утилита wget (установите её с помощью пакетного менеджера или с сайта).
while true; do wget -q -O- http://$LOAD_BALANCER_IP; done  

Вы увидите, что сначала увеличится число подов, а затем добавятся узлы. Число узлов ограничено настройками группы узлов кластера, которые вы задали при создании кластера (в нашем случае максимальное количество узлов — пять).

  1. Остановите цикл создания нагрузки на приложение. В консоли вы увидите, как удаляются узлы и поды без нагрузки.

Свежие комментарии

Подписка

Лучшие статьи


Fatal error: Uncaught Error: Call to a member function have_posts() on null in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php:380 Stack trace: #0 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/widget.php(257): fox56_blog_grid(NULL, Array) #1 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/widgets/latest-posts/register.php(33): include('/home/host18670...') #2 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/class-wp-widget.php(394): Wi_Widget_Latest_Posts->widget(Array, Array) #3 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/widgets.php(837): WP_Widget->display_callback(Array, Array) #4 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(417): dynamic_sidebar('sidebar') #5 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(136): fox56_single_sidebar() #6 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/single.php(7): fox56_single_inner() #7 /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/single.php(23): fox56_single() #8 /home/host1867038/the-devops.ru/htdocs/www/wp-includes/template-loader.php(106): include('/home/host18670...') #9 /home/host1867038/the-devops.ru/htdocs/www/wp-blog-header.php(19): require_once('/home/host18670...') #10 /home/host1867038/the-devops.ru/htdocs/www/index.php(17): require('/home/host18670...') #11 {main} thrown in /home/host1867038/the-devops.ru/htdocs/www/wp-content/themes/fox/inc/blog.php on line 380