Kubernetes

쿠버네티스 (Kubernetes) 설치 (ubuntu, kubeadm)

정윤재 2023. 4. 26. 01:03

0. 설치 환경 (단일 master node 환경)

 

OS : ubuntu 20.04.6
Container runtime : containerd 1.4.4
Kubernetes : 1.20.7
Network plugin : calico 3.17

 

1. containerd 설치 (master node, worker node 공통 설치 사항)

 

apt 로 containerd 를 설치 한 뒤 설치하고자 하는 버전을 overwrite 한다

이렇게 하는 이유는 apt-cache madison containerd 검색 했을때 1.4.4 라는 원하는

버전이 apt 저장소에 없기 때문임

 

apt-get install -y containerd 
	
mkdir -p /etc/containerd
	
containerd config default | sudo tee /etc/containerd/config.toml
	
systemctl stop containerd
	
curl -LO https://github.com/containerd/containerd/releases/download/v1.4.4/containerd-1.4.4-linux-amd64.tar.gz
	
tar xvf containerd-1.4.4-linux-amd64.tar.gz
	
rm containerd-1.4.4-linux-amd64.tar.gz
	
sudo cp bin/* /usr/bin/
	
sudo systemctl start containerd
	
rm -rf bin
	
sudo systemctl status containerd 
#containerd 상태가 active 임을 확인 함

 

2.  k8s 설치 (master node, worker node 공통 설치 사항)

 

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
	
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
	
sudo apt-get autoremove -y --allow-change-held-packages kubeadm kubelet kubectl 
#만약 설치 되어 있는 패키지가 있다면 전부 삭제 하고 다시 설치함

설치 안된 깨끗한 node

#아래 내용은 순서대로 실행 해 주세요 (의존성 때문에 순서대로 안하면 꼬입니다.)
sudo apt-get install -y kubeadm=1.20.15-00

sudo apt-get install -y --allow-downgrades kubelet=1.20.15-00

sudo apt-get install -y --allow-downgrades  kubectl=1.20.15-00

sudo apt-get install -y --allow-downgrades cri-tools=1.23.0-00

 

* 참고 사항

apt 저장소 에서 설치할 수 있는 패키지 버전을 확인 할 때는
 
apt-cache madison [package]

) apt-cache madison kubeadm

같이 apt-get install 설치 있는 버전을 확인 해봐야

 

sudo apt-mark hold kubeadm kubelet kubectl containerd
#버전을 홀딩함
	
#echo 'net.bridge.bridge-nf-call-iptables = 1' | sudo tee -a /etc/sysctl.conf
	
SOURCE_FILE="/etc/sysctl.conf"
	
LINE_INPUT="net.bridge.bridge-nf-call-iptables = 1"
	
grep -qF "$LINE_INPUT" "$SOURCE_FILE"  || echo "$LINE_INPUT" | sudo tee -a "$SOURCE_FILE"
	
sudo echo '1' | sudo tee /proc/sys/net/ipv4/ip_forward
	
cat /proc/sys/net/ipv4/ip_forward
#1 값이 잘 들어갔는지 확인

sudo modprobe overlay

sudo modprobe br_netfilter

#커널 모듈 등록 명령
# overlay : file system과 관련있는 linux kernel 모듈
# br_netfilter : network 관련 linux kernel 모듈
	
sudo sysctl --system
#재부팅 없이 systemctl 파라미터 적용
	
sudo swapoff -a
#swap 사용 중지
	
sudo ufw disable
	
sudo systemctl stop ufw.service
#방화벽 사용 중지
	
sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab
#OS 재기동시 swap 설정 
	
cat /etc/fstab
#swap 쪽 라인이 주석 처리 되었는지 확인 함

* 위의 1, 2 번은 master node, worker node 모두 설치 해주어야 합니다.

 

3. k8s master node 초기화 설정 (master node 만 실행)

 

sudo kubeadm config images pull --kubernetes-version 1.20.15
	
IP_ADDR=`hostname -I | awk '{print $1}'`
	
sudo kubeadm init --pod-network-cidr=10.0.0.0/24 --apiserver-advertise-address=${IP_ADDR}
#apiserver-advertise-address 는 단일 master node 이기 때문에 설정합니다.
	
#이렇게 하면 
kubeadm join 192.168.101.144:6443 --token mvqxd4.c4w591tk4148q36f \
--discovery-token-ca-cert-hash sha256:bacc60f50b58905f6de8cd8cee0c21977a09922d0568a109a46ef6fe0fdde685
와 같이 worker node 에서 join 할 수 있는 명령어가 나옵니다. 나중에 worker node 에서 해당 구문을 
실행 해줘야 합니다.
	
#안내에 나온대로 아래 명령어들도 실행 해 줍니다.
	
mkdir -p $HOME/.kube
	
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
	
sudo chown $(id -u):$(id -g) $HOME/.kube/config
	
echo 'export KUBECONFIG=$HOME/admin.conf' >> $HOME/.bashrc
	
echo 'KUBECONFIG=/etc/kubernetes/admin.conf' >> $HOME/.bashrc

 

4. CNI (network plugin) 인 Calico 를 master node 에 설치

 

kubectl create -f https://docs.projectcalico.org/archive/v3.17/manifests/tigera-operator.yaml

curl https://docs.projectcalico.org/archive/v3.17/manifests/custom-resources.yaml -O

#vi custom-resources.yaml 에서 cidr 을 init 할때 생성한 녀석으로 변경 (10.0.0.0/24)

kubectl create -f custom-resources.yaml

custom-resources.yaml 의 cidr 부분을 수정

 

kubectl get pod -A 와 kubectl get node 명령등으로 node 나 calico pod 가 정상 기동 되는지 확인

 

 

5. worker node 에 containerd, kubelet등 설치 후 kubeadm join

 

위의 1,2 번을 반복 하여 containerd, kubelet, kubeadm 등을 설치 한다

 

master node 설치 할때 나왔던 kubeadm join worker node 에서 실행 한다.

 

kubeadm join 192.168.101.144:6443 --token mvqxd4.c4w591tk4148q36f \
--discovery-token-ca-cert-hash sha256:bacc60f50b58905f6de8cd8cee0c21977a09922d0568a109a46ef6fe0fdde685

#위의 join 명령은 master node 에서 kubeadm init 실행 할 때마다 달라짐

 

master node 에서 아래 명령을 실힝 하면 worker node 가 붙은 것을 알수 있다.