https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
k8s-master VM은 현재 kubectl, kubeadm, kubelet이 설치된 상태고 이 상태의 VM을 복제해서 워커 노드 1, 2, 3을 만들어 주었어요.
그리고 각 VM의 hostname을 설정해줄거에요.
# master node
sudo hostnamectl set-hostname k8s-master
# worker node 1
sudo hostnamectl set-hostname k8s-node1
# worker node 2
sudo hostnamectl set-hostname k8s-node2
# worker node 3
sudo hostnamectl set-hostname k8s-node3
그리고 각 VM은 한 번씩 재시작해줄 거예요.
마스터 노드
마스터 노드에서 kubeadm init 명령을 통해 쿠버네티스 클러스터를 생성한다.
sudo kubeadm init
kubeadm init 명령이 성공적으로 마쳐지면 kubectl을 사용할 수 있게 환경 설정을 하는 방법과 pod network를 설정하라는 안내 그리고 kubeadm join 명령을 통해서 워커 노드들을 마스터 노드에 등록할 수 있는 토큰이 생성돼요.
먼저 kubectl을 사용할 수 있게 환경설정부터 해요. 일반 유저로 사용할 때는 아래 명령어를 통해 .kube 폴더를 유저의 홈 디렉터리에 생성하고 설정 파일을 복사해주세요. 그리고 kubectl get nodes 명령어를 통해 확인을 해주세요. 마스터 노드가 보인다면 성공한 거예요. 혹시 문제가 있다면 그 건 조금 복잡하니까 다음에 자세하게 정리해볼게요.
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
그런데 상태가 Not-Ready로 나올 거예요. 이 것은 pod network를 설정하지 않아서 그런데 네트워크에 대한 것은 다음에 자세하게 알아보기로 하고 일단 pod network add-on을 설치해볼게요. 설치 가능한 add-on 목록은 아래에서 확인할 수 있어요.
그리고 weave 네트워크에 대한 자세한 사항은 다음에서 확인 가능하고 설정하는 방법은 아래와 같아요.
https://www.weave.works/docs/net/latest/kubernetes/kube-addon/
$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
그리고 다시 kubectl get nodes 명령을 실행하면 마스터 노드의 상태가 Ready로 변한 것을 확인할 수 있어요.
여기까지 성공했다면 다음은 각 워커 노드를 쿠버네티스 클러스터에 등록하는게 남았어요.
이전 kubeadm init 명령의 출력으로 나온 토큰 값으로 워커노드를 쿠버네티스 클러스터에 등록시킬 수 있어요.
워커노드
각 워커 노드에 접속해서 아래처럼 마스터 노드에서 kubeadm init 명령을 통해 나온 값을 가지고 클러스터에 워커 노드들을 등록시킬 수 있어요. 일반 사용자라면 앞에 sudo를 붙여주는 걸 잊지 말아요.
sudo kubeadm join 192.168.122.80:6443 --token v76s3t.amagi7gun6ckcv22 \
--discovery-token-ca-cert-hash sha256:ab12348b06aada1d4009af9f85a78ed72601a906c0ac4b4d009990336f437535
모든 워커 노드를 등록시키고 마스터 노드에서 kubectl get nodes 명령을 통해 클러스터에 등록된 노드들과 상태를 확인해볼게요.
[xodwk@k8s-m ~]$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-m Ready control-plane,master 3h33m v1.21.3 192.168.122.80 <none> CentOS Linux 7 (Core) 3.10.0-1160.31.1.el7.x86_64 docker://20.10.7
k8s-node1 Ready <none> 169m v1.21.3 192.168.122.81 <none> CentOS Linux 7 (Core) 3.10.0-1160.31.1.el7.x86_64 docker://20.10.7
k8s-node2 Ready <none> 153m v1.21.3 192.168.122.82 <none> CentOS Linux 7 (Core) 3.10.0-1160.31.1.el7.x86_64 docker://20.10.7
k8s-node3 Ready <none> 150m v1.21.3 192.168.122.83 <none> CentOS Linux 7 (Core) 3.10.0-1160.31.1.el7.x86_64 docker://20.10.7
큰 문제가 없었다면 여기까지가 쿠버네티스 클러스터를 생성하는 과정의 끝이에요.
문제가 있을 때 트러블 슈팅하는 건 다음에 좀 정리를 해볼게요.
쿠버네티스 클러스터 생성하는 건 끝인데 배우는 건 이제 시작이네요.
일단 끝.