🔹Kubernetes

[Kubernetes] CentOS 7 Master-Worker 설치 방법

terranbin 2024. 7. 25. 22:42
728x90
SMALL

[전제 조건] 


  • /etc/hosts 설정
  • master server - kubeadm init
  • worker server - kubeadm join

  • 각 서버에 /etc/hosts 추가
echo "192.168.98.159 master" >> /etc/hosts
echo "192.168.98.162 worker1" >> /etc/hosts
echo "192.168.98.161 worker2" >> /etc/hosts

master server

  • kubeadm init
    • kubeadm 을 통한 네트워크 설정을 잡는다.
    • apiserver-advertise-address : 편하게 하려면 내부아이피(privateIP 사용할 것)
    • cidr : 이것도 flannel 의 기본인 10.244.0.0/16 을 사용할 것
    • 출력 log 저장
kubeadm init --apiserver-advertise-address=[masterIP] --pod-network-cidr=10.244.0.0/16 > kubeadm_join.log

ex)
kubeadm init --apiserver-advertise-address=192.168.98.159 --pod-network-cidr=10.244.0.0/16 > kubeadm_join.log

 

  • log 확인
cat ./kubeadm_join.log
  • 아래 명령어 실행
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

export KUBECONFIG=/etc/kubernetes/admin.conf

 

  • Network 설정
# CNI 플러그인 실행 바이너리 제공 / 모든 노드 필수!
mkdir -p /opt/cni/bin
curl -L https://github.com/containernetworking/plugins/releases/download/v1.4.0/cni-plugins-linux-amd64-v1.4.0.tgz | tar -C /opt/cni/bin -xz

# CNI 네트워크 컨트롤러(Pod) 배포 / master 에서만
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

 

  • 클러스터 연결 상태 확인
# kubectl get nodes
NAME     STATUS     ROLES           AGE     VERSION
master   Ready   control-plane   5m33s   v1.29.13

 

  •  해당 log 파일 worker server 로 복사
scp kubeadm_join.log root@worker1:/root
scp kubeadm_join.log root@worker2:/root

Worker Server

  • log file 가장 아래줄 확인
# cat kubeadm_join.log | tail -2
kubeadm join 192.168.98.159:6443 --token xnqph8.1ica9u1urgrs1fqm \
        --discovery-token-ca-cert-hash sha256:3dbfe304218555ef90ef4d76c47f8edaa9a1daf27e364175983a06b4c01d0c52

 

  • /etc/containerd/config.toml  수정
    • disabled_plugins = ["cri"] 주석 처리
#주석 처리
sed -i '/^disabled_plugins = \["cri"\]/ s/^/# /' /etc/containerd/config.toml

 

  • containerd 재실행
systemctl restart containerd

 

  • kubeadm_join.log 파일에 있는 명령어 실행
kubeadm join 192.168.98.159:6443 --token xnqph8.1ica9u1urgrs1fqm \
>         --discovery-token-ca-cert-hash sha256:3dbfe304218555ef90ef4d76c47f8edaa9a1daf27e364175983a06b4c01d0c52

 

  • 아래 로그 출력
[preflight] Running pre-flight checks
        [WARNING Hostname]: hostname "worker1" could not be reached
        [WARNING Hostname]: hostname "worker1": lookup worker1 on 192.168.98.2:53: no such host
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

 

  • cluster 확인
kubectl get nodes
NAME      STATUS   ROLES           AGE     VERSION
master    Ready    control-plane   14m     v1.29.13
worker1   Ready    <none>          4m14s   v1.29.13

 


  • 기타

설정이 이상하게 된다면 아래 두 링크 중에 해결 방법이 작성되어 있을 확률이 높다

 

https://sungbin-park.tistory.com/86

https://sungbin-park.tistory.com/87

 

[Finished]

LIST