ARTICLE DETAIL

资讯详情

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

Kubernetes ScaleIO 卷插件实战:静态卷挂载与 StorageClass 动态供给

Kubernetes ScaleIO 卷插件实战:静态卷挂载与 StorageClass 动态供给 示例工程【免费下载链接】examplesKubernetes application example tutorials项目地址https://gitcode.com/gh_mirrors/examp/examples点击查看免费下载本篇技术指南围绕当前仓库中归档的 Dell EMC ScaleIO Volume Plugin 文档 展开系统讲解在 Kubernetes 中使用 ScaleIO 卷插件的两种存储消费方式一是通过 Pod 直接声明scaleIO卷完成「自动挂载、格式化与使用」的静态场景二是借助StorageClassprovisioner 标识kubernetes.io/scaleioPersistentVolumeClaim实现存储的动态供给。读完本文你将掌握 Secret 凭据的部署方式、scaleIO卷规格中全部核心参数的语义与取值以及从创建 Pod、创建 StorageClass 到通过 PVC 申请并挂载动态卷的完整实战链路并能对照仓库内真实 YAML 文件快速落地。前置条件Pre-Requisites按照原文档的要求使用 ScaleIO 卷插件前需要满足以下环境条件Kubernetes 版本 1.6 或更高ScaleIO 版本 2.0 或更高一个已就绪且带有 API 网关API gateway的 ScaleIO 集群在每个将要消费存储的 Kubernetes 节点上安装并配置好 ScaleIO 的 SDCScaleIO Data Client二进制组件。需要特别说明的是SDC 是关键前提插件本身负责向 ScaleIO 集群发起卷操作请求而真正把块设备呈现到节点内核、供 kubelet 挂载的环节依赖 SDC。凡是计划运行消费 ScaleIO 卷的 Pod 的节点都必须预先安装 SDC否则卷无法在节点侧被识别为块设备。ScaleIO 环境准备原文档假设读者已经熟悉 ScaleIO 并拥有一套可用的集群如果尚未搭建可参考社区提供的 3 节点 ScaleIO Vagrant 搭建教程以及 ScaleIO 官方试用与下载页面中的通用安装说明来完成初始化。对于本演示需要确保两件事ScaleIO 的SDC组件已在所有运行相关 Pod 的 Kubernetes 节点上正确安装与配置存在一个可从 Kubernetes 节点访问的、已配置好的 ScaleIO 网关gateway。网关地址将作为卷规格中的gateway参数被插件直接调用因此它的可达性与 API 路径示例中为https://localhost:443/api必须准确无误。用 Kubernetes Secret 存放 ScaleIO 凭据ScaleIO 插件通过一个 Kubernetes Secret 对象来保存访问集群所需的username与password凭据。Kubernetes 要求 Secret 中的值先做 base64 编码其作用只是简单混淆obfuscate明文并非加密not encrypt。生成 base64 编码值在终端中执行以下命令即可得到用户名与密码的 base64 形式$ echo -n siouser | base64 c2lvdXNlcg $ echo -n scl3I0 | base64 c2NAbDNJMA注意echo必须使用-n参数以避免把换行符一并编码进去否则解码后的凭据会多出换行导致认证失败。请务必为你的实际环境生成凭据并将其写入 Secret 文件例如apiVersion: v1 kind: Secret metadata: name: sio-secret type: kubernetes.io/scaleio data: username: c2lvdXNlcg password: c2NAbDNJMA对应文件见 secret.yaml。这里有两个值得注意的要点metadata.name被命名为sio-secret后续所有 YAML 配置都将通过secretRef/secretRef:name引用它Secret 的type使用了kubernetes.io/scaleio这是面向 ScaleIO 插件的专用类型标识。部署 Secret执行以下命令创建 Secret$ kubectl create -f ./examples/volumes/scaleio/secret.yaml说明原文档中的命令路径为examples/volumes/scaleio/...而当前仓库中该模块已归档至_archived/volumes/scaleio/实际操作时请以kubectl create -f ./_archived/volumes/scaleio/secret.yaml为准。仓库内 secret.yaml 实际存放的是admin用户及其对应密码的 base64 值username: YWRtaW4、password: c0NhbGVpbzEyMw与 README 演示中的示例凭据不同直接使用时请先解码确认。静态卷Pod 直接声明 scaleIO 卷本节演示 ScaleIO 卷插件如何自动完成已有卷的「挂载attach、格式化format、挂载点mount」全过程。Kubernetes 的scaleIO卷规格支持以下属性属性说明gatewayScaleIO API 网关地址必填systemScaleIO 系统名称必填protectionDomainScaleIO 保护域名称必填storagePool卷所在存储池名称必填storageMode存储供给模式ThinProvisioned默认或ThickProvisionedvolumeNameScaleIO 中已存在卷的名称必填secretRef.name引用 Secret 对象的名称必填readOnly卷的访问模式默认falsefsType卷使用的文件系统类型默认ext4预创建卷静态持久卷场景下要求 Pod 要消费的卷已提前在 ScaleIO 中创建好。本演示假设集群中已存在名为vol-0的卷并已正确体现在下方 YAML 的volumeName:字段中。部署 Pod YAML创建声明该卷的 Pod 文件对应仓库中的 pod.yamlapiVersion: v1 kind: Pod metadata: name: pod-0 spec: containers: - image: registry.k8s.io/test-webserver name: pod-0 volumeMounts: - mountPath: /test-pd name: vol-0 volumes: - name: vol-0 scaleIO: gateway: https://localhost:443/api system: scaleio protectionDomain: pd01 storagePool: sp01 volumeName: vol-0 secretRef: name: sio-secret fsType: xfs使用前请把上述 ScaleIO 属性替换为你自己环境的真实取值。部署命令$ kubectl create -f examples/volumes/scaleio/pod.yaml验证挂载结果检查 Pod 运行状态$ kubectl get pod NAME READY STATUS RESTARTS AGE pod-0 1/1 Running 0 33s需要更详细的诊断信息时可以执行kubectl describe pod pod-0还可以在节点上直接看到被挂载/映射的块设备$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT ... scinia 252:0 0 8G 0 disk /var/lib/kubelet/pods/135986c7-dcb7-11e6-9fbf-080027c990a7/volumes/kubernetes.io~scaleio/vol-0从lsblk输出可以印证插件的完整工作链路ScaleIO 块设备scinia8G被映射到节点后由 kubelet 挂载至 Pod 对应的卷目录/var/lib/kubelet/pods/pod-uid/volumes/kubernetes.io~scaleio/vol-0即最终在容器内以/test-pd呈现。仓库佐证与注意事项实际仓库中的 pod.yaml 第 17 行将protectionDomain误拼写为protectionDoamin。YAML 中未知字段会被忽略或在校验阶段被拒绝导致保护域配置不生效直接使用时请务必修正为protectionDomain。此外该文件指定了fsType: xfs而插件默认值为ext4请根据卷实际使用的文件系统选择一致的值。动态供给StorageClass PVCScaleIO 卷插件同样支持向 Kubernetes 集群动态供给存储。动态供给器由 StorageClass 中的provisioner: kubernetes.io/scaleio标识来引用属于 Kubernetes 内置in-tree的 ScaleIO 供给器实现。ScaleIO StorageClass动态供给插件支持的 StorageClass 参数如下参数说明gatewayScaleIO API 网关地址必填systemScaleIO 系统名称必填protectionDomainScaleIO 保护域名称必填storagePool卷所在存储池名称必填storageMode存储供给模式ThinProvisioned默认或ThickProvisionedsecretRef引用已配置 Secret 对象的名称必填readOnly卷的访问模式默认falsefsType卷使用的文件系统类型默认ext4可以看到StorageClass 参数与静态卷规格属性基本一一对应——动态供给本质上就是把「创建卷 挂载卷」两件事中的「创建卷」交给供给器自动完成而挂载侧的参数语义保持一致。示例如下对应仓库中的 sc.yamlkind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: sio-small provisioner: kubernetes.io/scaleio parameters: gateway: https://localhost:443/api system: scaleio protectionDomain: pd01 storagePool: sp01 secretRef: sio-secret fsType: xfs注意metadata.name为sio-small稍后会被 PVC 引用。同样需要把其他参数改为你环境的真实值。部署并查看$ kubectl create -f examples/volumes/scaleio/sc.yaml $ kubectl get sc NAME TYPE sio-small kubernetes.io/scaleio仓库佐证实际仓库中的 sc.yaml 第 10 行将storagePool写成了pd01与protectionDomain取值相同这多半是复制时的笔误——存储池与保护域是两个不同的 ScaleIO 对象请按 README 示例修正为sp01。为 StorageClass 创建 PVC下一步是定义并部署一个使用该 StorageClass 的PersistentVolumeClaim对应仓库中的 sc-pvc.yamlkind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-sio-small spec: storageClassName: sio-small accessModes: - ReadWriteOnce resources: requests: storage: 10Gi其中spec.storageClassName指向之前定义的 StorageClasssio-small。部署该 PVC 文件后Kubernetes ScaleIO 插件会在存储系统中真正创建卷$ kubectl create -f examples/volumes/scaleio/sc-pvc.yaml验证 PVC 状态同时可在 ScaleIO 管理面板中看到新卷被创建$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESSMODES AGE pvc-sio-small Bound k8svol-5fc78518dcae 10Gi RWO 1h从输出可以看到PVC 状态变为Bound动态供给的卷以k8svol-hash形式命名如k8svol-5fc78518dcae容量 10Gi、访问模式RWOReadWriteOnce与请求完全一致。仓库佐证仓库中的 sc-pvc.yaml 出现两处storageClassName: sio-small第 6 行与第 12 行重复声明。YAML 中重复键通常以最后一个为准功能上不会出错但建议删除冗余行保持配置整洁。挂载动态卷的 Pod此时卷已由 PVC 在存储系统中创建完毕。要使用它需要定义一个引用该 PVC 的 Pod对应仓库中的 pod-sc-pvc.yamlkind: Pod apiVersion: v1 metadata: name: pod-sio-small spec: containers: - name: pod-sio-small-container image: registry.k8s.io/test-webserver volumeMounts: - mountPath: /test name: test-data volumes: - name: test-data persistentVolumeClaim: claimName: pvc-sio-small其中claimName:引用的是先前创建并部署的 PVC 名称pvc-sio-small。部署该文件$ kubectl create -f examples/volumes/scaleio/pod-sc-pvc.yaml最终验证新 Pod 正常部署$ kubectl get pod NAME READY STATUS RESTARTS AGE pod-0 1/1 Running 0 23m pod-sio-small 1/1 Running 0 5s两个 Pod 同时处于Running状态说明静态卷pod-0与动态供给卷pod-sio-small两条链路均已打通。配套文件与实战速查本模块的全部资源集中在仓库目录_archived/volumes/scaleio/下可按以下顺序对照阅读文件用途README.md官方示例文档本文的全部配置依据来源secret.yamlScaleIO 凭据 Secretkubernetes.io/scaleio类型pod.yaml静态卷场景Pod 直接声明scaleIO卷sc.yaml动态供给场景kubernetes.io/scaleio供给器的 StorageClasssc-pvc.yaml引用 StorageClass 的 PersistentVolumeClaimpod-sc-pvc.yaml通过 PVC 引用动态卷的 Pod典型部署顺序为secret.yaml→ 静态场景pod.yaml或动态场景sc.yaml→sc-pvc.yaml→pod-sc-pvc.yaml。需要注意的是仓库内部分 YAML 与 README 示例存在细微出入如protectionDomain拼写、storagePool取值、重复的storageClassName字段实战中建议以 README 中的字段语义为准并逐一核对本机环境变量后再应用。总结与适用前提本文完整继承了原文档的实战骨架从前置条件与 SDC/网关环境准备到 Secret 凭据的 base64 编码与部署再到静态卷Pod 直接声明scaleIO卷和动态供给StorageClassPVC Pod两条完整的消费路径并补充了仓库源码文件中与文档不一致的细节帮助读者避免踩坑。适用前提与限制需要再次强调本方案面向 Kubernetes 1.6 与 ScaleIO 2.0 环境且必须保证目标节点已安装 SDC、网关地址对节点可达该示例模块目前在仓库中处于_archived/归档目录其中kubernetes.io/scaleio属于 Kubernetes 内置in-tree供给器在新版 Kubernetes 中相关机制与参数以官方文档为准。赞分享示例工程【免费下载链接】examplesKubernetes application example tutorials项目地址https://gitcode.com/gh_mirrors/examp/examples点击查看免费下载相关推荐Kubernetes 中挂载 Azure 磁盘卷azureDisk 卷类型与 StorageClass 动态供给实战指南Kubernetes 中挂载 Azure 磁盘卷azureDisk 卷类型与 StorageClass 动态供给实战指南 本篇指南以当前仓库 _archive示例工程Rook 文件系统动态供给从 CephFS 手动卷到 PVC/StorageClass 自动化编排Rook 文件系统动态供给从 CephFS 手动卷到 PVC/StorageClass 自动化编排 导读 本文围绕 Rook 仓库中的设计文档 dynamic云原生存储容器编排运维OpenEBS LocalPV-LVM StorageClass 使用指南从 PVC 动态供给 LVM 持久化卷OpenEBS LocalPV LVM StorageClass 使用指南从 PVC 动态供给 LVM 持久化卷 导读 本文聚焦 OpenEBS LocalP云原生CLI上一篇终极指南Source Serif开源字体深度解析与高效应用下一篇UNTRUNC视频修复工具从损坏MP4恢复到高级应用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表