为了提升NAS文件系统的性能,容器服务 Edge 版使用CNFS(Container Network File System)托管NAS文件系统,对文件系统层独立管理。本文介绍ACK Edge集群如何使用CNFS托管NAS文件系统。
前提条件
已创建ACK Edge集群,具体操作,请参见创建ACK Edge集群。
边缘节点的Linux镜像类型为:CentOS镜像、Alinux2镜像、Alinux3镜像。
将csi-plugin部署到边缘节点时,会拉取存储相关的RPM安装包,要求边缘节点带宽要大于50Mbit/s。
步骤一:为ACK Edge集群添加ENS实例
您需要按照如下步骤为目标ACK Edge集群添加ENS实例,文中以北京地域的ACK Edge集群为例:
登录ENS控制台。
在左侧导航栏中,选择 ,然后单击创建实例完成如下边缘实例的创建。
文中创建如下3个ENS实例,运营商采用北京移动和北京联通,便于后续将ENS实例(云端节点)加入到目标ACK Edge集群中。
在目标ACK Edge集群中创建边缘节点池。
登录容器服务管理控制台。
在控制台左侧导航栏,单击集群。
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
在集群管理页左侧导航栏,选择 。
在节点池页面,单击创建边缘节点池,本文以输入节点池名称为edge-svg-nodepool为例,选择云边协同网络为基础型,然后单击提交。
为目标ACK Edge集群添加ENS实例。
在节点池页面,单击刚创建好的目标节点池右侧操作列下的更多,然后单击添加已有节点。
进入添加节点页面,选择自动添加,在已有ENS实例的列表中,选择2中创建好的3个ENS实例,然后单击下一步。
确认实例信息无误后,单击下一步。
在弹出的对话框中,单击确定,进入添加完成页面。
单击去集群列表查看,您可以在集群列表中看到ENS实例已添加到目标ACK Edge集群中。
说明ENS实例成功加入集群需要大概3分钟。
在集群管理页左侧导航栏中,选择ACK Edge集群的边缘节点和云端节点的角色/状态列是否正常。
进入节点管理页面,查看目标
步骤二:配置边缘节点的挂载权限
您需要在csi-plugin中为RAM用户添加对应的AccessKey和AccessSecret,首先创建RAM用户并为其添加访问相关云资源的权限, 然后在目标容器集群中设置AccessKey用来访问云服务,权限配置完成后才能在边缘节点执行挂载操作。 具体配置步骤如下:
创建RAM用户。具体操作,请参见创建RAM用户。
创建访问CSI组件的自定义权限策略,策略内容如下。具体操作,请参见创建自定义权限策略。
{ "Version": "1", "Statement": [ { "Action": [ "nas:DescribeFileSystems", "nas:DescribeMountTargets", "nas:AddTags", "nas:DescribeTags", "nas:RemoveTags", "nas:CreateFileSystem", "nas:DeleteFileSystem", "nas:ModifyFileSystem", "nas:CreateMountTarget", "nas:DeleteMountTarget", "nas:ModifyMountTarget", "nas:TagResources", "nas:SetDirQuota", "nas:EnableRecycleBin", "nas:GetRecycleBinAttribute", "nas:DescribeDirQuotas" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
为RAM用户添加权限。具体操作,请参见为RAM用户授权。
为RAM用户创建AccessKey。具体操作,请参见获取AccessKey。
执行以下命令,创建cnfs-nas组件使用的Secret。
使用AccessKey在目标ACK Edge集群中创建的名为alibaba-addon-secret的Secret资源。
kubectl -n kube-system create secret generic alibaba-addon-secret --from-literal='access-key-id=<your AccessKey ID>' --from-literal='access-key-secret=<your AccessKey Secret>
说明您需要将
<your AccessKey ID>
和<your AccessKey Secret>
替换为您获取的AccessKey信息。执行以下命令,在csi-plugin的Container的
env
中添加引用AccessKey和AccessSecret。kubectl edit ds/csi-plugin -nkube-system
env: - name: KUBE_NODE_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName - name: CSI_ENDPOINT value: unix://var/lib/kubelet/csi-plugins/driverplugin.csi.alibabacloud.com-replace/csi.sock - name: MAX_VOLUMES_PERNODE value: "15" - name: SERVICE_TYPE value: plugin - name: ACCESS_KEY_TYPE valueFrom: secretKeyRef: key: access-key-id name: alibaba-addon-secret optional: true - name: ACCESS_KEY_SECRET valueFrom: secretKeyRef: key: access-key-secret name: alibaba-addon-secret optional: true
步骤三:安装存储相关组件
您需要按照以下步骤为目标ACK Edge集群安装csi-plugin、csi-provisioner和storage-operator组件。
在集群管理页左侧导航栏中,选择 。
在组件管理页面,单击存储页签,分别找到csi-plugin、csi-provisioner和storage-operator,单击右下方的安装。
步骤四:验证使用效果
执行以下内容,创建一个cnfs-nas文件,并使用NAS动态存储卷自动挂载到创建的cnfs-nas文件中,同时将NAS动态存储卷绑定到工作负载StatefulSet中。
cat << EOF | kubectl apply -f - apiVersion: storage.alibabacloud.com/v1beta1 kind: ContainerNetworkFileSystem metadata: name: cnfs-nas spec: description: "filesystem1" type: nas reclaimPolicy: Retain parameters: filesystemType: standard storageType: Capacity protocolType: NFS encryptType: "SSE-KMS" enableTrashCan: "true" --- apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alibabacloud-cnfs-nas mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: subpath containerNetworkFileSystem: "cnfs-nas" archiveOnDelete: "false" path: "/" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Delete allowVolumeExpansion: true --- apiVersion: apps/v1 kind: StatefulSet metadata: name: cnfs-nas-sts labels: app: nginx spec: serviceName: "nginx" replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 volumeMounts: - mountPath: "/data" name: www volumeClaimTemplates: - metadata: name: www spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "alibabacloud-cnfs-nas" resources: requests: storage: 50Gi EOF
查看CNFS托管的NAS在边缘节点是否挂载成功。
执行以下命令,查看Pod的状态。
kubectl get pod -o wide
预期输出:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES cnfs-nas-sts-0 1/1 Running 0 2m40s 10.3.6.131 i-5tctf6oz8ljctgufwwx6k**** <none> <none> cnfs-nas-sts-1 1/1 Running 0 40s 10.3.6.132 i-5tctf6oz8ljctgufwwx6k**** <none> <none>
由输出可见,两个Pod已被调度到边缘节点上,已经是Running状态。
执行以下命令,在Pod中查看NAS的挂载点。
kubectl exec cnfs-nas-sts-0 -- mount | grep nfs
预期输出:
14b924b6f7-tkj18.cn-beijing.nas.aliyuncs.com:/nas-298b9f76-e952-43a5-812a-9d191c92**** on /data type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.255.59,mountvers=3,mountport=2049,mountproto=tcp,local_lock=all,addr=192.168.255.59)
输出显示有挂载点,说明边缘节点使用CNFS托管的NAS在Pod内部挂载成功。
- 本页导读 (1)