# install
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube
# conntrack 설치
$ sudo apt-get install -y conntrack
# cluster 시작
$ minikube start --driver=none
# minikube 정상 작동 여부 확인
$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
# cluster 확인(using 'minkube kubectl')
$ minikube kubectl -- get po -A
# alias를 통해 kubectl 명령어를 사용하는 것 처럼 사용 가능
$ alias kubectl="minikube kubectl --"
# cluster 확인(using 'kubectl')
$ kubectl get po -A
# minikube 대시보드 활성화
$ minikube dashboard
* Verifying dashboard health ...
* Launching proxy ...
* Verifying proxy health ...
* Opening http://127.0.0.1:45137/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
http://127.0.0.1:45137/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
# minikube 에드온 확인
$ minikube addons list
| ADDON NAME | PROFILE | STATUS | MAINTAINER |
|-----------------------------|----------|--------------|--------------------------------|
| ambassador | minikube | disabled | third-party (ambassador) |
| auto-pause | minikube | disabled | google |
| csi-hostpath-driver | minikube | disabled | kubernetes |
| dashboard | minikube | enabled ✅ | kubernetes |
--> dashboard enabled 상태여야함.
$ sudo apt install kubectl kubelet kubeadm
$ curl -LO https://dl.k8s.io/release/v1.27.0/bin/linux/arm64/kubectl
# proxy 설정
$ kubectl proxy --address='0.0.0.0' --disable-filter=true
W0427 08:31:50.459704 1015419 proxy.go:175] Request filter disabled, your proxy is vulnerable to XSRF attacks, please be cautious
Starting to serve on [::]:8001
$ sudo ufw allow from any to any port 8001 proto tcp
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
8001/tcp ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
8001/tcp (v6) ALLOW Anywhere (v6)
http://127.0.0.1:45137/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
해당 주소에서 127.0.0.1과 45137 포트 변경
->
$ http://192.168.0.37:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
# 확인
curl http://192.168.0.37:8001/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-container-runtime
$ sudo apt-get install -y nvidia-docker2
$ sudo systemctl restart docker
$ docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
$ docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
$ sudo vi /etc/docker/daemon.json
# daemon.jon
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
$ sudo systemctl daemon-reload
$ sudo service docker restart
$ minikube start --driver=none --kubernetes-version=v1.22.0
$ minikube start --driver=none --kubernetes-version=v1.21.7 --extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/sa.key --extra-config=apiserver.service-account-issuer=kubernetes.default.svc
$ minikube start --driver=none --kubernetes-version=v1.22.3 --extra-config=apiserver.service-account-signing-key-file=/var/lib/minikube/certs/sa.key --extra-config=apiserver.service-account-issuer=kubernetes.default.svc
$ kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/master/nvidia-device-plugin.yml
(base) user@GPU10:~$ kubectl get pod -A | grep nvidia
kube-system nvidia-device-plugin-daemonset-9zxn6 1/1 Running 0 71s
(base) user@GPU10:~$ kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"
NAME GPU
minikube 5
로컬 GPU 에 맞는 cuda version 이미지로 생성 주의!
$ vim gpu-container.yaml
# gpu-container.yaml
apiVersion: v1
kind: Pod
metadata:
name: gpu
spec:
containers:
- name: gpu-container
image: nvidia/cuda:11.6.2-runtime-ubuntu20.04
command:
- "/bin/sh"
- "-c"
args:
- nvidia-smi && tail -f /dev/null
resources:
requests:
nvidia.com/gpu: 3
limits:
nvidia.com/gpu: 3
k8s service의 service ip address
kubectl get svc -A | grep kubernetes
kubernetes cluster와 kubectl 연결 정보
cat ~/.kube/config
KUBECONFIG 환경설정
export KUBECONFIG=~/.kube/config
sudo rm -rf /tmp/juju-mk
sudo rm -rf /tmp/minikube.
클러스터 로그인
kubectl config use-context minikube
event log 확인
kubectl get events -n kube-system
[확인 사항]
Reference
https://anencore94.github.io/2020/08/19/minikube-gpu.html
https://mlops-for-all.github.io/docs/setup-kubernetes/setup-nvidia-gpu/