【k8s系列十一】k8s控制器 之 ReplicationController

69 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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

image

接下来,我们手动删除一个pod, 如下图

image

我们看到他又创建了一个新的pod, 通过pod的时间可以看出.

接下来看看rc控制器的selector选择器

kubectl explain rc.spec.selector

image

我们看出rc的选择器selector是一个k-v对, 没有其他选择. 并且必须是全量匹配. 也就是key得匹配, value也得匹配.

一会注意一下rs的选择器, 这是rc和rs的区别之处.