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의 주소로 바뀌는데 성공한다!
'프로젝트 > 미니 프로젝트' 카테고리의 다른 글
spring boot + apache kafka 를 활용한 미니 채팅앱 만들어보기(3) - socket.io를 활용한 채팅 구현하기 (0) | 2025.05.06 |
---|---|
spring boot + apache kafka 를 활용한 미니 채팅앱 만들어보기(2) - spring boot 에서 producer, consumer 구현하기 (0) | 2025.05.05 |
spring boot + apache kafka 를 활용한 미니 채팅앱 만들어보기(1) - kafka 개요 및 테스트 (0) | 2025.05.05 |
원격 로그 수집 시스템 구성하기 (elastic stack) (0) | 2022.11.17 |
데이터 백업 시스템 구성하기 (0) | 2022.10.26 |