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
[[email protected] pods]# kubectl get rc nginx
NAME DESIRED CURRENT READY AGE
nginx 2 2 2 1m
查询pod容器
[[email protected] 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
[[email protected] 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)
[[email protected] 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拉起来
[[email protected] 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
[[email protected] pods]# kubectl label pod nginx-qqf16 app=debug --overwrite
pod "nginx-qqf16" labeled
当修改一个pod标签后就摆脱RC控制了,如果将标签在改回去那么将有一个POD被干掉,超过了RC最大副本数
将标签改回去