昨日はmcrok8sを使ったので、今回はk3sを使って同じようなことをしてみました。
先に結果を書いておくと、問題なく動きました。
k3sの初期セットアップ
バイナリーを使ったセットアップは、だいたい次のような感じ。 注意するのはwgetでとってくるk3sバイナリー。アーキテクチャーに注意。アーキテクチャーがファイル名についていないk3sはamd64用です。k3s Releasesから、最新を取ってくればだいたい良い感じです。
# wget https://github.com/rancher/k3s/releases/download/v1.18.8%2Bk3s1/k3s # chmod +x k3s # mv k3s /usr/local/bin # bash # k3s server & # k3s kubectl get node NAME STATUS ROLES AGE VERSION youhei-virtualbox Ready master 12m v1.18.8+k3s1
PVC要求の発行
PVC要求のためのYAMLを作成
まずはStoarge Classを確認する。このバージョンでは local-path
という名前で呼べば良いようだ。
root@youhei-virtualbox:~# k3s kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 28m
YAMLファイルのstorageClassNameを local-path
に変更する。他は一緒で良さそう。
--- apiVersion: v1 kind: PersistentVolumeClaim metadata: labels: app: myclaim name: myclaim spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: local-path
PVC要求の実施
実行すると次のような出力がある。 要約すると、「'WaitForFirstConsumer'は、バインドする前に最初のコンシューマーが作成されるのを待っています」。
root@youhei-virtualbox:~# k3s kubectl create -f jupyter-pvc.yaml I0820 09:52:44.890052 3676 event.go:278] Event(v1.ObjectReference{Kind:"PersistentVolumeClaim", Namespace:"default", Name:"myclaim", UID:"fe5dc0bf-77c9-4433-9982-684056d763b4", APIVersion:"v1", ResourceVersion:"650", FieldPath:""}): type: 'Normal' reason: 'WaitForFirstConsumer' waiting for first consumer to be created before binding persistentvolumeclaim/myclaim created
ずっと同じメッセージが表示される。PVC要求の結果が表示されるがPendingになっている。
root@youhei-virtualbox:~# k3s kubectl get -f jupyter-pvc.yaml I0820 09:53:08.240975 3676 event.go:278] Event(v1.ObjectReference{Kind:"PersistentVolumeClaim", Namespace:"default", Name:"myclaim", UID:"fe5dc0bf-77c9-4433-9982-684056d763b4", APIVersion:"v1", ResourceVersion:"650", FieldPath:""}): type: 'Normal' reason: 'WaitForFirstConsumer' waiting for first consumer to be created before binding I0820 09:53:23.241527 3676 event.go:278] Event(v1.ObjectReference{Kind:"PersistentVolumeClaim", Namespace:"default", Name:"myclaim", UID:"fe5dc0bf-77c9-4433-9982-684056d763b4", APIVersion:"v1", ResourceVersion:"650", FieldPath:""}): type: 'Normal' reason: 'WaitForFirstConsumer' waiting for first consumer to be created before binding I0820 09:53:38.241561 3676 event.go:278] Event(v1.ObjectReference{Kind:"PersistentVolumeClaim", Namespace:"default", Name:"myclaim", UID:"fe5dc0bf-77c9-4433-9982-684056d763b4", APIVersion:"v1", ResourceVersion:"650", FieldPath:""}): type: 'Normal' reason: 'WaitForFirstConsumer' waiting for first consumer to be created before binding NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE myclaim Pending
k3sデフォルトのlocal-pathは「WaitForFirstConsumer」を設定されているため。
root@youhei-virtualbox:~# k3s kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 28m
「WaitForFirstConsumer」については以下に説明がある。
というわけで、気にせずPodを作成する。
root@youhei-virtualbox:~# k3s kubectl create -f jupyter-pod.yaml service/jupyter2 created pod/jupyter2 created
Podは作成されたようだ。当然ながら、PVもPVCも作られている。
root@youhei-virtualbox:~# k3s kubectl get po -w NAME READY STATUS RESTARTS AGE jupyter2 0/1 ContainerCreating 0 33s ... jupyter2 1/1 Running 0 93s root@youhei-virtualbox:~# k3s kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE myclaim Bound pvc-fe5dc0bf-77c9-4433-9982-684056d763b4 1Gi RWO local-path 5m12s root@youhei-virtualbox:~# k3s kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-fe5dc0bf-77c9-4433-9982-684056d763b4 1Gi RWO Delete Bound default/myclaim local-path 3m49s
Podを確認する。前回同様、/jupyter としてボリュームがマウントされたのが確認できる。
root@youhei-virtualbox:~# k3s kubectl get -f jupyter-pod.yaml NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/jupyter2 NodePort 10.43.102.178 <none> 80:31062/TCP 8m13s NAME READY STATUS RESTARTS AGE pod/jupyter2 1/1 Running 0 8m13s root@youhei-virtualbox:~# k3s kubectl exec -it jupyter2 -- df -h Filesystem Size Used Avail Use% Mounted on overlay 32G 8.0G 22G 27% / tmpfs 64M 0 64M 0% /dev tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/sda1 32G 8.0G 22G 27% /jupyter shm 64M 0 64M 0% /dev/shm tmpfs 2.0G 12K 2.0G 1% /run/secrets/kubernetes.io/serviceaccount tmpfs 2.0G 0 2.0G 0% /proc/acpi tmpfs 2.0G 0 2.0G 0% /proc/scsi tmpfs 2.0G 0 2.0G 0% /sys/firmware