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 조인 시 오류 사항]
[node 조인 시 오류 사항]
error execution phase preflight: [preflight] Some fatal errors occurred:
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