在过去的几年里,Kubernetes在生产中得到了大量的应用。它的声明式API为协调容器提供了多种选择。Kubernetes最显著的特点之一是它的弹性,包括进行滚动和回滚部署的能力。当涉及到将应用程序投入运行时,有各种选择。滚动更新是更新Kubernetes中应用程序运行版本的默认方法。
滚动更新会定期删除旧的Pod,用新的Pod替换它们。你可以使用滚动更新改变集群中工作负载的图像、设置、标签、注释和资源限制。滚动更新开始用新的东西替换你的资源的Pod,然后在需要资源的时候在节点上计划。滚动更新是为了保持你的工作负载的更新而建立的,不会造成任何中断。
Kubernetes和kubectl提供了一个直接的机制来回滚资源的修改。当一个部署不安全时,比如它循环崩溃时,你也可能想回滚部署。默认情况下,系统会保存部署的所有滚动历史,这样你就可以在任何时候回滚。在本指南中,我们将讨论回滚kubectl的方法。
回滚Kubectl的方法
我们将在Ubuntu 20.04 Linux系统上实施本教程。让我们在Ubuntu 20.04 Linux系统中通过执行下面的命令来启动minikube集群。
$ minikube start
为了有效实施本教程,我们还安装了kubectl。
创建部署
部署是一个Kubernetes实体,用于使用ReplicaSets声明性地管理Pod。它具有更新、控制和回滚的功能。这意味着你可以在不引起用户停电的情况下升级或降级程序,也可以在当前版本不可靠或充满问题时回滚到之前的版本。部署也可以使用声明式的管理方式,以获得YAML文件中所述的应用程序的最佳状态,并使之活起来。我们将设计一个部署,它将创建一个ReplicaSet,建立3个Nginx Pod实例。你将需要一个Kubernetes集群,以及kubectl命令行工具的设置和链接。使用命令提示符,通过使用 "touch "命令创建一个YAML清单文件,标题为 "deployment1.yaml"。
该文件将在主目录下生成。现在,我们必须在创建的文件中添加一些有关部署的信息。
metadata.name "属性表示建立了一个名为Nginx-deployment的部署。".spec.replicas "属性表明,该部署产生三个复制的Pod。字段".spec.selector "指定了部署如何决定维护哪些Pod。在这种情况下,你将从Pod模板中选择一个标签(应用:Nginx)。更复杂的选择规则是可行的,只要Pod模板直接符合标准。在Ubuntu终端运行随后的命令来生成部署。
$ kubectl apply –f deployment1.yaml
在上面的截图中,输出显示部署已经有效生成。验证部署的状态,看看它是否已经形成。在控制台中执行下面列出的命令。
$ kubectl get deployments
命名空间中的部署的名称被列在 "NAME "类别中。用户可访问的应用程序的副本数量显示在 "READY "类别中。它保持了就绪/期望模式。为达到目标状态而被修改的副本数量显示在 "UP-TO-DATE "类别中。"AVAILABLE "类别显示你的用户可以访问多少个应用程序的副本。AGE "类别字段显示应用程序已经运行了多长时间。执行附件中的命令来查看部署展开的状态。
$ kubectl rollout status deployment/Nginx-deployment
如果你得到这样的输出,说明部署仍在生成过程中。等待几秒钟,再重新运行kubectl get命令。这就是结束后的最终结果的样子。
$ kubectl get deployments
执行kubectl get rs来查看部署所建立的复制集(rs)。随后显示的图像是输出的一个样本。
$ kubectl get rs
ReplicaSets的身份被列在 "NAME "类别中。在 "DESIRED "类别中显示了你在构建部署时提供的所需的应用程序副本数量。"CURRENT "类别显示当前活动的复制的数量。你的用户访问的应用程序的副本数量显示在 "READY "类别中。AGE "字段显示应用程序已经运行了多长时间。
总结
这篇文章提供了关于kubectl回滚的重要性的深入知识。我们给出了一个部署回滚的例子,以澄清我们的读者阅读回滚的过程。