EKS 8탄 - 4주차
본 내용은 CloudNet 주말 스터디 내용을 참고로 작성되었습니다.
https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863
계속 테스트하며 내용과 설명이 업데이트 됩니다.
Metrics-server 이해
kwatch 사용
botkube 사용
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'
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 모니터
1
구성도
https://docs.botkube.io/next/architecture/
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
감사합니다.