본문 바로가기
Come on IT/DevOps

Kubernetes kubeadm init 오류 및 해결 방법

by JONGSKY 2024. 10. 2.
728x90
SMALL

1. 오류 상황

Kubernetes 클러스터를 초기화하려고 kubeadm init 명령어를 실행했을 때 다음과 같은 오류가 발생했습니다:

 

I1002 00:49:03.297201    5169 version.go:256] remote version is much newer: v1.31.0; falling back to: stable-1.27
[init] Using Kubernetes version: v1.27.16
[preflight] Running pre-flight checks
    [WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
error execution phase preflight: [preflight] Some fatal errors occurred:
    [ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
    [ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
    [ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
    [ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists
    [ERROR DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
 

이 오류는 주로 다음과 같은 이유로 발생합니다:

  1. 기존의 Kubernetes 클러스터 초기화 파일들이 이미 존재함
  2. etcd 데이터 디렉토리가 비어 있지 않음
  3. kubelet 서비스가 활성화되지 않음

이로 인해 kubeadm init이 정상적으로 실행되지 않았습니다.

 

해결 방법

 

이 오류를 해결하기 위한 단계별 해결 방법을 아래와 같이 정리합니다.

1. 기존 Kubernetes 구성 파일 삭제

오류 메시지에 따르면 /etc/kubernetes/manifests 디렉토리에 이미 존재하는 파일들이 있어서 초기화가 진행되지 못하고 있습니다. 해당 파일들을 삭제하여 문제를 해결할 수 있습니다.

sudo rm -f /etc/kubernetes/manifests/kube-apiserver.yaml
sudo rm -f /etc/kubernetes/manifests/kube-controller-manager.yaml
sudo rm -f /etc/kubernetes/manifests/kube-scheduler.yaml
sudo rm -f /etc/kubernetes/manifests/etcd.yaml
sudo rm -rf /var/lib/etcd

위 명령어를 사용하여 파일들을 삭제한 후 다시 초기화를 시도할 수 있습니다.

2. kubelet 서비스 활성화

오류 메시지에 따르면 kubelet 서비스가 활성화되지 않은 상태로 클러스터를 초기화하려고 했습니다. kubelet 서비스를 활성화하여 시스템이 클러스터 노드로 동작할 수 있도록 해야 합니다.

 
sudo systemctl enable kubelet
sudo systemctl start kubelet​

 

이 명령어를 통해 kubelet 서비스를 활성화한 후 클러스터 초기화를 다시 시도합니다.

3. kubeadm reset 명령어 실행

만약 이전에 kubeadm init을 실행했다가 실패한 적이 있거나 클러스터 설정이 중간에 중단된 경우라면, 클러스터를 재설정해야 합니다. 이

를 위해 kubeadm reset 명령을 사용하여 이전 설정을 초기화할 수 있습니다.

 

sudo kubeadm reset

 

이 명령어는 이전의 클러스터 구성과 관련된 모든 데이터를 삭제하여 초기 상태로 되돌립니다. 그 후 다시 kubeadm init 명령어를 사용해 클러스터를 초기화할 수 있습니다.

 

4. --ignore-preflight-errors 옵션 사용

 

만약 해당 오류가 치명적이지 않거나 클러스터 구성 파일이 이미 존재하는 것을 알고 있고, 이를 무시하고 초기화를 계속 진행하고 싶다면, --ignore-preflight-errors 옵션을 사용할 수 있습니다.

 

sudo kubeadm init --ignore-preflight-errors=FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml,FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml,FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml,FileAvailable--etc-kubernetes-manifests-etcd.yaml,DirAvailable--var-lib-etcd

 

이 명령어는 특정 오류를 무시하고 Kubernetes 클러스터 초기화를 진행합니다. 단, 이 방법은 기존 설정이 정확히 무엇인지 알고 있을 때만 사용하는 것이 안전합니다.

결론

위 단계를 통해 Kubernetes 클러스터 초기화 중 발생하는 오류를 해결할 수 있습니다. 먼저 기존 클러스터 설정 파일을 삭제하거나, 클러스터를 재설정하고, kubelet 서비스를 활성화하는 등의 방법을 통해 문제를 해결할 수 있습니다.

마지막으로, 오류를 무시하고 진행해야 하는 상황에서는 --ignore-preflight-errors 옵션을 사용할 수 있지만, 이 옵션은 신중하게 사용하는 것이 좋습니다.

이 오류가 발생한 원인을 정확히 파악하고 해결하면, Kubernetes 클러스터를 정상적으로 초기화하고 운영할 수 있습니다.

728x90
LIST