5分钟让你理解K8S必备架构概念,以及网络模型(中) (2)

我们可以发现滚动发布的特点,就是老版本和新版本会共存一段时间。所以此种发布方式适用版本兼容的应用。也可以支持滚动回退。我们来看看和蓝绿发布的区别

图片

滚动发布抽象Deployment

之前介绍的ReplicaSet 其实是对Pod的一次包装,Deployment又在基础上面对ReplicaSet的又一次包装。

图片

注意点:ReplicaSet 和 Deployment是一个软件概念,它是没有具体的组件的;是抽象出来的名词,方便大家理解

图片

上图就是描述了deployment滚动发布的架构;Deployment的滚动发布,对用户请求以及Service是透明的,无感知。

Deployment的yaml apiVersion: apps/v1 #指定api版本,此值必须在kubectl apiversion中 kind: Deployment #指定创建资源的角色/类型 metadata: name: mc-user spec: selector: #此deployment选择哪个标签进行滚动的发布 matchLabels: #滚动发布pod的标签,要跟下面template中的labels一致 app: mc-user minReadySeconds: 10 #最小10s等待就绪时间,可以方便看到滚动发布流程 replicas: 3 #副本集数量 template: #pod模板 metadata: #资源的元数据/属性 labels: #标签定义 app: mc-user #标签值 spec: #指定该资源的内容 containers: #容器定义 - name: mc-user #容器的名字 image: rainbow/mc-user:1.0.RELEASE #容器镜像

上面的yaml和ReplicaSet很类似,需要注意的

selector: #此deployment选择哪个标签进行滚动的发布 matchLabels: #滚动发布pod的标签,要跟下面template中的labels一致 app: mc-user

定义deployment管理哪个标签pod

Service的yaml

Service的yaml没有变化,需要定义selector,选择标签就行了

apiVersion: v1 kind: Service metadata: name: mc-user spec: ports: - name: http port: 8080 targetPort: 8080 nodePort: 31000 selector: app: mc-user type: NodePort

我们用kubectl apply -f命令执行 deployment和service

我们再用kubectl get all获取运行情况,我们就可以发现有两个类型

deployment.apps/mc-user 以及 replicaset.apps/mc-user-4345afaa

要升级的时候,只需要更改deployment中的image名称,再执行apply

image: rainbow/mc-user:1.1.RELEASE #容器镜像

我们用kubectl get all查看,就会发现replicaset 有2个;一个是老版本的,一个是新版本的。 老版本的pod数逐渐减少,新版本的pod数量逐渐增加,一直到新版本为3,老版本为0。

回退版本

如果发现版本有问题,我们可以回退版本,可以使用下面命令

kubectl rollout undo deployment/mc-user

这个我们就回退到V1.0的老版本了。

ConfigMap配置

在我们日常业务过程中,需要会配置一些配置参数,如:一次性的静态配置(数据库连接字符串,用户名,密码),以及可以运行过程中的动态配置(如:限购数量)等;那K8S中的Pod如何获得外部的配置信息呢?

图片

上图中,K8S提供了ConfigMap这个功能,提供用户在外部进行配置,然后K8S把ConfigMap以环境变量的方式提供给Pod中的容器或者也可以通过Volume文件持久化的方式提供给Pod容器。

共享配置

因为我们会有很多服务的配置是相同的,那实现微服务之间共享一份配置信息,如下图

图片

一份ConfigMap可以提供给多个服务使用,ConfigMap会把配置信息以env方式存在于每个服务的环境变量中。

ConfigMap的yaml apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: ConfigMap #指定创建资源的角色/类型 metadata: name: mc-user-config data: #定义配置信息 DATASOURCE_URL: jdbc:mysql://mysql/mc-user DATASOURCE_USERNAME: root DATASOURCE_PASSWORD: 123456 修改Deployment配置文件

增加envFrom属性

apiVersion: apps/v1 #指定api版本,此值必须在kubectl apiversion中 kind: Deployment #指定创建资源的角色/类型 metadata: name: mc-user spec: selector: #此deployment选择哪个标签进行滚动的发布 matchLabels: #滚动发布pod的标签,要跟下面template中的labels一致 app: mc-user minReadySeconds: 10 #最小10s等待就绪时间,可以方便看到滚动发布流程 replicas: 3 #副本集数量 template: #pod模板 metadata: #资源的元数据/属性 labels: #标签定义 app: mc-user #标签值 spec: #指定该资源的内容 containers: #容器定义 - name: mc-user #容器的名字 image: rainbow/mc-user:1.0.RELEASE #容器镜像 envFrom: #环境变量来源 - configMapRef: #容器应用的configmap引用 name: mc-user-config #configMap的名称

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygpzj.html