구성 요소
- Cluster : 우분투가 설치되어 있는 데스크톱 하나를 의미한다.
- Client : 노트북 또는 클러스가 설치되어 있는 데스크톱 외의 클라이언트로 사용할 다른 데스크톱
Install ap pkgs
sudo apt-get update
sudo apt-get install -y socat
- 추후 Client와 Clutser의 원활한 통신을 위해서는 Port-Forwarding 을 수행해야 하는데, Port-Forwarding을 위해 Cluster에 위 패키지를 설치해줘야한다.
Install Docker
sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- apt 패키지 매니저로 docker 설치시 stable Repository에서 받아오도록 설정
sudo apt-get update && apt-cache madison docker-ce
apt-cache madison docker-ce | grep 5:20.10.11~3-0~ubuntu-focal
sudo apt-get install -y containerd.io docker-ce=5:20.10.11~3-0~ubuntu-focal docker-ce-cli=5:20.10.11~3-0~ubuntu-focal
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
- sudo 키워드 없이 할 수 있도록 권한 추가
Turn off Swap Memory
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sudo swapoff -a
- kubelet 정상 동작을 위해 클러스터 노드에서 swap이라는 가상 메모리를 꺼 두어야 한다.
- 클러스타와 클라이언트를 같은 데스크톱으로 사용 시 swap 메모리 종료 시 속도 저하기 있을 수 있다.
Install Kubectl
curl -LO https://dl.k8s.io/release/v1.21.7/bin/linux/amd64/kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
- 파일의 권한과 위치를 변경해 kubectl 사용
kubectl version --client
Install k3s
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.21.7+k3s1 sh -s - server --disable traefik --disable servicelb --disable local-storage --docker
- k3s에서는 기본값으로 containerd를 백엔드로 설치한다. 하지만 GPU 사용을 위해 docker를 Backend로 사용해야해서 --docker 옵션을 통해 백엔드를 docker로 설치한다.
sudo cat /etc/rancher/k3s/k3s.yaml
Cluster Setup
mkdir .kube
sudo cp /etc/rancher/k3s/k3s.yaml .kube/config
- k3s config를 Cluster의 kubeconfig로 사용하기 위해 복사
sudo chown $USER:$USER .kube/config
- 복사된 파일에 user가 접근할 수 있는 권한 부여
Client Setup
- Cluster에서 설정한 kube/config를 로컬로 이동 시킨다.
- 로컬에서는 ~/.kube/config로 설정한다.
- 처음 복사한 config에서는 server ip가
https://127.0.0.1:6443
으로 되어있는데, 이 값을 Cluster의 ip에 맞게 수정한다.
Setup Kubernetes Modules
1. Helm
- 쿠버네티스 패키지와 관련된 자원을 한 번에 배포하고 관리할 수 있게 도와주는 패키지 매니징 도구 중 하나
wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz
tar -zxvf helm-v3.7.1-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
helm help
2. Kustomize
- 여러 쿠버네티스 리소스를 한 번에 배포하고 관리할 수 있게 해주는 패키지 매니징 도구 중 하나
wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv3.10.0/kustomize_v3.10.0_linux_amd64.tar.gz
tar -zxvf kustomize_v3.10.0_linux_amd64.tar.gz
sudo mv kustomize /usr/local/bin/kustomize
kustomize help
3. CSI Plugin : Local Path Provisioner
- 쿠버네티스 내 스토리지를 담당하는 모듈
- 단일 노드 클러스터에서 쉽게 사용할 수 있는 CSI Pligin으로 Local Path Provisioner 사용
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.20/deploy/local-path-storage.yaml
kubectl -n local-path-storage get pod
- local-path-storage namespace에 provisioner pod이 Running인지 확인
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
- default storage class로 변경
kubectl get sc
- storage class 존재 확인 (local-path (default))