• Главная
  • DataScience
  • CloudServicesEngineer
  • Поиск
Data Science

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

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

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

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

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

 

 

Категория: Cloud Services Engineer
Просмотров: 531

МК. ПР. Автомасштабирование в Yandex Managed Kubernetes

ПР. Автомасштабирование в 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® выполняется горизонтальное автомасштабирование.
  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
      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
 
  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=<IP-адрес балансировщика>
 
  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. Остановите цикл создания нагрузки на приложение (комбинация клавиш 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 включён по умолчанию. Читайте об этом в разделе документации об автомасштабировании группы узлов
На следующем уроке мы опробуем автомасштабирование на практике.
 
Проверьте себя:
Чем отличаются сценарии автомасштабирования Horizontal Pod Autoscaler и Cluster Autoscaler?
 
Правильный ответ:
  • Оба ответа верны

 

Категория: Cloud Services Engineer
Просмотров: 568

МК. ПР. Балансировка нагрузки

ПР. Балансировка нагрузки

Кратко:

  • Веб-приложения должны быть доступны из интернета.
  • Сервис LoadBalancer используется для решения этой проблемы.
  • Внутренний IP-адрес может меняться, поэтому нужен публичный IP-адрес балансировщика.
  • Создается файл-манифест с описанием балансировщика.
  • Выполняется манифест с помощью kubectl.
  • В консоли управления можно увидеть созданный балансировщик.
  • Копируется IP-адрес балансировщика в адресную строку браузера для доступа к приложению.

Практическая работа. Балансировка нагрузки

Большинство веб-приложений созданы, чтобы взаимодействовать через интернет. Вы развернули в кластере приложение, но у вас пока нет к нему доступа из интернета. Чтобы исправить эту проблему, воспользуемся сервисом LoadBalancer.
У созданного пода есть внутренний IP-адрес.
Помните, мы говорили о том, что в кластере есть собственный сервис DNS? Он работает с внутренними IP-адресами объектов кластера, чтобы те могли взаимодействовать.
Однако внутренний IP-адрес может меняться, когда ресурсы группы узлов обновляются. Чтобы обращаться к приложению извне, требуется неизменный публичный IP-адрес — это и будет IP-адрес балансировщика.
  1. Создайте файл-манифест 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.
  2. Выполните манифест:
    kubectl apply -f <путь_к_файлу_load-balancer.yaml>
     
    Вы увидите сообщение:
    service/my-loadbalancer created
     
     
  3. В консоли управления откройте раздел Load Balancer. Там должен появиться балансировщик нагрузки с префиксом k8s в имени и уникальным идентификатором кластера Kubernetes.
  4. Скопируйте 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.
  1. Основное средство взаимодействия с кластером — инструмент kubectl. Установите его по инструкции.
  2. В консоли управления войдите в созданный кластер 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
Рассмотрим, из чего он состоит.
  1. Директива apiVersion определяет, для какой версии Kubernetes написан манифест. От версии к версии обозначение может меняться.
    apiVersion: apps/v1
     
     
  2. Директива kind описывает механизм использования. Она может принимать значения Deployment, Namespace, Service, Pod, LoadBalancer и т. д. Для развёртывания приложения укажите значение Deployment.
    kind: Deployment
     
     
  3. Директива metadata определяет метаданные приложения: имя, метки (labels), аннотации.
    С помощью Меток можно идентифицировать, группировать объекты, выбирать их подмножества. Добавляйте и изменяйте метки при создании объектов или позднее, в любое время.
    Аннотации используют, чтобы добавить собственные метаданные к объектам.
     
     
    Укажем имя приложения:
     metadata:
       name: my-nginx-deployment 
     
  4. В основном блоке 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.

Выполнение манифеста

  1. Для создания или обновления ресурсов в кластере используется команда apply. Файл манифеста указывается после флага -f.
    kubectl apply -f <путь_к_файлу_my-nginx.yaml>
     
    Если результат будет успешным, вы увидите сообщение:
    deployment.apps/my-nginx-deployment created
     
  2. Чтобы убедиться, что приложение создано, посмотрите список подов:
    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
     
     

Масштабирование

  1. Теперь увеличьте количество подов. Вручную это можно сделать двумя способами:
    • изменить файл манифеста, указав в директиве 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
  1. МК. ПР. Создание кластера
  2. MK. Оркестрация и Kubernetes
  3. KDO. ПР. Создание докер-образа и загрузка его в Container Registry
  4. KDO. Yandex Container Registry

Страница 9 из 19

  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
© Gantry Framework 2016 - 2026
Developed by RocketTheme exclusively
for Gantry 5.
  • Главная
  • Начало
  • Карта
Back to top