Мониторинг Managed Kubernetes
- Мониторинг состояния кластера с помощью дашбордов в Yandex Managed Kubernetes.
- Запуск цикла с утилитой wget для подачи нагрузки на кластер.
- Переход в веб-консоль, раздел Managed Service for Kubernetes, и переключение на вкладку Рабочая нагрузка.
- Просмотр состояния ресурсов и событий в кластере.
- Фильтрация событий по сообщению и использование выпадающих списков для быстрого поиска.
- Настройка мониторинга и выбор нужных данных для детализации.
- Исследование возможностей мониторинга для узлов, подов, балансировщиков и сервисов.
Мониторинг Managed Kubernetes
На прошлом уроке вы узнали один из способов контролировать состояние работающего и нагруженного кластера:
kubectl get pod,svc,hpa,nodes -o wide
И увидели в ответ на команду примерно следующее:

Воспринимать информацию в таком виде не очень удобно. К счастью, в Yandex Managed Service for Kubernetes есть дополнительные возможности управления кластерами, и одна из них — дашборды для мониторинга.
Чтобы подать нагрузку на кластер и смотреть, как распределяются ресурсы, запустите в отдельном окне цикл с утилитой
wget — ровно так, как делали это на прошлом уроке:
while true; do wget -q -O- http://<IP_адрес_балансировщика>; done
-
В веб-консоли перейдите в раздел Managed Service for Kubernetes, войдите в свой кластер и переключитесь на панели слева на вкладку Рабочая нагрузка. Перейдите на вкладку Контроллеры Deployment.Вы увидите список запущенных сервисов. В нём будет ваш сервис
my-loadbalancer-hpa. Войдите в него. На вкладках вы можете посмотреть количество и статус подов, события и другие данные.
Постарайтесь начать отслеживать состояние ресурсов сразу же после подачи нагрузки, так вы успеете застать процесс создания подов и узлов.
-
На вкладке Поды вы увидите количество и статус подов, которые поддерживают сервис. Некоторые поды не созданы — у них в колонке Узел стоят прочерки.
Под может быть не создан, например потому что не хватило ресурсов процессора. Чтобы узнать причину, переключитесь на него и откройте вкладку События.
-
Вернитесь в верхний раздел Кластер и перейдите к просмотру узлов. Вы увидите, что происходит автомасштабирование: создаётся или уже создан второй узел.
Откройте этот узел и посмотрите на дашборд мониторинга ресурсов — на общую картину и значения на конкретный момент:
В Yandex Managed Kubernetes у всех ресурсов кластера есть такие дашборды для мониторинга. -
Для эксплуатации сервиса важно отслеживать не только состояние ресурсов, но и события в кластере.Вернитесь в головной раздел кластера и перейдите в События. Их, как видите, много. Чтобы находить события быстрее, фильтруйте их с помощью поля Фильтр по сообщению и трёх выпадающих списков.

-
Вы можете настроить мониторинг и видеть только те данные, которые хотите. Вот как это делается.На панели слева переключитесь в раздел Сеть. В последней колонке нажмите значок шестерёнки. Откроется список полей, которые выводятся в детализации. Включайте и отключайте их.
Теперь в разделе Сеть откройте любой сервис и убедитесь, что в детализации остались именно те поля, которые вы отметили. -
Попробуйте сами исследовать возможности мониторинга для ресурсов кластера: узлов, подов, балансировщика, сервисов.
-
Закройте окно с запущенной утилитой
wget. Понаблюдайте, как меняется количество активных узлов и подов. Через некоторое время лишние ресурсы освободятся. Найдите на графиках момент выключения нагрузки.
- Категория: Cloud Services Engineer
- Просмотров: 531
ПР. Автомасштабирование в 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). В окне консоли с отслеживанием компонентов кластера вы увидите, как удаляются узлы и поды без нагрузки.
- Категория: Cloud Services Engineer
- Просмотров: 653
Автоматическое масштабирование
- Масштабирование позволяет распределить нагрузку между контейнерами и снизить риск сбоя.
- Ручное масштабирование - трудоёмкий и неэффективный процесс.
- Для автомасштабирования подходят инструменты Horizontal Pod Autoscaler и Cluster Autoscaler.
- Horizontal Pod Autoscaler масштабирует количество под-контейнеров, основываясь на нагрузке и запросах.
- Cluster Autoscaler автоматически изменяет количество узлов Kubernetes, основываясь на запросах под-контейнеров.
- В Yandex Managed Service for Kubernetes инструмент Cluster Autoscaler включён по умолчанию.
Автоматическое масштабирование
Автомасштабирование в Managed Kubernetes
Масштабирование позволяет распределять нагрузку между контейнерами и снизить риск сбоя.
На прошлых уроках мы развернули приложение в кластере из одного пода, а затем масштабировали на три пода. Ручное масштабирование — занятие трудоёмкое и неэффективное. Посмотрим, как его автоматизировать.
Для автомасштабирования подходят инструменты, встроенные в Kubernetes: Horizontal Pod Autoscaler и Cluster Autoscaler. Они решают разные задачи и могут работать как по отдельности, так и совместно.
Horizontal Pod Autoscaler, как понятно из названия, масштабирует поды: увеличивает и уменьшает их количество, когда изменяется нагрузка. Cluster Autoscaler управляет количеством узлов, на которых поды запущены.
Давайте посмотрим на работу этих инструментов поближе.
Horizontal Pod Autoscaler
Horizontal Pod Autoscaler анализирует нагрузку на сервис и исходя из неё создаёт или удаляет поды.
Сервис ориентируется на лимиты (
limits) и запросы (requests). Первые ограничивают ресурсы, доступные поду с контейнерами: процессор, память и др. Если их не указать, контейнер может забрать все ресурсы ноды. Запросы описывают количество свободных ресурсов, которыми должен располагать узел, чтобы на нём можно было запустить ещё один под с сервисом. Если ресурсов недостаточно, придётся создать дополнительный узел.И тут в дело вступает наш второй инструмент.
Cluster Autoscaler
Cluster Autoscaler оценивает запросы подов и автоматически изменяет количество узлов кластера Kubernetes:
- Если из-за нехватки ресурсов не удаётся запустить поды, то новые узлы создаются и добавляются в кластер.
- Если узлы недостаточно утилизируются, а их поды можно перенести на другие узлы, то узлы освобождаются и удаляются из кластера.
В Yandex Managed Service for Kubernetes инструмент Cluster Autoscaler включён по умолчанию. Читайте об этом в разделе документации об автомасштабировании группы узлов
На следующем уроке мы опробуем автомасштабирование на практике.
- Категория: Cloud Services Engineer
- Просмотров: 568
ПР. Балансировка нагрузки
Кратко:
- Веб-приложения должны быть доступны из интернета.
- Сервис LoadBalancer используется для решения этой проблемы.
- Внутренний IP-адрес может меняться, поэтому нужен публичный IP-адрес балансировщика.
- Создается файл-манифест с описанием балансировщика.
- Выполняется манифест с помощью kubectl.
- В консоли управления можно увидеть созданный балансировщик.
- Копируется IP-адрес балансировщика в адресную строку браузера для доступа к приложению.
Практическая работа. Балансировка нагрузки
Большинство веб-приложений созданы, чтобы взаимодействовать через интернет. Вы развернули в кластере приложение, но у вас пока нет к нему доступа из интернета. Чтобы исправить эту проблему, воспользуемся сервисом LoadBalancer.
У созданного пода есть внутренний IP-адрес.
Помните, мы говорили о том, что в кластере есть собственный сервис DNS? Он работает с внутренними IP-адресами объектов кластера, чтобы те могли взаимодействовать.
Однако внутренний IP-адрес может меняться, когда ресурсы группы узлов обновляются. Чтобы обращаться к приложению извне, требуется неизменный публичный IP-адрес — это и будет IP-адрес балансировщика.
-
Создайте файл-манифест
load-balancer.yaml:apiVersion: v1 kind: Service metadata: name: my-loadbalancer spec: selector: app: nginx ports: - port: 80 targetPort: 80 type: LoadBalancerГде:port— порт сетевого балансировщика, на котором будут обслуживаться пользовательские запросы;targetPort— порт контейнера, на котором доступно приложение;selector— метка селектора из шаблона подов в манифесте объектаDeployment. -
Выполните манифест:
kubectl apply -f <путь_к_файлу_load-balancer.yaml>Вы увидите сообщение:service/my-loadbalancer created -
В консоли управления откройте раздел Load Balancer. Там должен появиться балансировщик нагрузки с префиксом k8s в имени и уникальным идентификатором кластера Kubernetes.
-
Скопируйте IP-адрес балансировщика в адресную строку браузера. Вы увидите приветственную страницу NGINX.
Если при создании ресурсов вы получаете ошибку
failed to ensure cloud loadbalancer: failed to start cloud lb creation: Permission denied, убедитесь, что вашему сервисному аккаунту хватает прав. Подробнее читайте в документации.
- Категория: Cloud Services Engineer
- Просмотров: 651
ПР. Первое приложение в кластере
Кратко:
- Развертывание приложения - веб-сервера NGINX в кластере Kubernetes с помощью командной строки.
- Основное средство взаимодействия с кластером - инструмент kubectl.
- Создание манифеста для описания настроек приложения в кластере.
- Выполнение манифеста с помощью команды kubectl apply.
- Получение подробной информации о развернутом приложении с помощью команд kubectl get pods и kubectl describe.
- Масштабирование приложения с помощью изменения файла манифеста или команды kubectl scale.
- Управление кластерами Kubernetes в концепции Infrastructure as Code и возможность развертывания с помощью Terraform.
Практическая работа. Первое приложение в кластере
На прошлом уроке вы создали в консоли управления Yandex Cloud кластер Kubernetes и группу узлов в нём. Теперь с помощью командной строки вы развернете в кластере приложение — веб-сервер NGINX.
-
Основное средство взаимодействия с кластером — инструмент kubectl. Установите его по инструкции.
-
В консоли управления войдите в созданный кластер Managed Service for Kubernetes и нажмите кнопку Подключиться. В открывшемся окне скопируйте команду для подключения:
yc managed-kubernetes cluster get-credentials \ --id <идентификатор_кластера> \ --externalЧтобы проверить правильность установки и подключения, посмотрите на конфигурацию:kubectl config viewОтвет получится примерно таким (IP-адрес сервера и название кластера будут отличаться):apiVersion: v1 clusters: - cluster: certificate-authority-data: DATA+OMITTED server: https://178.154.206.242 name: yc-managed-k8s-cat2oek6hbp7mnhhhr4m contexts: ...
Создание манифеста
Для описания настроек приложения в кластере создадим файл
my-nginx.yaml. Такой файл называется манифестом.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: cr.yandex/<идентификатор_реестра>/ubuntu-nginx:latest
Рассмотрим, из чего он состоит.
-
Директива
apiVersionопределяет, для какой версии Kubernetes написан манифест. От версии к версии обозначение может меняться.apiVersion: apps/v1 -
Директива
kindописывает механизм использования. Она может принимать значенияDeployment,Namespace,Service,Pod,LoadBalancerи т. д. Для развёртывания приложения укажите значение Deployment.kind: Deployment -
Директива
metadataопределяет метаданные приложения: имя, метки (labels), аннотации.С помощью Меток можно идентифицировать, группировать объекты, выбирать их подмножества. Добавляйте и изменяйте метки при создании объектов или позднее, в любое время.Аннотации используют, чтобы добавить собственные метаданные к объектам.Укажем имя приложения:metadata: name: my-nginx-deployment -
В основном блоке
specсодержится описание объектов Kubernetes.Директиваreplicasопределяет масштабирование. Для первого запуска укажите, что приложению нужен один под. Позже вы посмотрите, как приложения масштабируются, и сможете увеличить число подов.Директиваselectorопределяет, какими подами будет управлять контейнер (подробнее о ней можно прочитать в документации). Поды отбираются с помощью метки (label).Директиваtemplateопределяет шаблон пода. Метка в шаблоне должна совпадать с меткой селектора —nginx.В шаблоне содержится ещё одна, собственная директиваspec. Она задаёт настройки контейнеров, которые будет развёрнуты на поде. Нам нужен один контейнер. Используйте для него образ, созданный ранее с помощью Docker и помещённый в реестр Yandex Container Registry.spec: matchLabels: app: nginx replicas: 1 selector: ~ template: metadata: labels: app: nginx spec: containers: - name: nginx image: "cr.yandex/<идентификатор_реестра>/ubuntu-nginx:latest"Настройки манифеста для развёртывания приложения есть в документации Kubernetes.
Выполнение манифеста
-
Для создания или обновления ресурсов в кластере используется команда
apply. Файл манифеста указывается после флага-f.kubectl apply -f <путь_к_файлу_my-nginx.yaml>Если результат будет успешным, вы увидите сообщение:deployment.apps/my-nginx-deployment created -
Чтобы убедиться, что приложение создано, посмотрите список подов:
kubectl get podsДождитесь статусаRunning:NAME READY STATUS RESTARTS AGE my-nginx-deployment-65b9b678b6-zmfww 1/1 Running 0 5m27sТеперь получите более подробную информацию, выполнив ту же команду с флагом-o wide:kubectl get pods -o wideВы увидите внутренний IP-адрес, который присвоен поду. Это пригодится, если нужно узнать, где именно развёрнуто приложение.Чтобы получить максимально подробную информацию о запущенном приложении, используйте командуdescribe:kubectl describe deployment/my-nginx-deployment
Масштабирование
-
Теперь увеличьте количество подов. Вручную это можно сделать двумя способами:
- изменить файл манифеста, указав в директиве
replicasнужное число подов, и снова выполнить командуapply; -
если файла манифеста нет под рукой — использовать команду
scale:kubectl scale --replicas=3 deployment/my-nginx-deployment
- изменить файл манифеста, указав в директиве
Если всё получится, в выводе команды
kubectl get pods вы увидите сообщение:
NAME READY STATUS RESTARTS AGE
my-nginx-deployment-65b9b678b6-6whpp 1/1 Running 0 117s
my-nginx-deployment-65b9b678b6-wtph9 1/1 Running 0 117s
my-nginx-deployment-65b9b678b6-zmfww 1/1 Running 0 14m
На следующей практической работе мы посмотрим, как обращаться извне к кластеру Kubernetes и развёрнутому в нём приложению.
Кластер как код
Как видите, управление кластерами Kubernetes отлично вписывается в концепцию Infrastructure as Code: вы можете описать конфигурацию кластера в текстовом файле — манифесте. Вы также можете разворачивать кластеры Kubernetes с помощью Terraform.
- Категория: Cloud Services Engineer
- Просмотров: 634