Tanzu Kubernetes Grid on vSphereのWorkload Clusterに設定されるStorageClassをyttでカスタマイズするメモ

TKG 1.3では対応不要です。

TKG on vSphereでWorkload Clusterを作成すると次のようなStorageClassが設定されます。

$ kubectl get storageclass
NAME                PROVISIONER              RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
default (default)   csi.vsphere.vmware.com   Delete          Immediate           false                  8d

$ kubectl get storageclass default -o yaml | kubectl neat
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
  name: default
parameters:
  storagepolicyname: ssd
provisioner: csi.vsphere.vmware.com
reclaimPolicy: Delete
volumeBindingMode: Immediate

tkg create clusterのタイミングでこのStorageClassをカスタマイズされた状態で設定されていて欲しい場合は、~/.tkg/providers/infrastructure-vsphere/ytt/vsphere-overlay.yamlにytt overlayのOverlayファイルを書きます。

例えば、allowVolumeExpansion: trueを設定しておきたい場合は次のようなoverlayになります。

#@ load("@ytt:overlay", "overlay")
#@ load("@ytt:yaml", "yaml")

#@ def sc_config():
#@overlay/match missing_ok=True
allowVolumeExpansion: true
#@ end

#@ default_sc = lambda i,left,right: left["metadata"]["name"].endswith("-default-storage-class")
#@ secrets = overlay.subset({"kind": "Secret"})
#@overlay/match by=overlay.and_op(default_sc, secrets), expects="1+"
---
stringData: 
  #@overlay/replace via=lambda a,_: yaml.encode(overlay.apply(yaml.decode(a), sc_config()))
  value:

この設定がある状態でtkg create clusterを行うと次のような設定がされた状態でクラスタが作成されます。

$ kubectl get storageclass
NAME                PROVISIONER              RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
default (default)   csi.vsphere.vmware.com   Delete          Immediate           true                   8d

$ kubectl get storageclass default -o yaml | kubectl neat
allowVolumeExpansion: true # <----------
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
  name: default
parameters:
  storagepolicyname: ssd
provisioner: csi.vsphere.vmware.com
reclaimPolicy: Delete
volumeBindingMode: Immediate

2020-03-01 追記

allowVolumeExpansion: trueを設定しても、TKG 1.2.1ではPersistent Volumeのリサイズが出来ないようです...csi-resizerがいない...

2020-04-04 追記

TKG 1.3でresizeする方法を追加しました。