使用对象存储BOS
所有文档

          容器引擎 CCE

          使用对象存储BOS

          准备工作

          用户做好以下准备,才能在容器中挂载BOS实例。

          创建Bucket

          1. 创建BOS Bucket,操作步骤请参考创建bucket

          注意: 创建的bos bucket和挂载点须和集群节点在同一vpc/子网内。

          创建容器集群

          1. 创建一个容器集群,操作步骤参考创建集群
          2. 下载命令行客户端kubectl,并连接集群,操作步骤参考[通过kubectl连接Kubernetes集群](CCE/操作指南/集群管理/通过 kubectl 连接集群.md)。

          注意:K8S集群版本>=1.13

          操作指南

          部署存储插件

          • 依次选择:容器引擎 CCE -> Helm 模版 -> 百度云模版 image.png
          • 通过模版名称 cce-csi-bos-plugin 搜索模版 image.png
          • 点击安装并填写相应的参数 image.png

            * 实例名称:插件实例名称,例:bos;
            * 部署集群:选择需要部署 BOS CSI 插件的集群;
            * 命名空间:管理实例的 helm 元数据的命名空间,例:kube-system;
            * kubernetets 版本:填写实际部署集群的版本,目前支持:1.18、1.16、1.13;
            * nodes:如果部署集群的节点的时候,指定了 kubelet 的数据目录,需要填写具体使用的数据目录到该列表,否则保持默认即可;

          静态PV/PVC方式挂载BOS

          1.在集群中创建 AK/SK 的 secret,用以访问BOS存储。

          kubectl create secret generic csi-bos-secret \
            --from-literal=ak=<Your AK> \
            --from-literal=sk=<Your SK>

          关于 AK/SK 的更多信息参考: 如何获取 AK 和 SK

          2.在集群中创建PV和PVC资源

          使用kubectl,执行 kubectl create -f bos-pv.yaml 完成PV的创建

          对应的bos-pv.yaml文件如下所示:

          apiVersion: v1
          kind: PersistentVolume
          metadata:
            name: pv-bos
            namespace: "default"
          spec:
            accessModes:
            - ReadWriteOnce
            - ReadOnlyMany
            capacity:
              storage: 5Gi
            storageClassName: csi-bos
            csi:
              driver: "csi-bosplugin"
              volumeHandle: "v-XXXXXX"
              nodePublishSecretRef:
                name: "csi-bos-secret"
                namespace: "default"
              volumeAttributes:
                options: "-o meta_expires=0"
            persistentVolumeReclaimPolicy: Retain

          注意事项及参数说明:

          • yaml中volumeHandle:对应的是BOS的 bucketName, 支持挂载 BOS bucket子目录 , 如: bucketName/dirName
          • nodePublishSecretRef:填写步骤1中的 secret 名
          • volumeAttributes下的参数为选填参数

            • region:用于跨region支持BOS挂载, 支持参数为:su, bj, whf, gz, hkg, bd(苏州,北京,武汉,广州,香港,保定),同时需要虚机开通eip。region参数默认为机器所在region
            • multipart_size, multipart_threshold, multipart_parallel 为 BOS分片传输相关参数,详情见BOS参数说明
            • option:其他参数,详情见BOS参数说明
          • BOS 支持一写多读,但是只读的pod无法读取到最新写入的数据:对应的 accessMode 只支持 ReadWriteOnce + ReadOnlyMany

          创建PV后,输入kubectl get pv可以看见一个available状态的PV,如下所示:

          $ kubectl get pv
          NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM     STORAGECLASS   REASON    AGE
          bos-pv    5Gi        RWO,ROX        Retain           Available             csi-bos                         3s

          3.建立一个能够与该PV绑定的PVC

          使用kubectl,执行 kubectl create -f bos-pvc.yaml完成PVC的创建

          对应的bos-pvc.yaml文件如下所示:

          apiVersion: v1
          kind: PersistentVolumeClaim
          metadata:
            name: bos-pvc
          spec:
            accessModes:
            - ReadWriteOnce
            - ReadOnlyMany
            resources:
              requests:
                storage: 5Gi
            storageClassName: csi-bos

          注意: yaml中storageClassName字段用于和 PV关联,建议填写,如果集群中使用多类存储系统的 PV

          绑定前,PVC为pending状态

          $ kubectl get pvc
          NAME      STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
          bos-pvc   Pending                                       csi-bos        2s                                                 

          绑定后,PV和PVC状态变为Bound

          $ kubectl get pv
          NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM             STORAGECLASS   REASON    AGE
          bos-pv    5Gi        RWX            Retain           Bound     default/bos-pvc                            36s
          $ kubectl get pvc
          NAME      STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
          bos-pvc   Bound     bos-pv    5Gi        RWO,ROX        csi-bos        1m

          有关PV和PVC的更多设置和字段说明,见k8s官方文档

          4.在Pod内挂载PVC

          在Pod spec内指定相应的PVC名称即可,使用kubectl,执行 kubectl create -f demo-bos-pod.yaml 完成pod的创建

          对应的demo-bos-pod.yaml文件如下所示:

          apiVersion: v1
          kind: Pod
          metadata:
            name: nginx01
            namespace: default
          spec:
            containers:
            - image: nginx
              imagePullPolicy: Always
              name: nginx01
              volumeMounts:
              - mountPath: /var/lib/www/html
                name: bos-pvc
              - mountPath: /var/lib/www/html000
                name: bos-pvc
                readOnly: true
              livenessProbe:
                exec:
                  command:
                  - ls
                  - /var/lib/www/html
            volumes:
            - name: bos-pvc
              persistentVolumeClaim:
                claimName: bos-pvc
                readOnly: false

          Pod创建后,可以读写容器内的//var/lib/www/html路径来访问相应的BOS存储上的内容, 同时该路径支持读写,/var/lib/www/html000支持只读。

          注意:由于CSI bosplugin 依赖 bosfs,在Pod中配置 livenessProbe 可以避免容器无法感知 bosfs 异常重启后的挂载点失效的问题。

          同时,支持在其余机器上挂载只读盘,kubectl create -f demo-bos-pod1.yaml创建一个包含只读 bos bucket的 pod

          apiVersion: v1
          kind: Pod
          metadata:
            name: nginx01-bbaa
          spec:
            containers:
            - image: nginx
              imagePullPolicy: Always
              name: nginx01
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
              volumeMounts:
              - mountPath: /var/lib/www/html000
                name: bos-pvc
                readOnly: true
              livenessProbe:
                exec:
                  command:
                  - ls
                  - /var/lib/www/html
            volumes:
            - name: bos-pvc
              persistentVolumeClaim:
                claimName: bos-pvc
                readOnly: true

          5.释放PV和PVC资源

          完成存储资源的使用后,可以释放PVC和PV资源

          使用以下命令可以释放PVC

          $ kubectl delete -f  bos-pvc.yaml

          释放PVC后,原来与之绑定的PV状态会变为Release,如下所示:

          NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM             STORAGECLASS   REASON    AGE
          bos-pv    5Gi        RWO,ROX        Retain           Released   default/bos-pvc   csi-bos        16m

          输入以下指令释放PV资源

          $ kubectl delete -f  bos-pv.yaml
          上一篇
          使用文件存储CFS
          下一篇
          监控日志