Kubernetes - Update Your App

Performing a Rolling Update

使用kubectl执行滚动式更新

在真实的世界中,user期望他使用到的服务永远不会中断,而开发人员则希望不论何时部署版本都没有问题,而在k8s中是透过滚动式更新(Rolling updates)来达成,滚动式更新允许你的Deployment在更新时透过新增Pods instance,以实现zero dowmtime,而新增出来的Pods则会去寻找可用的Nodes资源

在k8s中的任何更新都是版本化的,可以回复到以前的版本
以下这段真的翻不出来,放上原文

In the previous module we scaled our application to run multiple instances. This is a requirement for performing updates without affecting application availability. By default, the maximum number of Pods that can be unavailable during the update and the maximum number of new Pods that can be created, is one. Both options can be configured to either numbers or percentages (of Pods). In Kubernetes, updates are versioned and any Deployment update can be reverted to a previous (stable) version.

Deployment近似于app scaling,当Deployment是公开的,则Service会在update期间进行负载平衡将流量输送到可用Pods,这代表了在更新期间用户会访问到这些可用的Pods

滚动式更新有以下的特点

Promote an application from one environment to another (via container image updates)Rollback to previous versionsContinuous Integration and Continuous Delivery of applications with zero downtime

Interactive Tutorial - Updating Your App

Step 1: Update the version of the app

取得deployment list kubectl get deployments

列出正在运行的Pods kubectl get pods

将app image版本更新到version 2,使用 set image 将会通知Deployment使用不一样的image给你的app,并开使rolling update kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2,并使用 kubectl get pods 观察滚动式更新的情形

Step 2: Verify an update

使用 describe service 找出运行中的app,以及app的NodePort & IP kubectl describe services/kubernetes-bootcamp

导出为环境变数 export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}') echo NODE_PORT=$NODE_PORT

用curl访问API,每次都会从不同的Pod得到response,并这时的版本是v2 curl $(minikube ip):$NODE_PORT

使用 kubectl rollout status deployments/kubernetes-bootcamp 查看滚动式更新状况

最后查看Pods的image资讯会是v2 kubectl describe pods

Step 3: Rollback an update

使用另一个v10版本更新 kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10

查看deployment的状况 kubectl get deployments

查看Pods的状况 kubectl get pods 此时会发现拉取image失败的讯息『ImagePullBackOff』,并在 Events的部分可以查看到错误讯息

使用 kubectl rollout undo deployments/kubernetes-bootcamp 回复到上一个版本(v2)

查看Pods状况 kubectl get pods 可以看到正常运行

最后查看Pods的详细资讯,会使用v2版本运作中 kubectl describe pods

参考

https://kubernetes.io/docs/tutorials/kubernetes-basics/update/update-intro/

心得

翻译文件去看英文真的是蛮累的,至少花了三倍的时间,因为还要製作文章
然后来回比对去查看不太懂的地方,不过到后来速度有起来,有比较熟练,算是很值得
而且说实在的一开始的教学是k8s的整个基本面,只能硬啃
后面有一些load-balance或是一些部署的东西就是擅长的地方,加上前面的练习就是如鱼得水
所以一天直接产出两篇XD
后续的话会根据k8s实际的需求、应用、管理、优化、实际案例这几个方向去着手进行
把积了两年的东西给学掉有一种如释负重的感觉


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章