云原生系列之:Deployment(六)

susanml 测试交流1 153字数 536阅读1分47秒阅读模式

专题合集

《云原生系列专题分享合集》

目录

  • ReplicaSet
  • Rollout

ReplicaSet

前面讲到,Container 类似进程的概念,而 Pod 类似进程组的概念。文章源自玩技e族-https://www.playezu.com/215260.html

那么 Controller 就是管理 Pod 这样的进程组的存在,Deployment 就是一种常见的 Controller。文章源自玩技e族-https://www.playezu.com/215260.html

现在我们来看一个常见的 Deployment 部署文件。文章源自玩技e族-https://www.playezu.com/215260.html

kind: Deployment
apiVersion: apps/v1
metadata:
name: jmeter
namespace: default
labels:
k8s-app: jmeter
spec:
selector:
matchLabels:
k8s-app: jmeter
replicas: 2
template:
metadata:
labels:
k8s-app: jmeter
name: jmeter
spec:
containers:
- name: jmeter
image: shaonianyr/jmeter:demo
imagePullPolicy: Always
ports:
- name: port
containerPort: 60000
protocol: TCP

我们使用这个 Deployment Controller,使得 Jmeter App 保持在两个 Pod 副本数,开启了 ImagePullPolicy Always 的策略,并暴露了 60000 端口。文章源自玩技e族-https://www.playezu.com/215260.html

Always 会保证,就算 Image 不发生更改,也会强制拉取同步一次最新的镜像,相应的代价就是让容器重启的时间变得更长。文章源自玩技e族-https://www.playezu.com/215260.html

一般看到这个 Deployment 我们脑子里的画面是这样的:文章源自玩技e族-https://www.playezu.com/215260.html

云原生系列之:Deployment(六)插图
文章源自玩技e族-https://www.playezu.com/215260.html

然而 Deployment 操作的对象并不是 Pod,而是 ReplicaSet,所以对应关系其实是这样的。文章源自玩技e族-https://www.playezu.com/215260.html

云原生系列之:Deployment(六)插图1
文章源自玩技e族-https://www.playezu.com/215260.html

Deployment 通过 ReplicaSet 间接去管理每个 Pod 所属的版本,并维护 Pod 的数量。文章源自玩技e族-https://www.playezu.com/215260.html

当 Pod Running 状态的数量与 Replicas 设置不一样时,就会发生对应的水平伸缩。

Rollout

所以,结合上面那张图,我们再来理解 Deployment 的滚动更新就不难了。

云原生系列之:Deployment(六)插图2

Deployment 会新建一个 ReplicaSet 去增加 Pod 的数量,并减少旧 ReplicaSet Pod 的数量。

这个增减的过程会保持总数恒定在 Replicas 的值,也就是我们的滚动更新。

旧的 ReplicaSet 缩减完毕后,并不会删除,方便做回滚。

查看 Deployment 的历史版本:

kubectl rollout history deployment/jmeter

回滚到指定的版本:

kubectl rollout undo deployment/jmeter --to-revision=v1

讲到这里,一个有意思的问题就出现了。

Replicas=1 的 Deployment 跟 1 个 Pod 有什么区别呢?

当 Pod 异常重启的时候,只会在原来被调度的 Node 上重启,哪怕这个 Node 宕机。

而 Deployment 会在 Pod 异常重启的时候,根据策略去选择最优的 Node 节点调度,哪怕 Replicas 只有 1 个。

......

未完待续,有空就开更。软件测试是

 
    • liliya-55
      liliya-55 9

      今天也是认真阅读半懵的一天 ” Deployment 会新建一个 ReplicaSet 去增加 Pod 的数量,并减少旧 ReplicaSet Pod 的数量。

      这个增减的过程会保持总数恒定在 Replicas 的值,也就是我们的滚动更新。

      旧的 ReplicaSet 缩减完毕后,并不会删除,方便做回滚。“

      有以下几个问题没太明白:
      1、图中的虚框想表达什么意思呢,例如:是 POD 节点有问题了,如重启了,实际上可能不存在么
      2、“Deployment 会新建一个 ReplicaSet ” ,Deployment 在什么情况下会新建 ReplicaSet
      3、如果所有的 POD 都失效了,ReplicaSet 会自动检测到,然后值为 0 么

      从上文理解,在 Deployment 与 POD 之间增加 ReplicaSet 就是为了灵活管理 POD,从而使云存储的选择更灵活,对用户来说更可靠,也更快。
      虚框的 Pod 代表已被删除,因为这里 Replicas=2,所以新 ReplicaSet 增一个实框 Pod,旧 ReplicaSet 就会删一个 Pod,使得实框 Pod 的总数恒定为 2。
      Deployment 发生变更,ReplicaSet 是有个唯一 hash 做版本区分的。
      失效多少个 Pod,ReplicaSet 就会自动拉起多少个 Pod。

    匿名

    发表评论

    匿名网友
    确定

    拖动滑块以完成验证