服务部署的时候,有哪几种方式呢?只能是我们前面说的那一种创建-检查通过之后-删除老的服务嘛?下面我们来看看。

部署方式

1、Recreate:创建部署

这种部署方式是删除老的服务之后,再运行新的服务;

2、Rolling update:滚动部署

就是我们之前所用的那种部署方式,先创建新的服务,正常运行之后,再删除老的服务,保证服务的持续运行;

3、蓝绿部署

在保持老服务正常运行的情况下,再部署一套服务,就是说在一定的时间内,会有两套服务在运行,测试通过之后,切换流量到新版本,之后再删除老服务;

4、金丝雀部署

同蓝绿部署很类似,在他的基础上可以访问不同的版本。

下面我们就每种部署方式简单的实验一下吧。

RECREATE

[root@node1 ~]# cd namespace/
[root@node1 namespace]# mkdir deployment
[root@node1 namespace]# cd deployment/
[root@node1 deployment]#
[root@node1 deployment]# vim web-recreate.yaml
# 可以发现文件内容差不多,主要是
# Deployment.spec.strategy.type
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:name: web-recreatenamespace: dev
spec:strategy:type: Recreateselector:matchLabels:app: web-recreatereplicas: 2template:metadata:labels:app: web-recreatespec:containers:- name: web-recreateimage: registry.cn-beijing.aliyuncs.com/yunweijia0909/springboot-web:v1ports:- containerPort: 8080
---
#service
apiVersion: v1
kind: Service
metadata:name: web-recreatenamespace: dev
spec:ports:- port: 80protocol: TCPtargetPort: 8080selector:app: web-recreatetype: ClusterIP---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: web-recreatenamespace: dev
spec:rules:- host: web-recreate.yunweijia.comhttp:paths:- path: /backend:serviceName: web-recreateservicePort: 80[root@node1 deployment]#

那么有疑问了,为什么要有这种方式呢?而且会造成服务中断,这种会在哪种情况下使用呢?我觉得呀,可以在系统资源不足的情况下使用,比如说你这个pod启动了10个,但是你如果使用滚动部署的话,那么相当于短时间内你要启动20个pod,这个时候你的资源不足了,那么我们就可以使用这种方式了,先删除,再创建。

Rolling update

# 这个应该是最熟悉的方式,因为我们之前一直这样操作
# 那么有同学要问了,为什么之前没有配置呢?因为他默认就是rolling update方式
[root@node1 deployment]# vim web-rolling-update.yaml
# 重点也是在Deployment.spec.strategy.type
apiVersion: apps/v1
kind: Deployment
metadata:name: web-rollingupdatenamespace: dev
spec:strategy:rollingUpdate:maxSurge: 25%  # 超出这个服务数的百分比,可以为具体数值,去掉%即可maxUnavailable: 25%  # 最大失败百分比,可以为具体数值,去掉%即可type: RollingUpdateselector:matchLabels:app: web-rollingupdatereplicas: 2template:metadata:labels:app: web-rollingupdatespec:containers:- name: web-rollingupdateimage: registry.cn-beijing.aliyuncs.com/yunweijia0909/springboot-web:v1ports:- containerPort: 8080
---
#service
apiVersion: v1
kind: Service
metadata:name: web-rollingupdatenamespace: dev
spec:ports:- port: 80protocol: TCPtargetPort: 8080selector:app: web-rollingupdatetype: ClusterIP---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: web-rollingupdatenamespace: dev
spec:rules:- host: web-rollingupdate.yunweijia.comhttp:paths:- path: /backend:serviceName: web-rollingupdateservicePort: 80[root@node1 deployment]#

这种方式就是我们经常使用的方式了,先启动新的pod,验证通过之后,再把旧的pod关闭,这样子的话不会有服务中断,体验感较好,适用于大多数情况。

针对这种情况我们可以有以下操作,比如说我们这个pod有两个实例,我们滚动更新的时候,当一个更新完毕了,我们暂停该滚动部署,先使用具体业务来测试下,有没有什么问题,如果没有问题了,我们再继续执行滚动部署。

简单来说就是当滚动部署在执行中的时候我们把它暂停。

[root@node1 deployment]# kubectl apply -f web-rolling-update.yaml
# 当只部署了一个的时候,执行如下命令暂停
[root@node1 deployment]# kubectl rollout pause deploy web-rollingupdate -n dev
deployment.apps/web-rollingupdate paused
[root@node1 deployment]#
# 进行业务测试
# 测试完毕之后让他继续正常部署
[root@node1 deployment]# kubectl rollout resume deploy web-rollingupdate -n dev
deployment.apps/web-rollingupdate resumed
[root@node1 deployment]#

那么是不是又有一个问题了,万一测试过程中我们发现问题了咋办?肿么搞呢?能不能回滚啊~~~当然可以了,当我们发现新部署的pod有问题,执行如下命令即可直接回滚。

[root@node1 deployment]# kubectl rollout undo deploy web-rollingupdate -n dev
deployment.apps/web-rollingupdate rolled back
[root@node1 deployment]#

蓝绿部署

文章最上面我们知道了蓝绿部署是什么东西,那么我们该如何实现呢?我们可以将deployment放置一个文件,service和ingress放置于另一个文件,如下:

[root@node1 deployment]# vim web-blue.yaml
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:name: web-bluenamespace: dev
spec:strategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdateselector:matchLabels:app: web-bluegreenreplicas: 2template:metadata:labels:app: web-bluegreenversion: v1.0spec:containers:- name: web-bluegreenimage: registry.cn-beijing.aliyuncs.com/yunweijia0909/springboot-web:v1ports:- containerPort: 8080
[root@node1 deployment]#
[root@node1 deployment]# cat web-blue-ingress.yaml
---
#service
apiVersion: v1
kind: Service
metadata:name: web-bluegreennamespace: dev
spec:ports:- port: 80protocol: TCPtargetPort: 8080selector:app: web-blueversion: v1.0type: ClusterIP---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: web-bluegreennamespace: dev
spec:rules:- host: web-bluegreen.yunweijia.comhttp:paths:- path: /backend:serviceName: web-bluegreenservicePort: 80
[root@node1 deployment]#

我们创建的时候,分别执行如下命令;

剩余内容请转至VX公众号 “运维家” ,回复 “146” 查看。
------ 以下内容为防伪内容,忽略即可 ------
------ 以下内容为防伪内容,忽略即可 ------
------ 以下内容为防伪内容,忽略即可 ------

智能运维工程师要学多久机房运维工程师的作用软件项目运维工程师运维工程师招聘新加坡谷歌运维工程师工资是多少应届生运维工程师薪水it运维工程师日常运维工程师周末怎么兼职Linux运维工程师述职龙湖系统运维工程师是做什么的矿场运维工程师基本要求华为运维工程师前景如何水电运维工程师工作怎么样运维工程师日常照片运维工程师转行做什么比较好运维工程师优秀员工事迹面试应用运维工程师武汉光伏发电运维工程师深圳科陆运维工程师云计算运维工程师要会写代码不

k8s部署-39-pod有哪几种部署方式呢?能不能回滚版本呢?带你了解。相关推荐

  1. K8S部署分布式文件存储minio两种部署方式

    一. 分布式文件存储系统有很多,比如hadoop的HDFS和FastDFS.今天部署minio文件系统. 二. 分布式文件存储minio GitHub官网和minio官网都有详细的文档 MinIO下载 ...

  2. K8S系列:Deployment更新、锁定、解锁、回滚版本

    目录 暂停deployment更新(锁定,防止别人同时更新) 编辑deployment配置文件 查看Deployment更新历史版本

  3. Kubernetes_部署_k8s的四种部署策略(滚动更新、重新创建、金丝雀部署、蓝绿部署)

    文章目录 一.前言 二.滚动更新 2.1 滚动更新 2.2 实践 2.2.1 新建两个springboot项目,生成两个镜像 2.2.2 kubectl apply启动 2.2.3 将版本修改为v2. ...

  4. 【Kubernetes】Pod学习(十五)Deployment部署的回滚、暂停和恢复

    此文为学习<Kubernetes权威指南>的相关笔记 学习笔记: Deployment具备升级的功能,允许我们在运行过程中升级Deployment到新的运行版本,与之对应的是,在某些情况下 ...

  5. 当SRS遇到K8s:如何实现高可用、回滚与灰度发布?

    Photo by Luis Quintero from Pexels 本文来自流媒体直播集群SRS的官方wiki(https://github.com/ossrs/srs/wiki/v4_CN_K8s ...

  6. tomcat自动化部署(拉取\备份、部署、更新、回滚)

    一.传统部署方式及优缺点 1.传统部署方式 (1)纯手工scp (2)纯手工登录git pull.svn update (3)纯手工xftp往上拉 (4)开发给打一个压缩包,rz上去:解压 2.缺点 ...

  7. 将分布式项目sck-demo部署到本地kubernetes,以及实现版本升级和回滚

    本篇将一步步介绍如何将sck-demo整个项目部署到本地kubernetes,包括镜像升级.让服务可通过浏览器访问.回滚版本,以及调整minikube虚拟机的内存大小. 项目地址: https://g ...

  8. 回滚机制有多少种?它们的实现原理是什么?这些你确定都知道?

    回滚是指当程序或数据出错时,将程序或数据恢复到最近的一个正确版本的行为.最常见的如事务回滚.代码库回滚.部署版本回滚.数据版本回滚.静态资源版本回滚等.通过回滚机制可保证系统在某些场景下的高可用. 7 ...

  9. git 代码回滚 reset revert 详解 IDEA操作 4种reset区别

    问题描述: 我们用 git 在单人或者多人开发的时候,有时候出现的 错误的提交 ,我们此时 撤销 之前的操作,回退.回滚 到之前的版本,这里总结了 2种方法:reset(删除错误提交) 和 rever ...

最新文章

  1. php简单算法之冒泡排序
  2. 卧槽!看不懂这些动图,你不配做个程序员
  3. 背包模型dp1:01背包,完全背包,多重背包的两大优化的详解
  4. Uber无人车收购MightyAI:掘金尚未暴富,卖水先获财务自由
  5. 利用单调栈判断二叉搜索树的后序遍历序列
  6. android 常驻进程
  7. 跨交换机间单臂路由的实现方法
  8. Springboot中使用websocket发送信息给指定用户和群发
  9. 新入职我们应该注意些什么?
  10. 计算机及网络维护工程师专业问题
  11. 一个不错微服务架构图
  12. 鸿蒙哦叟,苕木匠时评:说鸿蒙“
  13. Debian和Ubuntu版本比较
  14. 结构力学支座位移与温度荷载、力法与矩阵位移法、图乘法核心思想
  15. 去掉win7快捷方式箭头及修复锁定到任务栏失效
  16. petalinux 前端包管理器(dnf)
  17. winedit 永久试用的办法
  18. 杂记【1】win10 密钥模式SSH登录CentOS7
  19. Typescript - 安装与配置
  20. Git在同一台电脑上连接多个仓库

热门文章

  1. PostgreSQL | PG库优缺点
  2. python django怎么读_django的英文读法是什么
  3. A. Boredom(线性dp基础题)
  4. UE5 官方案例Lyra 全特性详解 9.蓝图消息系统
  5. SQL的INSERT INTO的几种写法
  6. 安装卡巴斯基个人网络版KIS 7.0之后的蓝屏解决方案
  7. ffmpeg使用bsf后码流从avcc格式变成annex-b造成硬解异常
  8. 网上看到得,留下记号
  9. iClient for OpenLayers之快速获取UGCV5,MVT出图参数
  10. 笔记本一打开计算机就卡,电脑卡顿不流畅怎么办?电脑加速来帮你