UTM에 k8s 세팅하기

eora21·2024년 1월 6일
0

mac m1 기준 세팅입니다.

UTM 설정

링크 과정을 마친 후 clone으로 스냅샷을 만들어두시길 추천드립니다.

root 계정 전환

sudo passwd root으로 비밀번호 설정하고
su -

docker 설치

wget -qO- http://get.docker.com/ | sh

k8s 설치 전 필수 패키지 추가

apt-get update
apt-get install -y apt-transport-https ca-certificates curl

구글 클라우드 퍼블릭 키 다운로드

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

만약 경로가 없다는 예외가 발생하면 도커 설치 확인해볼 것
도커를 설치했는데도 동작하지 않는다면
sudo mkdir -p /etc/apt/keyrings
명령으로 강제 생성하거나 다시 시도할 것

k8s 저장소 추가

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

저장소 업데이트 후 설치

apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

서비스 등록 및 재시작

systemctl daemon-reload
systemctl restart kubelet

마스터에서 네트워크 연결을 위한 calico 설치

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

weave 설치 시 에러가 계속 발생해서 calico를 사용하기로 했습니다.

마스터에서 Control-plane

kubeadm init

예외 발생

error execution phase preflight: [preflight] Some fatal errors occurred:
	[ERROR CRI]: container runtime is not running: output: time="2024-01-06T12:01:16Z" level=fatal msg="validate service connection: validate CRI v1 runtime API for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService"
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

해결법

rm /etc/containerd/config.toml
systemctl restart containerd

후 재시도

만약 예외가 user is not running as root이라면 su - 진입해서 명령어 작성할 것

노드에서 진입

마스터에서 init이 끝나면 kubeadm join으로 시작하는 명령어가 나온다. 이를 복사해서 노드에 붙여넣으면 된다.
위와 같은 예외 발생 시 해결법 입력 후 재시도한다.

진입 명령어

만약 명령어를 잊었다면 다음과 같이 작성한다.

kubeadm token list를 통해 'token'을 획득한다.

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \를 통해 'discovery-token-ca-cert-hash'를 획득한다.

sudo kubeadm join {마스터 노드 ip}:6443 --token {획득한 token} --discovery-token-ca-cert-hash sha256:{획득한 discovery-token-ca-cert-hash}

마스터에서 노드 확인

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

입력해서 kube 명령어 등록

kubectl get nodes -o wide

명령어 자동완성 등록

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source <(kubeadm completion bash)
echo "source <(kubeadm completion bash)" >> ~/.bashrc

참고
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
https://confluence.curvc.com/pages/viewpage.action?pageId=98048155

profile
나누며 타오르는 프로그래머, 타프입니다.

0개의 댓글