在 kubernetes 的世界里,Pod 是运行应用的载体。 Pod 是由多个容器组成、是 kubernetes 的最小调度单元、Pod 共享底层资源、由 kubernetes 来管理生命周期。
一般情况下,我们并不直接创建 Pod,而是通过 Deployment 来创建 Pod,由 Deployment 来负责创建、更新、维护其所管理的所有 Pods。
那Deployment的具体是怎样创建、更新、维护所有的Pod呢?
这里就需要说一下ReplicationSet(RS)和ReplicationController(RC),RS是在RC基础上发展来的,在新版的Kubernetes中,已经将RC替换为RS 了,它们两者没有本质的区别,都是用于Pod副本数量的维护与更新的,使得副本数量始终维持在用户定义范围内,即如果存在容器异常退出,此时会自动创建新的Pod进行替代;而且异常多出来的容器也会自动回收。
不同点在于:RS在RC的基础上支持集合化的selector;
一般情况下RS也是可以单独使用的,但是一般推荐和Deployment一起使用,这样会使得的Deployment提供的一些回滚更新操作同样用于RS上,因为RS不支持回滚更新操作;
所以Deployment一般使用的场景都是和RS一起使用,那它们的具体原理是怎样的呢?
先看一下Deployment、RS、Pod它们三者之间的关系:
RS负责控制副本数量,由Deployment来创建具体的Pod,但是如果遇到版本更新的操作会怎样呢?
如果此时需要版本更新,首先会创建一个新版本的RS,然后通过RS来具体决定对Pod的更新,此时会将RS-v1下的v1版本更新为v2版本并将原有v1版本删除,并且旧版本的RS不会被删除,以用于回滚操作,如下图所示:
这里RS-v1并不会随着Pod的删除而删除,它会保留下来,以便后续如果使用到回滚,直接使用原有v1版本的RS即可。
个人github账号:https://github.com/SpecialAll