![kubelet 通过在“k8s.io”containerd 命名空间中运行容器来违反 CRI 标准?](https://linux22.com/image/791686/kubelet%20%E9%80%9A%E8%BF%87%E5%9C%A8%E2%80%9Ck8s.io%E2%80%9Dcontainerd%20%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4%E4%B8%AD%E8%BF%90%E8%A1%8C%E5%AE%B9%E5%99%A8%E6%9D%A5%E8%BF%9D%E5%8F%8D%20CRI%20%E6%A0%87%E5%87%86%EF%BC%9F.png)
Kubernetes pod 在 containerd 的“k8s.io”命名空间中运行。此“运行时命名空间”概念是 containerd 特有的,不是 CRI 的一部分。
如果 kubelet 确实遵循 CRI 标准,那么它一定无法在这样的 containerd 命名空间中运行容器。
crictl 不支持这个“运行时命名空间”,因此只能与默认命名空间中的 containerd 通信。
这符合错误报告的资格吗?
答案1
Kubernetes 容器运行时接口(CRI)定义了节点组件 kubelet 与容器运行时之间通信的主要 gRPC 协议。您的容器运行时必须至少支持容器运行时接口的 v1alpha2。
批判性思维为兼容 CRI 的容器运行时提供 CLI。这允许 CRI 运行时开发人员调试其运行时,而无需设置 Kubernetes 组件。这是 kubernetes v1.29 中的预期行为,kubelet 倾向于使用 CRI v1。如果容器运行时不支持 CRI 的 v1,则 kubelet 会尝试协商任何较旧的受支持版本。如果 kubelet 无法协商受支持的 CRI 版本,则 kubelet 会放弃并且不会注册为节点。
crictl 目前处于 Beta 阶段,仍在快速迭代中。它托管在 cri-tools 存储库中。Github 社区鼓励 CRI 开发人员报告错误或通过添加更多功能来帮助扩大覆盖范围。