文档首页/ 云容器引擎 CCE/ 用户指南/ 节点/ 节点运维/ CCE节点kubelet和runtime组件路径与社区原生配置差异说明
更新时间:2024-09-29 GMT+08:00

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

  • 数据盘空间分配设置为“共享磁盘空间”

    /mnt/paas/runtime

    同时创建了/var/lib/docker -> /mnt/paas/runtime的软链接

  • 数据盘空间分配设置为“指定磁盘空间”:与Kubernetes原始路径保持一致,即/var/lib/docker

容器运行时(containerd)的路径

/var/lib/containerd

  • 数据盘空间分配设置为“共享磁盘空间”

    /mnt/paas/runtime

    同时创建了/var/lib/containerd -> /mnt/paas/runtime的软链接

  • 数据盘空间分配设置为“指定磁盘空间”:与Kubernetes原始路径保持一致,即/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
                                }]
                         }],
                         …
                  }
           }
    }

CCE节点kubelet和runtime组件默认路径由软链创建方式切换挂载绑定的影响如下:

  • 软链改挂载绑定后,源目录保持不变,目标软链文件将被替换为目录挂载。能够保证软链路径挂载的容器在改为挂载绑定后,也能够正常访问,无需额外适配。
  • 链改挂载绑定后,在到源目录和目标目录会存在两个相同的路径结构。并且在公共父目录下查找文件时,会在不同路径下查询到同一个文件。

    例如:/var/lib/kubelet 和 /mnt/paas/kubernetes/kubelet

  • 对应挂载绑定的源目的路径上,将会有两条相同的挂载信息。如业务代码中依赖挂载信息判断,请评估对您的影响。

    例如: