持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
1. ReplicationController
ReplicationController, 简称RC. 特点:
- 保证容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代;如果异常多出来的容器, 也会自动回收;
下面来构建一个rc控制器
第一步: 定义资源清单
apiVersion: v1
kind: ReplicationController
metadata:
name: rc-controller
namespace: chapter08
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
namespace: chapter08
labels:
app: nginx
spec:
containers:
- name: php-redis
image: wangyanglinux/myapp:v1
env:
- name: GET_HOSTS_FROM
value: dns
name: zhangsan
value: "123"
ports:
- containerPort: 80
资源清单含义解析:
-
资源清单的类型是ReplicationController, 表示创建一个rc控制器.
-
metadata.name: 控制器的名称是rc-controller
-
spec期望的内容
-
replicas: 定义了pod的副本数, 一共有3个副本
-
selector: 定义了pod的匹配器. 匹配的是pod的标签. app=nginx表示匹配所有标签是app-nginx的pod. 并且这样的pod的总数必须是3个.
-
template: 模板的含义就是创建pod, 这里面的内容和单独定义一个pod的spec的内容是一样的定义方式.
-
metadata.labels: 定义了当前这个pod的标签. key是app, value是nginx. 这个标签必须要和rc选择器的selector匹配, 否则创建的pod就不能和rc匹配了.
-
spec: 表示控制器创建的pod的期望信息.
-
containers: 表示pod中定义的容器. 这里面定义了一个容器. 容器的名字是php-redis. 使用的竟像是wangyanglinux/myapp:v1
- env: 表示当前pod使用到的环境变量. 这里就是pod中环境变量的定义方式. name表示变量的key, value表示变量的值. 所以name和value都是成对出现的.
- ports: 定义了容器的端口号, 端口号是80.
-
-
-
分析: 这个控制器创建以后, 会创建3个副本, 控制器和副本的匹配关系式通过label标签, app-nginx. 如果所有的pod中, 标签是app=nginx的pod的总数不足3个或者多于3个, 控制器会自动控制保持副本始终是3个.
第二步: 创建控制器
kubectl create -f rc-controller.yaml
rc控制器被创建
[root@master ~]# kubectl create -f rc-controller.yaml replicationcontroller/rc-controller created
可以看到创建了3个pod
接下来,我们手动删除一个pod, 如下图
我们看到他又创建了一个新的pod, 通过pod的时间可以看出.
接下来看看rc控制器的selector选择器
kubectl explain rc.spec.selector
我们看出rc的选择器selector是一个k-v对, 没有其他选择. 并且必须是全量匹配. 也就是key得匹配, value也得匹配.
一会注意一下rs的选择器, 这是rc和rs的区别之处.