월루를 꿈꾸는 대학생

로컬에서 k8s 구축하기 본문

Server&Network/Kubernets_Dokcer

로컬에서 k8s 구축하기

하즈시 2023. 3. 4. 11:35
728x90

본 내용은 로컬에서 vm으로 쿠버네티스 클러스터를 구성하는 내용입니다.

여러가지 자료를 보면서 실행해봤으나 도커를 사용하는 자료도 있었고 재부팅하면 클러스터가 맺어지지 않는 에러등등이 많아서 정리했고 다른 분들의 자료도 참고했습니다. 


 

공통 구성 

 

 

일단 swap 꺼줘야함 이거 안 끄면 재부팅할 때마다 쿠버네티스 에러뜸 

kubectl create deploy tc --image=consol/tomcat-7.0 --replicas=5
kubectl expose deploy tc --type=NodePort --port=80 --target-port=8080

 

근데 저렇게 하고 봐도 재부팅하면 swap이 켜질 때가 있음 

sudo nano /etc/fstab

swap 적힌거 주석처리 -> 저장 

sudo swapoff -a
sudo reboot 

# swap 확인 아무것도 없으면 꺼진거 
sudo swapon --show

 

쿠버네티스 런타임 구성 

# Using Docker Repository
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

# containerd 설치
sudo apt update
sudo apt install -y containerd.io
# sudo systemctl status containerd # Ctrl + C를 눌러서 나간다.

# Containerd configuration for Kubernetes
cat <<EOF | sudo tee -a /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
EOF

sudo sed -i 's/^disabled_plugins \=/\#disabled_plugins \=/g' /etc/containerd/config.toml
sudo systemctl restart containerd

# 소켓이 있는지 확인한다.
ls /var/run/containerd/containerd.sock

 

쿠버네티스 패키지 설치 

cat <<EOF > kube_install.sh
# 1. apt 패키지 색인을 업데이트하고, 쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지를 설치한다.
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

# 2. 구글 클라우드의 공개 사이닝 키를 다운로드 한다.
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

# 3. 쿠버네티스 apt 리포지터리를 추가한다.
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

# 4. apt 패키지 색인을 업데이트하고, kubelet, kubeadm, kubectl을 설치하고 해당 버전을 고정한다.
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
EOF

sudo bash kube_install.sh

 

넷 브릿지 설정 

sudo -i
modprobe br_netfilter
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
exit

 

여기가 제일 문제임 

재부팅하면 무조건 여기 때문에 쿠버네티스 클러스터가 안 됨 

 

sudo nano /etc/sysctl.conf

해당 구문 추가

net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-arptables = 1

sudo sysctl -p

이렇게 일단 세팅을 재부팅해도 안 없어지도록 세팅을 해두기

 

그리고 가장 중요한게 br_netfilter이게 재부팅하면 리셋되서 계속 리로드 해줘야하는데 이것도 설정을 해줘야함 

 

#파일 만들기
sudo nano /etc/modules-load.d/br_netfilter.conf
# 파일 내용 추가
br_netfilter
# 재부팅
sudo reboot

 

이제 공통적인 작업이 끝남 

 


마스터노드 작업 

 

# 초기화 작업 
sudo kubeadm init

# 해당 결과중 마지막 join 명령어 2줄은 복붙해서 따로 보관 

# 끝나고 다음 명령어 실행 
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

 


워커 노드 작업 

- 아까 마스터 초기화하고 나온 조인 명령어를 실행해두기!! 

 


이제 파드 네트워크를 배포

 

curl -LO https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz
cilium install

 

kubectl get node
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   76m   v1.26.2
node1    Ready    <none>          67m   v1.26.2
node2    Ready    <none>          63m   v1.26.2
node3    Ready    <none>          52m   v1.26.2

 

완성 

 

이제 백업하고 작업하면 끝! 

 

참고 

https://gasbugs.notion.site/3-bb29b4f852cf41d2aac8582447cf7309

728x90

'Server&Network > Kubernets_Dokcer' 카테고리의 다른 글

PKOS 2주차  (1) 2023.03.19
PKOS 1주차  (2) 2023.03.12
쿠버네티스 API 개념 및 보안 내용 정리  (0) 2022.03.14
CoreDNS & Service (MetalLB)  (0) 2022.02.20
KNAS Service (ClusterIP & NodePort)  (0) 2022.02.12