LoginSignup
0
0

ぼくの考えたかんたんなK8s・Kubeflowのレシピ

Last updated at Posted at 2024-01-28

はじめに

この記事は、お手軽なKubeflow・K8s環境を構築する手順をまとめたものです。

シングルノード・オプションてんこ盛りでmicrok8sを構築し、kubeflowをデプロイして機械学習ガンガンにできる環境を作ります。

ほとんどコピペで難しくはないんだけど、再構築したいときに絶対忘れてるやつなので…

notさいきょうnot考えた。

なぜやったし?

k0sクラスタもjupyterlab GPU環境(docker)もちょうど壊れたので

別にマルチノード構成してもStatefulsetは救えないし、GPU入りのクラスタをHAにするのは大変だとわかったので…

RKE,RKE2,k0s,k3sは使ったことあるから別なの使いたかった。
(とりあえずkubeadm使えよといわれそうだがおいておく)

環境

  • proxmox VE 7.4(母艦)
  • ubuntu 22.04(VM)
  • RTX3060

セットアップ

参考

上をがっちゃんこしただけ

VMセットアップ

proxmox(kvm)のおまじない。必要性があるかは微妙。
AMD系のCPUの場合。
CPU支援を入れないと動かないことはたまにある。

# /etc/pve/qemu-server/[1-9]+.conf
sed -i 's/cpu: kvm64/cpu: host,flags=+pcid;+virt-ssbd;+amd-ssbd;+aes/' ${対象VM}

VM上

Ubuntuの設定

# ファイルディスクリプタの問題が起きるので
# sudo sysctl fs.inotify.max_user_instances=1280
# sudo sysctl fs.inotify.max_user_watches=655360
cat << EOF | sudo tee -a /etc/sysctl.conf
fs.inotify.max_user_instances=1280
fs.inotify.max_user_watches=655360
EOF

# nouveauを読まないように
cat << EOF | sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
EOF
sudo update-initramfs -u
sudo reboot

# nvidiaのドライバ入れる
# ドライバの確認は`ubuntu-drivers devices`
## レポジトリ登録
sudo add-apt-repository ppa:graphics-drivers/ppa

## 3060の例
sudo apt install nvidia-driver-535
sudo reboot

microk8sのセットアップ

sudo snap install microk8s --classic --channel=1.26/stable
sudo usermod -a -G microk8s $USER
newgrp microk8s
sudo chown -f -R $USER ~/.kube

# 諸々有効化(アドレス圏は適当に決める)
microk8s enable \
    dns \
    hostpath-storage \
    ingress \
    dashboard \
    gpu \
    registry \
    metallb:192.168.60.10-192.168.60.250

# お好みでalias登録しておく
cat << "EOF" >> ~/.`basename $SHELL`rc
alias kubectl="microk8s kubectl"
# 補完
source <(kubectl completion `basename $SHELL`)
EOF
source ~/.`basename $SHELL`rc

jujuのセットアップ

1~2時間ほったらかしにしていたらいつの間にか出来ていた。

画面の前で待っていても終わらない。

# install
sudo snap install juju --classic --channel=3.1/stable
mkdir -p ~/.local/share

# microk8s登録
microk8s config | juju add-k8s my-k8s --client
juju bootstrap my-k8s uk8sx

# kubeflow deploy
juju add-model kubeflow
juju deploy kubeflow --trust  --channel=1.8/stable

# deploy完了を気長にまつ
juju status --watch 5s

設定

ADDR=`microk8s kubectl -n kubeflow get svc istio-ingressgateway-workload -o jsonpath='{.status.loadBalancer.ingress[0].ip}'`
juju config dex-auth public-url=http://${ADDR}.nip.io
juju config oidc-gatekeeper public-url=http://${ADDR}.nip.io

# 管理画面のデフォルトのアカウント設定
juju config dex-auth static-username=admin
juju config dex-auth static-password=admin

おまけ

滅びの呪文

microk8s stopする前に実行する。

sudo microk8s reset --destroy-storage
juju remove-k8s my-k8s

【不要だった】停止前のおまじない

kubectl get statefulset -n kubeflow --no-headers \
    | cut -d' ' -f1 \
    | xargs -I{} microk8s kubectl scale -n kubeflow statefulset {} --replicas=0
    
kubectl get deploy -n kubeflow --no-headers \
    | cut -d' ' -f1 \
    | xargs -I{} microk8s kubectl scale -n kubeflow deploy {} --replicas=0

使ってみる

Notebook

クリックひとつでnotebook環境作れて、GPUまでつかえちゃうって結構衝撃的

任意のイメージも使える。

VS CodeもRも使えるなんてやったね!

image.png
image.png
image.png

Pipeline

todo
良い感じにまとめる

確認

ちなみにVMのリソースは結構食われている

16/32Gでballooningデバイスにしているハズだけ、ballooningはだめだったらしい

$ microk8s kubectl top node
NAME               CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
ubuntumicrostack   1178m        9%     13577Mi         87%       
$ free -h
               total        used        free      shared  buff/cache   available
Mem:            15Gi        10Gi       358Mi       8.0Mi       4.8Gi       4.7Gi
Swap:             0B          0B          0B

$ kubectl  top pod -A --sort-by='memory' | head 
NAMESPACE                NAME                                                          CPU(cores)   MEMORY(bytes)   
work                     test-notebook-0                                               6m           2180Mi          
kubeflow                 kfp-db-0                                                      34m          936Mi           
kubeflow                 katib-db-0                                                    10m          821Mi           
controller-uk8sx         controller-0                                                  75m          818Mi           
kubeflow                 jupyter-ui-0                                                  2m           206Mi           
kubeflow                 tensorboards-web-app-0                                        2m           202Mi           
ingress                  nginx-ingress-microk8s-controller-4sbxk                       3m           177Mi           
kubeflow                 kubeflow-volumes-8546f5448b-brfp7                             1m           172Mi           
kubeflow                 knative-operator-0                                            12m          157Mi           
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0