# (추가 오류사항) EKS 에서는 설치에 문제가 없었으나, Hyper-V에서 설치 시 문제가 발생 하였다.
- 바로 아래의 에러 메세지 이다.
no matches for kind "APIService" in version "apiregistration.k8s.io/v1beta1"
- 삭제 명령어 실행
kubectl delete -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml
- 실행 명령어 실행
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
- 에러 메세지가 생긴 원인은 apiregistration.k8s.io 버전이 1.22버전에서 fully deprecated 된게 원인이었다.
- 위의 삭제와 실행 명령어를 실행하면 문제없이 메트릭 지표를 조회 할 수 있다.
k8s-master-node@k8smasternode-Virtual-Machine:~/yaml/metrics-server$ kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8smasternode-virtual-machine 154m 7% 1403Mi 77%
k8sworkernode01-virtual-machine 63m 3% 1124Mi 61%
k8sworkernode02-virtual-machine 78m 3% 1108Mi 60%
# pod와 node들의 자원을 모니터링 하는 방법에 대해서 알아보자.
- 명령어를 실행하여 yaml 파일을 설치하자.
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml
- 정상적으로 설치 후 아래의 명령어를 입력하면 에러가 발생할 것이다.
kubectl top nodes
ec2-user:~/environment/yaml $ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
serviceaccount/metrics-server created
deployment.apps/metrics-server created
service/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
ec2-user:~/environment/yaml $ kubectl top nodes
Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)
- 이 현상은 tls 통신이 제대로 이뤄지지 않기 때문이므로 다음과 같이 metrics 서버의 내용을 수정하여 서버 통신이 원활하게 할 수 있도록 옵션을 바꾼다.
메트릭스 디플로이의 설정을 변경하기 위해 다음 명령어 실행한다.
kubectl edit deployments.apps -n kube-system metrics-server
yaml 파일 내부에서 args를 찾아가서 다음 설정 두 개 추가한다.
아규먼트 | 설명 |
- --kubelet-insecure-tls | 인증서가 공인 기관에 승인 받지 않은 안전하지 않기 때문에 보안적으로 취약하지만 무시하겠다는 의미 |
- --kubelet-preferred-address-types=InternalIP | kubelet 연결에 사용할 때 사용하는 주소 타입을 지정 |
- 아래의 모습처럼 추가를 해준다.
spec:
containers:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
image: k8s.gcr.io/metrics-server/metrics-server:v0.3.7
imagePullPolicy: IfNotPresent
name: metrics-server
ports:
- containerPort: 4443
name: main-port
- 해당 정보를 저장 후 아래 명령어를 실행하여 정상적으로 진행되고 있는지 확인한다.
kubectl get pod -n kube-system
kubectl get pod -n kube-system -w
- 조회를 해보면 metrics-server-65ff69b8b7-x2dq 가 동작중인것을 확인 할 수있다.(원래는 모두 pending 상태 였는데... worker 노드 모두 재부팅 하니... 정상적으로 Running 상태로 됨... 왜 top 명령이 갑자기 먹는지는 잘 모르겠다...;;)
ec2-user:~/environment $ kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
aws-node-hhg2p 1/1 Running 0 36m
aws-node-hhpns 1/1 Running 0 36m
coredns-7dd7f84d9-nttms 1/1 Running 0 34h
coredns-7dd7f84d9-sjfk4 1/1 Running 0 34h
kube-proxy-rpvrg 1/1 Running 0 36m
kube-proxy-rvrms 1/1 Running 0 36m
metrics-server-65ff69b8b7-x2dqh 1/1 Running 0 35h
metrics-server-96dcd945d-7fk62 0/1 Pending 0 35h
tiller-deploy-56b574c76d-tcsqm 0/1 Pending 0 34h
tiller-deploy-587d84cd48-llkt9 1/1 Running 0 34h
ec2-user:~/environment $
- kubectl top nodes 를 활용하여 자원 현황을 파악해보자.
ec2-user:~/environment $ kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
ip-192-168-23-152.ap-northeast-2.compute.internal 44m 4% 455Mi 78%
ip-192-168-56-215.ap-northeast-2.compute.internal 43m 4% 442Mi 75%
ec2-user:~/environment $
- 이로써 쿠버네티스 에서 top 명령을 통해 노드들의 자원 상태를 모니터링 하는 방법에 대해서 알아보았다.
'⭐ Kubernetes & EKS > EKS' 카테고리의 다른 글
EKS 점검사항 (0) | 2021.10.08 |
---|---|
EKS Deployment Manifest (0) | 2021.10.07 |
EKS Liveness Probe, Readiness Probe, Startup Probe (0) | 2021.10.05 |
EKS Jenkins 디스크럽터 작성 (0) | 2021.10.05 |
EKS Pod 디스크립터 작성 (0) | 2021.10.05 |