Multipass를 활용한 kubernetes 클러스터 구축 방법

RYUN·2023년 2월 23일
1
post-thumbnail

1. Multipass cluster 설치

GitHub - PresentJay/lightweight-kubernetes-sandbox-cli: 경량화 쿠버네티스인 k3s를 vmware(multipass)기반으로 설치하고 관리하는 프로젝트입니다.

Kubernetes, multipass, k3s, longhorn, pvc 등 관련 용어들에 대해선 조만간 정리하여 업로드할 예정입니다.

1) Multipass cluster scrpit 설치 전 구성해야할 환경

  • multipass
brew install --cask multipass
  • kubectl
brew install kubectl

kubectl version --client
  • helm
brew install helm
  • jp
brew install jp

2) Multpass cluster scrpit 실행

Multipass cluster 설치는 위의 github repo에 올라와 있는 shell script를 사용하였습니다. 해당 repo를 clone 하고 README 에 나와있는 shell script를 사용하면 손쉽게 multipass cluster가 구축이 완료 됩니다.

2. Multipass에 설치한 k3s를 호스트 서버에서 접근할 수 있도록 config 수정

Local machine에서 multipass에 설치한 k3s를 접근, 제어 하기 위해선 kube config 를 올바르게 지정해주어야 합니다. K3s의 config 파일은 master node인 node1의 /etc/rancher/k3s/k3s.yaml 경로에 위치하고 있습니다.

1) Multipass master node shell 접속

2) Multipass node1:/etc/rancher/k3s/k3s.yaml의 config 내용을 ~/.kube/config 에 복사

cd /etc/rancher/k3s/
sudo cat k3s.yaml

위의 명령어를 수행하면 아래와 같이 k3s의 config 파일을 볼 수 있습니다.

→ 해당 파일을 복사해 ~/.kube/config 에 복사하면 됩니다.

❗ 기존의 config가 있다면 따로 복사본 만들어 놓고 하는 걸 추천드립니다.
ex) mv config config_minikube

3) 환경변수 설정

KUBECONFIG 환경변수가 ~/.kube/config 에 위치하고 있다는 것을 알려주어야 합니다.

export KUBECONFIG=$HOME/.kube/config
echo $KUBECONFIG
kubectl config view

위의 방법으로는 명령어를 수행한 터미널에만 적용 되기에 ~/.zshrc 파일을 수정하여 환경변수를 지정해두면 됩니다. ( zsh 을 사용하고 있지 않다면 사용하고 있는 터미널 환경에 맞춰서 환경변수를 지정하면 됩니다.)

3. k8s API 주소 수정

K8s의 API 주소를 master node의 IP로 수정해야 합니다. 기존에 localhost로 설정되어 있는 것을 master node IP로 설정해야 로컬 터미널에서 kubectl cli를 사용하더라도 우리가 multipass로 구축한 k3s 클러스터에 접근할 수 있습니다.

  • 한번 더 정리하면 기존의 127.0.0.1master node IP 로 수정하면 됩니다.

아래의 결과는 2-3 까지 수행하고 난 뒤 kubectl config view 명령어를 수행하면 나오는 config 정보 입니다. 보시다시피 clusters의 server IP가 localhost127.0.0.1 로 설정되어 있는 것을 볼 수 있습니다.

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://127.0.0.1:6443
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

Multipass로 구축한 k3s 클러스터의 master node의 IP를 얻기 위해선 multipass shell로 직접 접근해야 합니다.

위의 그림과 같이 multipass에서 master node로 지정한 node의 shell로 직접 들어가 아래의 명령어를 수행하면 node들의 IP 정보를 얻을 수 있습니다.

multipass list

########################
Name                    State             IPv4             Image
primary                 Stopped           --               Ubuntu 22.04 LTS
node1                   Running           192.168.64.10    Ubuntu 20.04 LTS
                                          10.42.0.0
                                          10.42.0.1
node2                   Running           192.168.64.11    Ubuntu 20.04 LTS
                                          10.42.1.0
                                          10.42.1.1
node3                   Running           192.168.64.12    Ubuntu 20.04 LTS
                                          10.42.3.0
                                          10.42.3.1

Master node인 node1의 IP로 kube config를 수정하면 이제 로컬에서도 multipass cluster에 접근할 수 있습니다. 여기에선 node1의 IP가 192.168.64.10 로 나와있는 것을 볼 수 있네요.

이때 port 번호는 건들면 안 됩니다.

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.64.10:6443
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

아래부터는 multipass 설치 shell script를 작성한 해당 repo에서 지원하는 기능들에 대한 간단한 사용법을 적어보았습니다. 더 자세한 내용은 해당 repo의 README 를 확인해보세요!

4. Kubernetes dashboard 접속

cd lightweight-kubernetes-sandbox-cli

bash ./packages/kubernetes-dashboard/helm.sh --open

5. Longhorn 접속

cd lightweight-kubernetes-sandbox-cli

bash ./packages/longhorn/helm.sh --open

1) Longhorn에서 volume 만들기

  1. Create Volume
  2. Operation → Create PV/PVC

2) pod에 pvc 연결

ex) pv-model-store.yaml

apiVersion: v1
kind: Pod
metadata:
  name: model-store-pod
  namespace: kserve
spec:
  volumes:
    - name: model-store
      persistentVolumeClaim:
        claimName: model-store
  containers:
    - name: model-store
      image: ubuntu
      command: [ "sleep" ]
      args: [ "infinity" ]
      volumeMounts:
        - mountPath: "/pv"
          name: model-store
      resources:
        limits:
          memory: "1Gi"
          cpu: "1"
kubectl apply -f pv-model-store.yaml

참고자료

@ 유용한 kubectl 명령어

❗ alias k="kubectl"~/.zshrc 에 적고 source ~/.zshrc 를 하면 kubectl 대신 k로 사용할 수 있음

  • k config view : config 정보 확인
  • k get all -n {namespace}
  • k apply -f {yaml file name}.yaml
  • k describe pvc -A : 모든 namespace에 존재하는 pvc 정보
  • k describe pod -n {namespace} {pod name}
profile
Student

0개의 댓글