본 내용은 CloudNet 주말 스터디 내용을 참고로 작성되었습니다.
계속 테스트하며 내용과 설명이 업데이트 됩니다.
목표
메트릭 수집과 알람 기능 구현
프로메테우스-스택 설치 (kube-prometheus-stack)
그라파나 사용
<0> 선수 조건
<1> 프로메테우스 및 프로메테우스 오퍼레이터를 이용하여 메트릭 수집과 알람 이론
<2> 프로메테우스-스택 실습 (kube-prometheus-stack)
<3> 프로메테우스 기본 사용
<4> 그라파나 - 시각화
<5> 대시보드
<6> nginx web server 에서 수집하고자 한다.
<7> 그라파나 얼럿 Alert 기능
<0> 선수 조건
1
EKS 설치
myeks
cloudformation에서 바로 cluster가 설치되는게 보여야함.
k ns default
2
external dns , kubeops-view , load-balancer-controller 설치 필요.
https://brunch.co.kr/@topasvga/3239
3
수동설치는 ?
load-balancer-controller 수동설치
EFS csi driver 수동설치 = 사용 필요시 설치
<1> 프로메테우스 및 프로메테우스 오퍼레이터를 이용하여 메트릭 수집과 알람 이론
1
참고 블로그
2
오픈 소스
Pull 방식으로 데이터를 가져 온다.
Prometheus is an open-source systems monitoring and alerting toolkit originally
pull model over HTTP
3
구성도
수집 정보가 node에 저장되면, 가시화는 그라파나를 사용한다.
<2> 프로메테우스-스택 실습 (kube-prometheus-stack)
프로메테우스 스택으로 설치한다.
프로메테우스와 그라파나를 한번에 설치하자.
모니터링에 필요한 여러 요소를 단일 차트(스택)으로 제공.
1
# 모니터링 네임스페이스를 만든다.
kubectl create ns monitoring
k ns
default
kube-node-lease
kube-public
kube-system
monitoring
2
다른 터미널에서 모니터링~
watch kubectl get pod,pvc,svc,ingress -n monitoring
3
# 사용 리전의 인증서 ARN 확인
aws console 로그인
Cert manager에서 본인 도메인에 대해 인증함
*.masterseo1.link 설정함. issued (확인 됨) 필요
CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo $CERT_ARN
arn:aws:acm:ap-northeast-2:476286675138:certificate/b58f160e-7c6f-4ee8-850e-9bb274081129
4
# repo 추가
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
5
프로메테우스와 그라파나를 한번에 설치하자.
alertmanager: // 얼럿 매니저는 사용 안함.
# 파라미터 파일 생성
cat <<EOT > monitor-values.yaml
prometheus:
prometheusSpec:
podMonitorSelectorNilUsesHelmValues: false
serviceMonitorSelectorNilUsesHelmValues: false
retention: 5d
retentionSize: "10GiB"
ingress:
enabled: true
ingressClassName: alb
hosts:
- prometheus.$MyDomain
paths:
- /*
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
alb.ingress.kubernetes.io/success-codes: 200-399
alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
alb.ingress.kubernetes.io/group.name: study
alb.ingress.kubernetes.io/ssl-redirect: '443'
grafana:
defaultDashboardsTimezone: Asia/Seoul
adminPassword: prom-operator
ingress:
enabled: true
ingressClassName: alb
hosts:
- grafana.$MyDomain
paths:
- /*
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
alb.ingress.kubernetes.io/success-codes: 200-399
alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
alb.ingress.kubernetes.io/group.name: study
alb.ingress.kubernetes.io/ssl-redirect: '443'
defaultRules:
create: false
kubeControllerManager:
enabled: false
kubeEtcd:
enabled: false
kubeScheduler:
enabled: false
alertmanager:
enabled: false
EOT
# alertmanager: // 얼럿 매니저는 사용 안함.
# ingress:
# enabled: true
# ingressClassName: alb
# hosts:
# - alertmanager.$MyDomain
# paths:
# - /*
# annotations:
# alb.ingress.kubernetes.io/scheme: internet-facing
# alb.ingress.kubernetes.io/target-type: ip
# alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
# alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
# alb.ingress.kubernetes.io/success-codes: 200-399
# alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
# alb.ingress.kubernetes.io/group.name: study
# alb.ingress.kubernetes.io/ssl-redirect: '443'
// 5일 , 10GiB 데이터까지 저장한다.
retention: 5d
retentionSize: "10GiB"
cat monitor-values.yaml | yh
6
# 배포
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack --version 45.0.0 -f monitor-values.yaml --namespace monitoring
(5분 걸림)
5분후
그라파나 접속 요망~
https://grafana.taeho11.co.kr/
잘 안되면 삭제 후 다른 버전으로 재 실행
삭제
helm uninstall -n monitoring kube-prometheus-stack
or
// 인터벌을 15초로 줄이는 경우
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack --version 45.27.2 --set prometheus.prometheusSpec.scrapeInterval='15s' --set prometheus.prometheusSpec.evaluationInterval='15s' -f monitor-values.yaml --namespace monitoring
(5분 걸림)
7
k ns monitoring
watch -d kubectl get ingress,deploy,svc,pods
모니터링 확인!!!
kubectl get pod,svc,ingress -n monitoring
프로메테우스와 그라파나 도메인으로 인그레스가 나옴.
L7은 1개이다 = 인그레스 이름은 같다.
8
alb 확인
AWS 콘솔에서 alb 확인하자~
접속
https://prometheus.masterseo1.link/graph?g0.expr=&g0.tab=1&g0.stacked=0&g0.show_exemplars=0&g0.range_input=1h
https://grafana.masterseo1.link/login
9
# 확인
# alertmanager-0 : 사전에 정의한 정책 기반(예: 노드 다운, 파드 Pending 등)으로 시스템 경고 메시지를 생성 후 경보 채널(슬랙 등)로 전송
# grafana : 프로메테우스는 메트릭 정보를 저장하는 용도로 사용하며, 그라파나로 시각화 처리
# prometheus-0 : 모니터링 대상이 되는 파드는 ‘exporter’라는 별도의 사이드카 형식의 파드에서 모니터링 메트릭을 노출, pull 방식으로 가져와 내부의 시계열 데이터베이스에
저장
# node-exporter : 노드익스포터는 물리 노드에 대한 자원 사용량(네트워크, 스토리지 등 전체) 정보를 메트릭 형태로 변경하여 노출
# operator : 시스템 경고 메시지 정책(prometheus rule), 애플리케이션 모니터링 대상 추가 등의 작업을 편리하게 할수 있게 CRD 지원
# kube-state-metrics : 쿠버네티스의 클러스터의 상태(kube-state)를 메트릭으로 변환하는 파드
10
helm list -n monitoring
--------------------------------------------------------
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
kube-prometheus-stack monitoring 1 2023-05-18 16:06:34.696600102 +0900 KST deployed kube-prometheus-stack-45.27.2 v0.65.1
kubectl get pod,svc,ingress -n monitoring
kubectl get-all -n monitoring
kubectl get prometheus,servicemonitors -n monitoring
kubectl get crd | grep monitoring
11
삭제 - 아래 그라파나등 모든 테스트 완료 후 삭제 요망
# helm 삭제
helm uninstall -n monitoring kube-prometheus-stack
# crd 삭제
kubectl delete crd alertmanagerconfigs.monitoring.coreos.com
kubectl delete crd alertmanagers.monitoring.coreos.com
kubectl delete crd podmonitors.monitoring.coreos.com
kubectl delete crd probes.monitoring.coreos.com
kubectl delete crd prometheuses.monitoring.coreos.com
kubectl delete crd prometheusrules.monitoring.coreos.com
kubectl delete crd servicemonitors.monitoring.coreos.com
<3> 프로메테우스 기본 사용
1
모니터링 대상이 되는 서비스는 일반적으로 자체 웹 서버의 /metrics 엔드포인트 경로에 다양한 메트릭 정보를 노출
2
# 아래 처럼 프로메테우스가 각 서비스의 9100 접속하여 메트릭 정보를 수집
kubectl get node -owide
kubectl get svc,ep -n monitoring kube-prometheus-stack-prometheus-node-exporter
3
# 노드의 9100번의 /metrics 접속 시 다양한 메트릭 정보를 확인할수 있음
: 마스터 이외에 워커노드도 확인 가능
수집하는 정보는 ?
ssh ec2-user@$N1 curl -s localhost:9100/metrics
------------
:
# TYPE promhttp_metric_handler_requests_in_flight gauge
promhttp_metric_handler_requests_in_flight 1
# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code="200"} 20
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0
4
프로메테우스 ingress 도메인으로 웹 접속
# ingress 확인
kubectl get ingress -n monitoring kube-prometheus-stack-prometheus
NAME CLASS HOSTS ADDRESS PORTS AGE
kube-prometheus-stack-prometheus alb prometheus.masterseo0.link 80 35m
kubectl describe ingress -n monitoring kube-prometheus-stack-prometheus
5
# 프로메테우스 ingress 도메인으로 웹 접속
echo -e "Prometheus Web URL = https://prometheus.$MyDomain"
:kube-system) [root@myeks-bastion-EC2 ~]# echo -e "Prometheus Web URL = https://prometheus.$MyDomain"
Prometheus Web URL = https://prometheus.masterseo1.link
https://prometheus.taeho11.co.kr/graph
# 웹 상단 주요 메뉴 설명
1. 경고(Alert) : 사전에 정의한 시스템 경고 정책(Prometheus Rules)에 대한 상황
2. 그래프(Graph) : 프로메테우스 자체 검색 언어 PromQL을 이용하여 메트릭 정보를 조회 -> 단순한 그래프 형태 조회
3. 상태(Status) : 경고 메시지 정책(Rules), 모니터링 대상(Targets) 등 다양한 프로메테우스 설정 내역을 확인 > 버전(2.42.0)
4. 도움말(Help)
6
현재 각 Target 클릭 시 메트릭 정보 확인 : 아래 예시 ?
kube-proxy 확인
k get nodes -w
NAME STATUS ROLES AGE VERSION
ip-192-168-1-150.ap-northeast-2.compute.internal Ready <none> 16h v1.24.13-eks-0a21954
ip-192-168-2-82.ap-northeast-2.compute.internal Ready <none> 16h v1.24.13-eks-0a21954
ip-192-168-3-229.ap-northeast-2.compute.internal Ready <none> 16h v1.24.13-eks-0a21954
# serviceMonitor/monitoring/kube-prometheus-stack-kube-proxy/0 (3/3 up) 중
노드1에 Endpoint 접속 확인 (접속 주소는 실습 환경에 따라 다름)
curl -s http://192.168.1.150:10249/metrics | tail -n 5
rest_client_response_size_bytes_bucket{host="006fc3f3f0730a7fb3fdb3181f546281.gr7.ap-northeast-2.eks.amazonaws.com",verb="POST",le="4.194304e+06"} 1
rest_client_response_size_bytes_bucket{host="006fc3f3f0730a7fb3fdb3181f546281.gr7.ap-northeast-2.eks.amazonaws.com",verb="POST",le="1.6777216e+07"} 1
rest_client_response_size_bytes_bucket{host="006fc3f3f0730a7fb3fdb3181f546281.gr7.ap-northeast-2.eks.amazonaws.com",verb="POST",le="+Inf"} 1
rest_client_response_size_bytes_sum{host="006fc3f3f0730a7fb3fdb3181f546281.gr7.ap-northeast-2.eks.amazonaws.com",verb="POST"} 626
rest_client_response_size_bytes_count{host="006fc3f3f0730a7fb3fdb3181f546281.gr7.ap-northeast-2.eks.amazonaws.com",verb="POST"} 1
api-server 확인
# serviceMonitor/monitoring/kube-prometheus-stack-api-server/0 (2/2 up) 중 Endpoint 접속 확인 (접속 주소는 실습 환경에 따라 다름)
>> 해당 IP주소는 어디인가요?, 왜 apiserver endpoint는 2개뿐인가요? , 아래 메트릭 수집이 되게 하기 위해서는 어떻게 하면 될까요?
curl -s https://192.168.1.53/metrics | tail -n 5
...
code dns 확인
# 그외 다른 타켓의 Endpoint 로 접속 확인 가능 : 예시) 아래는 coredns 의 Endpoint 주소 (접속 주소는 실습 환경에 따라 다름)
curl -s http://192.168.1.75:9153/metrics | tail -n 5
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 7.79350016e+08
# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.
# TYPE process_virtual_memory_max_bytes gauge
process_virtual_memory_max_bytes 1.8446744073709552e+19
exporter가 준비해준다.
프로메테우스가 정보를 가져온다.
<4> 그라파나 - 시각화
1
소개
그라파나는 실제 데이터를 가지고 있지는 않다.
프로메테우스의 데이터를 가져와 시각화 하는 툴이다.
<필수1>
2
admin / prom-operator
# 그라파나 버전 확인
kubectl exec -it -n monitoring deploy/kube-prometheus-stack-grafana -- grafana-cli --version
------------------------------------
grafana cli version 9.5.1
//
파드내 명령을 실행함. exec -it 파드명.
모니터링 네임스페이스에 있는 , 프로메테우스-스텍-그라파나 파드에 , 그라파나-cli로 버전을 확인함.
# ingress 확인
kubectl get ingress -n monitoring kube-prometheus-stack-grafana
kube-prometheus-stack-grafana alb grafana.masterseo0.link 80 38m
3
kubectl describe ingress -n monitoring kube-prometheus-stack-grafana
4
# ingress 도메인으로 웹 접속 : 기본 계정 - admin / prom-operator
echo -e "Grafana Web URL = https://grafana.$MyDomain"
Grafana Web URL = https://grafana.masterseo1.link
https://grafana.masterseo1.link/login
3
기본 대시보드 제공한다.
프로메테우스를 소스로 선택할수 있도록 들어가 있다.
4
# 서비스 주소 확인
kubectl get svc,ep -n monitoring kube-prometheus-stack-prometheus
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kube-prometheus-stack-prometheus ClusterIP 10.100.143.5 <none> 9090/TCP 21m
NAME ENDPOINTS AGE
endpoints/kube-prometheus-stack-prometheus 192.168.2.93:9090 21m
5
# 테스트용 파드 배포
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: netshoot-pod
spec:
containers:
- name: netshoot-pod
image: nicolaka/netshoot
command: ["tail"]
args: ["-f", "/dev/null"]
terminationGracePeriodSeconds: 0
EOF
kubectl get pod netshoot-pod
NAME READY STATUS RESTARTS AGE
netshoot-pod 0/1 ContainerCreating 0 2s
(1분후)
# 접속 확인
kubectl exec -it netshoot-pod -- nslookup kube-prometheus-stack-prometheus.monitoring
Server: 10.100.0.10
Address: 10.100.0.10#53
Name: kube-prometheus-stack-prometheus.monitoring.svc.cluster.local
Address: 10.100.136.167
kubectl exec -it netshoot-pod -- curl -s kube-prometheus-stack-prometheus.monitoring:9090/graph -v ; echo
* Trying 10.100.136.167:9090...
* Connected to kube-prometheus-stack-prometheus.monitoring (10.100.136.167) port 9090 (#0)
> GET /graph HTTP/1.1
> Host: kube-prometheus-stack-prometheus.monitoring:9090
> User-Agent: curl/8.0.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Thu, 18 May 2023 07:19:05 GMT
< Content-Length: 734
< Content-Type: text/html; charset=utf-8
<
* Connection #0 to host kube-prometheus-stack-prometheus.monitoring left intact
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><meta name="theme-color" content="#000000"/><script>const GLOBAL_CONSOLES_LINK="",GLOBAL_AGENT_MODE="false",GLOBAL_READY="true"</script><link rel="manifest" href="./manifest.json" crossorigin="use-credentials"/><title>Prometheus Time Series Collection and Processing Server</title><script defer="defer" src="./static/js/main.c1286cb7.js"></script><link href="./static/css/main.cb2558a0.css" rel="stylesheet"></head><body class="bootstrap"><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
6
# 삭제
kubectl delete pod netshoot-pod
<5> 대시보드
<필수1>
1
왼쪽위 - Dashboard → New → Import → 15757 입력 후 Load ⇒ 데이터소스(Prometheus 선택) 후 Import 클릭
KR] Dashboard → New → Import → 13770 or 17900 입력 후 Load ⇒ 데이터소스(Prometheus 선택) 후 Import 클릭
2
테스트
AWS CNI Metrics 16032
# PodMonitor 배포
cat <<EOF | kubectl create -f -
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: aws-cni-metrics
namespace: kube-system
spec:
jobLabel: k8s-app
namespaceSelector:
matchNames:
- kube-system
podMetricsEndpoints:
- interval: 30s
path: /metrics
port: metrics
selector:
matchLabels:
k8s-app: aws-node
EOF
# PodMonitor 확인
kubectl get podmonitor -n kube-system
NAME AGE
aws-cni-metrics 25s
<6> nginx web server 에서 수집하고자 한다.
1
2
# 모니터링
watch -d kubectl get pod
# 파라미터 파일 생성 : 서비스 모니터 방식으로 nginx 모니터링 대상을 등록하고, export 는 9113 포트 사용, nginx 웹서버 노출은 AWS CLB 기본 사용
cat <<EOT > ~/nginx_metric-values.yaml
metrics:
enabled: true
service:
port: 9113
serviceMonitor:
enabled: true
namespace: monitoring
interval: 10s
EOT
# 배포
helm upgrade nginx bitnami/nginx --reuse-values -f nginx_metric-values.yaml
echo "NGINX URL: http://nginx.masterseo1.link"
# 확인
kubectl get pod,svc,ep
kubectl get servicemonitor -n monitoring nginx
kubectl get servicemonitor -n monitoring nginx -o json | jq
3
# 메트릭 확인 >> 프로메테우스에서 Target 확인
NGINXIP=$(kubectl get pod -l app.kubernetes.io/instance=nginx -o jsonpath={.items[0].status.podIP})
curl -s http://$NGINXIP:9113/metrics # nginx_connections_active Y 값 확인해보기
curl -s http://$NGINXIP:9113/metrics | grep ^nginx_connections_active
(masterseo1:kube-system) [root@myeks-bastion-EC2 ~]# curl -s http://$NGINXIP:9113/metrics | grep ^nginx_connections_active
nginx_connections_active 1
# nginx 파드내에 컨테이너 갯수 확인
kubectl get pod -l app.kubernetes.io/instance=nginx
kubectl describe pod -l app.kubernetes.io/instance=nginx
(masterseo1:kube-system) [root@myeks-bastion-EC2 ~]# kubectl get pod -l app.kubernetes.io/instance=nginx
NAME READY STATUS RESTARTS AGE
nginx-85fc957979-4zv5h 2/2 Running 0 53s
# 접속 주소 확인 및 접속
echo -e "Nginx WebServer URL = https://nginx.$MyDomain"
curl -s https://nginx.$MyDomainkubectl logs deploy/nginx -f
# 반복 접속
while true; do curl -s https://nginx.$MyDomain -I | head -n 1; date; sleep 1; done
4
NGINX 애플리케이션 모니터링 대시보드 추가
그라파나에 12708 대시보드 추가
<7> 그라파나 얼럿 Alert 기능
1
9.4 릴리즈
2
이미지 알림 기능
3
얼럿기능
구성도?
<8> kubecost
1
목표
kubecost로 컨테이너 비용에 대해 알아보자.
2
kubecost 개요
penCost 링크를 기반으로 구축
쿠버네티스 리소스별 비용 분류 가시화 제공
가격
Free(메트릭 15일 보존
아키텍처
수집
3
설치와 접속
ngress, service(nlb) 통한 접속은 실패 - 테스트 해보세요
bastion ec2를 통한 ssh port forwarding 통한 접속 방식으로 우회
4
인그레스를 통한 접속
#
cat <<EOT > cost-values.yaml
global:
grafana:
enabled: true
proxy: false
priority:
enabled: false
networkPolicy:
enabled: false
podSecurityPolicy:
enabled: false
persistentVolume:
storageClass: "gp3"
prometheus:
kube-state-metrics:
disabled: false
nodeExporter:
enabled: true
reporting:
productAnalytics: true
EOT
# kubecost chart 에 프로메테우스가 포함되어 있으니, 기존 프로메테우스-스택은 삭제하자 : node-export 포트 충돌 발생
helm uninstall -n monitoring kube-prometheus-stack
# 배포
kubectl create ns kubecost
helm install kubecost oci://public.ecr.aws/kubecost/cost-analyzer --version 1.103.2 --namespace kubecost -f cost-values.yaml
# Ingress 설정
cat <<EOT > kubecost-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kubecost-ingress
annotations:
alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
alb.ingress.kubernetes.io/group.name: study
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/ssl-redirect: "443"
alb.ingress.kubernetes.io/success-codes: 200-399
alb.ingress.kubernetes.io/target-type: ip
spec:
ingressClassName: alb
rules:
- host: kubecost.$MyDomain
http:
paths:
- backend:
service:
name: kubecost-cost-analyzer
port:
number: 9090
path: /
pathType: Prefix
EOT
kubectl apply -f kubecost-ingress.yaml -n kubecost
# 배포 확인
kubectl get-all -n kubecost
kubectl get all -n kubecost
# kubecost-cost-analyzer 접속 정보 확인
echo -e "Kubecost Web https://kubecost.$MyDomain"
(선택)
4
#
cat <<EOT > cost-values.yaml
global:
grafana:
enabled: true
proxy: false
priority:
enabled: false
networkPolicy:
enabled: false
podSecurityPolicy:
enabled: false
persistentVolume:
storageClass: "gp3"
prometheus:
kube-state-metrics:
disabled: false
nodeExporter:
enabled: true
reporting:
productAnalytics: true
EOT
# kubecost chart 에 프로메테우스가 포함되어 있으니, 기존 프로메테우스-스택은 삭제하자 : node-export 포트 충돌 발생
helm uninstall -n monitoring kube-prometheus-stack
# 배포
kubectl create ns kubecost
helm install kubecost oci://public.ecr.aws/kubecost/cost-analyzer --version 1.103.2 --namespace kubecost -f cost-values.yaml
# 배포 확인
kubectl get-all -n kubecost
kubectl get all -n kubecost
5
# kubecost-cost-analyzer 파드 IP변수 지정 및 접속 확인
CAIP=$(kubectl get pod -n kubecost -l app=cost-analyzer -o jsonpath={.items[0].status.podIP})
curl -s $CAIP:9090
6
# 외부에서 bastion EC2 접속하여 특정 파드 접속 방법 : socat(SOcket CAT) 활용 - 링크
yum -y install socat
socat TCP-LISTEN:80,fork TCP:$CAIP:9090
웹 브라우저에서 bastion EC2 IP로 접속
<9> 삭제
1
helm uninstall -n kube-system kube-ops-view
helm uninstall nginx
helm uninstall botkube --namespace botkube
helm uninstall -n monitoring kube-prometheus-stack
2
클러스터 삭제
eksctl delete cluster --name $CLUSTER_NAME && aws cloudformation delete-stack --stack-name $CLUSTER_NAME
(삭제 10분 걸린다. 시작 8분, 종료 18분 = 10분 걸림)
3
삭제
# EKS Control Plane 로깅(CloudWatch Logs) 비활성화
eksctl utils update-cluster-logging --cluster $CLUSTER_NAME --region $AWS_DEFAULT_REGION --disable-types all --approve
4
# 로그 그룹 삭제 : 컨트롤 플레인
aws logs delete-log-group --log-group-name /aws/eks/$CLUSTER_NAME/cluster
5
# 로그 그룹 삭제 : 데이터 플레인
aws logs delete-log-group --log-group-name /aws/containerinsights/$CLUSTER_NAME/application
aws logs delete-log-group --log-group-name /aws/containerinsights/$CLUSTER_NAME/dataplane
aws logs delete-log-group --log-group-name /aws/containerinsights/$CLUSTER_NAME/host
aws logs delete-log-group --log-group-name /aws/containerinsights/$CLUSTER_NAME/performance
다음
감사합니다.