티스토리 뷰

kubectl은 kubeadm init 시, master node에서 실행이 가능하다. 이 때 /etc/kubernetes/admin.conf 파일이 생성된다. 하지만 실제 kubectl은 마스터 노드 이외의 워커 노드에서도 동작할 수 있다. admin.conf 파일을 워커 노드에 복사 후, 워커 노드에서 kubectl 실행 시 정상 동작한다. 

 

아래는 마스터 노드의 /etc/kubernetes/admin.conf를 워커 노드의 ./ 에 복사 후, kubectl 명령을 내린 결과이다. conf 파일 명시를 위해 --kubeconfig 옵션을 추가한다. 

vagrant@w3-k8s:~$ kubectl get nodes --kubeconfig admin.conf
NAME     STATUS   ROLES           AGE    VERSION
m-k8s    Ready    control-plane   6d1h   v1.29.14
w1-k8s   Ready    <none>          6d1h   v1.29.14
w2-k8s   Ready    <none>          6d1h   v1.29.14
w3-k8s   Ready    <none>          6d1h   v1.29.14

 

클러스터의 모든 노드를 정상적으로 확인할 수 있다. 

 


 

kubelet은 파드 생성, 상태 관리, 복구 등을 담당한다. kubelet에 문제가 생기면 파드가 정상적으로 관리되지 않는다. 

간단한 nginx 파드를 마스터 노드에서 배포하면 아래와 같다. 

이 때 -f 옵션은 파드를 실행할 yaml 파일 지정을 위해 사용한다. (filename option)

vagrant@m-k8s:~$ kubectl create -f ./simple-nginx/nginx-pod.yaml 
pod/nginx-pod created
vagrant@m-k8s:~$ kubectl get pods -o wide
NAME        READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-pod   1/1     Running   0          56s   10.244.3.2   w3-k8s   <none>           <none>

 

3번 워커에 정상적으로 파드가 배포되었다. 

 

3번 워커에서 현재 kubelet이 동작 중임을 systemctl status kubelet으로 확인하고, inactive 상태면 start 해준다. 

vagrant@w3-k8s:~$ systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
     Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor prese>
    Drop-In: /usr/lib/systemd/system/kubelet.service.d
             └─10-kubeadm.conf
     Active: active (running) since Wed 2025-03-05 12:46:54 UTC; 42min ago
     ...

 

3번 워커에 실제로 nginx 파드가 배포되어 있는 지는 kubectl get pods -o wide 또는 해당 노드에서 crictl pods 로 확인할 수 있다. 

vagrant@w3-k8s:~$ sudo crictl pods
WARN[0000] runtime connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead. 
ERRO[0000] validate service connection: validate CRI v1 runtime API for endpoint "unix:///var/run/dockershim.sock": rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial unix /var/run/dockershim.sock: connect: no such file or directory" 
POD ID              CREATED             STATE               NAME                    NAMESPACE           ATTEMPT             RUNTIME
0f840b0d55bc1       8 minutes ago       Ready               nginx-pod               default             0                   (default)
9bb9bdc14cf4c       44 minutes ago      Ready               kube-proxy-7nngt        kube-system         1                   (default)
f56fd85489c62       44 minutes ago      Ready               kube-flannel-ds-7g2vg   kube-flannel        1                   (default)
9cc2cda38de56       6 days ago          NotReady            kube-proxy-7nngt        kube-system         0                   (default)

 

이제 강제로 kubelet을 종료 (sudo systemctl stop kubelet) 후, 마스터 노드에서 nginx-pod를 삭제하면 다음과 같다. 

kubectl delete pod nginx-pod
pod "nginx-pod" deleted
^Cvagrant@m-k8s:~$ kubectl get pods -o wide
NAME        READY   STATUS        RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-pod   1/1     Terminating   0          11m   10.244.3.2   w3-k8s   <none>           <none>

 

마스터에서는 삭제 명령을 내렸지만, 워커 노드의 kubelet이 동작하고 있지 않기 때문에 Terminating 상태만 유지가 되고 있다. 

이후, 3번 워커에서 kubelet을 재시작한 뒤, 마스터에서 다시 파드 동작을 확인하면 다음과 같다. 

vagrant@m-k8s:~$ kubectl get pods -o wide
No resources found in default namespace.

 

이를 통해 kubelet에 문제가 생기면 파드가 제대로 관리되지 않음을 알 수 있다. 


 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함