Kubernetes弃用Docker运行时,小甜甜变牛夫人影响了谁?

Kubernetes宣布弃用Docker运行时,转向containerd和CRI-O。这一变动对开发者和企业的影响主要体现在容器平台提供商需要进行适配工作,但对于大部分应用开发者而言,影响较小。Docker作为容器技术的先驱,其API与CRI不兼容,移除dockershim有助于Kubernetes的解耦和演进。尽管如此,Docker作为开发者的常用工具,其使用习惯和技术惯性将使其继续保持生命力。对于云原生技术而言,这是一个技术演进的小插曲。
由于Kubernetes已成为当前云原生基础设施的事实标准,Kubernetes在1.20版本后弃用Docker作为容器运行时引发了开发人员的关注。针对此事,网易数帆资深架构师、网易轻舟容器编排技术负责人王新勇给出了自己的见解。他认为,Kubernetes移除dockershim的代码确实有其合理之处,同时此事对绝大多数开发者没有多大的影响。
  • 从Kubernetes运行时提供统一的接口抽象这个角度来说,移除dockershim的代码确实有其合理之处,毕竟之前dockershim是由于历史原因,属于特例的。
  • Kubernetes编排是事实标准,容器的镜像格式遵守OCI,所有之前的交付的构件,无论容器运行时怎样变化,都不会有影响。
  • 容器平台提供商需要做一些适配、整合、测试等,需要提供kubernetes支持的容器运行时。也可以通过额外维护和引入一个新的不属于kubernetes项目的“dockershim”中间层来继续支持docker作为运行时。不过无论怎么做,绝大部分开发人员都是感知不到的。

插播:12月16-17日,2020 Cloud Native Day,网易PingCAP阿里VMware大咖云集,详见文末,欢迎报名

Kubernetes和Docker的关系

  • Docker最初只是一个容器引擎,应该是很多人进入容器领域时最早接触的东西,Docker为普及Linux的容器技术做出了很大的贡献(虽然Linux容器上,LXC更早,而且早期版本的Docker就是基于LXC实现的,但是Docker的最大创新就是提出了镜像的概念)。

  • 在2015年,我们探索容器技术做蜂巢产品的时候,那时候很多人的理解里面,容器基本就是Docker,Docker就是容器。直到现在应该好多开发者还是这个认知。

<think>好的,我现在需要帮助用户解决在KubernetesDocker后如何继续运行Docker镜像的问题。首先,我得回顾一下用户提到的参考资料,看看里面有没有相关的信息。 根据引用[2],当使用containerd替换Docker后,不能再用docker命令管理容器,而是用kubectl。这说明Kubernetes虽然不再依赖Docker,但容器运行换成了containerd,而containerd本身可以支持Docker镜像,因为Docker镜像本来就是符合OCI标准的。所以用户可能担心的是镜像兼容性和操作方式的化。 接下来,我需要确认Kubernetes移除Docker后的替代方案。用户的问题核心是如何继续使用现有的Docker镜像,而Kubernetes现在支持的容器运行如containerd和CRI-O都支持OCI镜像,Docker镜像也符合这个标准,所以理论上镜像可以直接使用,不需要修改。但用户可能需要知道具体的操作步骤,比如如何配置节点使用containerd,或者是否需要转换镜像格式。 引用[1]提到了设置docker源和安装kubeadm的步骤,这可能涉及到节点环境的配置。当切换到containerd,可能需要安装containerd并配置kubelet使用它作为运行。此外,用户可能需要了解如何从Docker镜像仓库拉取镜像,因为containerd可以使用ctr命令,但通常推荐使用crictl工具,或者继续使用docker build构建镜像,然后导入到containerd中。 另外,引用[3]和[4]讨论了Docker Swarm和Kubernetes的对比,但用户的问题是关于Kubernetes本身,所以可能需要忽略这部分,专注于运行替换后的镜像使用。 总结解决方案的步骤可能包括:1. 确认集群使用containerd或CRI-O作为容器运行;2. 构建或拉取Docker镜像;3. 使用镜像拉取策略,确保镜像在节点上可用;4. 使用工具如nerdctl或crictl管理镜像;5. 调整CI/CD流程,可能需要保存镜像为tar文件再导入。 同,用户可能关心是否需要修改现有的Dockerfile或镜像,是否需要调整Kubernetes的配置,比如Pod的runtimeClass,或者如何处理之前依赖Docker命令的运维操作。根据引用[2],这些操作现在需要通过kubectl或crictl来完成。 最后,用户可能需要验证镜像是否正常运行,所以提供一些检查命令,比如使用kubectl describe pod查看事件,或者使用crictl检查容器状态。 需要确保回答结构清晰,分步骤说明解决方案,并解答可能的疑问,比如镜像兼容性、工具链化等。同,根据用户提供的引用,适当引用相关部分来支持回答,例如说明containerd与Docker的兼容性,或者使用kubectl替代docker命令的情况。</think>在KubernetesDocker作为容器运行后,您仍可无缝运行Docker镜像。以下是具体解决方案和操作流程: --- ### 一、技术原理 Docker镜像基于**OCI标准**(Open Container Initiative)构建,而Kubernetes支持的容器运行(如containerd、CRI-O)均兼容该标准。因此,所有Docker镜像无需修改即可直接使用[^5]。 --- ### 二、具体实现步骤 #### 1. 配置容器运行 在所有节点上安装并配置**containerd**(推荐)或**CRI-O**: ```bash # 安装containerd sudo apt-get install containerd sudo systemctl enable containerd # 配置kubelet使用containerd cat <<EOF | sudo tee /etc/default/kubelet KUBELET_EXTRA_ARGS=--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock EOF ``` #### 2. 镜像管理 | 原Docker操作 | containerd替代方案 | |-----------------------|--------------------------------------| | `docker build` | 仍可用Docker构建镜像后导出 | | `docker push/pull` | 直接使用镜像仓库(无需改推送/拉取逻辑)| | `docker images` | `sudo crictl images` 或 `nerdctl images` | #### 3. 镜像格式转换(特殊场景) 当需要直接操作containerd,可通过以下命令导入/导出镜像: ```bash # 导出Docker镜像 docker save my-image:tag > my-image.tar # 导入containerd sudo ctr -n=k8s.io images import my-image.tar ``` --- ### 三、关键注意事项 1. **运维命令更** 容器调试需改用`kubectl`或`crictl`: ```bash # 查看容器日志 kubectl logs <pod-name> # 进入容器 kubectl exec -it <pod-name> -- sh # 查看容器列表 sudo crictl ps -a ``` 2. **CI/CD流水线调整** 保留Docker作为构建工具,在部署阶段将镜像推送到仓库后,Kubernetes会自动通过containerd拉取镜像[^2]。 3. **运行配置验证** 检查节点运行状态: ```bash kubectl get nodes -o wide kubectl describe node <node-name> | grep Container\ Runtime ``` --- ### 四、架构对比 ```mermaid graph LR A[Docker架构] -->|依赖| B(Docker Daemon) C[containerd架构] -->|直接集成| D(Kubelet) E[Kubernetes集群] -->|CRI接口| C ``` ---
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网易杭研

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值