리셋 되지 말자

[kubernetes] kubelet 본문

오케스트레이션

[kubernetes] kubelet

kyeongjun-dev 2021. 7. 14. 18:02

kubelet

워커노드에 존재하는 쿠버네티스 클러스터의 구성요소

Pod의 구성 내용(Pod Spec)을 받아서 컨테이너 런타임(CRI, Container Runtime Interface)으로 전달하고, Pod 안의 컨테이너들이 정상적으로 작동하는지 모니터링

쿠버네티스에서 Pod의 생성과 상태 관리 및 복구 등을 담당하는 매우 중요한 구성요소. 따라서 kubelet에 문제가 생기면 Pod가 정상적으로 관리되지 않음

정리 : kubelet은 Pod의 상태를 관리함

 

Pod 배포 - nginx

- nginx-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: container-name
    image: nginx

 

- yaml파일로 Pod 배포

[vagrant@m-k8s ~]$ sudo kubectl create -f nginx-pod.yaml 
pod/nginx-pod created

Pod의 구성 내용을 파일 형태로 읽어 들여서 1개의 Pod를 임의의 워커 노드에 배포
(-f 옵션은 force가 아닌 filename 을 의미)

 

- 배포된 Pod 확인

[vagrant@m-k8s ~]$ sudo kubectl get pods
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          2m5s

정상적으로 배포된 상태(Running) 인지 확인

 

- Pod가 배포된 워커 노드 확인

[vagrant@m-k8s ~]$ sudo kubectl get pods -o wide
NAME        READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
nginx-pod   1/1     Running   0          5m32s   172.16.103.129   w2-k8s   <none>           <none>

-o 옵션은 output의 약어로, 출력을 특정 형식으로 해주는 옵션. wide는 제공되는 출력 형식 중에서 출력 정보를 더 만히 표시해 주는 옵션

 

kubelet 중지 시, 동작 확인

위에서 확인한 nginx Pod가 배포된 워커 노드에서 진행

- kubelet 중지

[vagrant@w2-k8s ~]$ systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: active (running) since 화 2021-07-13 13:20:20 KST; 1 day 4h ago
     Docs: https://kubernetes.io/docs/
 Main PID: 3796 (kubelet)
   CGroup: /system.slice/kubelet.service
           └─3796 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cgroup-driver=systemd --network-plugin=cni --...
[vagrant@w2-k8s ~]$ sudo systemctl stop kubelet
[vagrant@w2-k8s ~]$ systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: inactive (dead) since 수 2021-07-14 17:55:04 KST; 2s ago
     Docs: https://kubernetes.io/docs/
  Process: 3796 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 3796 (code=exited, status=0/SUCCESS)

 

- master 노드에서 nginx pod 삭제

[vagrant@m-k8s ~]$ sudo kubectl get pod
NAME        READY   STATUS    RESTARTS   AGE
nginx-pod   1/1     Running   0          13m
[vagrant@m-k8s ~]$ sudo kubectl delete pod nginx-pod
pod "nginx-pod" deleted

시간이 지나도 삭제가 되지 않음. Ctrl + C 로 삭제 취소

 

- nginx pod 상태 확인

[vagrant@m-k8s ~]$ sudo kubectl delete pod nginx-pod
pod "nginx-pod" deleted
 ^C
[vagrant@m-k8s ~]$ sudo kubectl get pod
NAME        READY   STATUS        RESTARTS   AGE
nginx-pod   1/1     Terminating   0          16m

상태가 Terminating (중지 중) 임을 확인. 하지만 kubelet이 동작하지 않는 상태라 pod가 삭제되지 않음

 

- worker 노드에서 kubelet 재시작

[vagrant@w2-k8s ~]$ sudo systemctl start kubelet
[vagrant@w2-k8s ~]$ systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: active (running) since 수 2021-07-14 18:00:57 KST; 5s ago
     Docs: https://kubernetes.io/docs/
 Main PID: 9667 (kubelet)
   CGroup: /system.slice/kubelet.service
           └─9667 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cgroup-driver=systemd --network-plugin=cni --...

 

- master 노드에서 nginx pod가 삭제되었는지 확인

[vagrant@m-k8s ~]$ sudo kubectl get pod
No resources found in default namespace.

 

 

정리 : kubectl이 동작하지 않으면, pod을 관리하는데 문제가 생긴다

Comments