실리콘 Mac에서 Local K8S 구축하기 #K3S #Multipass
실습용 K8S 환경 구축
선택지
1. Minikube
장점
- 명령어 한방으로
addon
을 깔거나 실습 환경이 초기화되는 것은 편했다. - 따로 환경 구축에 관해 신경 쓰지 않고 바로 기본적인 명령어나 개념을 익힐 수 있는 것도 큰 장점이다.
단점
- 미니큐브는 싱글 노드 클러스터라 아무래도 실제 환경과는 다르다 보니 완전한 실습이 어렵다.
- 컨테이너로 실행되어서 별도로 포트-포워딩도 한번 더해야 해서 불편했다
2. 무료 쿠버네티스
웹상으로 접속해서 무료로 실습할 수 있는 사이트들이 있는데 너무 느리고 시간대를 잘 공략해야 접속할 수 있어서 포기했다.
오늘의 글
그래서 공부용이면 차라리 가상머신 instance 3개 띄우고 K3S로 경량 쿠버네티스를 구축해서 실습하고는 한다. 오늘은 이 방법을 공유해보고자 한다.
K3S로 쿠버네티스를 띄워보자
먼저 Multipass로 vm instance 3개를 생성할 것이다.
Multipass란?
Multipass는 Ubuntu를 배포하는 Canonical에서 개발한 가상 머신 관리 도구이다. 로컬에서 Ubuntu 가상 머신을 생성하고 관리할 때 자주 애용한다.
시작해 보자!
1. multipass
를 설치한다.
brew install --cask multipass
깔고 버전을 확인해 보자
(주의!) 최신 Mac OS로 업데이트를 했다면 1.14.0
버전은 사용하지 못한다.
1.14.1 미만의 버전인 경우 아래 글을 참고해서 해결하고 오자!
해결법: https://coding-groot.tistory.com/237
Sequoia가 아니면 그냥 brew install multipass
로 설치하고 바로 사용해도 된다.
어떤 이미지를 지원하는지 보려면 mulipass find
를 실행해 보면 된다.
최신 LTS인 "24.04"로 만들어보겠다.
2. 우분투 noble(24.04) 이미지로 마스터 1개, 워커 2개 인스턴스를 만든다
multipass launch --name master --cpus 2 --memory 2G --disk 10G noble
multipass launch --name worker1 --cpus 1 --memory 1G --disk 6G noble
multipass launch --name worker2 --cpus 1 --memory 1G --disk 6G noble
예전에 master 인스턴스를 너무 구리게 만들었더니 테스트 중에 자주 뻗은 적이 있어서 스펙을 늘려줬다.
[참고] 간단한 multipass 사용법
밑에서 k3s
를 설치하며 사용할 간단한 multipass 사용법 두 가지를 소개하고자 한다.
1) multipass shell <인스턴스명>
으로 ssh 할 수 있다.
master에 ssh 해서 접속하려면 다음처럼 하면 된다.
2) multipass exec <인스턴스명> -- <명령어>
로 ssh 하지 않고 인스턴스에 바로 명령어를 실행할 수 있다.
3. 각 인스턴스에 k3s를 설치해 주자.
https://docs.k3s.io/kr/quick-start에 접속해보면 설치를 쉽게 도와주는 스크립트를 공유해 주는데 이걸 사용하면 한방에 설치할 수 있다. 다만, 환경변수로 설치 옵션을 변경할 수 있어서 아래 문서를 읽고 설치해 보자.
- 서버 문서: https://docs.k3s.io/kr/cli/server#commonly-used-options
- 에이전트 문서: https://docs.k3s.io/kr/cli/agent
3-1. Master에 K3S Server 설치
Master에 K3S 서버부터 설치해 보자.
설치 옵션
이때, 나는 kubeconfig관련 설정만 바꿨다. kubeconfig를 일반 사용자도 접근할 수 있게 644로 권한을 부여하게 했다.
K3S_KUBECONFIG_MODE="644"
kubeconfig는 기본적으로 600으로 깔리는데 이러면 이 인스턴스 내에 다른 사용자가 읽을 수 없다.
블로그를 보면 다른 사람들도 편의를 위해 644로 권한 부여하는 것을 볼 수 있다. 나도 어차피 로컬용이고 쿠버네티스 개념 실습용으로 쓰는 것이라 보안이 중요하지는 않아서 똑같이 했다.
multipass exec master
로 master instance로 ssh 했다.
그리고 거기서 아래와 같이 실행했다. (문서에 있는 스크립트이다)
export K3S_KUBECONFIG_MODE="644"
curl -sfL https://get.k3s.io | sh -
이제 master는 exit 하고 worker를 설정해 주자.
3-2. Worker에 Agent 설치
아까 참고에서 설명했듯이 호스트 머신에서 바로 각 인스턴스에 multipass exec
로 원하는 명령어를 실행시킬 수도 있다. 이걸 사용해서 나머지 노드의 설치를 진행해 보겠다.
먼저 필요한 정보를 변수로 저장하자.
K3S_URL=https://$(multipass info master | grep IPv4 | cut -f2 -w):6443
K3S_TOKEN=$(multipass exec master -- sh -c "sudo cat /var/lib/rancher/k3s/server/node-token")
잘 가져왔는지 확인하자.
Agent를 설치하는 스크립트를 워커 인스턴스에 실행하자.
curl -sfL https://get.k3s.io | K3S_TOKEN=$K3S_TOKEN K3S_URL=$K3S_URL sh -
아래 스크립트를 worker 인스턴스들에 모두 실행한다. 토큰과 K3S URL이 master의 k3s 서버로 잘 설정이 되어야 하기 때문에 한번 더 확인해 보고 실행하자!
multipass exec worker1 -- sh -c "curl -sfL https://get.k3s.io | K3S_TOKEN=$K3S_TOKEN K3S_URL=$K3S_URL sh -"
multipass exec worker2 -- sh -c "curl -sfL https://get.k3s.io | K3S_TOKEN=$K3S_TOKEN K3S_URL=$K3S_URL sh -"
4. kubectl
로 K3S Agent 노드가 잡히는지 확인해 보자.
kubectl get nodes
를 사용하면 모든 노드들의 상태가 잡힌다. 만약 정상적으로 설정됐다면 새로운 노드로 뜰 것이다.
5. (선택) 편의를 위한 몇 가지 작업을 해두자
1) host 파일에 호스트명을 추가해 두자
multipass의 private IP를 확인해 보자.
인스턴스를 쉽게 이름으로 접근하게 Mac의 호스트 파일을 변경하자.
sudo vim /etc/hosts # 혹은 원하는 에디터로 편집
이러면 127.0.0.1 대신 localhost를 입력하듯이 우리도 IP 대신 저기에 적은 host명을 쓸 수 있다.
2) 로컬 kubectl 설정하자
kubectl
은 KUBECONFIG
환경변수가 없으면 기본적으로 ~/.kube/config
를 바라본다.
~/.kube 디렉터리 파일을 생성하고 master에 있는 k3s.yaml을 가져오자.
multipass copy-files
로 쉽게 복사할 수 있다.
mkdir -p ${HOME}/.kube
multipass copy-files master:/etc/rancher/k3s/k3s.yaml ${HOME}/.kube
k3s.yaml을 열고 clusters.cluster.server 부분의 값을 수정한다. 127.0.0.1을 master 인스턴스의 것으로 바꿔주자.
kubectl은 --kubeconfig
옵션으로 우리가 원하는 kubeconfig 파일로 바꿔서 실행할 수 있다. 확인해 보자.
성공했다~!
+) 이렇게 매번 kubeconfig 파일을 지정하기 싫으면 위에 캡처한 문서를 참고해 보자.
보면 KUBECONFIG
환경변수로 설정해 두거나 기본값이 config 파일로 이름을 설정해 두면 된다. 딱히 다른 k8s를 사용하지 않는다면 k3s.yaml 파일명을 기본 값인 config로 이름을 바꿔둬도 된다.
하지만, 이렇게 다 생략해 버리면 환경을 혼동해서 실수할 수도 있으니 조심하자. 조금 귀찮지만 계속 어떤 서버인지 인지하게 돼서 때문에 안전장치가 되기도 한다!
출처
- Agent 설치는 이 글을 많이 참고했다.
- 이 글도 많은 도움이 되었다.