Это 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/Арвин…Добро пожаловать в один клик