IT 생활

[Linux]Install Kubernetes with kubeadm

freeyj 2022. 1. 18. 10:09

Kubeadm 이용하여 Kubernetes Cluster 구성

1. master 서버 1대 , Node 서버 2대 구성!

2. 호스트 등록 설정 (전체 서버 적용)

ex >

192.168.x.x master

192.168.x.x node1
192.168.x.x node2

 

3. hostname 설정 (전체 서버 적용)

hostnamectl set-hostname "hostname" --static  
 
ex )
# hostnamectl set-hostname master --static
# hostnamectl set-hostname node1 --static
# hostnamectl set-hostname node2 --static

 

4. Enable br_netfilter Kernel Module (전체서버 적용, root로 실행)

* * CNI 플러그인이 작동하기 위한 요구사항 (pod 네크워크애드온 Flannel 작동시 필요) **
# modprobe br_netfilter 
# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables 
# modprobe br_netfilter

[modprobe 실행 시 bridge관련 모듈 추가됨]

# ll /proc/sys/net/
dr-xr-xr-x. 1 root root 0 7월 9 11:02 bridge
dr-xr-xr-x. 1 root root 0 7월 9 11:03 core
dr-xr-xr-x. 1 root root 0 7월 8 11:07 ipv4
dr-xr-xr-x. 1 root root 0 7월 8 11:07 ipv6
dr-xr-xr-x. 1 root root 0 7월 8 11:07 netfilter
-rw-r--r--. 1 root root 0 7월 9 11:03 nf_conntrack_max
dr-xr-xr-x. 1 root root 0 7월 8 11:07 unix

 

5. Disable SWAP (전체 서버 적용)

#swapoff -a

 

6. 도커 설치 및 활성화

# yum install -y docker 
# systemctl enable docker && systemctl start docker 
# docker version

 

7. Kubernetes 설치

최신 패키지를 사용하려면 yum repsitory를 구성해야함

[Kubernetes yum Repo]

# sudo bash -c 'cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF'

[최신 버전 설치]

# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

[Kubelet 서비스 활성화]

# sudo systemctl enable kubelet && sudo systemctl start kubelet

 

8. Cgroup driver 설정 (전체서버 적용)

Kuvernetes 설치 시 Docker cgroup을 systemd로 설정해줘야함(설정을 안해주면 에러가 날 수 있음)

[cgroup driver정보 조회]

# docker info | grep -i cgroup
Cgroup Driver: cgroupfs

# sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/g' /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf -> 파일은 여기있음.

위와 같이 Cgroup driver 설정을 하였으나 Systemd로 변경되지 않으면 아래와 같이 진행
# sudo vi /usr/lib/systemd/system/docker.service 

아래와 같이 수정

ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd

# sudo systemctl daemon-reload
# sudo systemctl restart docker
# sudo docker info | grep -i cgroup
Cgroup Driver: systemd
 

9. Kubernetes Cluster 설치(Master 서버만 진행)

# kubeadm init
 

[Cluster 설치 완료 메시지]

=======================================
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
 
You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/
 
Then you can join any number of worker nodes by running the following on each as root:
 
kubeadm join 192.168.x.x:6443 --token ziq171.86u17stwc1k8fcnb \ --discovery-token-ca-cert-hash sha256:e129b02da45586a55c235567a8310e00dda44d7e7e31c2e29b7e2d5787655a95 =======================================
위의 빨간색 포인트 명령어는 Noder가 Master와 조인할 때 필요한 명렁어!
 

[정상적으로 설치가 완료 되었으면 아래와 같이 명령어 사용]

# mkdir -p $HOME/.kube 
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

10. Kubectl 명령어 사용을 위한 설정

# vi ~/.bash_profile
[.bash_profile]
....
PATH=$PATH:$HOME/bin
export PATH
export KUBECONFIG=/etc/kubernetes/admin.conf <--추가(맨 밑에 추가)

[변경사항 적용]
# source ~/.bash_profile

 

11. Kubernetes node 조인 (node 서버만 진행)

[Cluster 설치 완료 시 나오는 빨간 부분]

# kubeadm join 192.168.x.x:6443 --token ziq171.86u17stwc1k8fcnb \ 
--discovery-token-ca-cert-hash sha256:e129b02da45586a55c235567a8310e00dda44d7e7e31c2e29b7e2d5787655a95

 

[node 조인 시 오류 사항]
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to ~
 
아래명령어 입력후 재조인
# echo '1' > /proc/sys/net/ipv4/ip_forward

[node 조인 시 오류 사항]
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1 
 
아래명령어 입력후 재조인
# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

 

12. 잘 연결 되었는지 Master에서 Node 확인

# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 7m24s v1.18.6
node1 Ready <none> 4m32s v1.18.6
node2 Ready <none> 4m11s v1.18.6