測試環境 vCenter 版本為 7.0U3B Build 18901211


創建 TKC YAML 檔時失敗,錯誤訊息  : The request is invalid

將拉起版本為 TKr 中 1.21 最新版的集群,VM Class 為 best-effort-small

apiVersion: run.tanzu.vmware.com/v1alpha1
kind: TanzuKubernetesCluster
metadata:
  name: tkgs-cluster-1
  namespace: test
spec:
  distribution:
    version: v1.21
  topology:
    controlPlane:
      count: 1
      class: best-effort-small
      storageClass: tanzu-vsan-storage-policy
    workers:
      count: 2
      class: best-effort-small
      storageClass: tanzu-vsan-storage-policy

執行 kubectl create -f tkc.yaml 後出現請求無效訊息

執行 kubectl create -f tkc.yaml -v9 ,發現問題是無法找到要使用的 VM Class

回到 vSphere Namespace 中設定 VM Service 關聯要使用的 VM Class

一開始有提到使用的 VM Class 為 best-effort-small,勾選起來完成關聯

TKC YAML 檔創建成功,等待集群部屬完成即可

舊版本時並不需先關聯 VM Class,直接在 TKC YAML 中定義就可正常創建,似乎是 7.0u2a 版本中新增 VM Services 功能後,需先關聯才可部署


無法部屬 Deployment

創建 Deployment 後,Pod 沒有順利拉起

查看 Replicaset 事件,問題為 PodSecurityPolicy 所導致。在 TKGs 中預設會啟用 PodSecurityPolicy admission controller,故需要另外套用安全性原則

這邊我偷懶用最簡單的方式,直接用 VMware 預設的安全性原則 psp:vmware-system-privileged 套用在所有已驗證通過的使用者 (PS:較安全的作法應為自定義限縮權限的 PSP,並且只指派給授權的使用者)

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: default-tkg-admin-privileged-binding
roleRef:
  kind: ClusterRole
  name: psp:vmware-system-privileged
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: Group
  apiGroup: rbac.authorization.k8s.io
  name: system:authenticated

創建 PSP 後 Deployment 可正常拉起


無法使用自建的倉庫映像檔

私倉自簽憑證常遇到的問題,憑證不受信任

新增憑證信任於 TkgServiceConfiguration 中,這邊需注意要使用 administrator 帳號才能修改設定

apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TkgServiceConfiguration
metadata:
  name: tkg-service-configuration
spec:
  defaultCNI: antrea
  trust:
    additionalTrustedCAs:
      - name: first-cert-name
        data: base64-encoded string of a PEM encoded public cert 1

重拉 TKC 讓 TkgServiceConfiguration 生效 (有更好的方式請告訴我 😆),成功使用私倉映像檔


References