kubernetesのiSCSI PV (static) を拡張する
環境
- k8s 1.22.1
- iSCSI TargetはTrueNAS Core
- k8sにstaticなPVとしてiSCSIをマウントしている
statefulsetとして定義しているPodが使用するiSCSI PV を拡張するというのを前提に記述する。
大まかな手順
- PV削除 & 再生成
- PVC 削除 & 再生成
- ファイルシステム拡張
1. PV削除
1 | kubectl delete -f pv.yaml |
PVには容量が定義されているので、そこを変更するために削除して再生成する。
patch等で変更できればいいのだが、容量は変更不可なので削除→再生成が必要。
なお、PVを削除してもiSCSIのディスク上のデータが削除されたりすることはないので安心してほしい。
2. PVC削除 & 再生成
1と同じ手順なので省略。理由も一緒。
statefulsetの場合は一度statefulsetを削除->PVCを削除→再度作成するのが早い
statefulsetの場合、再度作成した時点でPodが走ってしまうがそのままで問題ない。
3. ファイルシステム拡張
実行ノードの特定
ファイルシステムを拡張する。この手順は拡張したいPVをマウントしているPodが動いている状態で行う。 kubectl get pod -o wide を実行して、PVをマウントしているPodがどのノードで動いているかを確認する。
Pod内でデバイスを特定する
1 | kubectl exec podname-0 -- df |
/dev/sde をマウントしていることがわかる。
ファイルシステム拡張を実行
この手順はpodを実行しているノードで行う。
1 | user@kubeworker2:~$ df -a | grep /dev/sde |
上記で2行表示されるが、/var/lib/kubelet/〜 のどちらかを次のコマンドに指定する(どちらでもOK)
1 | root@kubeworker2:~# xfs_growfs /var/lib/kubelet/plugins/kubernetes.io/iscsi/iface-default/192.168.10.220:3260-iqn.2005-10.org.freenas.ctl:k8s-tgt-lun-3 |
ちなみに、iSCSI PVのyamlでext4を指定しているのであれば、xfs_growfs の変わりに resize2fs を使用する。ファイルシステム拡張なので稼働中に行っても安全。
失敗例
Pod上や、ノード上で /dev/sdX にiSCSI LUNがマウントされているように表示されるが、これを拡張しようとするとエラーになる。xfs_growfsは、マウントポイントを指定しなければいけないのにデバイスを指定しているのが原因
1 | root@kubeworker2:~# xfs_growfs /dev/sde |
蛇足
静的iSCSI PV 定義
以下のような定義をしている。なお、ノードにiscsi関連のツールをインストールする必要があるので注意。(それすらPodにする方法もあるようだが、うまく動かなかった)
1 | apiVersion: v1 |