首页 > 代码库 > Replication Controller

Replication Controller

RC保证在同一时间能够运行指定数量的Pod副本,保证Pod总是可用。如果实际Pod数量比指定的多就结束掉多余的,如果实际数量比指定的少就启动缺少的。

当Pod失败、被删除或被终结时,RC会自动创建新的Pod来保证副本数量,所以即使只有一个Pod,也应该使用RC来进行管理。

来个简单例子:

 1 apiVersion: v1
 2 kind: ReplicationController  //ReplicationController类型
 3 metadata:
 4   name: nginx               //pod名字
 5 spec:
 6   replicas: 2               //2个副本
 7   selector:                 
 8     app: nginx              //通过这个标签找到生成的pod
 9   template:                 //定义pod模板,在这里不需要定义pod名字,就算定义创建的时候也不会采用这个名字而是.metadata.generateName+5位随机数。
10     metadata:
11      labels:                //定义标签
12       app: nginx            //key:v   这里必须和selector中定义的KV一样
13     spec:
14      containers:            //rc 的容器重启策略必须是Always(总是重启),这样才能保证容器的副本数正确
15       - image: nginx
16         name: nginx
17         ports:  
18         - containerPort: 80

提示:

K8S 通过template来生成pod,创建完后模板和pod就没有任何关系了,rc通过 labels来找对应的pod,控制副本

 

查询rc

[root@kubernetes-master pods]# kubectl get rc nginx
NAME DESIRED CURRENT READY AGE
nginx      2              2                2        1m

 

查询pod容器

[root@kubernetes-master pods]# kubectl get pod --selector app=nginx 

NAME           READY       STATUS        RESTARTS          AGE
nginx-2jhlv      1/1              Running              0                     2m
nginx-hbtqj     1/1               Running              0                     2m

 

同时查询rc和rc创建的pod
[root@kubernetes-master pods]# kubectl get pod --selector app=nginx --label-columns app
NAME           READY            STATUS           RESTARTS          AGE       APP
nginx-2jhlv      1/1                  Running                 0                     2m       nginx
nginx-hbtqj     1/1                  Running                  0                    2m        nginx

 

删除pod会后会立刻在拉起一个pod

技术分享

 

 删除rc后pod也被删除(--cascade=false只删除rc保留创建的pod)

[root@kubernetes-master pods]# kubectl delete rc nginx
replicationcontroller "nginx" deleted

 

模板和RC可意分别定义

1先定义一个模板,然后创建

 1 apiVersion: v1
 2 kind: PodTemplate
 3 metadata:
 4   name: my-nginx
 5 template:
 6     metadata:
 7      labels:
 8       app: nginx
 9     spec:
10      containers:
11       - image: nginx
12         name: nginx
13         ports:  
14         - containerPort: 80

创建后并不会把pod拉起来

[root@kubernetes-master pods]# kubectl create -f template.yml
podtemplate "my-nginx" created

查看模板池

技术分享

 

2定义rc

1 apiVersion: v1
2 kind: ReplicationController
3 metadata:
4   name: my-nginx
5 spec:
6  replicas: 2
7  templateRef:
8     app: nginx        

这个暂时有问题还无法通过RC拉起来templatekubectl create -f rc.yml 

 

修改rc模式下的一个pod label

[root@kubernetes-master pods]# kubectl label pod nginx-qqf16 app=debug --overwrite
pod "nginx-qqf16" labeled

 

当修改一个pod标签后就摆脱RC控制了,如果将标签在改回去那么将有一个POD被干掉,超过了RC最大副本数 

技术分享

将标签改回去

技术分享

 

Replication Controller