Метрики kubernetes
Сбор метрик с control plane¶
На этой странице приведена инструкция по развертыванию и конфигурированию кластера для тестового сбора метрик с компонент:
- kube-api
- controller-manager
- scheduler
- etcd
1 шаг. Установка minikube¶
Инструкция и конфигурация minikube описаны на странице с установкой.
2 шаг. Установка и конфигурирование Victoria Metrics¶
Установка кластерной версии Victoria Metrics с помощью менеджера пакетов Helm:
helm repo add victoria-metrics https://victoriametrics.github.io/helm-charts/ \
repo update \
install victoria-metrics victoria-metrics/victoria-metrics-cluster
Настроим проброс портов для доступа к UI:
export POD_NAME=$(kubectl get pods --namespace default -l "app=vmselect" -o jsonpath="{.items[0].metadata.name}") \
kubectl --namespace default port-forward $POD_NAME 8481 &>/dev/null &
3 шаг. Установка и конфигурирование Grafana¶
Создаем файл конфигурации
со следующим содержанием:datasources:
datasources.yaml:
apiVersion: 1
datasources:
- name: VictoriaMetrics
type: prometheus
url: http://victoria-metrics-victoria-metrics-cluster-vmselect.default.svc.cluster.local.:8481/select/0/prometheus/
access: proxy
isDefault: true
helm repo add grafana https://grafana.github.io/helm-charts \
repo update \
install grafana grafana/grafana -f grafana-values.yaml
Настроим проброс портов для доступа к UI:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana" -o jsonpath="{.items[0].metadata.name}") \
kubectl --namespace default port-forward $POD_NAME 3000 &>/dev/null &
Логин: admin
Пароль (хранится внутри кластера):
kubectl get secret --namespace default grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
4 шаг. Установка и конфигурирование Prometheus¶
Чтобы Prometheus смог обращаться к etcd, загрузим в кластер сертификаты и ключ:
minikube ssh "cat /var/lib/minikube/certs/etcd/ca.crt" > ca.crt
minikube ssh "cat /var/lib/minikube/certs/etcd/healthcheck-client.crt" > healthcheck-client.crt
minikube ssh "cat /var/lib/minikube/certs/etcd/healthcheck-client.key" > healthcheck-client.key
kubectl create secret generic etcd-client-cert \
--from-file=ca.crt \
--from-file=healthcheck-client.crt \
--from-file=healthcheck-client.key
apiVersion: apps/v1
kind: Deployment
name: prometheus-server
...
template:
spec:
containers:
- volumeMounts:
- mountPath: /etc/prometheus/secrets/etcd-client-cert
name: etcd-secret
volumes:
- name: etcd-secret
secret:
defaultMode: 420
secretName: etcd-client-cert
server:
remoteWrite:
- url: "http://victoria-metrics-victoria-metrics-cluster-vminsert.default.svc.cluster.local.:8480/insert/0/prometheus/"
scrape_configs:
- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
job_name: kubernetes-apiservers
scrape_interval: 10s
scheme: https
metrics_path: /metrics
static_configs:
- targets:
- <node-ip>:8443
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
job_name: kubernetes-etcd
scrape_interval: 10s
scheme: https
metrics_path: /metrics
static_configs:
- targets:
- <node-ip>:2379
tls_config:
ca_file: /etc/prometheus/secrets/etcd-client-cert/ca.crt
cert_file: /etc/prometheus/secrets/etcd-client-cert/healthcheck-client.crt
key_file: /etc/prometheus/secrets/etcd-client-cert/healthcheck-client.key
insecure_skip_verify: true
- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
job_name: kubernetes-scheduler
scrape_interval: 10s
scheme: https
metrics_path: /metrics
static_configs:
- targets:
- <node-ip>:10259
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
- bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
job_name: kubernetes-controller
scrape_interval: 10s
scheme: https
metrics_path: /metrics
static_configs:
- targets:
- <node-ip>:10257
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
Установка Prometheus с помощью менеджера пакетов Helm:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts \
repo update \
install prometheus prometheus-community/prometheus -f prometheus.yaml
Настроим проброс портов для доступа к UI:
export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=prometheus,app.kubernetes.io/instance=prometheus" -o jsonpath="{.items[0].metadata.name}") \
kubectl --namespace default port-forward $POD_NAME 9090 &>/dev/null &
Адрес UI: http://localhost:9090/targets