티스토리 뷰
Helm chart를 활용한 Prometheus & Grafana Kubernetes에 구성하기
GodNR 2020. 3. 3. 23:48서론
본 포스팅에서는 Prometheus와 Grafana를 활용하여 분산트랜잭션 환경에서 반드시 필요한 모니터링 방법에 대해 살펴보도록 하겠습니다.
특히 Kubernetes 환경에서 yaml 파일을 관리하고 배포를 관리하는 Helm Chart를 활용하여 배포하는 방법에 대해 알아보겠습니다.
본론
먼저 Helm Chart에 대해 간단히 살펴보고 설치를 진행하도록 하겠습니다.
Helm Chart는 Kubernetes의 패키지 매니저 역할을 담당합니다. Chart라는 단위를 통해 Kubernetes Deployment를 관리하고 yaml파일을 등록하여 저장하는 저장소의 역할을 수행합니다.
대체로 Kubernetes를 통해 컨테이너 환경과 분산트랜잭션 환경을 구성하는데 가장 어려움을 느끼는 부분이 바로 Dockerfile이나 yaml 파일과 같은 환경 파일을 작성하는데 어려움이 있다는 점입니다.
대부분의 운영자, 개발자는 yaml 파일을 작성하기 시작하면서 부터 포기하는 경우가 많이 있습니다.
저 역시 3년 전.. 처음 접할때 yaml 파일을 보고 이건 대체 뭐지 하면서.. 어려움을 느낀 경험도 있었구요..
Helm에서 제공하는 Repository는 github에 등록되어 있습니다. 공개되어 있어 누구나 다운로드를 받을 수 있습니다.
[root@kubemaster ~]# git clone https://github.com/helm/charts.git
Cloning into 'charts'...
remote: Enumerating objects: 20, done.
remote: Counting objects: 100% (20/20), done.
remote: Compressing objects: 100% (20/20), done.
remote: Total 101793 (delta 9), reused 0 (delta 0), pack-reused 101773
Receiving objects: 100% (101793/101793), 27.70 MiB | 8.13 MiB/s, done.
Resolving deltas: 100% (75670/75670), done.
[root@kubemaster ~]#
위와 같이 다운로드를 받으면 아래와 같이 chart repo를 확인할 수 있으며, chart에는 stable, incubator, test version으로 각각 다양한 Package들이 제공됩니다.
대체로 Helm에서는 stable로 제공되는 안정된 버전의 Chart를 활용하는 것을 권고합니다.
[root@kubemaster stable]# pwd
/root/charts/stable
[root@kubemaster stable]# ls
acs-engine-autoscaler coredns filebeat horovod kubernetes-dashboard msoms phabricator rethinkdb sumologic-fluentd
aerospike cosbench fluent-bit hubot kuberos mssql-linux phpbb risk-advisor superset
airflow coscale fluentd ignite kube-slack mysql phpmyadmin rocketchat swift
ambassador couchbase-operator fluentd-elasticsearch inbucket kube-state-metrics mysqldump pomerium rookout sysdig
anchore-engine couchdb g2 influxdb kubewatch namerd postgresql sapho telegraf
apm-server dask gangway ingressmonitorcontroller kured nats prestashop satisfy tensorflow-notebook
ark dask-distributed gce-ingress instana-agent lamp neo4j presto schema-registry-ui tensorflow-serving
artifactory datadog gcloud-endpoints ipfs linkerd newrelic-infrastructure prisma sealed-secrets terracotta
artifactory-ha dex gcloud-sqlproxy jaeger-operator locust nextcloud prometheus searchlight testlink
atlantis distributed-jmeter gcp-night-king janusgraph logdna-agent nfs-client-provisioner prometheus-adapter selenium tomcat
auditbeat distributed-tensorflow ghost jasperreports logstash nfs-server-provisioner prometheus-blackbox-exporter sematext-agent traefik
aws-cluster-autoscaler distribution gitlab-ce jenkins luigi nginx-ingress prometheus-cloudwatch-exporter sematext-docker-agent uchiwa
aws-iam-authenticator dmarc2logstash gitlab-ee joomla magento nginx-ldapauth-proxy prometheus-consul-exporter sensu unbound
bitcoind docker-registry gocd k8s-spot-rescheduler magic-ip-address nginx-lego prometheus-couchdb-exporter sentry unifi
bookstack dokuwiki goldpinger k8s-spot-termination-handler magic-namespace node-problem-detector prometheus-mongodb-exporter seq vault-operator
buildkite drone grafana kafka-manager mailhog node-red prometheus-mysql-exporter signalfx-agent velero
burrow drupal graphite kanister-operator mariadb oauth2-proxy prometheus-nats-exporter signalsciences verdaccio
centrifugo efs-provisioner graylog kapacitor mattermost-team-edition odoo prometheus-node-exporter socat-tunneller voyager
cerebro elastabot hackmd karma mcrouter opa prometheus-operator sonarqube vsphere-cpi
cert-manager elastalert hadoop katafygio mediawiki opencart prometheus-postgres-exporter sonatype-nexus wavefront
chaoskube elasticsearch hazelcast keel memcached openebs prometheus-pushgateway spark weave-cloud
chartmuseum elasticsearch-curator hazelcast-jet keycloak mercure openiban prometheus-rabbitmq-exporter spark-history-server weave-scope
chronograf elasticsearch-exporter heapster kiam metabase openldap prometheus-redis-exporter spartakus wordpress
clamav elastic-stack heartbeat kibana metallb openvpn prometheus-snmp-exporter spinnaker xray
cloudserver envoy helm-exporter kong metricbeat orangehrm prometheus-to-sd spotify-docker-gc zeppelin
cluster-autoscaler etcd-operator hl-composer kube2iam metrics-server osclass quassel spring-cloud-data-flow zetcd
cluster-overprovisioner ethereum hlf-ca kubed minecraft owncloud rabbitmq stackdriver-exporter
cockroachdb eventrouter hlf-couchdb kubedb minio pachyderm rabbitmq-ha stash
collabora-code express-gateway hlf-ord kube-hunter mission-control parse redis stellar-core
concourse external-dns hlf-peer kube-lego mongodb percona redis-ha stolon
consul factorio hoard kube-ops-view mongodb-replicaset percona-xtradb-cluster redmine suitecrm
contour falco home-assistant kuberhealthy moodle pgadmin reloader sumokube
[root@kubemaster stable]#
위와 같이 stable 버전으로 제공되는 다양한 Package 중 Prometheus와 Grafana에 대한 구성을 진행해 보겠습니다.
여기서 활용할 패키지는 총 4개로 다음과 같습니다.
[root@kubemaster myhelm]# ls -al
total 4
drwxr-xr-x. 6 root root 132 Mar 3 21:26 .
drwxr-xr-x. 6 root root 68 Mar 3 17:26 ..
drwxr-xr-x. 5 root root 138 Mar 3 17:27 grafana
drwxr-xr-x. 3 root root 110 Mar 3 17:27 kube-state-metrics
drwxr-xr-x. 3 root root 110 Mar 3 17:27 prometheus-node-exporter
drwxr-xr-x. 7 root root 269 Mar 3 17:29 prometheus-operator
[root@kubemaster myhelm]#
하나의 Chart는 templates와 values 그리고 다시 chart로 구성되어 있습니다.
- templates : Kubernetes Deployment, Service 등의 Kubernetes Object들의 템플릿들을 정의해 놓은 yaml 파일들
- values.yaml : template의 yaml 파일들에 적용할 변수화해놓은 변수들을 넣어줄 파일
- chart : 해당 chart에서 사용할 외부 chart 즉 참조해야 하는 라이브러리 파일
즉 하나의 Chart를 등록하기 위해서는 templates에 정의 된 yaml 파일을 커스터마이징하기 위해 values.yaml 파일을 수정하며, chart 디렉토리에 참조해야 할 라이브러리들 즉 또 다른 Chart의 패키징된 파일을 저장해야 합니다.
Helm은 Client-Server 구조를 취하고 있습니다. 사용자가 사용하는 CLI가 helm이고 실제로 Kubernetes에서 배포를 하고 관리하는 서버는 tiller라고 부릅니다. 그래서 사용자는 우선 Helm을 로컬에 설치하고 tiller를 서버에 배포해서 사용하게 됩니다.
Helm은 Kubernetes 설치 시 Kubespray의 addons 중 하나로 지정하여 손쉽게 설치할 수 있습니다.
물론 수동으로 설치할 수도 있으며, 이때는 helm과 tiller를 함께 설치하여 수동으로 구성해 주어야 합니다.
helm 자체를 설치하는 방법은 워낙 많은 포스팅에서 제공되고 있으니 언급하지 않고 활용 방법에 대해서만 살펴보겠습니다.
앞서 다운로드 받은 helm package 중 grafana, kube-state-metrics, prometheus-node-exporter, prometheus-operator package를 특정 공간에 복사하고 이를 커스터 마이징하여 Chart를 등록해 보도록 하겠습니다.
1) Chart 관리
Chart에서 values.yaml 파일은 yaml 파일에 저장되는 변수의 집합이라고 앞서 살펴보았습니다.
여기서 수정해야 할 부분은 node에 부여되는 label들에 대한 nodeSelector를 지정하여 Prometheus와 Grafana Pod가 특정 서버에 배치될 수 있도록 구성하는 것입니다.
먼저 현재 Node의 Label은 다음과 같습니다.
[root@kubemaster charts]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
kubemaster Ready master 6h33m v1.16.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kubemaster,kubernetes.io/os=linux,node-role.kubernetes.io/master=
kubeworker1 Ready <none> 6h32m v1.16.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,key=monitoring,kubernetes.io/arch=amd64,kubernetes.io/hostname=kubeworker1,kubernetes.io/os=linux
kubeworker2 Ready <none> 6h32m v1.16.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=kubeworker2,kubernetes.io/os=linux
[root@kubemaster charts]#
이 중 kubeworker1에만 등록되어 있는 key=monitoring이라는 label을 기반으로 Prometheus와 Grafana를 배치해 보도록 하겠습니다.
[root@kubemaster myhelm]# grep -i '^\ *nodeselector' -A 1 -B 1 grafana/values.yaml
#
nodeSelector:
key: monitoring
[root@kubemaster myhelm]# grep -i '^\ *nodeselector' -A 1 -B 1 kube-state-metrics/values.yaml
## Ref: https://kubernetes.io/docs/user-guide/node-selection/
nodeSelector:
key: monitoring
[root@kubemaster myhelm]# grep -i '^\ *nodeselector' -A 1 -B 1 prometheus-node-exporter/values.yaml
##
nodeSelector: {}
# beta.kubernetes.io/arch: amd64
[root@kubemaster myhelm]# grep -i '^\ *nodeselector' -A 1 -B 1 prometheus-operator/values.yaml
##
nodeSelector:
key: monitoring
--
podAnnotations: {}
nodeSelector:
key: monitoring
--
##
nodeSelector:
key: monitoring
--
##
nodeSelector:
key: monitoring
[root@kubemaster myhelm]#
위와 같이 grafana, kube-state-metrics, prometheus-node-exporter, prometheus-operator에 대한 volues.yaml을 각각 수정합니다.
모든 nodeSelector에 대한 value를 key: monitoring으로 변경하되 prometheus-node-exporter는 모든 모니터링해야 하는 노드에 배치되어야 하므로 수정없이 nodeSelector: {}를 유지합니다.
values.yaml 파일의 수정이 완료되었으면, 다음으로 prometheus-operator가 Chart를 등록할 때 참조해야 하는 grafana, kube-state-metrics, prometheus-node-exporter에 대한 package를 수행하여 charts 디렉토리에 추가합니다.
[root@kubemaster myhelm]# helm package grafana/
Successfully packaged chart and saved it to: /root/git_repo/myhelm/grafana-5.0.4.tgz
[root@kubemaster myhelm]# helm package kube-state-metrics/
Successfully packaged chart and saved it to: /root/git_repo/myhelm/kube-state-metrics-2.7.1.tgz
[root@kubemaster myhelm]# helm package prometheus-node-exporter/
Successfully packaged chart and saved it to: /root/git_repo/myhelm/prometheus-node-exporter-1.9.0.tgz
[root@kubemaster myhelm]# mv *.tgz prometheus-operator/charts/
[root@kubemaster myhelm]# ls -la prometheus-operator/charts/
total 36
drwxr-xr-x. 2 root root 109 Mar 3 21:26 .
drwxr-xr-x. 7 root root 269 Mar 3 17:29 ..
-rw-r--r--. 1 root root 19298 Mar 3 21:26 grafana-5.0.4.tgz
-rw-r--r--. 1 root root 6653 Mar 3 21:26 kube-state-metrics-2.7.1.tgz
-rw-r--r--. 1 root root 6571 Mar 3 21:26 prometheus-node-exporter-1.9.0.tgz
[root@kubemaster myhelm]#
위와 같이 helm package로 chart를 packaging하고 이를 charts 디렉토리로 move 시킵니다.
2) Prometheus chart 설치
chart를 등록하기 이전에 grafana와 prometheus alertmanage가 사용하는 pv.yaml을 등록합니다.
[root@kubemaster myhelm]# cat pv-monitoring.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-for-alertmanager
spec:
capacity:
storage: 50Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /root/nfs/alertmanager
server: 192.168.56.102
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-for-grafana
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /root/nfs/grafana
server: 192.168.56.102
[root@kubemaster myhelm]#
kubectl create -f pv.yaml 을 등록하면 아래와 같이 pv를 확인할 수 있습니다.
[root@kubemaster myhelm]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-for-alertmanager 50Gi RWO Retain Available 3h56m
pv-for-grafana 10Gi RWO Retain Available 3h56m
[root@kubemaster myhelm]#
이제 helm install을 활용하여 helm chart를 등록해 보도록 하겠습니다.
(helm install --name [chart_name] --namespace [namespace] [chart_path])
[root@kubemaster prometheus-operator]# pwd
/root/git_repo/myhelm/prometheus-operator
[root@kubemaster prometheus-operator]# helm install --name prometheus --namespace monitoring .
NAME: prometheus
LAST DEPLOYED: Tue Mar 3 21:32:02 2020
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/Alertmanager
NAME AGE
prometheus-prometheus-oper-alertmanager 31s
==> v1/ClusterRole
NAME AGE
prometheus-grafana-clusterrole 32s
prometheus-prometheus-oper-operator 32s
prometheus-prometheus-oper-operator-psp 32s
prometheus-prometheus-oper-prometheus 32s
prometheus-prometheus-oper-prometheus-psp 32s
psp-prometheus-kube-state-metrics 32s
psp-prometheus-prometheus-node-exporter 32s
==> v1/ClusterRoleBinding
NAME AGE
prometheus-grafana-clusterrolebinding 32s
prometheus-prometheus-oper-operator 32s
prometheus-prometheus-oper-operator-psp 32s
prometheus-prometheus-oper-prometheus 32s
prometheus-prometheus-oper-prometheus-psp 32s
psp-prometheus-kube-state-metrics 32s
psp-prometheus-prometheus-node-exporter 32s
==> v1/ConfigMap
NAME DATA AGE
prometheus-grafana 1 32s
prometheus-grafana-config-dashboards 1 32s
prometheus-grafana-test 1 32s
prometheus-prometheus-oper-apiserver 1 32s
prometheus-prometheus-oper-cluster-total 1 32s
prometheus-prometheus-oper-controller-manager 1 32s
prometheus-prometheus-oper-etcd 1 32s
prometheus-prometheus-oper-grafana-datasource 1 32s
prometheus-prometheus-oper-k8s-coredns 1 32s
prometheus-prometheus-oper-k8s-resources-cluster 1 32s
prometheus-prometheus-oper-k8s-resources-namespace 1 32s
prometheus-prometheus-oper-k8s-resources-node 1 32s
prometheus-prometheus-oper-k8s-resources-pod 1 32s
prometheus-prometheus-oper-k8s-resources-workload 1 32s
prometheus-prometheus-oper-k8s-resources-workloads-namespace 1 32s
prometheus-prometheus-oper-kubelet 1 32s
prometheus-prometheus-oper-namespace-by-pod 1 32s
prometheus-prometheus-oper-namespace-by-workload 1 32s
prometheus-prometheus-oper-node-cluster-rsrc-use 1 32s
prometheus-prometheus-oper-node-rsrc-use 1 32s
prometheus-prometheus-oper-nodes 1 32s
prometheus-prometheus-oper-persistentvolumesusage 1 32s
prometheus-prometheus-oper-pod-total 1 32s
prometheus-prometheus-oper-pods 1 32s
prometheus-prometheus-oper-prometheus 1 32s
prometheus-prometheus-oper-proxy 1 32s
prometheus-prometheus-oper-scheduler 1 32s
prometheus-prometheus-oper-statefulset 1 32s
prometheus-prometheus-oper-workload-total 1 32s
==> v1/DaemonSet
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
prometheus-prometheus-node-exporter 3 3 3 3 3 <none> 31s
==> v1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
prometheus-grafana 1/1 1 1 31s
prometheus-kube-state-metrics 1/1 1 1 31s
prometheus-prometheus-oper-operator 1/1 1 1 31s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
prometheus-grafana-58d5bbf9f4-dkqxm 3/3 Running 0 31s
prometheus-kube-state-metrics-556f95ff74-ghb92 1/1 Running 0 31s
prometheus-prometheus-node-exporter-2tkzw 1/1 Running 0 31s
prometheus-prometheus-node-exporter-qmnhh 1/1 Running 0 31s
prometheus-prometheus-node-exporter-s4cbk 1/1 Running 0 31s
prometheus-prometheus-oper-operator-78595b64c-8fqxl 2/2 Running 0 31s
==> v1/Prometheus
NAME AGE
prometheus-prometheus-oper-prometheus 31s
==> v1/PrometheusRule
NAME AGE
prometheus-prometheus-oper-alertmanager.rules 30s
prometheus-prometheus-oper-etcd 30s
prometheus-prometheus-oper-general.rules 30s
prometheus-prometheus-oper-k8s.rules 30s
prometheus-prometheus-oper-kube-apiserver-error 30s
prometheus-prometheus-oper-kube-apiserver.rules 30s
prometheus-prometheus-oper-kube-prometheus-node-recording.rules 30s
prometheus-prometheus-oper-kube-scheduler.rules 30s
prometheus-prometheus-oper-kubernetes-absent 30s
prometheus-prometheus-oper-kubernetes-apps 30s
prometheus-prometheus-oper-kubernetes-resources 30s
prometheus-prometheus-oper-kubernetes-storage 30s
prometheus-prometheus-oper-kubernetes-system 30s
prometheus-prometheus-oper-kubernetes-system-apiserver 30s
prometheus-prometheus-oper-kubernetes-system-controller-manager 30s
prometheus-prometheus-oper-kubernetes-system-kubelet 30s
prometheus-prometheus-oper-kubernetes-system-scheduler 30s
prometheus-prometheus-oper-node-exporter 30s
prometheus-prometheus-oper-node-exporter.rules 30s
prometheus-prometheus-oper-node-network 30s
prometheus-prometheus-oper-node-time 30s
prometheus-prometheus-oper-node.rules 30s
prometheus-prometheus-oper-prometheus 30s
prometheus-prometheus-oper-prometheus-operator 30s
==> v1/Role
NAME AGE
prometheus-grafana-test 32s
prometheus-prometheus-oper-alertmanager 32s
==> v1/RoleBinding
NAME AGE
prometheus-grafana-test 32s
prometheus-prometheus-oper-alertmanager 32s
==> v1/Secret
NAME TYPE DATA AGE
alertmanager-prometheus-prometheus-oper-alertmanager Opaque 1 32s
prometheus-grafana Opaque 3 32s
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus-grafana ClusterIP 10.233.23.0 <none> 80/TCP 32s
prometheus-kube-state-metrics ClusterIP 10.233.4.171 <none> 8080/TCP 31s
prometheus-prometheus-node-exporter ClusterIP 10.233.54.30 <none> 9100/TCP 31s
prometheus-prometheus-oper-alertmanager ClusterIP 10.233.29.188 <none> 9093/TCP 32s
prometheus-prometheus-oper-coredns ClusterIP None <none> 9153/TCP 32s
prometheus-prometheus-oper-kube-controller-manager ClusterIP None <none> 10252/TCP 32s
prometheus-prometheus-oper-kube-etcd ClusterIP None <none> 2379/TCP 32s
prometheus-prometheus-oper-kube-proxy ClusterIP None <none> 10249/TCP 32s
prometheus-prometheus-oper-kube-scheduler ClusterIP None <none> 10251/TCP 32s
prometheus-prometheus-oper-operator ClusterIP 10.233.9.20 <none> 8080/TCP,443/TCP 32s
prometheus-prometheus-oper-prometheus ClusterIP 10.233.8.84 <none> 9090/TCP 31s
==> v1/ServiceAccount
NAME SECRETS AGE
prometheus-grafana 1 32s
prometheus-grafana-test 1 32s
prometheus-kube-state-metrics 1 32s
prometheus-prometheus-node-exporter 1 32s
prometheus-prometheus-oper-alertmanager 1 32s
prometheus-prometheus-oper-operator 1 32s
prometheus-prometheus-oper-prometheus 1 32s
==> v1/ServiceMonitor
NAME AGE
prometheus-prometheus-oper-alertmanager 30s
prometheus-prometheus-oper-apiserver 30s
prometheus-prometheus-oper-coredns 30s
prometheus-prometheus-oper-grafana 30s
prometheus-prometheus-oper-kube-controller-manager 30s
prometheus-prometheus-oper-kube-etcd 30s
prometheus-prometheus-oper-kube-proxy 30s
prometheus-prometheus-oper-kube-scheduler 30s
prometheus-prometheus-oper-kube-state-metrics 30s
prometheus-prometheus-oper-kubelet 30s
prometheus-prometheus-oper-node-exporter 30s
prometheus-prometheus-oper-operator 30s
prometheus-prometheus-oper-prometheus 30s
==> v1beta1/ClusterRole
NAME AGE
prometheus-kube-state-metrics 32s
==> v1beta1/ClusterRoleBinding
NAME AGE
prometheus-kube-state-metrics 32s
==> v1beta1/MutatingWebhookConfiguration
NAME AGE
prometheus-prometheus-oper-admission 31s
==> v1beta1/PodSecurityPolicy
NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP READONLYROOTFS VOLUMES
prometheus-grafana false RunAsAny RunAsAny RunAsAny RunAsAny false configMap,emptyDir,projected,secret,downwardAPI,persistentVolumeClaim
prometheus-grafana-test false RunAsAny RunAsAny RunAsAny RunAsAny false configMap,downwardAPI,emptyDir,projected,secret
prometheus-kube-state-metrics false RunAsAny MustRunAsNonRoot MustRunAs MustRunAs false secret
prometheus-prometheus-node-exporter false RunAsAny RunAsAny MustRunAs MustRunAs false configMap,emptyDir,projected,secret,downwardAPI,persistentVolumeClaim,hostPath
prometheus-prometheus-oper-alertmanager false RunAsAny RunAsAny MustRunAs MustRunAs false configMap,emptyDir,projected,secret,downwardAPI,persistentVolumeClaim
prometheus-prometheus-oper-operator false RunAsAny RunAsAny MustRunAs MustRunAs false configMap,emptyDir,projected,secret,downwardAPI,persistentVolumeClaim
prometheus-prometheus-oper-prometheus false RunAsAny RunAsAny MustRunAs MustRunAs false configMap,emptyDir,projected,secret,downwardAPI,persistentVolumeClaim
==> v1beta1/Role
NAME AGE
prometheus-grafana 32s
==> v1beta1/RoleBinding
NAME AGE
prometheus-grafana 32s
==> v1beta1/ValidatingWebhookConfiguration
NAME AGE
prometheus-prometheus-oper-admission 30s
NOTES:
The Prometheus Operator has been installed. Check its status by running:
kubectl --namespace monitoring get pods -l "release=prometheus"
Visit https://github.com/coreos/prometheus-operator for instructions on how
to create & configure Alertmanager and Prometheus instances using the Operator.
[root@kubemaster prometheus-operator]# helm list
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
prometheus 1 Tue Mar 3 21:32:02 2020 DEPLOYED prometheus-operator-8.10.0 0.36.0 monitoring
[root@kubemaster prometheus-operator]# helm get notes prometheus
NOTES:
The Prometheus Operator has been installed. Check its status by running:
kubectl --namespace monitoring get pods -l "release=prometheus"
Visit https://github.com/coreos/prometheus-operator for instructions on how
to create & configure Alertmanager and Prometheus instances using the Operator.
[root@kubemaster prometheus-operator]#
위와 같이 chart install이 정상적으로 완료되면 helm list로 등록된 chart를 확인할 수 있습니다.
Kubernetes에 정상 배포되었는지 확인해 보도록 하겠습니다.
[root@kubemaster stable]# kubectl get all -n monitoring
NAME READY STATUS RESTARTS AGE
pod/alertmanager-prometheus-prometheus-oper-alertmanager-0 2/2 Running 0 2m37s
pod/prometheus-grafana-58d5bbf9f4-dkqxm 3/3 Running 0 2m42s
pod/prometheus-kube-state-metrics-556f95ff74-ghb92 1/1 Running 0 2m42s
pod/prometheus-prometheus-node-exporter-2tkzw 1/1 Running 0 2m42s
pod/prometheus-prometheus-node-exporter-qmnhh 1/1 Running 0 2m42s
pod/prometheus-prometheus-node-exporter-s4cbk 1/1 Running 0 2m42s
pod/prometheus-prometheus-oper-operator-78595b64c-8fqxl 2/2 Running 0 2m42s
pod/prometheus-prometheus-prometheus-oper-prometheus-0 3/3 Running 1 2m26s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 2m37s
service/prometheus-grafana ClusterIP 10.233.23.0 <none> 80/TCP 2m43s
service/prometheus-kube-state-metrics ClusterIP 10.233.4.171 <none> 8080/TCP 2m42s
service/prometheus-operated ClusterIP None <none> 9090/TCP 2m26s
service/prometheus-prometheus-node-exporter ClusterIP 10.233.54.30 <none> 9100/TCP 2m42s
service/prometheus-prometheus-oper-alertmanager ClusterIP 10.233.29.188 <none> 9093/TCP 2m43s
service/prometheus-prometheus-oper-operator ClusterIP 10.233.9.20 <none> 8080/TCP,443/TCP 2m43s
service/prometheus-prometheus-oper-prometheus ClusterIP 10.233.8.84 <none> 9090/TCP 2m42s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/prometheus-prometheus-node-exporter 3 3 3 3 3 <none> 2m42s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/prometheus-grafana 1/1 1 1 2m42s
deployment.apps/prometheus-kube-state-metrics 1/1 1 1 2m42s
deployment.apps/prometheus-prometheus-oper-operator 1/1 1 1 2m42s
NAME DESIRED CURRENT READY AGE
replicaset.apps/prometheus-grafana-58d5bbf9f4 1 1 1 2m42s
replicaset.apps/prometheus-kube-state-metrics-556f95ff74 1 1 1 2m42s
replicaset.apps/prometheus-prometheus-oper-operator-78595b64c 1 1 1 2m42s
NAME READY AGE
statefulset.apps/alertmanager-prometheus-prometheus-oper-alertmanager 1/1 2m37s
statefulset.apps/prometheus-prometheus-prometheus-oper-prometheus 1/1 2m26s
[root@kubemaster stable]#
위와 같이 모든 Pod가 정상 배포되어 Running 상태이며, Service, Deployment, DaemonSet, ReplicatSet, StatefulSet 등이 모두 정상 구성되어 있습니다.
특히 Pod가 Node Label에 맞게 배치되었는지 여부를 확인해야 합니다.
[root@kubemaster stable]# kubectl get pod -n monitoring -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
alertmanager-prometheus-prometheus-oper-alertmanager-0 2/2 Running 0 4m27s 10.233.124.37 kubeworker1 <none> <none>
prometheus-grafana-58d5bbf9f4-dkqxm 3/3 Running 0 4m32s 10.233.124.36 kubeworker1 <none> <none>
prometheus-kube-state-metrics-556f95ff74-ghb92 1/1 Running 0 4m32s 10.233.124.35 kubeworker1 <none> <none>
prometheus-prometheus-node-exporter-2tkzw 1/1 Running 0 4m32s 192.168.56.102 kubemaster <none> <none>
prometheus-prometheus-node-exporter-qmnhh 1/1 Running 0 4m32s 192.168.56.101 kubeworker2 <none> <none>
prometheus-prometheus-node-exporter-s4cbk 1/1 Running 0 4m32s 192.168.56.103 kubeworker1 <none> <none>
prometheus-prometheus-oper-operator-78595b64c-8fqxl 2/2 Running 0 4m32s 10.233.124.34 kubeworker1 <none> <none>
prometheus-prometheus-prometheus-oper-prometheus-0 3/3 Running 1 4m16s 10.233.124.39 kubeworker1 <none> <none>
[root@kubemaster stable]#
위와 같이 배치된 노드가 kubeworker1 즉 key=monitoring이 등록된 서버임을 확인할 수 있으며, node-exporter의 경우 daemonset으로 모든 노드에 배포되어 있습니다.
3) Dashboard 활용
다음으로 Prometheus와 Grafana의 Dashboard 활용 방법에 대해 살펴보겠습니다.
현재 Prometheus와 Grafana는 위에서 확인한 바와 같이 Service를 모두 ClusterIP로 구성되어 있습니다.
이를 직접 바로 접근 가능하도록 NodePort로 변경하여 구성해 보도록 하겠습니다.
kubectl edit 명령어를 활용하여 Grafana는 NodePort 30001, Prometheus는 NodePort 30002로 구성합니다.
[Grafana yaml]
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2020-03-03T12:32:44Z"
labels:
app.kubernetes.io/instance: prometheus
app.kubernetes.io/managed-by: Tiller
app.kubernetes.io/name: grafana
app.kubernetes.io/version: 6.6.2
helm.sh/chart: grafana-5.0.4
name: prometheus-grafana
namespace: monitoring
resourceVersion: "40379"
selfLink: /api/v1/namespaces/monitoring/services/prometheus-grafana
uid: 6abbf5f4-e965-4efa-867c-6927b06cc1d4
spec:
clusterIP: 10.233.23.0
ports:
- name: service
nodePort: 30001
port: 80
protocol: TCP
targetPort: 3000
selector:
app.kubernetes.io/instance: prometheus
app.kubernetes.io/name: grafana
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
[Prometheus yaml]
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2020-03-03T12:32:45Z"
labels:
app: prometheus-operator-prometheus
chart: prometheus-operator-8.10.0
heritage: Tiller
release: prometheus
self-monitor: "true"
name: prometheus-prometheus-oper-prometheus
namespace: monitoring
resourceVersion: "40388"
selfLink: /api/v1/namespaces/monitoring/services/prometheus-prometheus-oper-prometheus
uid: b91772e9-11f9-4db1-8939-2300ee5ef5c7
spec:
clusterIP: 10.233.8.84
ports:
- name: web
nodePort: 30002
port: 9090
protocol: TCP
targetPort: 9090
selector:
app: prometheus
prometheus: prometheus-prometheus-oper-prometheus
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
위와 같이 service를 편집한 후 Service를 재확인해 보도록 하겠습니다.
[root@kubemaster stable]# kubectl get svc -n monitoring
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 15m
prometheus-grafana NodePort 10.233.23.0 <none> 80:30001/TCP 15m
prometheus-kube-state-metrics ClusterIP 10.233.4.171 <none> 8080/TCP 15m
prometheus-operated ClusterIP None <none> 9090/TCP 14m
prometheus-prometheus-node-exporter ClusterIP 10.233.54.30 <none> 9100/TCP 15m
prometheus-prometheus-oper-alertmanager ClusterIP 10.233.29.188 <none> 9093/TCP 15m
prometheus-prometheus-oper-operator ClusterIP 10.233.9.20 <none> 8080/TCP,443/TCP 15m
prometheus-prometheus-oper-prometheus NodePort 10.233.8.84 <none> 9090:30002/TCP 15m
[root@kubemaster stable]#
위와 같이 NodePort로 변경된 것을 확인할 수 있습니다.
이제 이를 기반으로 Dashboard에 접근해 보겠습니다.
먼저 Grafana 입니다.
Default ID : admin
Default PW : prom-operator
접근은 NodePort로 구성하여 Kubernetes의 클러스터에 포함되어 있는 모든 노드에서 접근이 가능하며, 30001포트입니다.
로그인 ID/PW를 입력하면 다음과 같은 메인 화면에 접속할 수 있습니다.
이중 기본으로 구성되어 있는 다양한 메인 화면 필터를 이용하여 몇몇 주요 모니터링 요소를 살펴보겠습니다.
상단의 Home이라고 표기되어 있는 콤보박스를 클릭하면 아래와 같은 다양한 필터 화면을 볼 수 있습니다.
이중 Compute Resources/Cluster, Compute Resources/Namespace(Pod), Compute Resource/Node(Pods), Compute Resources/Pod 등의 리소스를 확인할 수 있습니다.
이와 같은 기본으로 제공되는 정보이외에도
왼쪽의 + Create를 활용하여 원하는 대시보드를 커스터 마이징할 수 있으며, 데이터베이스를 추가하여 정보를 필터링할 수도 있습니다. 이로 인해 Grafana는 Prometheus 뿐만 아니라 다양한 저장소와 연결되어 데이터를 표출할 수 있습니다.
다음으로 Prometheus Dashboard입니다.
마찬가지로 NodePort로 기동되어 있어 모든 Kubernetes Cluster Node에서 접근이 가능하며, 30002 포트로 접근합니다.
최초 로그인 시 아래 화면에 접근할 수 있습니다.
Prometheus가 수집한 데이터의 Raw 데이터와 이를 기반으로 Graph로 표출한 내용을 살펴볼 수 있습니다. Query에 사용가능한 다양한 Expression을 사용할 수 있으며, 이 중 하나를 조회해 보겠습니다.
위는 container_memory_usage_bytes에 대한 Query 결과를 그래프로 조회한 화면입니다.
그 밖에 targets에서는 다양한 monitoring 대상 특히 node-exporter가 배치된 노드 정보가 표출되며, Alerts에서는 알람 기능에 대해 표출합니다.
사실 그래픽 적으로 뛰어난 표출 방식이 아니다 보니 Grafana를 활용하여 운영환경에 적합하게 커스터마이징하는것이 효율성을 높일 수 있습니다.
결론
지금까지 Kubernetes Package Manager인 Helm을 활용하여 Prometheus와 Grafana를 배포해 보았습니다. Prometheus와 Grafana는 사실 이정도 수준으로 살펴볼 수 있는 Echo System이 아닌 보다 복잡하면서도 다양한 기능을 제공하고 있습니다. 나중에 시간이 되면 자세하게 포스팅해보는 시간을 갖어 보도록 하겠습니다.
다만 이정도의 기능만으로도 충분히 분산트랜잭션에 대한 모니터링 및 관리가 가능하다는 점을 미루어 컨테이너 환경 특히 MSA 환경을 적용하는 많은 IT 구독자 분들께서는 한번쯤 설치해보고 운영해 보는 것이 어떨지 싶네요.
'② 클라우드 마스터 > ⓚ Kubernetes' 카테고리의 다른 글
K8S 보안 "인증/인가" (0) | 2020.06.13 |
---|---|
기동 실패 된 Kubernetes Pod 또는 Docker Container에 접근하기 (0) | 2020.03.12 |
Helm chart를 활용한 Prometheus & Grafana Kubernetes에 구성하기 (10) | 2020.03.03 |
minikube 5분안에 설치하기 (0) | 2020.03.03 |
Ansible을 활용한 kubernetes 운영환경 구축하기 (0) | 2020.02.28 |
Kubernetes 특정 node에 pod 배포하기 - label, nodeSelector, affinity(nodeAffinity, podAffinity) (0) | 2020.01.12 |
-
웅아웅아 나라님. 안녕하세요? SK*에 근무하는 웅아웅아입니다.
본 포스트를 잘 따라하며 셋업을 하고 있는데, 막히는 부분이 있네여..
제 환경은 kubenetes v.1.17.x + helm 3.0.0입니다.
pv 생성하고 그 다음에 prometheus 를 install 하는 과정에서 막힙니다.
helm 이 지난해 11월에 3.0을 발표했죠 (tiller 도 없어졌고,일부 명령어도 바뀌었어요.)
그래서 위 방식으로 helm install command 하면 이래와 같이 뱉어냅니다.
[root@xxx prometheus-operator]# helm install --name prometheus --namespace monitoring .
Error: unknown flag: --name
위 명령어를 좀 수정해서 다시 돌리면,
[root@xxx prometheus-operator]# helm install prometheus --namespace monitoring .
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
Error: create: failed to create: namespaces "monitoring" not found
[root@xxx prometheus-operator]#
helm 3.0 install command 에서 --namespace 옵션이 삭제된 것 같습니다. 그럼 namespace 는 어떻게 지정할지 의문입니다.
> https://helm.sh/docs/faq/ 에 보면 다음과 같이 밝히고 있네요.
In Helm 3, information about a particular release is now stored in the same namespace as the release itself. This means that users can now helm install wordpress stable/wordpress in two separate namespaces, and each can be referred with helm list by changing the current namespace context (e.g. helm list --namespace foo).
namespace 를 어떻게 바꾸는지도 궁금하네요.
helm 3.0에서는 k8s 1.16버전 , 1.17등 최신 버전 지원 한다고 명시돼 있긴 합니다.
https://github.com/helm/charts
This chart repository supports the latest and previous minor versions of Kubernetes. For example, if the latest minor release of Kubernetes is 1.8 then 1.7 and 1.8 are supported. Charts may still work on previous versions of Kubernertes even though they are outside the target supported window.
prometheus 를 찾아보니, kube 1.16버전도 지원을 안하는 것 같더라고요. 맞나요? ㅎㅎ
https://github.com/helm/charts/issues/17511
그리고 kubernetes 버전이 eco 와 compatible 한지 여부를 확인하려면 각 eco 홈피를 찾으면 되는 것이죠?
제가 너무 최신 버전 가지고 맞춰보려고 하니 잘 안되는 것 같기도 합니다.
그리고 helm 3,0에서는 repo list 하면 local 이 나오지 않습니다.
[root@xxx prometheus-operator]# helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com/
나라님께서는 k8s 버전이 어떻게 되었는지 궁금합니다.
2020.04.01 00:06 -
GodNR 저 같은 경우는 K8S 1.16 / Helm 2를 사용해서 구성했어요.
1) Helm 3.0로 구성할 경우에는 직접 Namespace를 생성해서 구성했어요.
2) 음. Prometheus는 제가 k8s 1.16으로 설치했으니, 지원합니다.
3) 넵, K8S를 기준으로 Echo System이 호환을 맞추는 거니 같 홈페이지를 참조하는 것이 좋아요! 2020.04.01 01:05 신고 -
웅아웅아 아하! 그렇군요.
인간에게 불을 가져다 준 프로메테우스 신은 쿠버네티스 버전 어디까지 지원하는건지도 잘 안나옵니다. ㅠㅠ
namespace 를 생성해서 구성하는 방법을 검토해봐야겠군요. ^^
어젯밤에, 아래 cmd 로 prometheus pod 를 생성하긴 했는데요.
# helm install prometheus stable/prometheus
네임스페이스 미지정 생성이라 default 로 생성이 됐는데, 아래처럼 일부 pod status 가 containerCreating 으로 나오고 더 이상 진행이 안되더라고요. 그래서 uninstall 했습니다.
[root@xxx prometheus-operator]# kubectl get all -n default
NAME READY STATUS RESTARTS AGE
pod/prometheus-alertmanager-64478644bc-9xsfg 0/2 ContainerCreating 0 6m3s
pod/prometheus-kube-state-metrics-6756bbbb8-ttkqq 1/1 Running 0 6m3s
pod/prometheus-node-exporter-jzlrl 1/1 Running 0 6m3s
pod/prometheus-node-exporter-lnmzc 1/1 Running 0 6m3s
pod/prometheus-node-exporter-rdkch 1/1 Running 0 6m3s
pod/prometheus-pushgateway-844844d6-4f6tp 1/1 Running 0 6m3s
pod/prometheus-server-cf8668df6-vsxk8 0/2 ContainerCreating 0 6m3sContainerCreating 0 6m3s
감사합니다. 갓나라님덕분에 이것저것 많이 배우고 있답니다.
오늘도 즐거운 하루 되시구요~ 2020.04.01 09:18 -
웅아웅아 monitoring 네임스페이스를 생성하고 다음과 같이 진행했더니 prometheus, grafana 가 설치가 잘 됐습니다. (__)
그런데 예의 그 긴 설치 내역 보여주는 거 없이 아래처럼 단촐하게 나오네요/
(이게 맞는 건지..)
[root@xxx prometheus-operator]# helm install prometheus --namespace monitoring .
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
manifest_sorter.go:175: info: skipping unknown hook: "crd-install"
NAME: prometheus
LAST DEPLOYED: Wed Apr 1 10:16:08 2020
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
NOTES:
The Prometheus Operator has been installed. Check its status by running:
kubectl --namespace monitoring get pods -l "release=prometheus"
Visit https://github.com/coreos/prometheus-operator for instructions on how
to create & configure Alertmanager and Prometheus instances using the Operator.
[root@xxx prometheus-operator]# kubectl get all -n monitoring
NAME READY STATUS RESTARTS AGE
pod/alertmanager-prometheus-prometheus-oper-alertmanager-0 2/2 Running 0 3m1s
pod/prometheus-grafana-849458c745-2drs2 2/2 Running 0 3m16s
pod/prometheus-kube-state-metrics-fcf55b958-4cxbm 1/1 Running 0 3m16s
pod/prometheus-prometheus-node-exporter-6mtkc 1/1 Running 0 3m16s
pod/prometheus-prometheus-node-exporter-8fwc2 1/1 Running 0 3m16s
pod/prometheus-prometheus-node-exporter-t6tx5 1/1 Running 0 3m16s
pod/prometheus-prometheus-oper-operator-67bd99bb5d-cvpmx 2/2 Running 0 3m16s
pod/prometheus-prometheus-prometheus-oper-prometheus-0 3/3 Running 1 2m52s
-- < 이하 생략> --
그런데, pv 를 조회하여 보면 default 로 나옵니다. namespace를 지정하지 않아서 그런 것 같긴 합니다.
root@xxx]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-for-alertmanager 50Gi RWO Retain Released default/prometheus-server 12h
pv-for-grafana 10Gi RWO Retain Released default/prometheus-alertmanager 12h
[root@xxx]#
-> 뭔가 이상한 데요..
그리고, 본 포스팅에서 grafana.yaml 을 edit 하는데요,, 이 파일을 어디서 받으신 건가요?
제 경우 해당 helm pull stable/grafana 등으로 tgz 파일 받은 건데, 그 안에 yaml 등 설정 파일이 보이지를 않습니다.
wget 으로 받아서 편집을 하는 것을 언급하신 건가요? 2020.04.01 10:48 -
GodNR 네 helm 3는 기본으로 verbose를 출력하지않습니다.
pv는 쿠버네티스가 관리하는 object입니다.
yaml 파일은 chart의 template 폴더에 읺습니다. 2020.04.01 16:28 신고 -
웅아웅아 갓나라님 덕분에 helm 3.0 기반으로 Grafana+prometheus 조합으로 모니터링 붙이는 데 성공했습니다. 이 기쁨을 갓나라님과 나누고 싶어요.
님께서 위에 올려주신 yaml 파일을 가져다 쓸때 그 파일에 있던 불필요한 정보들 삭제를 잘 해주어야 하더군요. uid, timestamp, selfLink 등. (stackoverflow 뒤짐)
아 또한가지 제가 Grafana 포트를 좀 바꾸었거든요. default 가 3000인데 3100으로 바꾸고 했었는데 그게 접속이 안된 이유더군요.
다시 3000으로 바꾸고 하니까 그제야 Grafana 가 올라오더라고요. ㅎㅎ
[root@xxx monitoring]# vim Grafana.yaml
[root@xxx monitoring]# kubectl apply -f Grafana.yaml
service/prometheus-grafana configured
깔끔하게 떨어집니다.
아 화면 붙여드리고 싶은데 이미지 첨부가 안되네요. 여튼 역시 가르쳐주신 덕분에 완료를 했네요. 해 넘기 전에요. 감사합니다.^^
제가 kubeflow 을 구축해서 machine learning pipeline 을 구축해볼 요량입니다. 이 것에 요즘 관심이 많습니다.
Data scientist 들이 kubeflow 기반 workflow 에 data upload 해서 model train/param optimization 및 api serving 하도록 지원하는 일련의 w/f 잖아요. 이것에 대해서는 갓나라님은 Research 해보진 않으셨나요? 궁금합니다. 2020.04.02 00:50 -
DevHsOps 안녕하세요! 저는 숭실대학교에서 3학년으로 재학중인 학부생입니다. 나라님 덕분에 현재 helm chart를 이용해 prometheus, grafana, alertmanager 모두 만드는데 성공했습니다. 정말 감사합니다!!
0 현재 프로메테우스 알림이 발생했을 경우 세팅한 이메일로 send하는 작업을 진행중입니다.그러나 이 작업을 위해서는 alertmanager.yaml을 configmap으로 만들어 퍼시스턴트볼륨으로 저장해야하는데, 며칠동안 여러번 시도해도 잘 되지않습니다.
제가 시도해본 것은
$ kubectl edit statefulset alertmanager-prometheus-prometheus-prometheus-oper-alertmanager -n monitoring 명령어를 수행하여 statefulset 내부에서 configmap을 추가했습니다. 이때 볼륨의 위치는 alertmanager pod가 저장하는 mountPath위치와 동일하게 세팅했습니다.
이렇게 했을 경우 edit가 성공했다고 출력되지만, kubectl edit statefulset alertmanager-prometheus-prometheus-prometheus-oper-alertmanager -n monitoring라는 명령어로 다시 들어가서 확인해보면 수정이 되지 않고 초기상태를 유지하게 됩니다.
0 helm chart로 만든 프로메테우스로 이메일 알람을 보내기 위해서는 어떻게 해야할지 막막합니다.. 혹여나 조언을 주실 수 있다면 그대로 시도해보겠습니다. 도와주신다면 정말 감사하겠습니다 ㅠㅠ
(helm2 version으로 진행했습니다!) 2020.09.17 22:45 신고 -
DevHsOps 질문하고 다시 답글을 달아 죄송합니다..ㅎㅎ.. values.yaml파일에 있는 'alertmanager: '에 config가 설정되어있는데 이걸 수정해서 helm upgrade 명령어를 시도하면 될 것 같습니다ㅎㅎ 감사합니다. 2020.09.18 00:24 신고
-
풋내기 안녕하세요. 블로그 포스팅 감사히 잘봤습니다.
너무 최신이라 조금 많이 달라졌겠지만,, 선생님께서 작성하신 포스팅을 보고 모니터링을 구축하고 있었습니다.
helm install prometheus . --namespace monitoring
명령어를 입력해서 설치하는 과정에서
Error: failed to create resource: Internal error occurred: failed calling webhook "prometheusrulemutate.monitoring.coreos.com": Post "https://kube-prometheus-stack-1624-operator.prometheus.svc:443/admission-prometheusrules/mutate?timeout=10s": service "kube-prometheus-stack-1624-operator" not found
에러가 발생하는데 혹시 해결방안을 알고 계신지 여쭤보고 싶습니다ㅜㅜㅜ
2021.07.12 17:54
- Total
- 1,608,739
- Today
- 342
- Yesterday
- 1,492
- wildfly
- Architecture
- API Gateway
- 아키텍처
- 쿠버네티스
- k8s
- aa
- git
- kubernetes
- node.js
- TA
- SWA
- Da
- JEUS6
- nodejs
- 오픈스택
- OpenStack
- JEUS7
- jeus
- webtob
- SA
- apache
- 마이크로서비스
- openstack token issue
- openstack tenant
- 마이크로서비스 아키텍처
- JBoss
- Docker
- aws
- MSA