https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

 

Creating a cluster with kubeadm

Using kubeadm, you can create a minimum viable Kubernetes cluster that conforms to best practices. In fact, you can use kubeadm to set up a cluster that will pass the Kubernetes Conformance tests. kubeadm also supports other cluster lifecycle functions, su

kubernetes.io

 

 

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 목록은 아래에서 확인할 수 있어요.

https://kubernetes.io/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-networking-model

 

Cluster Networking

Networking is a central part of Kubernetes, but it can be challenging to understand exactly how it is expected to work. There are 4 distinct networking problems to address: Highly-coupled container-to-container communications: this is solved by Pods and lo

kubernetes.io

 

그리고 weave 네트워크에 대한 자세한 사항은 다음에서 확인 가능하고 설정하는 방법은 아래와 같아요.

https://www.weave.works/docs/net/latest/kubernetes/kube-addon/

 

Integrating Kubernetes via the Addon

The following topics are discussed: Installation Before installing Weave Net, you should make sure the following ports are not blocked by your firewall: TCP 6783 and UDP 6783/6784. For more details, see the FAQ. Weave Net can be installed onto your CNI-ena

www.weave.works

$ 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

 

큰 문제가 없었다면 여기까지가 쿠버네티스 클러스터를 생성하는 과정의 끝이에요.

문제가 있을 때 트러블 슈팅하는 건 다음에 좀 정리를 해볼게요.

 

쿠버네티스 클러스터 생성하는 건 끝인데 배우는 건 이제 시작이네요.

 

 

일단 끝.