当前位置: 首页 > news >正文

华为云上的K8S怎么使用对象存储配置pod文件持久化。

1.通过kubectl命令行使用已有对象存储
使用kubectl连接集群。
1.1创建PV。
创建pv-obs.yaml文件。

apiVersion: v1
kind: PersistentVolume
metadata:annotations:pv.kubernetes.io/provisioned-by: everest-csi-provisionereverest.io/reclaim-policy: retain-volume-only      # 可选字段,删除PV,保留底层存储卷name: pv-obs       # PV的名称
spec:accessModes:- ReadWriteMany    # 访问模式,对象存储必须为ReadWriteManycapacity:storage: 1Gi     # 存储容量大小,此处仅为校验需要(不能为空和0),设置的大小不起作用csi:driver: obs.csi.everest.io        # 挂载依赖的存储驱动fsType: obsfs                     # 实例类型volumeHandle: <your_volume_id>    # 对象存储的名称volumeAttributes:storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisionereverest.io/obs-volume-type: STANDARDeverest.io/region: <your_region>                        # 对象存储的区域everest.io/enterprise-project-id: <your_project_id>     # 可选字段,企业项目ID,如果指定企业项目,则创建PVC时也需要指定相同的企业项目,否则PVC无法绑定PV。nodePublishSecretRef:            # 设置对象存储的自定义密钥name: <your_secret_name>       # 自定义密钥的名称namespace: <your_namespace>    # 自定义密钥的命名空间persistentVolumeReclaimPolicy: Retain    # 回收策略storageClassName: csi-obs               # 存储类名称mountOptions: []                         # 挂载参数

1.2关键参数说明

参数

是否必填

描述

everest.io/reclaim-policy: retain-volume-only

可选字段

目前仅支持配置“retain-volume-only”

everest插件版本需 >= 1.2.9且回收策略为Delete时生效。如果回收策略是Delete且当前值设置为“retain-volume-only”删除PVC回收逻辑为:删除PV,保留底层存储卷。

fsType

实例类型,支持“obsfs”与“s3fs”。

  • obsfs:并行文件系统。
  • s3fs:对象桶。

volumeHandle

对象存储的名称。

everest.io/obs-volume-type

对象存储类型。

  • fsType设置为s3fs时,支持STANDARD(标准桶)、WARM(低频访问桶)。
  • fsType设置为obsfs时,该字段不起作用。

everest.io/region

OBS存储区域。

Region对应的值请参见地区和终端节点。

everest.io/enterprise-project-id

表示对象存储的企业项目ID,仅限于已开通企业项目的企业客户账号使用。了解更多企业项目相关信息,请查看企业管理。

如果指定企业项目,则创建PVC时也需要指定相同的企业项目,否则PVC无法绑定PV。

获取方法:在对象存储服务控制台,单击左侧栏目树中的“桶列表”或“并行文件系统”,单击要对接的对象存储名称进入详情页,在“概览 > 基本信息”页签下找到企业项目,单击并进入对应的企业项目控制台,复制对应的ID值即可获取对象存储所属的企业项目的ID。

nodePublishSecretRef

对象存储卷挂载支持设置自定义访问密钥(AK/SK),您可以使用AK/SK创建一个Secret,然后挂载到PV。详细说明请参见对象存储卷挂载设置自定义访问密钥(AK/SK)。

示例如下:
nodePublishSecretRef:name: secret-demonamespace: default

mountOptions

挂载参数,具体请参见设置对象存储挂载参数。

persistentVolumeReclaimPolicy

集群版本号>=1.19.10且everest插件版本>=1.2.9时正式开放回收策略支持。

支持Delete、Retain回收策略,详情请参见PV回收策略。多个PV使用同一个对象存储时建议使用Retain,避免级联删除底层卷。

Delete:

  • Delete且不设置everest.io/reclaim-policy:删除PVC,PV资源与存储均被删除。
  • Delete且设置everest.io/reclaim-policy=retain-volume-only:删除PVC,PV资源被删除,存储资源会保留。

Retain:删除PVC,PV资源与底层存储资源均不会被删除,需要手动删除回收。PVC删除后PV资源状态为“已释放(Released)”,不能直接再次被PVC绑定使用。

storage

存储容量,单位为Gi。

对于对象存储来说,此处仅为校验需要(不能为空和0),设置的大小不起作用,此处设定为固定值1Gi。

storageClassName

对象存储对应的存储类名称为csi-obs。

执行以下命令,创建PV。

kubectl apply -f pv-obs.yaml

2.创建PVC。

2.1创建pvc-obs.yaml文件。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-obsnamespace: defaultannotations:volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisionereverest.io/obs-volume-type: STANDARDcsi.storage.k8s.io/fstype: obsfscsi.storage.k8s.io/node-publish-secret-name: <your_secret_name>  # 自定义密钥的名称csi.storage.k8s.io/node-publish-secret-namespace: <your_namespace>        # 自定义密钥的命名空间everest.io/enterprise-project-id: <your_project_id>     # 可选字段,企业项目ID,如果创建PV时已指定企业项目,则创建PVC时也需要指定相同的企业项目,否则PVC无法绑定PV。
spec:accessModes:- ReadWriteMany                  # 对象存储必须为ReadWriteManyresources:requests:storage: 1GistorageClassName: csi-obs       # 存储类名称,必须与PV的存储类一致。volumeName: pv-obs    # PV的名称

2.2关键参数说明

参数

是否必填

描述

csi.storage.k8s.io/node-publish-secret-name

PV中指定的自定义密钥的名称。

csi.storage.k8s.io/node-publish-secret-namespace

PV中指定的自定义密钥的命名空间。

everest.io/enterprise-project-id

表示对象存储的企业项目ID,仅限于已开通企业项目的企业客户账号使用。了解更多企业项目相关信息,请查看企业管理。

获取方法:在对象存储服务控制台,单击左侧栏目树中的“桶列表”或“并行文件系统”,单击要对接的对象存储名称进入详情页,在“概览 > 基本信息”页签下找到企业项目,单击并进入对应的企业项目控制台,复制对应的ID值即可获取对象存储所属的企业项目的ID。

storage

PVC申请容量,单位为Gi。

对于对象存储来说,此处仅为校验需要(不能为空和0),设置的大小不起作用,此处设定为固定值1Gi。

storageClassName

存储类名称,必须与1中PV的存储类一致。

对象存储对应的存储类名称为csi-obs。

volumeName

PV的名称,必须与1中PV名称

2.3执行以下命令,创建PVC。

kubectl apply -f pvc-obs.yaml

 3.创建应用。

3.1创建web-demo.yaml文件,本示例中将对象存储挂载至/data路径。

apiVersion: apps/v1
kind: Deployment
metadata:name: web-demonamespace: default
spec:replicas: 2selector:matchLabels:app: web-demotemplate:metadata:labels:app: web-demospec:containers:- name: container-1image: nginx:latestvolumeMounts:- name: pvc-obs-volume    #卷名称,需与volumes字段中的卷名称对应mountPath: /data  #存储卷挂载的位置imagePullSecrets:- name: default-secretvolumes:- name: pvc-obs-volume    #卷名称,可自定义persistentVolumeClaim:claimName: pvc-obs    #已创建的PVC名称

 3.2执行以下命令,创建一个挂载对象存储的应用。

kubectl apply -f web-demo.yaml

 工作负载创建成功后,您可以尝试验证数据持久化及共享性。

验证数据持久化及共享性
  1. 查看部署的应用及文件。

    1. 执行以下命令,查看已创建的Pod。
      kubectl get pod | grep web-demo
      预期输出如下:
      web-demo-846b489584-mjhm9   1/1     Running   0             46s
      web-demo-846b489584-wvv5s   1/1     Running   0             46s

    2. 依次执行以下命令,查看Pod的/data路径下的文件。
      kubectl exec web-demo-846b489584-mjhm9 -- ls /data
      kubectl exec web-demo-846b489584-wvv5s -- ls /data

      两个Pod均无返回结果,说明/data路径下无文件。

  2. 执行以下命令,在/data路径下创建static文件。

    kubectl exec web-demo-846b489584-mjhm9 --  touch /data/static

  3. 执行以下命令,查看/data路径下的文件。

    kubectl exec web-demo-846b489584-mjhm9 -- ls /data

    预期输出如下:

    static

  4. 验证数据持久化

    1. 执行以下命令,删除名称为web-demo-846b489584-mjhm9的Pod。
      kubectl delete pod web-demo-846b489584-mjhm9

      预期输出如下:

      pod "web-demo-846b489584-mjhm9" deleted

      删除后,Deployment控制器会自动重新创建一个副本。

    2. 执行以下命令,查看已创建的Pod。
      kubectl get pod | grep web-demo
      预期输出如下,web-demo-846b489584-d4d4j为新建的Pod:
      web-demo-846b489584-d4d4j   1/1     Running   0             110s
      web-demo-846b489584-wvv5s    1/1     Running   0             7m50s

    3. 执行以下命令,验证新建的Pod中/data路径下的文件是否更改。
      kubectl exec web-demo-846b489584-d4d4j -- ls /data

      预期输出如下:

      static

      static文件仍然存在,则说明数据可持久化保存。

  5. 验证数据共享性

    1. 执行以下命令,查看已创建的Pod。
      kubectl get pod | grep web-demo
      预期输出如下:
      web-demo-846b489584-d4d4j   1/1     Running   0             7m
      web-demo-846b489584-wvv5s   1/1     Running   0             13m

    2. 执行以下命令,在任意一个Pod的/data路径下创建share文件。本例中选择名为web-demo-846b489584-d4d4j的Pod。
      kubectl exec web-demo-846b489584-d4d4j --  touch /data/share
      并查看该Pod中/data路径下的文件。
      kubectl exec web-demo-846b489584-d4d4j -- ls /data

      预期输出如下:

      share
      static

    3. 由于写入share文件的操作未在名为web-demo-846b489584-wvv5s的Pod中执行,在该Pod中查看/data路径下是否存在文件以验证数据共享性。
      kubectl exec web-demo-846b489584-wvv5s -- ls /data

      预期输出如下:

      share
      static

      如果在任意一个Pod中的/data路径下创建文件,其他Pod下的/data路径下均存在此文件,则说明两个Pod共享一个存储卷。

    相关文章:

  1. claude3.7高阶玩法,生成系统架构图,国内直接使用
  2. centos 7 部署awstats 网站访问检测
  3. AWS中国云的定时任务(AWS EventBridge+AWS Lambda)
  4. HBase学习:通俗易懂的实例解析
  5. AWS EKS 集群日志上报观测云实践
  6. HTML(一)
  7. 如何控制electron的应用在指定的分屏上打开[特殊字符]
  8. MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
  9. HTML 标签
  10. [docker]镜像操作:关于docker pull、save、load一些疑惑解答
  11. istio流量管理问题
  12. day49python打卡
  13. YoloV8改进策略:Block改进|FCM,特征互补映射模块|AAAI 2025|即插即用
  14. PHP使用经纬度获取两个位置的距离以及范围查询
  15. 高斯列主元消去法——python实现
  16. 九、MySQL执行原理
  17. vue3 daterange正则踩坑
  18. 大疆上云API demo前端代码理解
  19. 词法分析器
  20. 13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析
  21. 做外贸的网站平台有哪些/企业推广网
  22. 滨州北京网站建设/长沙官网优化公司
  23. 网站建设需要什么手续/友情链接导航
  24. 日本 女做受网站/今日百度小说排行榜风云榜
  25. 拓者设计吧电脑版/seo网页优化平台
  26. 类似酷家乐做庭院的网站/什么公司适合做seo优化