天天看点

【k8s学习系列】第2篇,规模和更新部署k8s学习系列前言规模和更新部署总结

k8s学习系列

第零篇 k8s环境搭建

第壹篇 部署第一个应用程序

第贰篇 规模和更新部署

文章目录

  • k8s学习系列
  • 前言
  • 规模和更新部署
    • 1. 使用副本缩放应用程序
    • 2. 更新和回滚应用程序
    • 3. 删除应用程序
  • 总结

前言

本人目前换工作即将从事云原生相关的工作,把k8s技能再重新拾起来。整个系列文章基于IBM Kubernetes 101 content

提示:此系列文章所用操作系统及版本号:

  • 操作系统:mac OS Catalina(10.15.4)
  • 【k8s学习系列】第2篇,规模和更新部署k8s学习系列前言规模和更新部署总结

规模和更新部署

在这个实验室中,您将学习如何更新部署中的应用数量,以及如何在 Kubernetes 上安全地推出应用程序的更新。

对于这个,您需要从前一个实验室运行 guestbook 应用程序的部署。如果你需要创建它,运行:

kubectl create deployment guestbook --image=ibmcom/guestbook:v1
           

1. 使用副本缩放应用程序

副本(replica)是包含正在运行的服务的 pod 的副本。通过拥有一个 pod 的多个副本,您可以确保部署(deployment)具有可用资源来处理应用程序上不断增加的负载。

1.1 Kubectl 提供了一个 scale 子命令来更改现有部署的大小。

让我们将容量从一个单独运行的 guestbook 实例增加到10个实例:

kubectl scale --replicas=10 deployment guestbook
           

Kubernetes现在将试图启动9个新的和第一个相同配置的pods,以达到期望的10个副本。

1.2 要查看您的更改是否已经扩展,您可以运行:

kubectl rollout status deployment guestbook
           

扩展可能发生得太快,以至于以下消息可能无法显示:

$ kubectl rollout status deployment guestbook
Waiting for rollout to finish: 1 of 10 updated replicas are available...
Waiting for rollout to finish: 2 of 10 updated replicas are available...
Waiting for rollout to finish: 3 of 10 updated replicas are available...
Waiting for rollout to finish: 4 of 10 updated replicas are available...
Waiting for rollout to finish: 5 of 10 updated replicas are available...
Waiting for rollout to finish: 6 of 10 updated replicas are available...
Waiting for rollout to finish: 7 of 10 updated replicas are available...
Waiting for rollout to finish: 8 of 10 updated replicas are available...
Waiting for rollout to finish: 9 of 10 updated replicas are available...
deployment "guestbook" successfully rolled out
           

1.3 一旦扩展完成,使用以下方法确保你的pods正常运行,你应该看到10个部署副本的输出清单:

$ kubectl get pods
NAME                        READY     STATUS    RESTARTS   AGE
guestbook-562211614-1tqm7   1/1       Running   0          1d
guestbook-562211614-1zqn4   1/1       Running   0          2m
guestbook-562211614-5htdz   1/1       Running   0          2m
guestbook-562211614-6h04h   1/1       Running   0          2m
guestbook-562211614-ds9hb   1/1       Running   0          2m
guestbook-562211614-nb5qp   1/1       Running   0          2m
guestbook-562211614-vtfp2   1/1       Running   0          2m
guestbook-562211614-vz5qw   1/1       Running   0          2m
guestbook-562211614-zksw3   1/1       Running   0          2m
guestbook-562211614-zsp0j   1/1       Running   0          2m
           
提示: 提高可用性的另一种方法是在部署中添加集群和区域,如下图所示:
【k8s学习系列】第2篇,规模和更新部署k8s学习系列前言规模和更新部署总结

2. 更新和回滚应用程序

Kubernetes 允许您将应用程序滚动升级到新的容器映像。这使您可以轻松地更新正在运行的映像,而且如果在部署期间或之后发现了问题,还可以轻松地撤消扩展。

在之前的实验中,我们使用了一个带有 v1标签的图像。对于我们的升级,我们将使用带有 v2标记的图像。

更新和回滚:

2.1 使用 kubectl,您现在可以更新您的部署以使用 v2映像。Kubectl 允许您使用 set 子命令更改现有资源的详细信息。我们可以使用它来改变正在使用的图像。

kubectl set image deployment/guestbook guestbook=ibmcom/guestbook:v2
           
请注意,一个 pod 可以有多个容器,每个容器都有自己的名称。每个镜像可以单独或一次改变参考的名称。对于我们的 guestbook Deployment,容器名称也是 guestbook。可以同时更新多个容器。

2.2 若要检查滚动的状态,请运行:

kubectl rollout status deployment/guestbook
           

进展可能发生得太快,以至于以下消息可能无法显示:

$ kubectl rollout status deployment/guestbook
Waiting for rollout to finish: 2 out of 10 new replicas have been updated...
Waiting for rollout to finish: 3 out of 10 new replicas have been updated...
Waiting for rollout to finish: 3 out of 10 new replicas have been updated...
Waiting for rollout to finish: 3 out of 10 new replicas have been updated...
Waiting for rollout to finish: 4 out of 10 new replicas have been updated...
Waiting for rollout to finish: 4 out of 10 new replicas have been updated...
Waiting for rollout to finish: 4 out of 10 new replicas have been updated...
Waiting for rollout to finish: 4 out of 10 new replicas have been updated...
Waiting for rollout to finish: 4 out of 10 new replicas have been updated...
Waiting for rollout to finish: 5 out of 10 new replicas have been updated...
Waiting for rollout to finish: 5 out of 10 new replicas have been updated...
Waiting for rollout to finish: 5 out of 10 new replicas have been updated...
Waiting for rollout to finish: 6 out of 10 new replicas have been updated...
Waiting for rollout to finish: 6 out of 10 new replicas have been updated...
Waiting for rollout to finish: 6 out of 10 new replicas have been updated...
Waiting for rollout to finish: 7 out of 10 new replicas have been updated...
Waiting for rollout to finish: 7 out of 10 new replicas have been updated...
Waiting for rollout to finish: 7 out of 10 new replicas have been updated...
Waiting for rollout to finish: 7 out of 10 new replicas have been updated...
Waiting for rollout to finish: 8 out of 10 new replicas have been updated...
Waiting for rollout to finish: 8 out of 10 new replicas have been updated...
Waiting for rollout to finish: 8 out of 10 new replicas have been updated...
Waiting for rollout to finish: 8 out of 10 new replicas have been updated...
Waiting for rollout to finish: 9 out of 10 new replicas have been updated...
Waiting for rollout to finish: 9 out of 10 new replicas have been updated...
Waiting for rollout to finish: 9 out of 10 new replicas have been updated...
Waiting for rollout to finish: 1 old replicas are pending termination...
Waiting for rollout to finish: 1 old replicas are pending termination...
Waiting for rollout to finish: 1 old replicas are pending termination...
Waiting for rollout to finish: 9 of 10 updated replicas are available...
Waiting for rollout to finish: 9 of 10 updated replicas are available...
Waiting for rollout to finish: 9 of 10 updated replicas are available...
deployment "guestbook" successfully rolled out
           

2.3 像以前一样测试应用程序,通过在浏览器中访问 < public-ip > : < nodeport > 来确认您的新代码处于活动状态。

记住,要获得“ nodeport”和“ public-ip” ,请使用以下命令。如果没有设置集群环境变量,则用集群名称替换 $CLUSTER _ name:

kubectl describe service guestbook
           

kubectl get nodes -o wide
           

要验证您正在运行 Guestbook 的“ v2” ,请查看页面的标题,现在应该是 Guestbook-v2。如果您使用的是浏览器,请确保您强制刷新(使缓存失效)。

【k8s学习系列】第2篇,规模和更新部署k8s学习系列前言规模和更新部署总结

打开Kubernetes Dashboard查看:

【k8s学习系列】第2篇,规模和更新部署k8s学习系列前言规模和更新部署总结
【k8s学习系列】第2篇,规模和更新部署k8s学习系列前言规模和更新部署总结

可以发现pods都成功更新到镜像为v2。

2.4 如果要撤消最新的首次部署,请使用以下命令:

kubectl rollout undo deployment guestbook
           

然后你可以使用这个命令查看状态:

kubectl rollout status deployment/guestbook
           

打开Kubernetes Dashboard查看发现,Replica Sets 已经成功回滚:

【k8s学习系列】第2篇,规模和更新部署k8s学习系列前言规模和更新部署总结
【k8s学习系列】第2篇,规模和更新部署k8s学习系列前言规模和更新部署总结

2.5 在执行 rollout 时,您会看到对旧副本和新副本的引用(old replicas and new replicas)。旧的副本是我们扩展应用程序时最初部署的10个pods。新的副本来自新创建的带有不同镜像的pods。所有这些pods都属于 Deployment。部署使用一个名为 ReplicaSet 的资源管理这两组pods。我们可以通过以下方式查看留言簿副本(ReplicaSets):

$ kubectl get replicasets -l app=guestbook
NAME                   DESIRED   CURRENT   READY     AGE
guestbook-5f5548d4f    10        10        10        21m
guestbook-768cc55c78   0         0         0         3h
           

3. 删除应用程序

在我们继续之前,让我们先删除这个应用程序,这样我们就可以学习一种不同的方法来获得相同的结果:

若要删除部署(deployment),请使用

kubectl delete deployment guestbook
           

要删除该服务,请使用:

kubectl delete service guestbook
           

祝贺你!您部署了应用程序的第二个版本。2号实验室已经完成。继续到本课程的下一个实验室。

总结

通过本文,我们学习了

  1. 扩展一个部署
  2. 滚动升级服务
  3. 已经部署成功的应用,如何撤销回滚
  4. 删除应用程序