在Oracle Cloud Infrastructure (OCI)中,Oracle Kubernetes Engine (OKE)作为容器托管服务,为用户提供了高度灵活和可扩展的 Kubernetes 环境。本文将主要介绍如何通过 OKE 实现与 OCI 文件系统服务(File System)的集成,涉及 Persistent Volume Claims (PVC) 的配置和管理。通过这种集成,用户可以在 Kubernetes 中轻松地使用 OCI 文件系统,实现更便捷的存储解决方案。
1 流程与架构
1.1 调用文件系统存储流与基础架构图:
- 定义和创建新的 StorageClass,provisioner 为 fss.csi.oraclecloud.com;
- 为 StorageClass 指定基础参数,包括核心参数 MountTargets,availabilityDomain等参数;
- 创建 PVC 时引用新创建的 StorageClass 会自动创建新的文件系统;
1.2 MountTargets 与 FileSystems
Mount Targets:
与NFS系统服务相似,每一个 Mount Targets 都具有一个私有IP地址,用户可以通过 Mount Target 使用 NFS 协议将其连接到文件系统。
FileSystems:
定义: 文件系统是用户用于存储和检索文件的逻辑存储空间。是容器挂载时使用的目录。
注意:集群运行在Kubernetes1.22或更高版本时,可以在由CSI卷插件动态创建配置PVC。
2 配置Policy安全策略
2.1 当文件存储与OKE数据节点处于同一子网(Policy)
ALLOW any-user to manage file-family in compartment <compartment-name> where request.principal.type = 'cluster'
ALLOW any-user to use virtual-network-family in compartment <compartment-name> where request.principal.type = 'cluster'
2.2 当文件存储与OKE数据节点处于不同的子网(Policy)
ALLOW any-user to manage file-family in TENANCY where request.principal.type = 'cluster'
ALLOW any-user to use virtual-network-family in TENANCY where request.principal.type = 'cluster'
3 创建存储类型
3.1 主要参数说明:
name: <storage-class-name> # 必填,定义您的存储类型名称
availabilityDomain: <ad-name> # 必填,定义您创建的文件系统所在可用区
mountTargetOcid: <mt-ocid> | mountTargetSubnetOcid: <mt-subnet-ocid> # 必填, 二选一参数,mountTargetOcid:指定已创建的文件系统挂载目标OCID | 或者通过mountTargetSubnetOcid参数指定要创建的文件系统所在子网的OCID
compartmentOcid: <compartment-ocid> # 选填,指定文件系统所在区间,不填写的话会默认与OKE集群相同区间。
kmsKeyOcid: <key-ocid> # 选填,指定文件系统的加密密钥,如果不指定的话则使用Oracle提供的加密密钥进行静态加密
exportPath: <path> # 选填,为文件系统挂载目标源端的路径,文件系统路径# 注意:如果填写则所有的pvc将使用同一个exportPath
exportOptions: [{<options-in-json-format>}] # 选填参数,NFS挂载参数
encryptInTransit: "true"|"false" # 选填,指定是否加密传输数据
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: <storage-class-name> # 必填,定义您的存储类型名称
provisioner: fss.csi.oraclecloud.com
parameters:
availabilityDomain: <ad-name> # 必填,定义您创建的文件系统所在可用区
mountTargetOcid: <mt-ocid> | mountTargetSubnetOcid: <mt-subnet-ocid> # 必填, 二选一参数,mountTargetOcid:指定已创建的文件系统挂载目标OCID | 或者通过mountTargetSubnetOcid参数指定要创建的文件系统所在子网的OCID
compartmentOcid: <compartment-ocid> # 选填,指定文件系统所在区间,不填写的话会默认与OKE集群相同区间。
kmsKeyOcid: <key-ocid> # 选填,指定文件系统的加密密钥,如果不指定的话则使用Oracle提供的加密密钥进行静态加密
exportPath: <path> # 选填,为文件系统挂载目标源端的路径,文件系统路径
exportOptions: [{<options-in-json-format>}] # 选填参数,NFS挂载参数
encryptInTransit: "true"|"false" # 选填,指定是否加密传输数据
3.2 基础示例
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: fss-sc
provisioner: fss.csi.oraclecloud.com
parameters:
availabilityDomain: AP-TOKYO-1-AD-1
mountTargetOcid: ocid1.mounttarget.oc1.ap_tokyo_1.aaaaaa4np2t3oo24nzzhillqojxwiotboawxi33lpfxs2mjnmfsc2mia
compartmentOcid: ocid1.compartment.oc1..aaaaaaaaqpxlw7g5ecxofifi7ubyqtcwldi5op5y7aqmc7tgjn566xuagqaq
#exportPath: /filesystem
4 创建PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ngx-pvc
spec:
accessModes:
- ReadWriteMany # 读写权限在这里其实并不生效
storageClassName: "fss-sc" # 指定storageClass名称
resources:
requests:
storage: 50Gi
5 创建应用并挂载PVC
apiVersion: v1
kind: Pod
metadata:
name: fss-centos-1
spec:
containers:
- name: centos-1
image: centos
ports:
- name: http
containerPort: 80
volumeMounts:
- name: persistent-storage
mountPath: /usr/share/nginx/html
command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600']
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: ngx-pvc
6 参考资料
OKE PVC集成 OCI 文件系统服务(File System)
export介绍:
🚀 炸鸡物料库 🚀
🔍 内容定位: IT技术领域,云计算、云原生、DevOps 和 AI 等相关的技术资讯、实践和经验分享。面向开发、系统和云计算,提供实用的技术内容。
🎯 目标受众: 面向开发者、系统管理员和云计算从业者,提供实用的技术内容。
🗓️ 更新频率:每周更新,每次分享都为您带来有价值的技术内容。
🤝 互动与反馈: 鼓励读者留言、评论,有问题随时提问,我们将积极互动并提供帮助。
💌 订阅方式: 扫描二维码或搜索“炸鸡物料库”关注,不错过每一篇精彩内容。
🌐 合作与分享: 如果您有技术分享或合作计划,欢迎联系我们,共同成长!