본문 바로가기

프로젝트/미니 프로젝트

서로 다른 클라우드 서버를 VPN으로 묶어 쿠버네티스 구축하기 (2) - containerd, kubeadm 설치및 셋팅하기

https://loy124.tistory.com/416

 

서로 다른 클라우드 서버를 VPN으로 묶어 쿠버네티스 구축하기 (1) - VPN 설정

계기 현재 회사에 자체 서버도 있고, 외부 업체에 호스팅을 맡긴 서버도 있으며, 클라우드로 운영하는 서버들도 있다. 이제 운영하다 보니 각 서버별로 관리 방식과 접근 방식이 제각각이라, 모

loy124.tistory.com

 

1편 

 

 

 

현재 VPN을 사용해 하나의 네트워크를 묶은 상태이고 이제 각 서버마다 쿠버네티스 관련 설정을 해주면된다.

(docker와 쿠버네티스에서 사용할 containerd는 따로따로 구동된다.)

 

 

containerd, kubeadm 설치하기 

https://loy124.tistory.com/400 

 

쿠버네티스 공부하기 1 - minikube 설치하기

쿠버네티스를 공부하기로 시작한 계기는 아무래도 내가 회사에서 개발 + 운영및 배포를 다같이 하면서 필요성에 의해 공부를 시작하게 되었다. Docker 기반으로 컨테이너 관리는 docker-compose 정도

loy124.tistory.com

쿠버네티스 기초는 해당 내용을 참조하면 된다.

 

 

Ubuntu 20.04용 

# 1. 필수 패키지 설치
sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gpg

# 2. containerd 설치 및 설정
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
sudo bash -c "containerd config default > /etc/containerd/config.toml"
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd

# 3. Kubernetes 키 및 저장소 등록
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update

# 4. kubeadm, kubelet, kubectl 설치 및 버전 고정
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

# 5. 스왑 비활성화
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

 

 

CentOs7용 

# 1. 필수 패키지 설치
sudo yum install -y epel-release
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 curl

# 2. containerd 설치 및 설정
sudo yum install -y containerd
sudo mkdir -p /etc/containerd
sudo bash -c "containerd config default > /etc/containerd/config.toml"
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd

# 3. Kubernetes 저장소 등록
sudo tee /etc/yum.repos.d/kubernetes.repo > /dev/null <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
EOF

# 4. kubeadm, kubelet, kubectl 설치
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable kubelet

# 5. 스왑 비활성화
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

 

 

설치가 잘되었는지 확인하기

 

#containerd 버전 확인  
sudo systemctl status containerd

#kubeadm 버전 확인 
sudo systemctl status kubelet

 

 

 

위와같이 설치를 완료하였다. 

 

이제 A, B, C ,D 서버에 대해 쿠버네티스를 연결해주는 작업을 진행할 예정이다. 

 

쿠버네티스 연결하기

 

 

이제 설치된 서버를 기반으로 연결을 진행한다. 

  • Control Plane Node - A서버
  • Worker Node - B, C, D 

 

 

 

먼저 A서버를 ConrolPlane으로 지정한다.

 

 ControlPlane 설정하기 

쿠버네티스는 ControlePlane이 WorkerNode를 관리할수있는 방식이다. 

 

sudo kubeadm init \
  --apiserver-advertise-address=서버주소 \
  --pod-network-cidr=192.168.0.0/16 \
  --apiserver-cert-extra-sans=서버주소

 

 Contorolepalne의 api 서버 주소를 VPN에서 설정되어있는 IP로 설정한다. 

 

이렇게 실행하고 나면 join 명령어가 출력되는데 복사해두면 된다. 

 

Calico 설치하기 

각 Pod들 끼리 통신하기 위해서는 네트워크 구성이 필요하다. 이를 위해 pd 네트워크를 만들어주는 플러그인중 하나인 calico를 설치해준다. 

sudo KUBECONFIG=$HOME/.kube/config kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml

 

 

Worker Node 설정하기 

위에 join명령어를 그대로 B, C, D 서버에 실행해주면 된다. 

sudo kubeadm join controlPlane 주소 \
  --token fn1b1s.l5ig5wuy1gju0bnl \
  --discovery-token-ca-cert-hash 토큰

 

 

 

현재 상태 확인하기 

sudo kubectl get node -o wide

 

 

 

버그 해결하기 ( IP가 VPN 주소대로 바뀌지 않음)

 

여기에서 문제가 생겼다. 나는 분명 VPN을 구성했는데 정상적으로 VPN IP 매핑이 되어있지 않은것으로 확인되었다 

 

각 서버별로 Vpn IP를 지정해주는 작업을 진행한다.

 

sudo vi /etc/default/kubelet

 

해당 내부에 서버 주소를 명시해주고 

KUBELET_EXTRA_ARGS=--node-ip=서버주소 --resolv-conf=/etc/resolv.conf

 

 

재 부팅을 진행해준다. 

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart kubelet

 

 

 

이제 여기까지 되면 OK 인줄 알았으나.. Ubuntu <-> CentOS7 간 연동이 잘안되는 상황이 발생했다.

 

sudo systemctl edit kubelet

 

이제 기본 설정값을 수정한다.

[Service]
ExecStart=
ExecStart=/usr/bin/kubelet --node-ip=VPN주소 --resolv-conf=/etc/resolv.conf --config=/var/lib/kubelet/config.yaml --kubeconfig=/etc/kubernetes/kubelet.conf --container-runtime-endpoint=unix:///run/containerd/containerd.sock
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart kubelet

 

위와같이 진행해주면 이제 내부 IP는 모두 VPN의 주소로 바뀌는데 성공한다!

 

반응형