practicum

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

На этой работе вы увидите, как в 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. Остановите цикл создания нагрузки на приложение. В консоли вы увидите, как удаляются узлы и поды без нагрузки.
Previous Story

Автоматическое масштабирование

Next Story

Мониторинг Managed Kubernetes

Latest from Blog

Zabbix – Docker – Raspberry Pi

Для начала установим Portainer – веб-интерфейс для управления docker-контейнерами. Бесплатно, удобно, подойдет новичкам в docker. Установка

Сетевая папка/диск в Linux

x.x.x.x адрес шары /mnt/shara точка монтирования user пользователь с доступом к шаре 1234 пароль пользователя Для

Памятка SSH

В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые

0 £0.00