Replication Controller定义了预期的场景,包括几个部分:

  • Pod期待的副本数(replicas)

  • 筛选目标Pod的Label Selector

  • 当Pod的副本数量小于预期数量时,用于创建新Pod的Pod模板

RC的完整定义

apiVersion: v1
kind: ReplicationController
metadata:
  name: frontend
spec:
  replicas: 1
  selector:
    tier: frontend
  template:
    metadata:
      labels:
        app: app-demo
        tier: frontend
    spec:
      containers:
      - name: tomcat-demo
        image: tomcat
        imagePullPolicy: IfNotPresent
        env:
        - name: GET_HOSTS_FROM
          value: dns
        ports:
        - containerPort: 80

动态扩容

可以通过修改RC的副本数量,实现Pod的动态缩放,比如可以使用kubectl scale 命令

kubectl scale rc redis-slave --replicas=3

删除RC

删除RC并不会影响已经创建好的Pod。为了删除所有Pod,可以设置replicas的值为0.

此外kubectl提供stop和delete命令可以一次性删除RC和RC控制的全部Pod。

滚动升级

当应用升级时,通常会通过Build一个新的Docker镜像,并用新的镜像版本替代旧的版本的方式达到目的。

通过RC机制,Kubernetes很容易实现这种滚动升级。

Replication Set

由于Replication Controller与Kubernetes代码中的模块Replication Controller同名,自Kubernetes 1.2开始,它升级为另一个概念Replica Set。与RC的区别是,RS支持基于集合的Label selector,而RC只支持基于等式的Label Selector。

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
  name: frontend
spec:
  replicas: 1
  selector:
    matchLabels:
      tier: frontend
    matchExpressions:
    - {key: tier,operator:In,values:[frontend]}
  template:
    metadata:
      labels:
        app: app-demo
        tier: frontend
    spec:
      containers:
      - name: tomcat-demo
        image: tomcat
        imagePullPolicy: IfNotPresent
        env:
        - name: GET_HOSTS_FROM
          value: dns
        ports:
        - containerPort: 80

实际上,也很少单独使用Replica Set,而主要使用Deployment。

总之,Replica Set与Deployment这两个重要资源对象正在逐步替换RC作用,是自Kubernetes 1.3开始,Pod自动扩容的实现基础。

results matching ""

    No results matching ""