
지난 시간에는 온프레미스 쿠버네티스[1]를 직접 구축했습니다.
앞으로는 다양한 상황을 가정하고 테스트하는 과정을 반복하려고 합니다.
따라서 이를 관측 가능한 기본적인 모니터링 시스템을 배포하고자 합니다.
A. 실습환경
A.1. 패키지 매니저 설치
편리한 실습을 위해 패키지 매니저인 helm과 각 charts를 사용합니다.
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null sudo apt-get install apt-transport-https --yes echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list sudo apt-get update sudo apt-get install helm
helm 저장소 확인하기
helm repo list
Error: no repositories to show
B. 모니터링 환경 배포하기
B.1. metrics-server
node, pod 매트릭 수집을 위해 metrics-server를 사용합니다.
kubernetes-sigs/metrics-server helm chart [B.1.1]을 사용합니다.
helm repo 추가
helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
"metrics-server" has been added to your repositories
helm repo 업데이트
helm repo update
helm repo 확인하기
helm repo list
NAME URL metrics-server https://kubernetes-sigs.github.io/metrics-server/
metrics-server 릴리즈(배포)하기
helm upgrade \ --install metrics-server metrics-server/metrics-server \ --namespace kube-system \ --create-namespace
metrics-server 파드 로그확인하기
파드 확인하기
kubectl get pods
NAME READY STATUS RESTARTS AGE metrics-server-85f985c745-d8mgw 0/1 Running 0 3m25s
로그 확인하기
kubectl logs metrics-server-85f985c745-d8mgw
I0301 07:52:43.675438 1 serving.go:374] Generated self-signed cert (/tmp/apiserver.crt, /tmp/apiserver.key) I0301 07:52:43.884760 1 handler.go:275] Adding GroupVersion metrics.k8s.io v1beta1 to ResourceManager E0301 07:52:44.002388 1 scraper.go:149] "Failed to scrape node" err="Get \"https://172.30.1.48:10250/metrics/resource\": tls: failed to verify certificate: x509: cannot validate certificate for 172.30.1.48 because it doesn't contain any IP SANs" node="cp-k8s"
metrics-server 릴리즈 수정하기
helm upgrade \ metrics-server metrics-server/metrics-server \ --set args={"--kubelet-insecure-tls"} \ --namespace kube-system
metrics-server 배포 확인하기
파드 확인하기
kubectl get pods
NAME READY STATUS RESTARTS AGE metrics-server-8dd4f4fd6-c4vxz 1/1 Running 0 39s
metrics-server 작동확인하기
kubectl top nodes kubectl top pods
B.2. prometheus
metric-server에서 수집한 매트릭을 저장하기 위해
prometheus-community/prometheus helm chart[B.2.1]을 사용합니다.
helm repo 추가
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
"prometheus-community" has been added to your repositories
helm repo 업데이트
helm repo update
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "metrics-server" chart repository ...Successfully got an update from the "prometheus-community" chart repository Update Complete. ⎈Happy Helming!⎈
helm repo 확인하기
helm repo list
NAME URL metrics-server https://kubernetes-sigs.github.io/metrics-server/ prometheus-community https://prometheus-community.github.io/helm-charts
prometheus 릴리즈(배포)하기
helm upgrade --install prometheus prometheus-community/prometheus \ --set pushgateway.enabled=false \ --set alertmanager.enabled=false \ --set server.service.type="NodePort" \ --namespace kube-monitor \ --create-namespace
# 배포 후 나오는 메세지는 아래 메세지로 확인 가능 helm status prometheus -n kube-monitor
prometheus 릴리즈 확인하기
파드 확인하기
kubectl get pods -n kube-monitor
NAME READY STATUS RESTARTS AGE prometheus-kube-state-metrics-65846b5c64-xng9b 1/1 Running 0 2m5s prometheus-prometheus-node-exporter-vv74p 1/1 Running 0 2m5s prometheus-prometheus-pushgateway-64bc8bff6f-8fj96 1/1 Running 0 2m5s prometheus-server-6c586d99cd-79r7c 0/2 Pending 0 2m5s
로그 확인하기
kubectl describe pod/prometheus-server-6c586d99cd-79r7c -n kube-monitor
prometheus 릴리즈 수정하기
helm upgrade \ prometheus prometheus-community/prometheus \ --set pushgateway.enabled=false \ --set alertmanager.enabled=false \ --set nodeExporter.enabled=true \ --set server.service.type="NodePort" \ --set server.persistentVolume.enabled=false \ --set server.statefulSet.enabled=false \ --set server.emptyDir.sizeLimit="" \ --set server.hostPath.path=/data/prometheus \ --set server.hostPath.enabled=true \ --namespace kube-monitor
# 배포 후 나오는 메세지는 아래 메세지로 확인 가능 helm status prometheus -n kube-monitor
prometheus 릴리즈 확인하기
파드 확인하기
kubectl get pods -n kube-monitor
NAME READY STATUS RESTARTS AGE prometheus-kube-state-metrics-65846b5c64-xng9b 1/1 Running 0 9m26s prometheus-prometheus-node-exporter-vv74p 1/1 Running 0 9m26s prometheus-prometheus-pushgateway-64bc8bff6f-8fj96 1/1 Running 0 9m26s prometheus-server-767bc8b69-ffg48 2/2 Running 0 5m7s
파드 로그 확인하기
kubectl logs prometheus-server-767bc8b69-ffg48 -n kube-monitor
서비스 확인하기
kubectl get svc -n kube-monitor | grep -E "(NAME|NodePort)"
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE prometheus-server NodePort 10.106.211.46 <none> 80:32419/TCP 3d4h
B.3. grafana
prometheus에서 수집한 다양한 매트릭을 시각화 하기 위해
grafana/helm-chart [B.4.1]을 사용하려고 합니다.
helm repo 추가
helm repo add grafana https://grafana.github.io/helm-charts
helm repo 갱신
helm repo update
helm repo 리스트
helm repo list
helm 릴리즈
helm install grafana grafana/grafana \ --namespace kube-monitor \ --create-namespace \ --set replicas=2 \ --set service.enabled=true \ --set service.type=NodePort \ --set persistence.enabled=false
B.5. 접속 가능한 방법
현재 Wi-Fi 공유기를 통해서 2개의 PC를 사용하고 있습니다.
A : work PC
B : kubernetes PC (cp-k8s)
기본적으로 별다른 설정 없이도
작업용 PC에서 쿠버네티스 PC의 Service(type: NodePort) 접속이 가능합니다.
💡
공유기(라우터)는 보안 강화를 이유로 AP 격리를 사용하기도 합니다. 이 경우에 A에서 B로 직접적인 접근이 불가능한 경우가 있습니다. 이런 경우 공유기의 관리자 설정에서 AP를 허용해야 할 수 있습니다. 하지만 일반적인 가정용 Wi-Fi는 이에 해당되지 않습니다.
대시보드 확인하기 (B : kubernetes pc)
root@cp-k8s:~# kubectl get svc -A | grep -E "(NAME|NodePort)" NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-monitor grafana NodePort 10.109.121.168 <none> 80:31092/TCP 25h kube-monitor prometheus-server NodePort 10.106.211.46 <none> 80:32419/TCP 4d6h
대시보드 접속 확인하기 (B : kubernetes pc)
Prometheus 접속 확인
curl -k 127.0.0.1:31092
<a href="/login">Found</a>.
Grafana 접속 확인
curl -k 127.0.0.1:32419
<a href="/query">Found</a>.
WLAN ip 확인하기 (B : kubernetes pc)
ifconfig | grep wlo1 -A 2
wlo1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 000.000.000.000 netmask 255.255.255.0 broadcast 000.000.000.000
대시보드 접속 확인하기 (A : work pc)
Prometheus 접속 확인
curl -k 000.000.000.000:31092
<a href="/login">Found</a>.
Grafana 접속 확인
curl -k 000.000.000.000:32419
<a href="/query">Found</a>