
目录
Rolling Update 即滚动更新,先更新一部分副本,成功后再继续更新更多副本,最终完成所有的副本更新。前面说到动态伸缩容并不会触发上线,仅当 Deployment Pod 模板(即 .spec.template)发生改变时才会触发上线。且上线实现了滚动特点,其好处就是无需停服的状态下即可完成服务升级,从而保证了业务的连续性。
接下来以更新 Nginx 容器镜像的版本号为例进行演示与验证。
刚刚把副本数从 2 ——> 3,执行 kubectl apply -f nginx.yml 启动服务,可看到并没有触发上线/滚动更新:

接着修改镜像的版本号,从 1.20.0 ——> 1.21.4:

再次启动服务,看看镜像版本是否已更新:

看看 Pod 是否正常运行:

小结:可看到,原来 ReplicaSet nginx-6b6cf7569 的三个 nginx:1.20.0 Pod已经被ReplicaSet nginx-7bfd89cc74的三个nginx:1.21.4 Pod替换了。
再来看看 deployment 的详情,看看具实现过程:

其流程就是:
ReplicaSet nginx-7bfd89cc74 新增一个 Pod,总数为 1;ReplicaSet nginx-6b6cf7569 减少一个 Pod,总数为 2(也就是说至少还有两个 Pod 是正常对外提供服务的);ReplicaSet nginx-7bfd89cc74 新增一个 Pod,总数为 2;ReplicaSet nginx-6b6cf7569 减少一个 Pod,总数为 2(也就是说至少还有一个 Pod 是正常对外提供服务的);ReplicaSet nginx-7bfd89cc74 新增一个 Pod,总数为 3;ReplicaSet nginx-6b6cf7569 减少一个 Pod,总数为 0(此时 ReplicaSet nginx-6b6cf7569 已经没有 Pod 了)。可看到,其更新方式是以滚动的形式实现的,从而保证了业务的连续性。
K8s 在每次 kubectl apply 更新应用时,都会记录当前的配置,比如我原本的 Nginx 镜像为 1.20.0,那这个 1.20.0 及其其他信息都会被记录下来,其目的就是方便我们上线失败后可以回到正常的那个镜像版本。
默认情况下,K8s 只会保留近 10 个的 revision,我们可以在 Deployment 配置文件中使用 revisionHistoryLimit 字段来指定 revision 的保留数量。
kubectl edit deployment nginx

看看可回滚的历史版本:
kubectl rollout history deployment nginx

虽然可看到有 2、3、4 这三个可会退的版本,但是 CHANGE-CAUSE 这个字段均为 <none>,这就不太利于我们进行版本会退,想要显示CHANGE-CAUSE 值,需要在 kubectl apply 时添加 --record 参数。所以这里重新在写两个 Deployment 的 YML 文件再来启动服务。
nginx-a.yml

nginx-b.yml

分别进行 kubectl apply 更新应用:
kubectl apply -f nginx-a.yml --record
kubectl apply -f nginx-b.yml --record

这样就能看到你是指定的哪个 YAML 文件启动的,但是这个 --record 已经被弃用了,除了这种方法之外,我们可以通过指定具体的 revision 编号来查看其详细信息,这样你就可以根据实际情况会退到具体版本,比如我们查看 revision 为 4 的版本信息。
kubectl rollout history deployment nginx --revision=4

版本会退验证:
先看看当前的 Pod 的 image 版本
kubectl get deployment nginx -o wide

比如就回到我们 revision 为 4 的版本
kubectl rollout undo deployment nginx --to-revision=4

会退完成,再次验证当前 image 镜像
kubectl get deployment nginx -o wide

可看到版本会退成功!
以上就是 K8s Pod 版本升级/回滚的详细流程。
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我实际上是在尝试使用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
我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案
我完全不是程序员,正在学习使用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
我们有一个目前在Rails2.3.12版和Ruby1.8.7版上运行的应用程序。我们想将我们的应用程序更新到Rails4.0和Ruby2.1.0。我们有大约200个模型和150个Controller。我想知道升级过程需要多大的努力。您还可以提供升级可以遵循的步骤。我们应该先升级Ruby然后再升级Rails还是相反? 最佳答案 您想要实现的目标将是史诗般的努力。我无法为您提供分步说明,因为不可能在一个答案中涵盖所有情况。我建议不要同时升级Ruby和Rails,而是分步升级。升级本身的复杂性是巨大的,但只要您的应用程序具有合理的测试覆盖
我最近尝试安装rails4.1.0.beta1,但是railss导致以下错误。[RVM]/gems/ruby-2.0.0-p247/gems/activesupport-4.1.0.beta1/lib/active_support/core_ext/module/aliasing.rb:32:in`alias_method':undefinedmethod`graft'forclass`ActiveRecord::Associations::JoinDependency'(NameError)[RVM]/gems/ruby-2.0.0-p247/gems/activesupport-4
我目前有一个运行在4.2.5上的Rails应用程序,我想使用ActionCable而不必将整个应用程序升级到Rails5.0.0.beta3版本并冒破坏所有其他gem的风险。按照我在互联网上看到的指南,我已经尝试过gem'actioncable',github:'rails/actioncable'这不起作用,因为ActionCable存储库已合并到Rails存储库中。我什至试过gem'actioncable',github:'rails/rails'但这似乎不适用于ActionCable合并到Rails时发生的版本重新编号。(唯一低于5.0.0.beta*的版本是0.0.0,这似乎是
我最近正在进行Rails5升级,当我尝试启动Rails控制台时遇到了这个错误:/actionpack-5.0.0/lib/action_controller/test_case.rb:49:ininitialize':wrongnumberofarguments(0for2)(ArgumentError)当前bundleupdaterails已经完成了gem依赖项的解决,足以更新到5.0.0,rspec正在运行(尽管我正在修复很多中断)。我也可以运行railss没有错误。这里是代码中断行:https://github.com/rails/rails/blob/master/action
我目前正在将Railsv2中的应用程序迁移到v3在我的lib/我在子目录中有一些模块,例如,我有lib/search/host_search.rb有一个moduleHostSearchdefdo_search(args)#...endend然后我需要在名为Discovery::HostController的Controller中使用它defsearch_resultsoutput=HostSearch.do_search(:search_string=>@search_string,:page=>params[:page],:user=>@current_user)#...end但是我