1. 简介
有很多应用是不能中断服务的,这需要我们在部署更新的时候不能够停服,这种方式也叫做zero downtime deployment.
这里主要介绍两种方式:
(1) Rolling updates
(2) Blue-green deployments
2. Rolling updates
(1) 新建文件,名称为web-deploy-rolling-v1.yaml,内容如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: web
spec:
replicas: 5
selector:
matchLabels:
app: pets
service: web
template:
metadata:
labels:
app: pets
service: web
spec:
containers:
- image: fundamentalsofdocker/ch08-web:1.0
name: web
ports:
- containerPort: 3000
protocol: TCP
(2) 创建部署
$ kubectl create -f web-deploy-rolling-v1.yaml
$ kubectl create -f web-service.yaml
(3) 执行下面命令进行测试。
$ PORT=$(kubectl get svc/web -o yaml | grep nodePort | cut -d' ' -f5)
$ IP=$(minikube ip)
$ curl -4 ${IP}:${PORT}/
Pets Demo Application
(4) 部署web的应用2.0,文件内容只是更改了如下图红色圈的那些。
(5) 构建新的镜像文件
$ docker image build -t fundamentalsofdocker/ch13-web:2.0 web
(6) 把构建的镜像上传到Docker Hub上面。
$ docker image push fundamentalsofdocker/ch13-web:2.0
(7) 使用kubectl的set image命令设置镜像。
$ kubectl set image deployment/web \
web=fundamentalsofdocker/ch13-web:2.0
(8) 再次进行测试,看是否更新如预期的那样。
curl -4 ${IP}:${PORT}/
Pets Demo Application v2
(9) 进行校验更新时是否中断服务,和更新时使用的模式。使用rollout status进行校验。
$ kubectl rollout status deploy/web
deployment “web” successfully rolled out
$ kubectl rollout undo deploy/web
deployment “web”
$ curl -4 ${IP}:${PORT}/
Pets Demo Application
3. Blue-green deployment
有时不想新老版本共存的情况下,那么可以采用Blue-green deployment.
(1)Blue-green粗略的部署指导步骤
部署的第一个版本作为blue,所以我们给pods标签定义为blue.
在selector章节中针对标签为blue的pods部署kubernetes服务。
部署web组件的第二个版本,但这次标签为green.
测试green的版本效果是否符合预期。
现在可以把流量慢慢的从blue版本切换到green版本。
(2)针对版本1,blue 定义Deployment对象.
(3)针对web组件定义Service 对象。
(4)然后进行部署
$ kubectl create -f web-deploy-blue.yaml
$ kubectl create -f web-svc-blue-green.yaml
(5)在服务启动和运行后,我们进行测试是否符合预期。
$ PORT=$(kubectl get svc/web -o yaml | grep nodePort | cut -d’ ‘ -f5)
$ IP=$(minikube ip)
$ curl -4 ${IP}:${PORT}/
Pets Demo Application
(6)现在定义green 版 本的web组件。
$ kubectl create -f web-deploy-green.yaml
(9)如预期一样,有两个版本,分别为blue和green同时运行,通过以下方式进行校验。
$ curl -4 ${IP}:${PORT}/
Pets Demo Application
(10)现在针 对web组件编辑存在的服务,让流量从blue到green进行翻滚。
$ kubectl edit svc /web
(11)通过改变color标签的值,从blue到green. 然后存存储并退出编辑器。Kubernetes CLI将会自动的更新服务。
执行以下命令进行再次校验。
$ curl -4 ${IP}:${PORT}/
Pets Demo Application v2
(12)假如我们想要进行回退的话,那么可以再次编辑第(12)步的配置,把green的值改变为blue。
(13)如果green的版本测试一切如预期的话,那么执行下列命令,删除老的版本。
$ kubectl delete deploy/web-blue
本文分享自 kubernetes中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!