tencent cloud

文档反馈

TKE 挂载 CFS-Turbo

最后更新时间:2023-08-03 16:21:58

    操作场景

    为 TKE 集群挂载 CFS Turbo 类型存储,可以通过安装 kubernetes-csi-tencentloud 组件来实现。该组件基于私有协议将腾讯云 CFS Turbo 文件系统挂载到工作负载,目前仅支持静态配置。CFS 存储类型请参考 文件存储类型及性能规格

    前提条件

    已创建 TKE 集群或已在腾讯云自建 Kubernetes 集群,集群版本 >=1.14。

    操作步骤

    创建文件系统

    创建 CFS Turbo 文件系统,具体操作请参见 创建文件系统

    注意:

    文件系统创建后,需将集群网络(vpc-xx)关联到文件系统的 云联网(可在文件系统挂载点信息中查看)。

    部署 RBAC 策略

    如果您需要挂载 CFS Turbo 存储卷,需执行 kubectl apply -f csi-node-rbac.yaml 命令在集群中先部署 RBAC 策略,csi-node-rbac.yaml 代码参考如下:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: cfsturbo-csi-node-sa
      namespace: kube-system
    ---
    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: cfsturbo-csi-node-role
    rules:
      - apiGroups: [""]
        resources: ["persistentvolumes", "endpoints", "configmaps"]
        verbs: ["get", "list", "watch", "create", "delete", "update"]
      - apiGroups: [""]
        resources: ["persistentvolumeclaims", "nodes"]
        verbs: ["get", "list", "watch", "update"]
      - apiGroups: [""]
        resources: ["events"]
        verbs: ["get", "list", "watch", "create", "update", "patch"]
      - apiGroups: [""]
        resources: ["secrets", "namespaces"]
        verbs: ["get", "list"]
      - apiGroups: [""]
        resources: ["nodes", "pods"]
        verbs: ["get", "list", "watch", "update"]
      - apiGroups: ["storage.k8s.io"]
        resources: ["volumeattachments", "volumeattachments"]
        verbs: ["get", "list", "watch", "update", "patch"]
      - apiGroups: ["storage.k8s.io"]
        resources: ["storageclasses"]
        verbs: ["get", "list", "watch"]
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: cfsturbo-csi-node-rolebinding
    subjects:
      - kind: ServiceAccount
        name: cfsturbo-csi-node-sa
        namespace: kube-system
    roleRef:
      kind: ClusterRole
      name: cfsturbo-csi-node-role
      apiGroup: rbac.authorization.k8s.io
    

    部署 Node Plugin

    1. 执行 kubectl apply -f csidriver.yaml 命令,csidriver.yaml 代码参考如下:
      apiVersion: storage.k8s.io/v1beta1
      kind: CSIDriver
      metadata:
      name: com.tencent.cloud.csi.cfsturbo
      spec:
      attachRequired: false
      podInfoOnMount: false
      
    1. 执行 kubectl apply -f csi-node.yaml 命令,csi-node.yaml 代码参考如下:
      # This YAML file contains driver-registrar & csi driver nodeplugin API objects
      # that are necessary to run CSI nodeplugin for cfsturbo
      kind: DaemonSet
      apiVersion: apps/v1
      metadata:
      name: cfsturbo-csi-node
      namespace: kube-system
      spec:
      selector:
       matchLabels:
         app: cfsturbo-csi-node
      template:
       metadata:
         labels:
           app: cfsturbo-csi-node
       spec:
         serviceAccount: cfsturbo-csi-node-sa
         hostNetwork: true
         containers:
           - name: driver-registrar
             image: ccr.ccs.tencentyun.com/tkeimages/csi-node-driver-registrar:v1.2.0
             lifecycle:
               preStop:
                 exec:
                   command: ["/bin/sh", "-c", "rm -rf /registration/com.tencent.cloud.csi.cfsturbo /registration/com.tencent.cloud.csi.cfsturbo-reg.sock"]
             args:
               - "--v=5"
               - "--csi-address=/plugin/csi.sock"
               - "--kubelet-registration-path=/var/lib/kubelet/plugins/com.tencent.cloud.csi.cfsturbo/csi.sock"
             env:
               - name: KUBE_NODE_NAME
                 valueFrom:
                   fieldRef:
                     fieldPath: spec.nodeName
             volumeMounts:
               - name: plugin-dir
                 mountPath: /plugin
               - name: registration-dir
                 mountPath: /registration
           - name: cfsturbo
             securityContext:
               privileged: true
               capabilities:
                 add: ["SYS_ADMIN"]
               allowPrivilegeEscalation: true
             image: ccr.ccs.tencentyun.com/tkeimages/csi-tencentcloud-cfsturbo:v1.2.2
             args :
               - "--nodeID=$(NODE_ID)"
               - "--endpoint=$(CSI_ENDPOINT)"
             env:
               - name: NODE_ID
                 valueFrom:
                   fieldRef:
                     fieldPath: spec.nodeName
               - name: CSI_ENDPOINT
                 value: unix://plugin/csi.sock
             imagePullPolicy: "IfNotPresent"
             volumeMounts:
               - name: plugin-dir
                 mountPath: /plugin
               - name: pods-mount-dir
                 mountPath: /var/lib/kubelet/pods
                 mountPropagation: "Bidirectional"
               - name: global-mount-dir
                 mountPath: /etc/cfsturbo/global
                 mountPropagation: "Bidirectional"
         volumes:
           - name: plugin-dir
             hostPath:
               path: /var/lib/kubelet/plugins/com.tencent.cloud.csi.cfsturbo
               type: DirectoryOrCreate
           - name: pods-mount-dir
             hostPath:
               path: /var/lib/kubelet/pods
               type: Directory
           - name: registration-dir
             hostPath:
               path: /var/lib/kubelet/plugins_registry
               type: Directory
           - name: global-mount-dir
             hostPath:
               path: /etc/cfsturbo/global
               type: DirectoryOrCreate
      

    使用 CFS Turbo 存储卷

    1. 创建 CFS Turbo 文件系统,具体操作请参见 创建文件系统
    2. 使用以下模板创建 CFS Turbo 类型的 PV。
      apiVersion: v1
      kind: PersistentVolume
      metadata:
      name: pv-cfsturbo
      spec:
      accessModes:
      - ReadWriteMany
      capacity:
       storage: 10Gi
      csi:
       driver: com.tencent.cloud.csi.cfsturbo
         # volumeHandle in PV must be unique, use pv name is better
       volumeHandle: pv-cfsturbo
       volumeAttributes: 
         # cfs turbo server ip
         host: 10.0.0.116
         # cfs turbo fsid (not cfs id)
         fsid: xxxxxxxx
         # cfs turbo rootdir
         rootdir: /cfs
         # cfs turbo subPath
         path: /
         proto: lustre
      storageClassName: ""
      

    参数说明:

    • metadata.name: 创建 PV 名称。
    • spec.csi.volumeHandle: 与 PV 名称保持一致。
    • spec.csi.volumeAttributes.host: 文件系统 ip 地址,可在文件系统挂载点信息中查看。
    • spec.csi.volumeAttributes.fsid: 文件系统 fsid(非文件系统 id),可在文件系统挂载点信息中查看(挂载命令中 “tcp0:/” 之后 “/cfs” 之前的那一段字符串,如下图)。
    • spec.csi.volumeAttributes.rootdir: 文件系统根目录,不填写默认为 “/cfs”(挂载到 “/cfs” 目录可相对提高整体挂载性能)。如需指定根目录挂载,须确保该根目录在文件系统中存在。
    • spec.csi.volumeAttributes.path: 文件系统子目录,不填写默认为 “/”。如需指定子目录挂载,须确保该子目录在文件系统 rootdir 中存在。容器最终访问到的是文件系统中 rootdir+path 目录(默认为 “/cfs/” 目录)。
    • spec.csi.volumeAttributes.proto:文件系统默认挂载协议。
      注意:

      使用 lustre 协议挂载 CFS Turbo 卷需预先在集群节点内根据操作系统内核版本安装对应客户端,详情请参考 在 Linux 客户端上使用 CFS Turbo 文件系统

    1. 使用以下模板创建 PVC 绑定 PV。
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
      name: pvc-cfsturbo
      spec:
      storageClassName: ""
      volumeName: pv-cfsturbo
      accessModes:
      - ReadWriteMany
      resources:
       requests:
         storage: 10Gi
      

    参数说明:

    • metadata.name: 创建 PVC 名称。
    • spec.volumeName: 与上一步中创建 PV 名称保持一致。
    1. 使用以下模板创建 Pod 挂载 PVC。
      apiVersion: v1
      kind: Pod
      metadata:
      name: nginx 
      spec:
      containers:
      - image: ccr.ccs.tencentyun.com/qcloud/nginx:1.9
       imagePullPolicy: Always
       name: nginx
       ports:
       - containerPort: 80
         protocol: TCP
       volumeMounts:
         - mountPath: /var/www
           name: data
      volumes:
      - name: data
       persistentVolumeClaim:
         claimName: pvc-cfsturbo
      
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持