CCE节点kubelet和runtime组件路径与社区原生配置差异说明
为保证节点的系统稳定性,CCE将Kubernetes和容器运行时的相关组件单独存储在数据盘中。其中Kubernetes使用“/mnt/paas/kubernetes”目录,容器运行时使用/“mnt/paas/runtime”目录,并使用软链接的方式与社区默认路径保持一致。
CCE节点kubelet和runtime组件默认路径与社区原生的配置差异
kubelet和runtime组件路径名称 |
Kubernetes原生路径 |
CCE节点上的路径 |
---|---|---|
kubelet的启动参数root-dir |
/var/lib/kubelet |
/mnt/paas/kubernetes/kubelet |
kubelet的路径 |
/var/lib/kubelet |
/mnt/paas/kubernetes/kubelet 同时创建了/var/lib/kubelet -> /mnt/paas/kubernetes/kubelet的软链接 |
容器运行时(docker)的路径 |
/var/lib/docker |
|
容器运行时(containerd)的路径 |
/var/lib/containerd |
|
containerd日志存储的路径 |
/var/log/pods |
/var/lib/containerd/container_logs 同时创建了/var/log/pods -> /var/lib/containerd/container_logs的软链接 |
CCE节点kubelet和runtime默认路径与社区原生的配置差异可能带来以下影响:
- 软链文件在容器挂载场景下,无法访问软链文件指向的真实路径。
例如:将容器通过hostPath的方式将主机的/var/log路径挂载进容器/mnt/log路径,此时在容器内看到/mnt/log/pods是一个异常的软链文件,无法访问/var/log/pods下的真实文件内容。
建议将真实的文件路径挂载进容器内,避免软链导致的文件读取失败。
- kubelet的root-dir启动参数(/mnt/paas/kubernetes/kubelet)与社区路径(/var/lib/kubelet)不一致,使用第三方CSI插件的容器挂载路径为社区路径,会导致文件挂载不生效。
例如,vault开源三方插件在使用secrets-store-csi-driver挂载密钥时,如果插件的root-dir地址与CCE配置路径不一致(插件默认value值与社区地址一致:/var/lib/kubelet)会导致容器内无法获取到vault的密钥。
这是因为CSI插件依赖挂载传播,将卷挂载到对应容器中。kubelet在挂卷的CSI请求中会带有与kubelet启动参数root-dir相关的挂载路径(/mnt/paas/kubernetes/kubelet/pods/{podID}/volume/…)。当CSI容器将卷挂载在kubelet CSI请求的挂载路径上,而此挂载路径与主机路径不相关时,挂载传播将失效。例如,CSI容器将主机的/var/lib/kubelet路径挂载进容器的/var/lib/kubelet路径,因此CSI容器内的/mnt/paas/kubernetes/kubelet/pods/{podID}/volume/…将与主机路径毫不相关。
建议修改CSI插件中的root-dir地址,与CCE当前节点kubelet的root-dir地址保持一致。
CCE节点kubelet和runtime组件默认路径由软链创建方式切换挂载绑定说明
为更好的兼容第三方开源软件,在v1.23.18-r0、v1.25.13-r0、v1.27-10-r0、v1.28.8-r0、v1.29.4-r0及以上集群版本中,支持通过集群或节点池配置将软链方式修改为挂载,且节点池配置优先级高于集群配置。
当前仅提供API方式创建:
- 创建集群API示例如下,其余参数配置说明请参见创建集群。
POST /api/v3/projects/{project_id}/clusters { "kind": "Cluster", "apiVersion": "v3", "metadata": { "name": "xxxxxxxxxx", … }, "spec": { … "configurationsOverride": [ { "name": "node-config", "configurations": [ { "name": "enable-mount-bind", "value": true } ] } ], … } }
- 节点池创建示例如下,其余参数配置说明请参见创建节点池。
{ "kind": "NodePool", "apiVersion": "v3", "metadata": { "name": "xxxxxxxxx", … }, "spec": { … "nodeTemplate": { "configurationsOverride": [{ "name": "node-config", "configurations": [{ "name": "enable-mount-bind", "value": true }] }], … } } }