8.1 Replication Controller控制器

在实际的生产环境中,我们其实很少单独创建Pod,而是通过控制器来进行Pod的管理,Kubernetes提供了很多的控制器,一个 Controllers 可以创建和管理很多个 Pod, 也提供复制、初始化,以及提供集群范围的自我恢复的功能。比如说: 如果一个节点宕机,Controller 将调度一个在其他节点上完全相同的 pod 来自动取代当前的 pod。

ReplicationController 确保在任何时间上运行 pod 的 “replicas” 数为定义的数量。换句话说,一个 ReplicationController 确保一个 pod 或同类的 pod 的集合总是运行和可用的。 如果 pod 超过指定的数量,它会杀死多出的。 如果少于指定数量,ReplicationController 将启动更多。与手动创建的 pod 不同,如果有 pod 失败、被删除或被终止,ReplicationController 会自动维护并替代这些 pod 。 例如,类似于内核升级这样的中断性维护,您的 pod 会在另一个节点上重新创建。 因此,即使您的应用程序只需要运行一个 pod ,我们也建议您使用 ReplicationController 。 您可以将 ReplicationController 视为与进程监视类似的东西, ReplicationController 会监视跨多个节点的多个 pod ,而不是单个节点上的单个进程。 ReplicationController 通常会缩写为 “rc” 或 “rcs” ,并作为 kubectl 命令参数中的简写。 一个简单的例子是创建1个 ReplicationController 对象,以便可靠地运行一个永不停止的 pod 实例。更复杂的用例是运行复制的几个相同的副本服务,如 Web 服务器。

[root@linux-node1 ~]# cd /srv/example/
[root@linux-node1 example]# cat nginx-rc.yaml 
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx-rc
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.13.12
        ports:
        - containerPort: 80

RC常用管理

  1. 创建RC

    [root@linux-node1 example]# kubectl create -f nginx-rc.yaml
    
  2. 查看RC

    [root@linux-node1 k8s-nginx]# kubectl get rc
    NAME      DESIRED   CURRENT   READY     AGE
    nginx     3         3         2         37s
    
  3. 查看POD

    [root@linux-node1 k8s-nginx]# kubectl get pod
    NAME          READY     STATUS    RESTARTS   AGE
    nginx         1/1       Running   1          9m
    nginx-9mdss   1/1       Running   0          1m
    nginx-kz9xk   1/1       Running   0          1m
    
  4. 删除Pod进行测试

    [root@linux-node1 ~]# kubectl delete pod nginx-rc-8v972
    pod "nginx-rc-8v972" deleted
    [root@linux-node1 ~]# kubectl get pod
    NAME             READY     STATUS              RESTARTS   AGE
    nginx            1/1       Running             1          58m
    nginx-node       1/1       Running             0          15m
    nginx-rc-8v972   0/1       Terminating         0          1m
    nginx-rc-jns98   1/1       Running             0          1m
    nginx-rc-pjzd2   1/1       Running             0          1m
    nginx-rc-s2h64   0/1       ContainerCreating   0          2s
    [root@linux-node1 ~]# kubectl get pod
    NAME             READY     STATUS        RESTARTS   AGE
    nginx            1/1       Running       1          58m
    nginx-node       1/1       Running       0          15m
    nginx-rc-8v972   0/1       Terminating   0          1m
    nginx-rc-jns98   1/1       Running       0          1m
    nginx-rc-pjzd2   1/1       Running       0          1m
    nginx-rc-s2h64   1/1       Running       0          5s
    
  5. 扩容和缩容RC ``` [root@linux-node1 ~]# kubectl scale rc nginx-rc --replicas=1 replicationcontroller "nginx-rc" scaled

[root@linux-node1 ~]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx 1/1 Running 1 59m nginx-node 1/1 Running 0 17m nginx-rc-pjzd2 1/1 Running 0 3m nginx-rc-s2h64 0/1 Terminating 0 1m

[root@linux-node1 ~]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx 1/1 Running 1 59m nginx-node 1/1 Running 0 17m nginx-rc-pjzd2 1/1 Running 0 3m



6.在线编辑RC

[root@linux-node1 ~]# kubectl edit rc nginx-rc


7.基于RC的滚动升级

[root@linux-node1 ~]# kubectl rolling-update nginx-rc --image=gtest.com/k8s/cent_nginx:1.0 ```

Copyright © 赵班长@新运维社区 2019 all right reserved,powered by Gitbook该文件修订时间: 2020-03-21 18:23:02

results matching ""

    No results matching ""