Multipass를 이용한 Kubernetes 환경 구성

하고자 하는것

Ubuntu local computer에 kubernetes환경(1master 2nodes)을 구성하고

local 컴퓨터에서 kubernetes환경을 접근한다.

 

Multipass install 및 Instances 생성

설치

우선 Multipass를 설치하자.

https://multipass.run/install

steven@steven-ubuntu:~$ sudo snap install multipass

ubuntu의 경우 "sudo snap install multipass"를 입력하면 된다.

snap "multipass" (7455) 서비스 시작                                             

multipass1.9.2 from Canonical✓ installed

위와 같이 multipass가 다 설치 되면, 아래와 같이 명령어를 실행 시켰을 때 나오면 된다.

steven@steven-ubuntu:~$ multipass list
No instances found.

 

list failed: cannot connect to the multipass socket

만약 위와 같은 오류가 나온다면 multipass의 socket파일 권한 오류이다.

$ systemctl status snap.multipass.multipassd.service

$ systemctl status snap.multipass.multipassd.service
● snap.multipass.multipassd.service - Service for snap application multipass.multipassd
     Loaded: loaded (/etc/systemd/system/snap.multipass.multipassd.service; enabled; preset: enabled)
     Active: active (running) since Wed 2023-08-23 10:23:52 KST; 1min 48s ago
   Main PID: 9104 (multipassd)
      Tasks: 23 (limit: 37379)
     Memory: 128.7M
        CPU: 1.118s
     CGroup: /system.slice/snap.multipass.multipassd.service
             ├─9104 /snap/multipass/10244/bin/multipassd --verbosity debug --logger platform
             └─9205 /snap/multipass/10244/usr/sbin/dnsmasq --keep-in-foreground --strict-order --bind-interfaces --pid-file --domain=multipass --local=/multipass/ --except->

 8월 23 10:24:10 theyoung-MS-7D77 multipassd[9104]: Loading "charm-dev" v1
 8월 23 10:24:10 theyoung-MS-7D77 multipassd[9104]: Loading "docker" v1
 8월 23 10:24:10 theyoung-MS-7D77 multipassd[9104]: Loading "jellyfin" v1
 8월 23 10:24:10 theyoung-MS-7D77 multipassd[9104]: Loading "minikube" v1
 8월 23 10:24:10 theyoung-MS-7D77 multipassd[9104]: Loading "ros-noetic" v1
 8월 23 10:24:10 theyoung-MS-7D77 multipassd[9104]: Loading "ros2-humble" v1
 8월 23 10:24:10 theyoung-MS-7D77 multipassd[9104]: gRPC listening on unix:/var/snap/multipass/common/multipass_socket
 8월 23 10:24:11 theyoung-MS-7D77 multipassd[9104]: QIODevice::write (QFile, "/var/snap/multipass/common/cache/multipassd/vault/multipassd-image-records.json"): device not >
 8월 23 10:24:11 theyoung-MS-7D77 multipassd[9104]: Starting Multipass 1.12.2
 8월 23 10:24:11 theyoung-MS-7D77 multipassd[9104]: Daemon arguments: /snap/multipass/10244/bin/multipassd --verbosity debug --logger platform

위의 내용을 보면 어떤 소켓을 접근 하는지 알 수 있다.

gRPC listening on unix:/var/snap/multipass/common/multipass_socket

해당 소켓에 대한 접근 권한을 확인하자

$ ls -al /var/snap/multipass/common/multipass_socket
srw-rw-rw- 1 root root 0  8월 23 10:24 /var/snap/multipass/common/multipass_socket

root권한과 root그룹 권한을 갖는 것을 알 수 있다.

내가 갖고 있는 그룹 권한에 해당 파일을 추가 시켜 주자.

(물론 root권한 그룹이 아니라면 해당 그룹을 나의 계정에 추가 해주는 방법도 있다)

$ groups
theyoung adm cdrom sudo dip plugdev ssl-cert lpadmin lxd sambashare wireshark docker

내 계정이 갖고 있는 그룹을 확인할 수 있다.

docker 그룹에 해당 소켓을 추가 해보자.

$ sudo chgrp docker /var/snap/multipass/common/multipass_socket

다시 list를 확인해 보자

$ multipass list
list failed: The client is not authenticated with the Multipass service.
Please use 'multipass authenticate' before proceeding.

무언가를 더 확인해 달라고 한다.

아래와 같이 multipass에 접근 가능한 비밀번호를 입력하자.

$ sudo multipass set local.passphrase
Please enter passphrase: 
Please re-enter passphrase:

이제 다시 authentication 처리를 하면

$ multipass authenticate 
Please enter passphrase:

아래와 같이 multipass를 사용할 수 있다

$ multipass list
No instances found.

Instances 생성

인스턴스는 모두 3개를 생성할 예정이다.

Master하나 Nodes2개이다.

각 Instances별 기본 Spec은 아래 링크에 따랐다.

https://docs.oracle.com/en/operating-systems/olcne/1.1/relnotes/hosts.html

steven@steven-ubuntu:~$ multipass launch --cpus 4 --mem 16G --name master
Launched: master                                                                
steven@steven-ubuntu:~$ multipass launch --cpus 2 --mem 8G --name node1
Launched: node1                                                                 
steven@steven-ubuntu:~$ multipass launch --cpus 2 --mem 8G --name node2
Launched: node2

위와 같이 3개의 Instances가 생성 완료 된 후 아래와 같이 정상적으로 실행이 되는 것을 확인 할 수 있다.

steven@steven-ubuntu:~$ multipass list                                          
Name                    State             IPv4             Image
master                  Running           10.112.125.79    Ubuntu 20.04 LTS
node1                   Running           10.112.125.159   Ubuntu 20.04 LTS
node2                   Running           10.112.125.243   Ubuntu 20.04 LTS

                    

 

Kubernetes Cluster 설치 및 Nodes 등록

shell login 하기

steven@steven-ubuntu:~$ multipass shell node1

multipass의 shell 명령어를 이용해서 master, node1, node2에 shell 진입을 해주자.

환경 구성하기

kubernetes환경은 2가지 작업이 필요하다.

  • Docker설치
  • Kubernetes 설치

이 두가지 작업은 다음 github에 있는 Shell Script를 활용 하겠다. (Sander van Vugt 선생닝 Repo이다.)

master,node1,node2모두에 동일하게 git clone을 진행해 주자.

ubuntu@master:~$ git clone https://github.com/sandervanvugt/cka.git
Cloning into 'cka'...
remote: Enumerating objects: 185, done.
remote: Counting objects: 100% (93/93), done.
remote: Compressing objects: 100% (64/64), done.
remote: Total 185 (delta 43), reused 35 (delta 29), pack-reused 92
Receiving objects: 100% (185/185), 344.62 KiB | 2.73 MiB/s, done.
Resolving deltas: 100% (75/75), done.

역시 master,node1,node2 모두 아래 명령어를 실행 시켜 준다.

ubuntu@master:~/cka$ ./setup-container.sh 

ubuntu@node2:~/cka$ sudo ./setup-kubetools.sh

이제 Docker와 Kubernetes가 다 설치 완료 되었다.

 

Kubernetes cluster 생성

master에 Control pane을 만들어 주자.

ubuntu@master:~/cka$ sudo kubeadm init

성공적으로 설치가 완료 되었다면 아래와 같이 master에서만 명령어를 실행 시켜준다.

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

이제 Control Pane 설치가 완료 되었음으로 Node를 등록해야 한다.

Node1,Node2에서는 아래 명령어를 실행해 준다.

sudo kubeadm join 10.112.125.79:6443 --token 9l0e6o.qj4woevjzw2d6323 \
--discovery-token-ca-cert-hash sha256:d726f1abcd3601d00a0146fe7d2a78cafcf732d16e76f39a6117495e75987828

위에 명령어는 설치 마지막에 나오는 값이다.

Node 3개가 나오면 Kubernetes 설치를 완료 한 것이다.

Network Plugin 설치

위에서 보면 get nodes의 결과에 Status가 NotReady인것을 확인 할 수있다.

네트워크 설치가 필요하다.

https://kubernetes.io/docs/concepts/cluster-administration/networking/

cluster network를 위해서 plugin을 설치해 줘야 한다.

여기서는 calico를 설치 하고자 한다.(version changed) move to weave

weave

$ kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

 

 

위와 같이 calico를 설치한 후 Status가 모두 Running 및 Ready 상태가 된 것을 확인 할 수 있다.

 

Local에서 Master Cluster 접근하기

Cluster에 접근하기 위한 방법은 인증서, ID/PW 등이 있는데, 로컬에 만드는 것이기 때문에 불필요하다.

master에 존재하는 ~/.kube/config 파일을 local computer에 있는 ~/.kube/config 파일로 overwrite 시키자.

 

sft를 이용해서 master이하에 있는 ./kube/config 파일을 local computer의 ~/.kube/config로 변경시키고 난 후의 모습이다.

이제 Local에서 master cluster를 Control 가능하게 되었다.

728x90
반응형