하고자 하는것
Ubuntu local computer에 kubernetes환경(1master 2nodes)을 구성하고
local 컴퓨터에서 kubernetes환경을 접근한다.
Multipass install 및 Instances 생성
설치
우선 Multipass를 설치하자.
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 가능하게 되었다.
'AWS' 카테고리의 다른 글
Multipass Disk Size (Memory/Cpu) Change (용량 변경) (0) | 2022.07.17 |
---|---|
Calico FailedCreatePodSandBox Unauthorized (2) | 2022.07.11 |
AWS 요금 확인 및 리소스 정리하기 (0) | 2022.07.09 |
RDS 리소스 삭제하기 (0) | 2022.07.09 |
kubectl 1.24 error: exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1" (0) | 2022.06.11 |