一段时间以来,当人们想到容器时,就会想到Docker和Kubernetes。在构建和运行容器方面,Docker一直是大名鼎鼎,而在管理和编排容器方面,Kubernetes就是事实的上的标准。听说 Kubernetes从1.20版开始将废弃Docker作为容器运行时,这似乎有点令人震惊。
所以,让我们借此机会看看这种变化的真正含义,以及Kubernetes用户需要做些什么。
Kubernetes弃用Docker实际上并不像听起来那么重要,所以让我们来谈谈这里真正发生的事情。
Kubernetes正在取消对Docker作为容器运行时的支持。Kubernetes实际上并不处理在机器上运行容器的过程。相反,它依赖于另一个称为容器运行时的软件。

容器运行时在主机上运行容器,Kubernetes告诉每个主机上的容器运行时要做什么。当涉及到在运行Kubernetes时要用作容器运行时的软件时,您实际上可以从多种选项中进行选择。到目前为止,一个相当流行的选择是使用Docker作为容器运行时。
但是,这将不再是未来的选择。您仍然可以以与Kubernetes相关的其他方式使用Docker,但您将无法使用Docker作为Kubernetes的容器运行时。
到目前为止,Kubernetes已经支持使用Docker作为容器运行时,那么为什么他们选择停止支持它呢?
Kubernetes可与所有实现称为容器运行时接口(CRI)标准的容器运行时一起使用。这本质上是 Kubernetes和容器运行时之间通信的标准方式,任何支持该标准的运行时都可以与Kubernetes配合使用。
在过去,容器运行时没有那么多好的选择,Docker又没有实现容器运行时接口(CRI),所以Kubernetes就实现了Docker shim组件,这是一个额外的层,用作Kubernetes和Docker之间的接口。然而,现在有很多实现CRI接口的运行时可用,Kubernetes保持对Docker的特殊支持就不再有意义。
要真正理解为什么Kubernetes弃用Docker是有意义的,我们需要更深入一点。
我会告诉你一个秘密:Docker实际上并不是一个容器运行时!它实际上是一组工具,位于名为containerd的容器运行时之上。
这是正确的!Docker不直接运行容器。它只是在单独的底层容器运行时之上创建了一个更易于人类访问且功能丰富的界面。当用作Kubernetes的容器运行时,Docker只是Kubernetes和containerd之间的中间人。

然而,Kubernetes可以直接使用containerd作为容器运行时,这意味着不再需要Docker这个中间人角色。即使在Kubernetes生态系统中,Docker仍然可以提供很多东西。它只是不需要专门作为容器运行时。

尽管Docker不需要作为Kubernetes中的容器运行时,但它仍然可以在Kubernetes生态系统和您的工作流程中发挥作用。
Docker作为开发和构建容器镜像以及在本地运行它们的工具仍然很强大。Kubernetes仍然可以运行使用Docker的镜像格式构建的容器,这意味着您仍然可以使用Dockerfiles并使用Docker构建容器镜像。
Kubernetes也将继续能够从Docker仓库(例如Docker Hub)中提取镜像。这意味着Docker在镜像构建后的镜像管理上仍然是一个强有力的竞争者。
总而言之,Docker将继续成为您的开发工作流和持续集成系统中的有用工具,即使Kubernetes不在支持Docker。
如果您当前在Kubernetes环境中使用Docker作为容器运行时,则需要进行一些更改。只需消除Docker作为Kubernetes环境中的中间人,改用另一个容器运行时,例如containerd或CRI-O。
除此之外,没有什么其他的改变。您可以继续使用Docker来构建您的镜像,以及出于开发目的在本地或在您的持续集成系统中运行容器。您还可以继续使用Docker仓库来存储和管理您的镜像。
当然您如果不知道如何更改您的Kubernetes,建议您尝试使用StarOS来构建部署您的应用。这样您就再也不必担心此类问题。
StarOS是一个一站式云原生在线开发平台,底层技术基于Kubernetes。
StarOS通过架构图模型,将微服务的依赖关系固化,完成了对整个应用的封装,从而实现了应用与环境的解耦。无论是应用复制,还是应用迁移,都得心应手。并且基于基础设施下沉的理念,将底层的容器集群资源、运维管理工具,以及中间件、环境配置等全部下沉为平台能力,真正做到了一站式,而且开箱即用。
StarOS还为研发团队提供了多职能、多场景的多人在线协作研发工具,支持研发工作中多种输出物的在线编辑交付,让您在异地协同,远程办公的时候,尽享便利。
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
简而言之错误:NOTE:Gem::SourceIndex#add_specisdeprecated,useSpecification.add_spec.Itwillberemovedonorafter2011-11-01.Gem::SourceIndex#add_speccalledfrom/opt/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:91./opt/local/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails/gem_dependency.rb:275:in`==':und
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Rubysyntaxquestion:Rational(a,b)andRational.new!(a,b)我正在阅读ruby镐书,我对创建有理数的语法感到困惑。Rational(3,4)*Rational(1,2)产生=>3/8为什么Rational不需要new方法(我还注意到例如我可以在没有new方法的情况下创建字符串)?
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我正在研究使用EventMachine支持的twitter-streamrubygem来跟踪和捕获推文。我对整个事件编程有点陌生。我如何判断我在事件循环中所做的任何处理是否导致我落后?有没有简单的检查方法? 最佳答案 您可以通过使用周期性计时器并打印出耗时来确定延迟。如果您使用的是1秒的计时器,您应该已经过了大约1秒,如果它更长,您就知道您正在减慢react器的速度。@last=Time.now.to_fEM.add_periodic_timer(1)doputs"LATENCY:#{Time.now.to_f-@last}"@
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night
修改(澄清问题)我已经花了几天时间试图弄清楚如何从Facebook游戏中抓取特定信息;但是,我遇到了一堵又一堵砖墙。据我所知,主要问题如下。我可以使用Chrome的检查元素工具手动查找我需要的html-它似乎位于iframe中。但是,当我尝试抓取该iframe时,它是空的(属性除外):如果我使用浏览器的“查看页面源代码”工具,这与我看到的输出相同。我不明白为什么我看不到iframe中的数据。答案不是它是由AJAX之后添加的。(我知道这既是因为“查看页面源代码”可以读取Ajax添加的数据,也是因为我有b/c我一直等到我可以看到数据页面之后才抓取它,但它仍然不存在)。发生这种情况是因为