ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Kubernetes 动态持久卷供应(Persistent Volume Provisioning)实战:StorageClass 全云厂商配置详解

Kubernetes 动态持久卷供应(Persistent Volume Provisioning)实战:StorageClass 全云厂商配置详解 示例工程【免费下载链接】examplesKubernetes application example tutorials项目地址https://gitcode.com/gh_mirrors/examp/examples点击查看免费下载导读本文以仓库_archived/persistent-volume-provisioning目录中的官方示例为核心系统讲解 Kubernetes动态持久卷供应Dynamic Persistent Volume Provisioning的完整工作流管理员如何通过StorageClass定义存储等级class用户如何在PersistentVolumeClaim中按名申请以及kube-controller-manager中的 provisioner 如何按需创建并自动绑定PersistentVolume。文中覆盖 AWS EBS、GCE PD、vSphere、Portworx、StorageOS、GlusterFS、OpenStack Cinder、Ceph RBD、Quobyte、Azure Disk/File 十余种存储后端的 StorageClass 配置参数与完整命令行操作读者读完可独立为集群配置动态存储并在 Pod 中消费 PVC。动态持久卷供应的核心机制在 Kubernetes 中管理员传统上需要预先手动创建一批PersistentVolume静态供应用户再通过PersistentVolumeClaimPVC去认领。动态持久卷供应则把这一环节自动化管理员只需定义描述存储等级的StorageClass对象当用户提交一个指定了storageClassName的 PVC 时集群控制面kube-controller-manager中的对应provisioner卷插件会实时创建底层存储卷并生成一个自动绑定到该 PVC 的 PV整个过程无需人工干预。从本示例仓库的目录结构_archived/persistent-volume-provisioning可以看出每个存储后端都配有可直接使用的 StorageClass 清单与配套 Secret/Pod 示例aws-ebs.yaml、gce-pd.yaml 等单文件 StorageClassrbd/、glusterfs/、quobyte/、cinder/ 子目录中则包含存储类、凭据 Secret 与消费 PVC 的示例 Pod。管理员侧的 StorageClass 配置StorageClass 的三个关键要素管理员必须在集群中定义StorageClass对象API 组storage.k8s.io/v1它描述集群中提供的具名存储等级。不同等级可以映射到管理员决定的任意层级或策略例如慢速廉价盘与高性能 SSD。配置动态供应时管理员需要描述两类信息provisioner必填决定供应 PV 时使用哪个卷插件例如kubernetes.io/aws-ebs、kubernetes.io/gce-pd、kubernetes.io/rbd等parameters选填描述属于该存储等级卷的参数集合。不同 provisioner 接受的参数各不相同例如typeio1与iopsPerGB是 EBS 特有的参数被省略时使用插件默认值。metadata.name具有语义意义用户正是通过在 PVC 的spec.storageClassName中填写这个名称来请求对应存储等级二者必须精确匹配。基本形态kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: slow provisioner: kubernetes.io/aws-ebs parameters: type: io1 zones: us-east-1d, us-east-1c iopsPerGB: 10 fsType: ext4注参数值一律以字符串形式书写因此数值型参数如iopsPerGB: 10需要加引号。各大存储后端 StorageClass 参数详解AWS EBSkubernetes.io/aws-ebs仓库示例文件aws-ebs.yaml该文件演示了type、zone、iopsPerGB三个核心参数的最小配置。kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: slow provisioner: kubernetes.io/aws-ebs parameters: type: io1 zones: us-east-1d, us-east-1c iopsPerGB: 10 fsType: ext4参数说明type卷类型io1、gp2、sc1、st1详见 AWS 文档。默认gp2zone单个 AWS 可用区。zone与zones不能同时使用。若两者均未指定卷一般会在集群节点所在的所有活跃可用区间轮询round-robin分布zones逗号分隔的 AWS 可用区列表。与zone互斥规则同上iopsPerGB仅适用于io1卷单位 GiB 的 I/O 操作数。AWS 卷插件将其乘以请求的卷大小计算 IOPS并封顶于 20 000 IOPSAWS 支持上限encrypted是否加密 EBS 卷合法值为true/falsekmsKeyId可选。加密卷所用 KMS 密钥的完整 ARN。若未提供但encrypted为 true则由 AWS 自动生成密钥fsTypeKubernetes 支持的 fsType默认ext4GCE PDkubernetes.io/gce-pd仓库示例文件gce-pd.yaml演示type: pd-standardzone: us-central1-a。kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: slow provisioner: kubernetes.io/gce-pd parameters: type: pd-standard zone: us-central1-a fsType: ext4参数说明typepd-standard或pd-ssd。默认pd-ssdzone单个 GCE 可用区zone与zones互斥未指定时在节点所在活跃区间轮询zones逗号分隔的 GCE 可用区列表规则同上vSpherekubernetes.io/vsphere-volumekind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: slow provisioner: kubernetes.io/vsphere-volume parameters: diskformat: eagerzeroedthick fsType: ext3参数说明diskformatthin、zeroedthick、eagerzeroedthick详见 vSphere 文档。默认thinfsTypeKubernetes 支持的 fsType默认ext4Portworx Volumekubernetes.io/portworx-volumekind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: portworx-io-priority-high provisioner: kubernetes.io/portworx-volume parameters: repl: 1 snap_interval: 70 io_priority: high参数说明fs卷使用的文件系统none/xfs/ext4默认ext4block_size块大小Kbytes默认32repl复制因子[1..3]默认1io_priorityIO 优先级high/medium/low默认lowsnap_interval快照间隔分钟0表示禁用快照默认0aggregation_level卷被分发的 chunk 数量0表示非聚合卷默认0ephemeral是否临时存储true/false默认falsePortworx 的完整示例含 PV/PVC/Pod 与多种 StorageClass可参考 volumes/portworx 目录仓库中 portworx-volume-sc-high.yaml 即为高 IO 优先级存储类的独立版本。StorageOSkubernetes.io/storageoskind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: sc-fast provisioner: kubernetes.io/storageos parameters: pool: default description: Kubernetes volume fsType: ext4 adminSecretNamespace: default adminSecretName: storageos-secret参数说明pool供应卷所用的 StorageOS 分布式容量池名称未指定时使用通常存在的default池description动态创建卷的描述。同一存储类下所有卷描述相同可借助不同存储类区分不同用途。默认Kubernetes volumefsType请求的默认文件系统类型。注意 StorageOS 内部的用户自定义规则可能覆盖此值。默认ext4adminSecretNamespaceAPI 配置 Secret 所在命名空间设置adminSecretName时必填adminSecretName用于获取 StorageOS API 凭据的 Secret 名称未指定时尝试默认值StorageOS 的完整使用示例含 Secret、StorageClass、PVC、Pod见仓库 volumes/storageos 目录其中 storageos-sc.yaml 与 storageos-secret.yaml 即为上述参数的落地清单。GlusterFSkubernetes.io/glusterfs仓库提供了完整可用的清单StorageClass 见 glusterfs-storageclass.yaml凭据 Secret 见 glusterfs-secret.yaml类型为kubernetes.io/glusterfskey为 base64 编码的 Heketi 密码示例bXlwYXNzd29yZA即明文mypassword。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast provisioner: kubernetes.io/glusterfs parameters: resturl: http://127.0.0.1:8081 clusterid: 630372ccdc720a92c681fb928f27b53f restuser: admin secretNamespace: default secretName: heketi-secret gidMin: 40000 gidMax: 50000 volumetype: replicate:3 volumeoptions: client.ssl on, server.ssl on volumenameprefix: dept-dev snapfactor: 10 customepnameprefix: dbstorage参数逐一说明resturl必填Gluster REST 服务HeketiURL用于按需供应 Gluster 卷常规格式为IPaddress:Port。若 Heketi 在 OpenShift/Kubernetes 中暴露为可路由服务也可使用类似http://heketi-storage-project.cloudapps.mystorage.com的完整 FQDN 形式。restauthenabled是否启用 REST 服务认证布尔值。为true时必须填写restuser与restuserkey或secretNamespacesecretName。该参数已废弃——只要指定了restuser、restuserkey、secretName、secretNamespace中的任一参数认证即自动启用。restuser有权在 Gluster Trusted Pool 中创建卷的 Heketi 用户。restuserkey上述用户的密码。已废弃推荐改用secretNamespacesecretName。secretNamespacesecretName指向包含 Gluster REST 服务用户密码的 Secret。二者均可选同时省略时使用空密码。Secret 类型必须为kubernetes.io/glusterfs。若同时指定了restuserkey与secretNamespacesecretName则优先使用 Secret。clusterid供应卷时 Heketi 使用的集群 ID也可传逗号分隔的多个 clusterid如8452344e2becec931ece4e33c4674e4e,42982310de6c63381718ccfa6d8cf397。可选参数。gidMingidMax存储类 GID 范围的最小/最大值。动态供应的卷会取该区间内的唯一 GID。可选未指定时使用默认值 2000–2147483647。volumetype卷类型及其参数可选。未指定时由 provisioner 自行决定。常用取值副本卷Replicareplicate:33为副本数纠删卷Disperse/ECdisperse:4:24为数据块数、2为冗余块数分布式卷Distributenone。volumeoptions设置动态供应 Gluster 卷上的卷选项逗号分隔多个键值。示例client.ssl on, server.ssl on用于启用加密。可选。volumenameprefix默认动态卷命名为vol_UUID设置后按volumenameprefix_Namespace_PVCname_randomUUID格式命名_为分隔符。注意该值不能包含_。可选。snapfactor动态卷 thinpool 大小的配置因子取值 1–100。可选默认 1。customepnameprefix默认动态卷会创建名为glusterfs-dynamic-PVC UUID的 Endpoint 与服务设置后按customepnameprefix-PVC UUID命名-为分隔符。可选。自动 Endpoint/Service 清理机制动态供应完成后Gluster 插件会自动创建名为glusterfs-dynamic-claimname的 Endpoint 和 headless Service当 PVC 被删除时这两个资源也会被自动删除无需管理员手工维护。OpenStack Cinderkubernetes.io/cinder仓库示例文件cinder-storage-class.yaml消费该存储类的 Pod 见 cinder/example-pod.yamlnginx 容器将 PVC 挂载到/var/lib/www/html。kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: gold provisioner: kubernetes.io/cinder parameters: type: fast availability: nova fsType: ext4参数说明typeCinder 中创建的 VolumeType默认空availability可用区Availability Zone默认空fsTypeKubernetes 支持的 fsType默认ext4Ceph RBDkubernetes.io/rbd仓库提供了完整可运行的三件套StorageClass rbd/rbd-storage-class.yaml、admin 凭据 rbd/ceph-secret-admin.yaml、消费 PVC 的 ReplicationController rbd/pod.yamlnginx 挂载到/var/lib/www/html。另有用户侧 Secret 模板 rbd/ceph-secret-user.yaml。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast provisioner: kubernetes.io/rbd parameters: monitors: 10.16.153.105:6789 adminId: kube adminSecretName: ceph-secret adminSecretNamespace: kube-system pool: kube userId: kube userSecretName: ceph-secret-user fsType: ext4 imageFormat: 2参数说明monitorsCeph monitor 地址逗号分隔。必填adminId有能力在池中创建镜像的 Ceph 客户端 ID默认adminadminSecretNameadminId对应的 Secret 名称。必填Secret 类型必须为kubernetes.io/rbdadminSecretNamespaceadminSecret所在命名空间默认defaultpoolCeph RBD 池默认rbduserId用于映射 RBD 镜像的 Ceph 客户端 ID默认与adminId相同userSecretName用于映射 RBD 镜像的 Ceph Secret 名称必须与 PVC 位于同一命名空间。必填fsTypeKubernetes 支持的 fsType默认ext4imageFormatRBD 镜像格式1或2默认2imageFeatures仅 format 2 可用的特性列表逗号分隔目前仅支持layering。可选默认不开启任何特性重要限制目前不能开启exclusive-lock特性以及依赖它的object-map、fast-diff、journaling因为 exclusive lock 与 advisory lock 无法协同工作。Quobytekubernetes.io/quobyte仓库示例quobyte/quobyte-storage-class.yaml、admin 凭据 quobyte/quobyte-admin-secret.yaml类型kubernetes.io/quobyte内含 base64 编码的user与password、消费 PVC 的 quobyte/example-pod.yaml。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: slow provisioner: kubernetes.io/quobyte parameters: quobyteAPIServer: http://138.68.74.142:7860 registry: 138.68.74.142:7861 adminSecretName: quobyte-admin-secret adminSecretNamespace: kube-system user: root group: root quobyteConfig: BASE quobyteTenant: DEFAULT参数说明quobyteAPIServerQuobyte API Server格式http(s)://api-server:7860registry挂载卷使用的 Quobyte registry格式host:port多 registry 用逗号分隔如host1:port,host2:port,host3:port。host 可为 IP 或可解析的 DNS 名adminSecretName存放 Quobyte 用户与密码、用于向 API Server 认证的 Secret类型必须为kubernetes.io/quobyteadminSecretNamespaceadminSecretName所在命名空间默认defaultuser所有访问映射到的用户默认rootgroup所有访问映射到的组默认nfsnobodyquobyteConfig创建卷所用的配置可通过 Web console 或 quobyte CLI 新建/修改。默认BASEquobyteTenant创建/删除卷所用的租户 ID该租户必须已存在于 Quobyte。Quobyte 1.4 时用空串表示DEFAULT租户。默认DEFAULTcreateQuota若设置该存储类创建的所有卷都会获得指定大小的配额按逻辑磁盘大小计可能与物理大小不同例如启用复制时。默认FalseQuobyte 完整实操流程仓库路径已按当前目录结构改写# 1. 在系统命名空间创建 Quobyte admin Secret此处为 kube-system $ kubectl create -f _archived/persistent-volume-provisioning/quobyte/quobyte-admin-secret.yaml --namespacekube-system # 2. 创建 StorageClass $ kubectl create -f _archived/persistent-volume-provisioning/quobyte/quobyte-storage-class.yaml # 3. 创建 PVC $ kubectl create -f _archived/persistent-volume-provisioning/claim1.json # 4. 检查 PVC 与自动生成的 PV $ kubectl describe pvc Name: claim1 Namespace: default Status: Bound Volume: pvc-bdb82652-694a-11e6-b811-080027242396 Labels: none Capacity: 3Gi Access Modes: RWO No events. $ kubectl describe pv Name: pvc-bdb82652-694a-11e6-b811-080027242396 Labels: none Status: Bound Claim: default/claim1 Reclaim Policy: Delete Access Modes: RWO Capacity: 3Gi Message: Source: Type: Quobyte (a Quobyte mount on the host that shares a pods lifetime) Registry: 138.68.79.14:7861 Volume: kubernetes-dynamic-pvc-bdb97c58-694a-11e6-91b6-080027242396 ReadOnly: false No events. # 5. 创建使用该 PVC 的 Pod $ kubectl create -f _archived/persistent-volume-provisioning/quobyte/example-pod.yaml注意上述输出中 PV 的Reclaim Policy为Delete——这正是动态供应卷的典型回收策略PV 被释放后由 provisioner 删除底层存储。Azure Diskkubernetes.io/azure-diskkind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: slow provisioner: kubernetes.io/azure-disk parameters: skuName: Standard_LRS location: eastus storageAccount: azure_storage_account_name fsType: ext4参数说明skuNameAzure 存储账户 SKU 层级默认空locationAzure 存储账户位置默认空storageAccountAzure 存储账户名。未提供时会在资源组关联的所有存储账户中查找匹配skuName与location的账户提供时账户必须与集群位于同一资源组且此时skuName与location被忽略fsTypeKubernetes 支持的 fsType默认ext4Azure Filekubernetes.io/azure-filekind: StorageClass apiVersion: storage.k8s.io/v1beta1 metadata: name: slow provisioner: kubernetes.io/azure-file parameters: skuName: Standard_LRS location: eastus storageAccount: azure_storage_account_nameAzure File 的参数与 Azure Disk 完全一致skuName、location、storageAccount区别在于 API 版本使用了storage.k8s.io/v1beta1。用户侧通过 PVC 发起动态供应请求用户侧只需要做一件事在PersistentVolumeClaim中通过spec.storageClassName指定存储等级名称。该值必须与管理员配置的某个StorageClass名称精确匹配这是用户请求特定存储等级的方式。仓库示例 claim1.json 展示了一个最简的 3Gi PVC{ kind: PersistentVolumeClaim, apiVersion: v1, metadata: { name: claim1 }, spec: { accessModes: [ ReadWriteOnce ], resources: { requests: { storage: 3Gi } }, storageClassName: slow } }accessModes: [ReadWriteOnce]声明该卷只允许单节点读写与示例中kubectl describe pv输出的RWO一致resources.requests.storage: 3Gi请求容量storageClassName: slow指向管理员定义的slow存储等级。整个动态供应闭环如下用户提交 PVC → 控制面发现 PVC 指定了 storageClassName 且无现成 PV 可匹配 → 调用该 StorageClassprovisioner字段对应的卷插件在底层创建卷 → 生成 PV 并自动绑定到 PVC → Pod 通过persistentVolumeClaim卷来源消费该 PVC。回收时删除 PVCReclaim Policy: Delete的 PV 会被对应插件自动销毁。端到端运行示例GCE 示例流程通用任何 provisioner 遵循相同步骤以下输出展示了从集群无 PV到PVC 创建 → PV 自动生成并绑定 → 删除 PVC 后卷自动回收的完整生命周期。虽然示例使用 GCE但任何 provisioner 都遵循同一流程。# 初始状态集群中没有 PV $ kubectl get pv # 创建 StorageClass 与指定该存储类的 PVC $ kubectl create -f _archived/persistent-volume-provisioning/gce-pd.yaml storageclass slow created $ kubectl create -f _archived/persistent-volume-provisioning/claim1.json persistentvolumeclaim claim1 created # PV 已被自动创建并绑定到 claim1 $ kubectl get pv NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE pvc-bb6d2f0c-534c-11e6-9348-42010af00002 3Gi RWO Bound default/claim1 4s $ kubectl get pvc NAME LABELS STATUS VOLUME CAPACITY ACCESSMODES AGE claim1 none Bound pvc-bb6d2f0c-534c-11e6-9348-42010af00002 3Gi RWO 7s # 删除 PVC 以释放卷 $ kubectl delete pvc claim1 persistentvolumeclaim claim1 deleted # 对应的 PV 随认领释放而被删除 $ kubectl get pvCeph RBD 完整配置与使用指南前置条件需要一个可用的 Ceph 集群并且rbd命令行工具必须安装在运行kube-controller-manager或kubelet的所有主机/容器上。配置步骤第一步获取 Ceph admin key 并创建 Secret。admin key 通常位于 Ceph 集群节点的/etc/ceph/ceph.client.admin.keyring内容形如[client.admin] key AQBfxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx auid 0 caps mds allow caps mon allow * caps osd allow *从key值创建 admin Secret命名空间必须与 StorageClass 中定义的一致示例为kube-system$ kubectl create secret generic ceph-secret-admin --from-literalkeyAQBfxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --namespacekube-system --typekubernetes.io/rbd第二步修改并创建 RBD StorageClass。编辑仓库中的 rbd/rbd-storage-class.yaml重点是monitors字段要改为你的 Ceph 环境地址然后创建$ kubectl create -f _archived/persistent-volume-provisioning/rbd/rbd-storage-class.yaml第三步为映射创建非特权用户与池。kube-controller-manager现在已能供应存储但还需将 RBD 卷映射到节点。映射应使用非特权 key若已有现成用户可在 Ceph 集群上用 admin key 执行ceph auth list获取所有 key。本例新建用户与池$ ceph osd pool create kube 512 $ ceph auth get-or-create client.kube mon allow r osd allow rwx poolkube [client.kube] key AQBQyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy与 admin Secret 一样将此 key 制成 Secret。但用户 Secret 需要在每个打算消费该存储类 RBD 卷的命名空间各创建一份。示例中创建命名空间myns并在其中创建用户 Secretkubectl create namespace myns kubectl create secret generic ceph-secret-user --from-literalkeyAQBQyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy --namespacemyns --typekubernetes.io/rbd至此动态供应与使用 RBD 存储的准备工作全部完成。使用流程在示例命名空间myns中创建 PVC$ kubectl create -f _archived/persistent-volume-provisioning/claim1.json --namespacemynsPVC 创建最终会产出与之匹配的 PV 与底层 RBD 卷$ kubectl describe pvc --namespacemyns Name: claim1 Namespace: myns Status: Bound Volume: pvc-1cfa23b3-664b-11e6-9eb9-90b11c09520d Labels: none Capacity: 3Gi Access Modes: RWO No events. $ kubectl describe pv Name: pvc-1cfa23b3-664b-11e6-9eb9-90b11c09520d Labels: none Status: Bound Claim: myns/claim1 Reclaim Policy: Delete Access Modes: RWO Capacity: 3Gi Message: Source: Type: RBD (a Rados Block Device mount on the host that shares a pods lifetime) CephMonitors: [127.0.0.1:6789] RBDImage: kubernetes-dynamic-pvc-1cfb1862-664b-11e6-9a5d-90b11c09520d FSType: RBDPool: kube RadosUser: kube Keyring: /etc/ceph/keyring SecretRef: {ceph-secret-user} ReadOnly: false No events.从 PV 详情可以清晰地看到动态供应的证据链RBDImage: kubernetes-dynamic-pvc-...自动生成的镜像名、RBDPool: kubeStorageClass 中指定的池、RadosUser: kube映射用户、SecretRef: ceph-secret-user用户 Secret。接着创建使用该 PVC 的 Pod仓库示例 rbd/pod.yaml 是一个带role: server标签的 nginx ReplicationController将 PVC 挂载到/var/lib/www/html$ kubectl create -f _archived/persistent-volume-provisioning/rbd/pod.yaml --namespacemyns验证 Pod 中的 RBD 挂载$ export PODNAMEkubectl get pod --selectorroleserver --namespacemyns --outputtemplate --template{{with index .items 0}}{{.metadata.name}}{{end}} $ kubectl exec -it $PODNAME --namespacemyns -- df -h | grep rbd /dev/rbd1 2.9G 4.5M 2.8G 1% /var/lib/www/html仓库配套示例文件索引本示例在 _archived/persistent-volume-provisioning 下按存储后端组织了一整套开箱即用的清单方便对照本文参数逐项试验存储后端StorageClass凭据/其他AWS EBSaws-ebs.yaml—GCE PDgce-pd.yaml—GlusterFSglusterfs/glusterfs-storageclass.yamlglusterfs/glusterfs-secret.yamlCeph RBDrbd/rbd-storage-class.yamlrbd/ceph-secret-admin.yaml、rbd/ceph-secret-user.yaml、rbd/pod.yamlQuobytequobyte/quobyte-storage-class.yamlquobyte/quobyte-admin-secret.yaml、quobyte/example-pod.yamlOpenStack Cindercinder/cinder-storage-class.yamlcinder/example-pod.yaml通用 PVC—claim1.json3Gi / RWO / storageClassNameslow总结与关键注意事项动态供应把建卷从管理员手里交给了控制面管理员只需定义StorageClassprovisionerparametersPV 由插件按 PVC 请求实时生成并自动绑定Reclaim Policy默认为DeletePVC 删除即回收底层卷。参数具有很强的插件特异性iopsPerGB只属于 EBSio1diskformat只属于 vSphereresturl/gidMin/volumetype只属于 GlusterFS配置前务必核对本文各表与官方 StorageClass 参考文档中的全部支持参数。Secret 的命名空间与类型约束是常见踩坑点GlusterFS 的 Secret 类型必须是kubernetes.io/glusterfsRBD 必须是kubernetes.io/rbdQuobyte 必须是kubernetes.io/quobyteRBD 的用户 Secret 必须与 PVC 同命名空间。可用区参数互斥zone与zonesEBS/GCE不可同时使用省略时卷会在节点所在活跃可用区间轮询。RBD 特性受限目前不可开启exclusive-lock及依赖它的object-map、fast-diff、journaling特性。仓库中的 _archived/persistent-volume-provisioning/README.md 保留了本主题的完整英文原始文档配合各后端清单即可在真实集群中逐一复现动态持久卷供应的完整链路。赞分享示例工程【免费下载链接】examplesKubernetes application example tutorials项目地址https://gitcode.com/gh_mirrors/examp/examples点击查看免费下载相关推荐Kubernetes动态卷供应(Dynamic Volume Provisioning)深度解析Kubernetes动态卷供应 Dynamic Volume Provisioning 深度解析 概述 还在手动创建存储卷吗Kubernetes动态卷供应 D文档教程云原生Kubernetes StorageClass 完全指南动态持久化存储的分类、分配器与实战配置Kubernetes StorageClass 完全指南动态持久化存储的分类、分配器与实战配置 StorageClass 是 Kubernetes 存储体系中教程云原生容器编排Kubernetes Persistent Volumes 与 Persistent Volume Claims 实战指南从 PV/PVC 概念到动态供给与最佳实践Kubernetes Persistent Volumes 与 Persistent Volume Claims 实战指南从 PV/PVC 概念到动态供给与最前端企业应用上一篇3 分钟跑通 tiktoken BPE 分词器OpenAI 模型 token 计数完整指南下一篇Chart.js国际化支持多语言图表标签与格式化终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表