--- title: Tanzu Kubernetes Grid ExtensionsのHarborをTKG on vSphereにインストールする場合に発生する問題のworkaroundをyttで設定するメモ tags: ["Kubernetes", "TKG", "Tanzu", "TKG Extensions", "Harbor", "Grafana", "ytt"] categories: ["Dev", "CaaS", "Kubernetes", "TKG", "Extensions", "Harbor"] date: 2021-02-20T15:07:34Z updated: 2021-03-29T06:45:01Z --- > TKG 1.3では対応不要です。 [TKG ExtensionsのHarbor](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.2/vmware-tanzu-kubernetes-grid-12/GUID-extensions-harbor-registry.html)をTKG on vSphereにインストールする場合、 環境によってはうまく動作しません。例えば * 認証は成功する(`docker login`はできる)HarborのUIで画面遷移しない(実はBackendのRedisでfile openに失敗しているため) * TrivyがPodが起動しない など。HarborだけでなくGrafanaも起動しません。 回避方法は[TKG 1.2.1のKnown Issue](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.2.1/rn/VMware-Tanzu-Kubernetes-Grid-121-Release-Notes.html#TKG-3153)に書かれている通り、 `vsphere-csi-controller` Deploymentの`csi-provisioner`コンテナの`args`に`--default-fstype=ext4`を付ければ良いです。 既に作成されたクラスタに対しては ``` kubectl patch deployment -n kube-system vsphere-csi-controller --type=json -p='[{"op": "add", "path": "/spec/template/spec/containers/4/args/-", "value": "--default-fstype=ext4"}]' kubectl delete pod -n kube-system -l app=vsphere-csi-controller ``` を行えば良いです。 新規作成のクラスタに関しては、`~/.tkg`以下のmanifestを修正すれば良いです。Know Issueのドキュメントには`csi.lib.yaml`を直接編集するように書いてありますが、 このファイルは編集しない方が良いです。`~/.tkg`以下のカスタマイズは `~/.tkg/providers/infrastructure-vsphere/ytt/vsphere-overlay.yaml`にytt overlayのOverlayファイルを書くのがベターです。 今回の変更内容に対するoverlayは少し複雑ですが、次の内容で適用できます ```yaml #@ load("@ytt:overlay", "overlay") #@ load("@ytt:yaml", "yaml") #@ def csi_controller_config(): spec: template: spec: containers: #@overlay/match by="name" - name: csi-provisioner args: #@overlay/match by=overlay.index(2) #@overlay/insert after=True - --default-fstype=ext4 #@ end #@ csi_controller = lambda i,left,right: left["metadata"]["name"].endswith("-vsphere-csi-controller") #@ configmap = overlay.subset({"kind": "ConfigMap"}) #@overlay/match by=overlay.and_op(configmap, csi_controller), expects="1+" --- data: #@overlay/replace via=lambda a,_: yaml.encode(overlay.apply(yaml.decode(a), csi_controller_config())) data: ```