일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- aws s3
- OS
- helm
- tcp
- grafana
- kubeadm
- Spring
- Operating System
- ip
- MAC address
- PostgreSQL
- kubectl
- JavaScript
- airflow
- CVAT
- Vision
- jvm
- docker
- CSV
- AWS
- EC2
- Trino
- java
- log
- Network
- Python
- Kafka
- kubernetes
- Packet
- zookeeper
- Today
- Total
JUST WRITE
AWS EC2 Kubernetes Cluster 설치(2) Kubeadm - Master,Worker 설정 본문
AWS EC2 Kubernetes Cluster 설치(2) Kubeadm - Master,Worker 설정
천재보단범재 2022. 12. 1. 00:12
Kubeadm - Master, Worker 설정
Kubernetes Cluster 모든 Node에 containerd 설치가 완료하고 나면
이제 Kubeadm 설치하고 Kubeadm을 통해 Kubernetes Master, Worker 설정을 하겠다.
Kubeadm 설치
모든 Node에 Kubeadm과 필요한 패키지를 설치한다.
설치가 필요한 패키지는 아래와 같다.
- Kubeadm : Kubernetes Cluster를 Bootstrap
- Kubelet : Node내 Pod의 Container를 각종 작업을 수행
- Kubectl : Kubernetes Cluster를 control 할 수 있는 command interface
위 패키지를 설치하기 위해 Kubernetes apt Repository를 추가한다.
# Repository 추가하기 전에 필요한 패키지 설치
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https ca-certificates curl
# 구글 키 download
$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
# Repository 추가
$ echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
패키지 설치을 위한 Repository를 추가한 후 필요한 패키지를 추가한다.
$ sudo apt-get update
$ sudo apt-get install -y kubelet kubeadm kubectl
$ sudo apt-mark hold kubelet kubeadm kubectl
Kubeadm으로 Cluster 설치
필요한 패키지 설치 후 Kubernetes Cluster를 설치한다.
Master와 Worker에서 하는 작업이 다르다.
Master 설치
Mater Node는 Kubernetes Control plane으로 동작한다.
Kubeadm init 명령어를 통해 세팅한다.
$ sudo kubeadm init --control-plane-endpoint=k8smaster --apiserver-advertise-address=${k8smaster ip} --pod-network-cidr=10.244.0.0/16
Your Kubernetes control-plane has initialized successfully!
Master Node를 Control plane으로 설치했다는 메시지와 함께 몇 가지 안내가 나온다.
첫 번째는 Kubectl로 설치한 Kubernetes Cluster에 접속하기 위한 명령어 안내가 나온다.
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
You should now deploy a Pod network to the cluster.
두 번째는 Worker Node를 Kubernetes Cluster에 합류하기 위한 명령어가 나온다.
해당 명령어를 복사해서 각 Worker Node에서 실행시키면 된다.
You can now join any number of machines by running the following on each node
as root:
kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
Worker 설치
Control plane 설치 때 나온 kubeadm join 명령어를 각 Worker Node에 실행한다.
$ sudo kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
명령어를 살펴보면 알겠지만 token값이 들어가는 것을 알 수 있다.
설치 시 join 명령어를 복사하지 못했다면 Master Node에서 아래 명령어를 통해 token 값을 확인한다.
$ sudo kubeadm token list
Kubectl은 Worker에서도 Master에 세팅한 것처럼 가능하다.
해당 포스팅에서는 Master에서만 설정하고 모든 Kubectl 명령어는 Master에서만 실행하였다.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8smaster NotReady control-plane 1m v1.25.4
k8sworker1 NotReady <none> 50s v1.25.4
k8sworker2 NotReady <none> 45s v1.25.4
k8sworker3 NotReady <none> 40s v1.25.4
kubectl 명령어를 통해 Worker가 join 한 것을 확인했지만 status가 NotReady이다.
node사이에 Network 세팅을 추가로 해줘야 하기 때문이다.
Network add-on 설치
Node간 Network통신을 위해서 Network add-on을 설치해야 한다.
Calico, Flannel, Weave-net 등이 있으며 Flannel로 설치하려 한다.
아래 명령어를 통해 설치가 가능하다.
$ wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
$ kubectl apply -f kube-flannel.yml
Daemonset으로 모든 Node에 Pod가 실행된다.
아래 kubectl 명령어로 모든 Node에 flannel Pod가 실행된 것을 알 수 있다.
$ kubectl get all -n kube-flannel -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/kube-flannel-ds-d97p4 1/1 Running 0 23h 172.31.40.69 k8sworker1 <none> <none>
pod/kube-flannel-ds-fjm9x 1/1 Running 0 23h 172.31.56.88 k8sworker3 <none> <none>
pod/kube-flannel-ds-vmn27 1/1 Running 0 23h 172.31.56.190 k8smaster <none> <none>
pod/kube-flannel-ds-x5b87 1/1 Running 0 23h 172.31.54.28 k8sworker2 <none> <none>
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR
daemonset.apps/kube-flannel-ds 4 4 4 4 4 <none> 23h kube-flannel docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2 app=flannel
Network add-on과 DaemonSet에 대해서는 따로 포스팅하려 한다.
이제 모든 Node의 status가 NotReady에서 Ready 바뀐 것을 확인할 수 있다.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8smaster Ready control-plane 23h v1.25.4
k8sworker1 Ready <none> 23h v1.25.4
k8sworker2 Ready <none> 23h v1.25.4
k8sworker3 Ready <none> 23h v1.25.4
[참고사이트]
'MLOps > Kubernetes' 카테고리의 다른 글
Master Node HA 구성(2) - HAProxy 세팅 (0) | 2023.02.02 |
---|---|
Master Node HA 구성(1) - keepalived 세팅 (0) | 2023.02.01 |
Control Plane Components (0) | 2023.01.21 |
Kubectl auto-completion 세팅 (0) | 2022.12.02 |
AWS EC2 Kubernetes Cluster 설치(1) Kubeadm - containerd 설치 (0) | 2022.11.29 |