首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubernetes 不停机部署应用

kubernetes 不停机部署应用

作者头像
kubernetes中文社区
发布2019-06-24 15:50:56
9330
发布2019-06-24 15:50:56
举报

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 
(10) 假如程序有bug的话,那么可以执行下面命令进行回退并校验。
$ 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组件。

(7)部署green版本的服务。
$ kubectl create -f web-deploy-green.yaml
(8)从下图可以看到两个版本的共存。

(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
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 kubernetes中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (10) 假如程序有bug的话,那么可以执行下面命令进行回退并校验。
  • (7)部署green版本的服务。
  • (8)从下图可以看到两个版本的共存。
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档