Prometheus Operator로 etcd 모니터링 하기
etcd 모니터링 하기
etcd
는 /metrics
라는, 프로메테우스가 수집할 수 있는 매트릭 엔드 포인트를 제공한다.
하지만, Secure Etcd 클러스터인 경우에는 해당 엔드 포인트에 접근하기 위해서는 인증서가 필요하다.
(다른 방법으로는 /metrics
엔드 포인트를 다른 포트로 분리하여, 인증서 없이 접근할 수도 있다. --listen-metrics-urls
옵션을 참고 바란다.)
환경
helm
을 사용해서 prometheus-operator
를 설치할 것이다.
그래서 prometheus-operator
를 설치할때, etcd
를 모니터링하도록 설정 파일을 변경해서 사용한다.
values.yaml 수정하기
kubeEtcd
kubeEtcd.serviceMonitor
의 값들을 변경한다. scheme
를 https로 변경하고, 인증서 정보를 등록한다.
## Component scraping etcd
##
kubeEtcd:
...
serviceMonitor:
scheme: https
insecureSkipVerify: false
serverName: localhost
caFile: /etc/prometheus/secrets/etcd-client-cert/etcd-ca
certFile: /etc/prometheus/secrets/etcd-client-cert/etcd-client
keyFile: /etc/prometheus/secrets/etcd-client-cert/etcd-client-key
...
prometheus
프로메테우스를 기동할때 etcd-client-cert
란 이름의 secret
를 pod
에 마운트하기 위해서,
prometheus.secrets
에 etcd-client-cert
를 추가해 준다.
그리고, etcd
스크랩 설정 추가를 위해서,
prometheus.additionalScrapeConfigs
의 kube-etcd
부분을 활성화 해준다.
## Deploy a Prometheus instance
##
prometheus:
...
secrets:
- "etcd-client-cert"
...
additionalScrapeConfigs:
- job_name: kube-etcd
kubernetes_sd_configs:
- role: node
scheme: https
tls_config:
ca_file: /etc/prometheus/secrets/etcd-client-cert/etcd-ca
cert_file: /etc/prometheus/secrets/etcd-client-cert/etcd-client
key_file: /etc/prometheus/secrets/etcd-client-cert/etcd-client-key
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- source_labels: [__address__]
action: replace
target_label: __address__
regex: ([^:;]+):(\d+)
replacement: ${1}:2379
- source_labels: [__meta_kubernetes_node_name]
action: keep
regex: .*mst.*
- source_labels: [__meta_kubernetes_node_name]
action: replace
target_label: node
regex: (.*)
replacement: ${1}
metric_relabel_configs:
- regex: (kubernetes_io_hostname|failure_domain_beta_kubernetes_io_region|beta_kubernetes_io_os|beta_kubernetes_io_arch|beta_kubernetes_io_instance_type|failure_domain_beta_kubernetes_io_zone)
action: labeldrop
...
인증서 복사하기
etcd
인증서를, 프로메테스를 설치할 monitoring
네임스페이스에,
etcd-client-cert
란 이름의 secret
로 복사한다.
POD_NAME=$(kubectl get pods -o=jsonpath='{.items[0].metadata.name}' -l component=kube-apiserver -n kube-system)
kubectl create secret generic etcd-client-cert -n monitoring \
--from-literal=etcd-ca="$(kubectl exec $POD_NAME -n kube-system -- cat /etc/kubernetes/pki/etcd/ca.crt)" \
--from-literal=etcd-client="$(kubectl exec $POD_NAME -n kube-system -- cat /etc/kubernetes/pki/etcd/healthcheck-client.crt)" \
--from-literal=etcd-client-key="$(kubectl exec $POD_NAME -n kube-system -- cat /etc/kubernetes/pki/etcd/healthcheck-client.key)"
helm
으로 prometheus-operator
설치하기
helm
설치 명령어로, proemtheus-operator
를 설치한다.
수정한 설정값을 적용하기 위해서 --values values.yaml
옵션을 사용한다.
helm install stable/prometheus-operator --name mon --namespace monitoring --values values.yaml --tls
참고 사항
helm
으로 prometheus-operator
를 삭제할때, crd
는 자동으록 삭제되지 않는다.
아래 명령어로 직접 삭제해야한다.
kubectl delete --ignore-not-found customresourcedefinitions \
prometheuses.monitoring.coreos.com \
servicemonitors.monitoring.coreos.com \
podmonitors.monitoring.coreos.com \
alertmanagers.monitoring.coreos.com \
prometheusrules.monitoring.coreos.com
참고 링크
- https://github.com/helm/charts/tree/master/stable/prometheus-operator
- https://github.com/kubernetes-monitoring/kubernetes-mixin
- https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/monitoring.md