Replication Controller 和 ReplicaSet
背景
前面都只是使用了
Pod
的一些基本使用方法,都是直接来操作Pod
,在生产中有一些业务场景并不适合直接操作Pod
, 比如某次运营活动非常成功,网站访问量突然暴增
,运行当前 Pod 的节点发生故障了, Pod 不能正常提供服务了
。这些不能靠我们人工的去解决这些问题,我们希望Pod
不够自动帮我门增加一个,Pod
挂了自动帮我们在合适的节点上重新启动一个Pod
, kubernetes 其实为我们提供了这样的资源对象
Replication Controller
: 用来部署,升级Pod
Replica Set
: 下一下的Replication Controller
Deployment
: 可以更加方便的管理Pod
和Replica Set
Replication Controller (Rc)
Replication Controller
简称RC
,RC
是Kubernetes
系统中的核心概念之一,RC
可以保证在任意时间运行Pod
的副本数量, 能够保证Pod
总是可用的, 如果实际Pod
数量比指定的多那就结束掉多余的,如果实际数量比指定的少就启动一些Pod
, 当Pod
失败,被删除,或者挂掉后,RC
都会去自动创建新的Pod
来保证副本数量,所以即使只有一个 Pod, 也应该用RC
来管理我们的 Pod
Rc 示例
1 |
|
kind
:ReplicationContainer
spec.replicas
: 指定Pod
副本数量, 默认为 1spec.selector
:RC
通过该属性来筛选要控制的Pod
spec.template
: 就是我们之前Pod
定义的模块,不需要apiVersion
和kind
spec.template.metadata.labels
: 注意这里的Pod
和labels
要和spec.selector
相同, 这样RC
就可以控制当前这个Pod
YAML
文件 定义了一个RC
资源对象,它的名字叫rc-demo
, 保证一直会有3个Pod
运行,Pod
的镜像就是nginx
镜像
创建 Pod
1 | kubectl create -f rc-demo.yaml |
查看服务 RC
1 | kubectl get rc |
查看具体信息
1 | kubectl describe rc rc-demo |
修改副本数
修改副本数量,直接修改 YAML
中的 spec.replicas
属性, 然后使用下面的方式生效
1 | kubectl apply -f rc-demo.yaml |
或者
1 | kubectl edit rc rc-demo |
滚动更新
可以用 RC
来进行滚动升级,比如修改镜像地址
1 | kubectl rolling-update rc-demo --image=nginx:1.7.9 |
如果我们
Pod
中有多个容器的话,就需要通过修改YAML
配置文件来进行修改了
1 | kubectl rolling-update rc-demo -f rc-demo.yaml |
Replication Set (RS)
Replication Set
简称RS
官方现在已经推荐使用RS
和Deployment
来代替RC
,RC
和RS
的功能基本一致, 区别在于RC
只支持基于等式的selector
(env=dev 或 enviroment != qa), 但RS
还支持基于集合selector
(version in (v1.0, v2.0))
在实际开发中,我们很少去使用
RS
资源对象,它主要被Deployment
资源对象使用,一般情况下,推荐使用Deployment
而不是直接使用Replication Set
RC/RS特性和作用
- 我们可以通过定义一个
RC
实现Pod
的创建和副本数量的控制 RC
中包含一个完整的Pod
定义模块(不包含apiVersion
, 和kind
)RC
是通过label selector
机制来实现对Pod
副本的控制- 通过改变
RC
里面的Pod
副本数量,可以实现Pod
的扩缩容功能 - 通过改变
RC
里面的Pod
模版中镜像版本,可以实现 Pod 的滚动升级功能(但是不支持一键回滚)