На этой работе вы увидите, как в 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
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
- В разделе
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=84.201.147.8
- Запустите в отдельном окне отслеживание интересующих вас компонентов кластера 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
Вы увидите, что сначала увеличится число подов, а затем добавятся узлы. Число узлов ограничено настройками группы узлов кластера, которые вы задали при создании кластера (в нашем случае максимальное количество узлов — пять).
- Остановите цикл создания нагрузки на приложение. В консоли вы увидите, как удаляются узлы и поды без нагрузки.
Свежие комментарии