全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

使用KS3对象存储

最近更新时间:2024-12-09 19:56:59

您可以在金山云容器服务Kubernetes集群中使用金山云对象存储卷(KS3)。

前提

  • csi-driver组件版本需升级至2.1.0及以上。

  • 挂载对象存储卷(KS3)的前提是您有创建好的存储空间(Bucket)。如果没有,您需要先创建存储空间

使用限制

  • 使用KS3仅支持静态存储卷,不支持动态存储卷。

  • 在并发写的场景中,KS3无法保证写入数据的一致性,推荐用于并发读的场景,配置PVC和PV的访问模式为ReadOnlyMany。 如果您有写入数据的需求,建议使用相关工具写入以实现数据的读写分离。相关工具的使用详见KS3工具概览

  • 如果集群kubelet发生了重启,KS3驱动也会随之一起重启,将导致KS3目录不可用。此时使用KS3的Pod需要重建,可在Pod YAML文件中增加健康检查的配置,在容器内KS3目录不可用时自动重启Pod,重新挂载KS3。

  • 通过KS3驱动进行ls等操作时,将发起HTTP请求到KS3获取文件的meta信息,如果ls的目标目录下文件较多,KS3驱动将消耗大量系统内存,可能导致Pod发生OOM(Out Of Memory)事件。您可以尝试通过挂载KS3 Bucket的子目录,或对文件较多的目录进行目录分级解决此问题。

  • 如果您想卸载csi-driver组件,请确保集群内已没有使用KS3存储的Pod,如有会导致I/O通信失败,可能会导致此类Pod无法正常运行。

操作说明

采用静态存储卷形式,通过kubectl命令方式使用。

获取AccessKey秘钥

获取AccessKey ID和AccessKey Secret,用于KS3的授权访问,具体操作参考获取AK/SK。

创建Secret凭证

在集群中创建Secret凭证。需将AccessKey ID和AccessKey Secret转换为base64编码。可使用命令 echo -n "***" |ase64帮助转换。

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  # Replaced by your secret name.
  name: "****"
  # Replaced by your secret namespace.
  namespace: "*****"
data:
  # Replaced by your temporary secret file content. You can generate a temporary secret key with these docs:
  # Note: The value must be encoded by base64.
  akId: **************
  akSecret: **************

创建PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: "pv-ks3"
spec:
  accessModes:
    - ReadWriteMany
  capacity:
    storage: 1Gi
  csi:
    driver: com.ksc.csi.ks3plugin
    volumeHandle: pv-ks3
    volumeAttributes:
      # Replaced by the url of your region.
      url: "http://ks3-cn-beijing.ksyuncs.com"
      # Replaced by the bucket name you want to use.
      bucket: "****"
      # Replaced by the subPath in bucket you want to use.
      path: /test
      # You can specify any other options used by the s3fs command in here.
      additional_args: "-oensure_diskfree=2048 -osigv2"
    nodePublishSecretRef:
      # Replaced by the name and namespace of your secret.
      name: *****
      namespace: *****

其中spec.csi.volumeAttributes.url字段可从KS3控制台存储空间->目标存储空间详情页中的访问域名处获取。

创建PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: csi-ks3-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  # You can specify the pv name manually or just let kubernetes to bind the pv and pvc.
  volumeName: pv-ks3
  # Currently ks3 only supports static provisioning, the StorageClass name should be empty.
  storageClassName: ""

创建应用并挂载PVC

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-ks3
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: ks3-test
        image: nginx
        command:
        - "/bin/bash"
        - "-c"
        - set -euo pipefail; while true; do echo $(hostname) $(date) >> /data/$(hostname); sleep 1; done
        volumeMounts:
          - mountPath:  "/data"
            name: pvc-ks3
      volumes:
        - name: pvc-ks3
          persistentVolumeClaim:
            claimName: pvc-ks3

验证

  1. 查看Pod信息。

    kubectl get pod | grep test-ks3
  2. 选择其中一个Pod,创建文件。以test-ks3-69c67b88d8-9zq87为例。

    kubectl exec test-ks3-69c67b88d8-9zq87 -- touch /data/test-ks3.txt

    可在控制台对应目录下看到test-ks3文件已创建成功。

验证共享存储:

  1. 在另一个Pod test-ks3-69c67b88d8-vs695中查看文件。

    kubectl exec test-ks3-69c67b88d8-vs695 -- ls /data
  2. 从返回的结果可看到已共享了先前创建的文件。

纯净模式常规模式

纯净模式

点击可全屏预览文档内容