subpath子路径使用说明
更新时间:2023-03-28
1. 功能说明
场景1
在 BIE 中创建应用时,可以添加多个容器,一个应用对应边缘侧的一个Pod,1个Pod包含多个容器。这种场景下,会出现以下需求:
- 1个Pod当中的多个容器期望挂载同一个卷,实现卷的共享。
- 将1个卷当中的不同配置映射进不容的容器当中,实现卷的数据隔离。
场景2
希望将配置项当中key对应的value映射到容器内的某一个文件当中,并且不影响该文件同级目录的其他文件。比如希望将一个yaml配置文件覆盖容器内已有的一个配置文件。
解决方案
上述需求可以通过Kubernetes的子路径(subPath)功能支持。子路径(subPath)用于指定所引用卷内的子路径,而不是其根路径。
子路径(subPath)在BIE 2.3.4 版本开始支持
2. 操作指南
2.1 创建节点
在【节点管理】页面创建节点 subpath-node
2.2 创建配置项
在【配置管理】页面点击创建配置项 subpath-conf
,增加三对kv数据:
- key0:000
- key1:111
- key2:222
上述的key0、key1、key2就是卷内子路径索引,通过指定key0、key1、key2将文件内容(value)赋值给映射的文件(非目录)。
2.3 创建应用
- 在【应用管理】页面创建应用
subpath-app
- 创建卷conf,关联前面创建的配置项
subpath-conf
-
添加容器,增加两个标准容器:
-
busybox0
- 镜像地址:busybox:1.33
-
卷配置
- 容器目录:/etc/test/data,此处data是一个文件,而非目录
- subpath:
key0
- 即将key0的value值作为busybox0中
/etc/test/data
的文件内容
-
启动参数:
/bin/sh
-c
cat /etc/test/data;while true; do echo $(date); sleep 1; done
-
busybox1
- 镜像地址:busybox:1.33
-
卷配置
- 容器目录:/etc/test/data,此处data是一个文件,而非目录
- subpath:
key1
- 即将key1的value值作为busybox1中
/etc/test/data
的文件内容
-
启动参数:
/bin/sh
-c
cat /etc/test/data;while true; do echo $(date); sleep 1; done
-
- 在目标节点处选择 单节点匹配 ,选择
subpath-node
2.4 节点安装
- 在 subpath-node 节点详情页获取安装命令
- 在边缘节点进行安装
- 执行以下命令,查看系统应用和用户应用部署情况
kubectl get po -nbaetyl-edge-system
kubectl get po -nbaetyl-edge
2.5 检查验证
- 执行以下命令,查看Pod下两个容器的日志
kubectl logs -nbaetyl-edge subpath-app-xxxxx busybox0
kubectl logs -nbaetyl-edge subpath-app-xxxxx busybox1
- 可以看到配置项的两组kv都是挂载到对应容器的
/etc/test/data
文件。通过不同的subpath映射,/etc/test/data
文件被赋予了不同的值。 - 也可以通过以下命令进入对应容器内查看
/etc/test/data
文件的内容
kubectl exec -it -nbaetyl-edge subpath-app-xxxxx -c busybox0 -- /bin/sh
subpath使用注意事项
- 容器目录出填写的必须是一个文件,不能是一个已存在的目录。
- 如果容器内存在这个文件,会做覆盖这个文件,并且不会影响到这个文件同级目录下的其他文件。
- 如果容器内不存在这个问题,会新建文件,并且不会影响到这个文件同级目录下的其他文件。
- 容器内文件名称在容器目录指定,文件内容为subpath索引key对应的value值。