brunch

You can make anything
by writing

C.S.Lewis

by Master Seo May 17. 2023

EKS8탄-8.EKS Observability-8/17

EKS 8탄 - 4주차


본 내용은 CloudNet 주말 스터디 내용을 참고로 작성되었습니다.

https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863  

계속 테스트하며  내용과 설명이 업데이트 됩니다.


목표

Metrics-server 이해

kwatch  사용

botkube 사용



<1> 수집 Metrics-serve ?

<2> 수집 메트릭 슬랙으로 전달 kwatch?

<3> 알람, 슬럭채널에서 명령어로 조회 가능한 botkube



<1> 수집 Metrics-serve ?



1

kubelet으로부터 수집한 리소스 메트릭을 수집 및 집계하는 클러스터 애드온 구성 요소


https://docs.aws.amazon.com/eks/latest/userguide/metrics-server.html

https://github.com/kubernetes-sigs/metrics-server

https://kubernetes.io/ko/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/

https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#top



cAdvisor ?

kubelet에 포함된 컨테이너 메트릭을 수집, 집계, 노출하는 데몬


kubectl top 명령어로 확인 가능하다.

나중에 Auto 스케이러에서도 사용한다.



구성도?


출처

https://kubernetes.io/ko/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/



2

배포?

# 배포

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml


-n kube-system 에 메트릭 서버 pod 1개 생성



3

# 메트릭 서버 확인

: 메트릭은 15초 간격으로 cAdvisor를 통하여 가져옴


kubectl get pod -n kube-system -l k8s-app=metrics-server

NAME                              READY   STATUS    RESTARTS   AGE

metrics-server-6bf466fbf5-w2jw6   1/1     Running   0          2m53s



kubectl api-resources | grep metrics

nodes                                          metrics.k8s.io/v1beta1                 false        NodeMetrics

pods                                           metrics.k8s.io/v1beta1                 true         PodMetrics



kubectl get apiservices |egrep '(AVAILABLE|metrics)'

NAME                                   SERVICE                      AVAILABLE   AGE

v1beta1.metrics.k8s.io                 kube-system/metrics-server   True        85s



4

# 노드 메트릭 확인  - top 명령어 사용이 가능해진다 !!!


kubectl top node

NAME                                               CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%

ip-192-168-1-150.ap-northeast-2.compute.internal   70m          1%     678Mi           4%

ip-192-168-2-82.ap-northeast-2.compute.internal    59m          1%     784Mi           5%

ip-192-168-3-229.ap-northeast-2.compute.internal   67m          1%     718Mi           4%



5

# 파드 메트릭 확인


kubectl top pod -A

kubectl top pod -n kube-system --sort-by='cpu'

kubectl top pod -n kube-system --sort-by='memory'






<2> 수집 메트릭 슬랙으로 전달 kwatch?


1

kwatch helps you monitor all changes in your Kubernetes(K8s) cluster, detects crashes in your running apps in realtime, and publishes notifications to your channels (Slack, Discord, etc.


https://github.com/abahmed/kwatch

https://artifacthub.io/packages/helm/kwatch/kwatch

https://kwatch.dev/blog/monitor-pvc-usage


2

//  사전에 slack wehook url을 만드세요.

https://velog.io/@king/slack-incoming-webhook


slack 실행



3

참고

https://brunch.co.kr/@topasvga/3141




4

# configmap 생성


NICK=masterseo


// 아래 slack url에는  개인이 만든 것을 넣기 바랍니다.



cat <<EOT > ~/kwatch-config.yaml

apiVersion: v1

kind: Namespace

metadata:

  name: kwatch

---

apiVersion: v1

kind: ConfigMap

metadata:

  name: kwatch

  namespace: kwatch

data:

  config.yaml: |

    alert:

      slack:

        webhook: 'https://hooks.slack.com/services/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'

        title: $NICK-EKS

        #text:

    pvcMonitor:

      enabled: true

      interval: 5

      threshold: 70

EOT

kubectl apply -f kwatch-config.yaml


# 배포

kubectl apply -f https://raw.githubusercontent.com/abahmed/kwatch/v0.8.3/deploy/deploy.yaml



5

잘못된  pod 배포 해서 알람 확인?


# 터미널1

watch -d kubectl get pods


NAME                    READY   STATUS             RESTARTS   AGE

nginx-19                0/1     ImagePullBackOff   0          3m16s



6

# 잘못된 이미지 정보의 파드 배포


kubectl apply -f https://raw.githubusercontent.com/junghoon2/kube-books/main/ch05/nginx-error-pod.yml


7

kubectl get events -w



Slack 으로 보기

masterseo-EKS




8

# 이미지 업데이트 방안2 : 

set 사용 - image 등 일부 리소스 값을 변경 가능!

kubectl set 


kubectl set image pod nginx-19 nginx-pod=nginx:1.19




9

# 삭제

kubectl delete pod nginx-19



10

kwatch 삭제  ?

kubectl delete -f https://raw.githubusercontent.com/abahmed/kwatch/v0.8.3/deploy/deploy.yaml




11

PVC 모니터




<3> 알람, 슬럭채널에서 명령어로 조회 가능한 botkube


1

구성도

https://docs.botkube.io/next/architecture/



https://botkube.io/

https://aws.amazon.com/ko/blogs/containers/streaming-kubernetes-events-in-slack/

https://docs.botkube.io/usage/



2

export SLACK_API_BOT_TOKEN='xㅌㅌㅌㅌㅌㅌㅌㅌㅌㅌㅌㅌㅌㅌㅌㅌㅌㅌcCI'

export SLACK_API_APP_TOKEN='xapp-1-xxxxxxxxxxxxxxxxxxxxxxxxxxx01'



3

설치

# repo 추가

helm repo add botkube https://charts.botkube.io

helm repo update


# 변수 지정

export ALLOW_KUBECTL=true

export ALLOW_HELM=true

export SLACK_CHANNEL_NAME=webhook3


#

cat <<EOT > botkube-values.yaml

actions:

  'describe-created-resource': # kubectl describe

    enabled: true

  'show-logs-on-error': # kubectl logs

    enabled: true


executors:

  k8s-default-tools:

    botkube/helm:

      enabled: true

    botkube/kubectl:

      enabled: true

EOT


# 설치

helm install --version v1.0.0 botkube --namespace botkube --create-namespace \

--set communications.default-group.socketSlack.enabled=true \

--set communications.default-group.socketSlack.channels.default.name=${SLACK_CHANNEL_NAME} \

--set communications.default-group.socketSlack.appToken=${SLACK_API_APP_TOKEN} \

--set communications.default-group.socketSlack.botToken=${SLACK_API_BOT_TOKEN} \

--set settings.clusterName=${CLUSTER_NAME} \

--set 'executors.k8s-default-tools.botkube/kubectl.enabled'=${ALLOW_KUBECTL} \

--set 'executors.k8s-default-tools.botkube/helm.enabled'=${ALLOW_HELM} \

-f botkube-values.yaml botkube/botkube


# 참고 : 삭제 시

helm uninstall botkube --namespace botkube



4

# 연결 상태, notifications 상태 확인

@Botkube ping

@Botkube status notifications


# 파드 정보 조회

@Botkube k get pod

@Botkube kc get pod --namespace kube-system

@Botkube kubectl get pod --namespace kube-system -o wide


# Actionable notifications

@Botkube kubectl




5

잘못된 이미지 파드 배포 및 확인


# 터미널1

watch kubectl get pod


# 잘못된 이미지 정보의 파드 배포

kubectl apply -f https://raw.githubusercontent.com/junghoon2/kube-books/main/ch05/nginx-error-pod.yml

kubectl get events -w

@Botkube k get pod


# 이미지 업데이트 방안2 : set 사용 - iamge 등 일부 리소스 값을 변경 가능!

kubectl set 

kubectl set image pod nginx-19 nginx-pod=nginx:1.19

@Botkube k get pod



6

# 삭제

kubectl delete pod nginx-19





다음 공부

 

https://brunch.co.kr/@topasvga/3241



https://brunch.co.kr/@topasvga/3217



감사합니다.




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari