Defalut Storage Class 管理 vSphere 7 with k8s

img

vSphere Pod Service defalut Storage Class 配置

通过此配置,可以在带有Kubernetes环境的vSphere 7中成功创建持久卷(PV)并通过持久卷声明(PVC)附加它们。

简要介绍一下什么是Cloud Native Storage。Cloud Native Storage是为状态应用程序提供全面数据管理的解决方案。

使用 Cloud Native Storage时,您可以创建能够在重启和中断中幸存的容器化状态应用程序。有状态的容器利用vSphere提供的存储空间,同时使用诸如标准卷,持久卷和动态配置之类的原语。

使用 Cloud Native Storage,您可以创建独立于虚拟机和容器生命周期的持久性容器卷。vSphere存储支持卷,您可以直接在卷上设置存储策略。创建卷后,可以在vSphere Client中查看它们及其支持的虚拟磁盘 ,并监视其存储策略合规性。

在我的环境中进行更改之前,所有有状态的Pod以前都一直处于“待处理”状态。

img

Pod describe命令将显示错误。

img

ExternalProvisioning – persistentvolume-controller   waiting for a volume to be created either by external provisioner “csi.vsphere.vmware.com” or manually created by system administrator.
ProvisioningFailed csi.vsphere.vmware.com failed to provision volume with StorageClass “projectpacpolicy”.

供您参考,错误消息中上面的“ projectpacpolicy”参考是我的环境中的存储策略,并已启用基于标记的放置规则。

img

在带有Kubernetes环境的vSphere7中创建“命名空间”时,我们将必须提供存储策略。这是命名空间中存储策略的外观。

img

这是访问API服务器时获得存储类信息的通常的存储类外观。

3.-sc

现在,我们将看到如何将此存储类更改为“默认”

PS注意:我无法通过以[email protected]用户身份登录kubectl来更改默认存储类。

因此,我必须以root用户身份登录“ Supervisor Master”,以更改默认存储类。

要登录Supervisor Master,请登录vcenter。

  1. SSH进入vCenter并启用外壳
  2. 运行/usr/lib/vmware-wcp/decryptK8Pwd.py以获取IP地址和root密码

4.-decrypt-command-1200x152

一旦运行上述命令,您将获得您的Supervisor Master的IP和登录密码。

接下来,以SSH身份作为root进入超级管理员主机。

5.-login-to-Supervisor

进入Supervisor主服务器后,您可以按以下方式运行“ Kubectl修补程序存储类”以启用“默认”存储类。

确保替换存储类的名称。通过’kubectl get sc’获取存储类名称

6.-patch-SC-1200x59

成功执行上述过程后,您会注意到存储类已修补为“默认”。

7.-verify-the-SC

此外,我描述了存储类以获取更多详细信息。

9.-sc-describ

现在,我为PostgreSQL DB容器创建一个有状态容器的部署。

10.-postgres

注意,为有状态PostgreSQL容器创建了一个PVC。

11.-PVC

看看带有PVC的PostgreSQL pod上的事件。

12.-Final-1200x485

可以从vCenter以及Cloud Native Storage的一部分中看到PVC。

13.-cns

Tanzu Kubernetes Cluster defalut Storage Class 配置

Tanzu Kubernetes群集 defalut Storage Class 消失

当我通过kubeapps部署kubernetes资源时,我遇到了一个问题,即我传递给集群的默认存储类没有持久性。为了尝试解决该问题,我从Tanzu Kubernetes集群中传递了以下内容,但并没有保留下来;

kubectl patch storageclass gold -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

https://kubernetes.io/docs/tasks/administer-cluster/change-default-storage-class/

img

我标记了它,因为我不确定这是否是TKG Cluster的预期行为,并指向以下文档。突出显示了YAML中有一个可配置字段,用于在spec.storage下设置名为defaultClass的TKG。

如果像我一样,您只部署了具有最小化部署YAML TKG ,则集群中不存在此配置。

因此,对于像我这样spec.settings.storage.defaultClass在构建时未设置的任何人,都可以在部署后对其进行编辑。

使用“ kubectl-vsphere”连接到vSPhere主管群集,并将上下文切换到TKG上下文“ kubectl config use-context [tkg-context]”

编辑组件Kubernetes集群资源;

kubectl编辑tanzukubernetescluster / tkgclustername

img

这将打开一个文本编辑器(如图vi所示);

img

在规范和设置下,我添加了一个存储区(设置为“ defaultClass”标志)(“ i”插入vi的“ esc”以停止插入文本)。保存文件并退出(’:wq!’)。注销vSphere Supervisor群集(’kubectl-vsphere’)并进入Tanzu Kubernetes群集。

现在,用TKG查询SC应该将SC列为默认值。

img

成功!

我遇到了这个问题,试图通过HelmKubeapps部署资源–除非手动指定,否则某些图表似乎会引用“ defaultClass”。设置defaultStorage类对我来说都解决了这些问题。

Reference

  1. https://www.pramodrane.com/vsphere-7-with-kubernetes-part-4-cloud-native-storage-with-vsphere-csi-for-persistent-volumes/

  2. https://virtual-simon.co.uk/tanzu-kubernetes-cluster-default-storage-class-not-persisting/

  3. Tanzu cluster generate template :

    https://docs.vmware.com/en/VMware-vSphere/7.0/vmware-vsphere-with-kubernetes/GUID-360B0288-1D24-4698-A9A0-5C5217C0BCCF.html

  4. Tanzu cluster virtual machine class types (size ) :

    https://docs.vmware.com/en/VMware-vSphere/7.0/vmware-vsphere-with-kubernetes/GUID-7351EEFF-4EF0-468F-A19B-6CEA40983D3D.html