StorageClass 欠損による VKS Supervisor のアップグレード失敗
search cancel

StorageClass 欠損による VKS Supervisor のアップグレード失敗

book

Article ID: 425613

calendar_today

Updated On:

Products

VMware vSphere Kubernetes Service

Issue/Introduction

免責事項: これは英文の記事「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."
  }
]

Environment

vSphere Kubernetes Service

Cause

この問題は、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

Resolution

欠損した 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 のアップグレードを再試行

  • もしアップグレードタスクがスタックしている場合は、タイムアウトまで待ってください
  • アップグレードタスクがタイムアウトした後に、再度アップグレードをリトライしてください