ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • kubeadm init error - kubelet nodes not found
    program_language 및 궁금한것/kubernetes 2023. 8. 31. 20:03

    2주 정도를 이 에러를 찾아 헤메였습니다.
     
    kubeadm init을 할때 나는 "nodes not found" 제 서버의 hostname을 못찾는다는 에러였죠..
    치열하게 구글에 검색도 해보았지만.. 원하는 답은 찾을 수 없었습니다.

    결론은 kubeadm reset, init을 반복하며 kubelet 설정이 꼬인 문제였습니다.
     
    에러 발생부터 해결까지 과정은 아래와 같습니다
     
    kubernetes 셋팅을 하면서 kubeadm reset과 init을 반복했었습니다. external etcd 설정도 추가보구요.
    처음 몇번은 잘 동작되어 join 문구까지 나왔는데 어느순간(?) 아래와 같은 에러가 납니다.
    error execution phase upload-config/kubelet: Error writing Crisocket information for the control-plane node "host명" not found
     
    --v=5 옵션을 줘서 더 자세히 보면... kubelet쪽에서 node를 못찾는것 같습니다.
     
     
    그래서 제가 했던 작업은..
     
    hostname이 제대로 설정되어 있는지 체크
    hostname 소문자로 변경
    containerd cgroup 설정 체크
    cgroup2 설정 체크...
    containerd, kubelet log 보기 등
     
    삽질만 열심히 했습니다.
     
     
    그러던중
    systemctl status kubelet을 조회하며 이상한 점을 발견했습니다.
    다른 블로그 글을 보면 아래와 같이 Drop-In이 /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf 하나로 잡혀있고
    CGroup설정도 제대로 되어 있었습니다.

     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 Mon 2022-02-28 19:43:49 EST; 5h 42min ago
         Docs: https://kubernetes.io/docs/
     Main PID: 91537 (kubelet)
        Tasks: 14 (limit: 23812)
       Memory: 50.6M
       CGroup: /system.slice/kubelet.service
               └─91537 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubecon>

     
    하지만 제 kubelet은 Drop-In이 두개파일을 참조하게 되어 있는데다가 CGrop도 뭔가 달랐습니다.

    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
    /etc/systemd/system/kubelet.service.d
    └─20-etcd-service-manager.conf
    Active: active (running) since Thu 2023-08-31 10:56:16 KST; 6min ago
    Docs: https://kubernetes.io/docs/
    Main PID: 114150 (kubelet)
    Tasks: 40 (limit: 408104)
    Memory: 49.2M
    CGroup: /system.slice/kubelet.service
    └─114150 /usr/bin/kubelet --address=127.0.0.1 --pod-manifest-path=/etc/kubernetes/manifests --cgroup-driver=systemd

     
    systemctl cat kubelet로 조회해보니 총 3개 파일이 나오더라구요. 정상적이라면 2개가 나와야 하는데 말이죠.
     
    찾아보니 /etc/systemd/system/kubelet.service.d/ 폴더 하위의 파일들은 우선순위가 높아서 이 파일이 적용 된다고 합니다.
    그래서 10-kubeadm.conf파일 대신 20-etcd-service-manager.conf파일이 적용된 것이죠.

    systemctl cat kubelet
    
    # /usr/lib/systemd/system/kubelet.service
    [Unit]
    Description=kubelet: The Kubernetes Node Agent
    Documentation=https://kubernetes.io/docs/
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    ExecStart=/usr/bin/kubelet
    Restart=always
    StartLimitInterval=0
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    
    # /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
    # Note: This dropin only works with kubeadm and kubelet v1.11+
    [Service]
    Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
    Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
    # This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
    EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
    # This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
    # the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
    EnvironmentFile=-/etc/sysconfig/kubelet
    ExecStart=
    ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
    
    # /etc/systemd/system/kubelet.service.d/20-etcd-service-manager.conf
    [Service]
    Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
    ExecStart=
    #  Replace "systemd" with the cgroup driver of your container runtime. The default value in the kubelet is "cgroupfs".
    ExecStart=/usr/bin/kubelet --address=127.0.0.1 --pod-manifest-path=/etc/kubernetes/manifests --cgroup-driver=systemd
    Restart=always

     
    20-etcd-service-manager.conf 파일을 삭제해주고 kubelet 재시작을 해줬습니다.

    rm -rf 20-etcd-service-manager.conf
    
    systemctl daemon-reload
    systemctl restart kubelet
    systemctl status kubelet

    systemctl status kubelet으로 조회하니 정상 출력되는것을 확인 후  kubeadm reset, init을 진행하니 정상적으로 동작하였습니다.
     
    2주묵은 체증이 내려갔군요. 후우..

    반응형

    댓글

Designed by Tistory.