상세 컨텐츠

본문 제목

[K0s] K8s 설치와 IPVS VIP 구현 가이드

server

by 거니 노트 2024. 1. 2. 16:59

본문

개요

K0s 사용하여 Kubernetes 설치하고, 기본적인 kube-router 설정을 통해 IPVS 이용하여 가상 IP 구현하는 방법에 대해 알아보겠습니다. K0s 경량화된 Kubernetes 배포 도구로, 손쉽게 클러스터를 구성하고 관리할 있습니다. IPVS 이용한 VIP 구현은 클러스터 로드 밸런싱을 효율적으로 처리할 있게 해줍니다. 글을 통해 K0s IPVS 활용하여 안정적이고 고성능의 Kubernetes 클러스터를 구축할 있는 방법을 살펴보겠습니다.

 

1. 클러스터의 기본 구조와 중요성

K0s 사용하여 Kubernetes 설치하고, IPVS 이용한 가상 IP 구현에 대해 살펴보기 전에, Kubernetes 클러스터를 구성하는 가지 주요 서버 유형에 대해 먼저 이해하는 것이 중요합니다.

 

1-1. 마스터 서버

마스터 서버는 클러스터의 중심이며, 클러스터의 관리와 조정을 담당합니다. 여기에는 API 서버, 컨트롤러 매니저, 스케줄러 등이 포함되며, 클러스터의 상태를 유지하고 운영하는 필수적입니다.

 

1-2. 워커 노드 서버

워커 노드는 마스터 서버의 지시에 따라 사용자의 애플리케이션을 실행하는 서버입니다. 여기에는 애플리케이션 컨테이너, Kubelet, Kube-proxy 등이 포함되며, 실제 작업을 처리하는 역할을 합니다.

 

2. K0s 이용한 Kubernetes 설치 구성

마스터 서버

2-1. k0s 설치

curl -sSLf https://get.k0s.sh | sudo sh

 

2-2. 백그라운드 실행

실행하고 나오는 로그를 k0s-server.log에 저장 및 로그 확인

nohup sudo k0s server > k0s-server.log 2>&1 &
cat k0s-server.log

 

2-3. 이 서버를 마스터 서버로 지정 및 default admin.conf 생성

이 작업을 하는 서버를 마스터 서버로 지정해주고, 기본 admin 설정 파일을 생성합니다.

sudo k0s kubeconfig create --groups "system:masters" admin > $HOME/admin.conf

 

2-4. .kube 폴더 생성

~/.kube 폴더를 생성해줍니다.

mkdir -p $HOME/.kube

 

2-5. admin.conf 파일 복사

admin.conf를 .kube 파일에 config라는 이름으로 복사합니다.

cp $HOME/admin.conf $HOME/.kube/config

 

2-6. config 파일을 적용

명령어를 한번 입력하여 즉시 적용하고, .bashrc 에도 추가하여 부팅 시 적용되게 합니다.

export KUBECONFIG=$HOME/.kube/config
vi .bashrc

 

2-7. kubectl 클라이언트 설치

sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2 curl

 

2-8. Kubernetes Repository 설정

항상 최신의 버젼 업데이트에 접근 할 수 있도록 하기 위해서 설정합니다.

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list

 

2-9. 워커 노드를 추가할 때 사용하는 토큰 생성

이 토큰은 보안적으로 안전한 공간에 따로 저장을 해두시는게 좋습니다.

sudo k0s token create --role=worker

 

2-10. 워커 노드 추가

백그라운드로 워커 노드를 추가합니다. $TOKEN 자리에 이전에 발급받은 토큰을 넣습니다.

sudo nohup k0s worker $TOKEN &

 

2-11. 워커 노드 확인

클러스터를 확인합니다.

kubectl get nodes
kubectl get namespaces
kubectl get pods --namespace kube-system

 

워커 노드 서버

2-1. k0s 설치

curl -sSLf https://get.k0s.sh | sudo sh

 

2-2. 워커 노드 연결

마스터 서버에서 발급받은 토큰을 가지고 워커 노드 서버에서 안전하게 연결 할 수 있습니다.

nohup sudo k0s worker $TOKEN > k0s-worker.log 2>&1 &
cat k0s-worker.log

 

2-3. 마스터 서버 ~/.kube/config 파일 복사

마스터 서버에 있는 config 파일 내용을 복사해 똑같은 경로로 config를 만듭니다.

vi ~/.kube/config

 

2-4. config 파일을 적용

명령어를 한번 입력하여 즉시 적용하고, .bashrc 에도 추가하여 부팅 시 적용되게 합니다.

export KUBECONFIG=$HOME/.kube/config
vi .bashrc

 

3. IPVS를 이용한 VIP 구현

3-1. ipvsadm 설치

마스터, 워커 노드 둘다 설치 합니다. ipvs 구성도 확인 해줍니다.

sudo apt install ipvsadm
sudo ipvsadm -Ln

 

3-2. 설정 파일 수정

kube-proxy를 편집하여 아래 mode와 ipvs 부분에 타임아웃을 수정합니다.

kubectl edit configmap kube-proxy -n kube-system
mode: "ipvs"
ipvs: {"syncPeriod":"0s","minSyncPeriod":"0s","tcpTimeout":"300s","tcpFinTimeout":"60s","udpTimeout":"120s"}

 

3-3. 설정 적용

kube-proxy Pod 재시작해서 적용합니다.

kubectl delete pod -n kube-system -l k8s-app=kube-proxy

 

3-4. 롤링 업데이트

kube-proxy는 DaemonSet으로 실행되기 때문에 ConfigMap을 변경하면 모든 kube-proxy 인스턴스에 영향을 주려면 롤링 업데이트를 수행해야 합니다.

kubectl -n kube-system rollout restart daemonset kube-proxy

 

3-5. 적용 확인

아래 명령어를 입력하여 mode: "ipvs"로 나온다면 성공적으로 적용이 되었습니다.

kubectl get configmap kube-proxy -n kube-system -o=jsonpath='{.data.config\.conf}' | grep mode

 

4. VIP 서비스 배포

마스터 서버 홈 경로에 my-service.yaml 파일을 하나 생성합니다.

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

 

파일을 생성 후 서비스를 생성합니다.

kubectl apply -f my-service.yaml

 

서비스 생성을 확인합니다.

kubectl get service --all-namespaces
kubectl get service my-service -n default

 

마치며

오늘은 k0s를 사용하여 k8s를 설치하고 IPVS로 VIP를 구현하는 과정을 살펴보았습니다. 저도 공부하는 입장에서 서버에서 테스트해보며 진행한 과정을 정리한 글이기 때문에 잘못된 부분이 있을 수도 있습니다. 혹시나 부족한 부분이 있다면 댓글로 피드백 해주시면 감사하겠습니다. 오늘은 여기서 마칩니다. 

'server' 카테고리의 다른 글

카페24 SSD 가상 서버 구매 후 접속하기  (2) 2023.10.19

관련글 더보기