您可以通过安全沙箱的NAS直挂功能,有效地解决IO性能问题。本文介绍安全沙箱NAS直挂的实现原理,并通过示例说明如何使用安全沙箱的NAS直挂功能。
前提条件
背景信息
virtio-fs是一个共享的文件系统。容器服务Kubernetes版(ACK)安全沙箱使用virtio-fs可以把Volume、Secret、ConfigMap等共享到虚拟机GuestOS内,从而可以用原生的方式通过Volume挂载NAS。但这种方式下,NAS是挂载到主机上的,在容器内要经过virtio-fs读写主机上的NAS,由此会带来一些性能损耗。
安全容器提供了安全沙箱NAS直挂的功能。该功能会先卸载主机上的NAS挂载点,然后在GuestOS内挂载NAS,最后把NAS bind mount到容器内,从而能够在容器内直接读写NAS,达到接近原生的性能。
实现原理
实现安全沙箱的NAS直挂功能的流程说明如下。
步骤序号 | 说明 |
1 | Kubelet请求CSI-Plugin挂载NAS卷。 |
2 | CSI-Plugin在主机挂载NAS。 |
3 | Kubelet请求Kangaroo-Runtime创建容器。 |
4 | Kangaroo-Runtime解析NAS挂载信息并传入GuestOS,同时卸载主机上的NAS。 |
5 | Kangaroo-Runtime请求Agent创建容器。 |
6 | Agent把NAS挂载到GuestOS内。 |
7 | Agent把GuestOS上的NAS bind mount到容器内。 |
示例
以下通过创建NAS实例及使用YAML模板创建资源对象举例说明如何在安全沙箱容器中挂载NAS卷。
创建一个NAS实例。具体操作,请参见通过控制台创建通用型NAS文件系统。
重要NAS实例的VPC需要和集群的VPC一致。
获取到NAS实例挂载点地址,如下图挂载命令中的file-system-id.region.nas.aliyuncs.com即为挂载点地址。
说明file-system-id.region.nas.aliyuncs.com:表示挂载点地址。您可以在NAS控制台中,单击模板文件系统名称,在挂载使用页面获取挂载点地址。
执行以下命令,使用模板创建资源对象。
将模板中的
${nas-server-address}
替换成NAS实例挂载点地址。server: ${nas-server-address}
默认Pod不启用NAS直挂功能,您需要在模板中添加Annotation开启NAS直通功能。
annotations: storage.alibabacloud.com/enable_nas_passthrough: "true"
执行以下命令,进入Pod内验证挂载点类型。
kubectl get pods
kubectl exec -it ${podid} sh
mount | grep /data | grep nfs
如果执行命令后有内容,表明NAS直挂功能成功。