Kubernetes Notes (21) — Архитектура мониторинга нового поколения

Kubernetes
Kubernetes Notes (21) — Архитектура мониторинга нового поколения

Это 24-й день моего участия в Gengwen Challenge.Подробности о мероприятии:Обновить вызов

21. Архитектура мониторинга следующего поколения

21.1 Основная линейка индикаторов

Состоит из kubelet, metrics-server и API, предоставляемых apiserver; кумулятивное использование основного ЦП, использование памяти в реальном времени, использование ресурсов POD и использование диска контейнера.

  • metrics-server (метод сбора метрик ресурсов нового поколения)

Это apiserver, он используется только для обслуживания основной службы индикаторов, он не является частью k8s, он размещается только на k8s POD.

Прокси-сервер следует добавить во внешний интерфейс k8s apiserver и metrics-server apiserver, который представляет собой агрегатор, объединяющий несколько разных apiсерверов в один. Это kube-агрегатор, и агрегированный им API будет получен через /apis/metrics.k8s.io/v1/beta1.

21.2 Мониторинг трубопровода

Он используется для сбора различных данных индикаторов из системы и предоставления конечным пользователям, системам хранения и HPA.Он включает в себя основные индикаторы и неосновные индикаторы.Неосновные индикаторы не могут быть поняты k8s.k8s-prometheus-adapter преобразуется в формат, понятный k8s плагину

  • prometheus

Второй по величине проект в рамках CNCF, собирающий индикаторы различных измерений,

Он собирает информацию, чтобы решить, следует ли выполнять HPA (автоматическое масштабирование) в качестве критерия.

prometheus используется и как система мониторинга, и как поставщик специальных индикаторов, но если вы хотите использовать его как специальный индикатор для такого механизма, как HPA, вам нужно преобразовать формат, и плагин, который преобразует это в специальный индикатор называется: k8s-prometheus-adapter.

21.3 Установка сервера метрик

  • Официальный репозиторий, здесь я использую первый
https://github.com/kubernetes-incubator/metrics-server/tree/master/deploy/1.8%2B      # 插件官方地址
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/metrics-server    # k8s 官方插件示例
  • Установите и разверните соответствующие файлы: /tree/master/deploy/, измените файл metrics-server-deployment.yaml.
      containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.1
        imagePullPolicy: Always
        args:                                               # 添加参数
        - '--kubelet-preferred-address-types=InternalIP'    # 不使用主机名,使用 IP
        - '--kubelet-insecure-tls'                          # 不验证客户端证书
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp

$ kubectl apply -f ./
  • Просмотр запуска POD и службы
$ kubectl get pods -n kube-system
$ kubectl get svc -n kube-system
  • Посмотрите, существует ли он в API, metrics.k8s.io/v1beta1.
$ kubectl api-versions
  • Получить данные мониторинга через тестовый интерфейс, kubectl proxy --port 8080, kubectl top также можно использовать в обычном режиме.
$ curl http://127.0.0.1:8080/apis/metrics.k8s.io/v1beta1
$ kubectl top nodes

21.4 Установить прометей

  • Принцип работы
-   prometheus 通过 pull metrilcs 指令从每个 Jobs/exporters 拉取数据
-   其他的 short-lived jobs 也可以通过向 pushgateway 主动发送数据,由 prometheus 被动接收
-   prometheus 自身实现了一个时间序列数据库,会将得到的数据存储到其中
-   在 k8s 需要使用 service discovery 来发现服务取得需要监控的目标
-   可以使用 apiclient、webui、Grafana、来将 prometheus 中的数据展示出来
-   当需要报警的时候还会推送给 alertmanager 这个组件由这个组件来发送报警
  • файл развертывания
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/prometheus
https://github.com/iKubernetes/k8s-prom

21.5 Режим командной строки HPA

  • Создание POD и сервисов
kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=1 --requests='cpu=50m',memory='256Mi' --limits='cpu=50m,memory=256Mi' --labels='app=myapp' --expose --port=80
  • Создайте контроллер HPA
kubectl autoscale deployment myapp --min=1 --max=8 --cpu-percent=60
  • Посмотреть контроллер HPA, kubectl получить HPA
NAME    REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
myapp   Deployment/myapp   0%/60%    1         8         1          17s
  • Начать стресс-тест
ab -c 100 -n 5000000 http://172.16.100.102:32749/index.html
  • Результаты теста, автоматическое расширение вступает в силу
$ kubectl get hpa -w
NAME    REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
myapp   Deployment/myapp   0%/60%    1         8         1          7m35s
myapp   Deployment/myapp   34%/60%   1         8         1          9m58s
myapp   Deployment/myapp   102%/60%   1         8         1          11m
myapp   Deployment/myapp   102%/60%   1         8         2          11m
myapp   Deployment/myapp   96%/60%    1         8         2          12m
myapp   Deployment/myapp   96%/60%    1         8         4          12m
myapp   Deployment/myapp   31%/60%    1         8         4          13m
myapp   Deployment/myapp   26%/60%    1         8         4          14m
myapp   Deployment/myapp   0%/60%     1         8         4          15m
myapp   Deployment/myapp   0%/60%     1         8         4          17m
myapp   Deployment/myapp   0%/60%     1         8         3          18m

$ kubectl get pods
NAME                     READY   STATUS        RESTARTS   AGE
myapp-64bf6764c5-45qwj   0/1     Terminating   0          7m1s
myapp-64bf6764c5-72crv   1/1     Running       0          20m
myapp-64bf6764c5-gmz6c   1/1     Running       0          8m1s

21.6 Контрольный список HPA

  • См. определение манифеста: kubectl, объясните hpa.spec.
maxReplicas                       <integer>         # 自动伸缩的 POD 数量上限
minReplicas                       <integer>         # 自动伸缩的 POD 数量下限
scaleTargetRef	                  <Object>          # 其他的伸缩指标
  apiVersion                      <string>          # 指标 api 版本
  kind                            <string>          # 指标类型
  name                            <string>          # 可用指标
targetCPUUtilizationPercentage    <integer>         # 根据目标 平均 CPU 利用率阈值评估自动伸缩
  • Пример манифеста, который реализует автоматическое масштабирование POD под контроллером развертывания myapp
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa-v2
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 55
  - type: Resource
    resource:
      name: memory
      targetAverageValue: 50Mi

разное

Публикуйте свои заметки по адресу:GitHub.com/RedHat Series/Арвин…Добро пожаловать в один клик