免責事項: これは英文の記事「VKS Supervisor upgrade failure due to missing StorageClass」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。
Supervisor のアップグレードが StoragePolicyQuota の設定フェーズで失敗します。
Supervisor に SSHログインしてコマンドを実行します。
下記の例では "vsan-default-storage-policy" が見つからないというエラーメッセージを確認できます。
# /usr/lib/vmware-wcp/upgrade/upgrade-ctl.py get-status | jq .messages
[
{
"level": "error",
"message": "Component StoragePolicyQuotaUpgrade failed: Failed to run command: ['kubectl', 'get', 'StorageClass', 'vsan-default-storage-policy', '--output=json'] ret=1 out= err=Error from server (NotFound): storageclasses.storage.k8s.io \"vsan-default-storage-policy\" not found\n"
},
{
"level": "error",
"message": "Component upgrade failed."
}
]
vSphere Kubernetes Service
この問題は、Storage Policy が vCenter 上の vSphere Namespace で定義されているにも関わらず、実際のSupervisor 上(k8s) では対応する StorageClass として存在しない場合に発生します。
下記の例では、Supervisor の vSphere Namespace で定義されている Storage Policy として、"vSAN Default Storage Policy" が定義されています(合計8個の Storage Policy)。
しかしながら、Supervisor 上では "vSAN Default Storage Policy" に対応する "vsan-default-storage-policy" の StorageClass が定義されておらず差異が発生しています (合計7個の StorageClass)。
# kubectl get sc
NAME PROVISIONER
management-storage-policy-encryption csi.vsphere.vmware.com
management-storage-policy-regular csi.vsphere.vmware.com
management-storage-policy-single-node csi.vsphere.vmware.com
management-storage-policy-stretched-lite csi.vsphere.vmware.com
management-storage-policy-thin csi.vsphere.vmware.com
vm-encryption-policy csi.vsphere.vmware.com
vsan-esa-default-policy-raid5 csi.vsphere.vmware.com
欠損した StorageClass を手動で作成します。
1. 対象の Supervisor に SSH でログイン
KB - Troubleshooting vSphere Supervisor Control Plane VMs
2. Storage Policy に対応する StorageClass が欠損していることを確認
kubectl get sc
3. 欠損している StorageClass を作成
Note: 下記の YAML は "vsan-default-storage-policy" を例にしており、状況によって内容を変更する必要があります。
# 1. Set the Storage Policy name (状況に合わせて変更)
STORAGEPOLICY=vsan-default-storage-policy
# 2. YAML ファイルの生成
cat > ${STORAGEPOLICY}.yaml <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ${STORAGEPOLICY}
allowVolumeExpansion: true
provisioner: csi.vsphere.vmware.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
EOF
# 3. 設定の適用
kubectl apply -f ${STORAGEPOLICY}.yaml
4. vSphere Client に戻り、Supervisor のアップグレードを再試行