본문 바로가기

⭐ Kubernetes & EKS/EKS

EKS pod, nodes 의 자원 모니터링 (kubectl top)

728x90
반응형

# (추가 오류사항) 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 명령을 통해 노드들의 자원 상태를 모니터링 하는 방법에 대해서 알아보았다.

728x90
반응형

'⭐ 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