zoukankan      html  css  js  c++  java
  • K8s-Pod控制器

     

    在K8s-Pod文档中我们创建的Pod是非托管的Pod,因为Pod被设计为用后就弃的对象,如果Pod正常关闭,K8s会将该Pod清除,它没有自愈的能力。Pod控制器是用来保持Pod状态的一种对象资源,如下为Pod控制器的作用

    Pod控制组成部分

    更改标签选择器和Pod模板不会影响现有的Pod.更改标签选择器会使现有的Pod脱离控制,但不会影响现有Pod的运行,更改Pod模板也不会影响现有Pod的运行,只会影响由改控制器新生成的Pod.

    作用:

    1:确保Pod副本数保持一致

    2:当节点故障时会在其他节点运行创建的Pod以替代旧的Pod

    3:非常容器实现Pod的水平伸缩。

    三: Pod控制器-ReplicationController

    3.1 RC-组成部分

    3.1.1 label selector

     标签选择器,用于确定控制的Pod

    3.1.2 replica count

    副本个数,指定用行的Pod数量

    3.1.3 pod template

    Pod模板,用于创建新的Pod副本

    3.2 RC-创建

    我们可以通过yaml格式的文件进行RC的创建

    如下一个rc yaml格式的文件

    [root@k8s-master-node1 pod-controller]# cat kubia-rc.yaml

    apiVersion: v1   # API的版本

    kind: ReplicationController  # Pod控制器 RC

    metadata:     # 元数据

      name: kubia

    spec:        # 规格说明

      replicas: 3   # 副本个数

      selector:    # 标签选择器

        app: kubia

      template:  # 标签的模板

        metadata:

          labels:

            app: kubia  # Pod标签,这里要确保跟RC的标签选择器一致

        spec:

          containers:

            - name: kubia

              image: luksa/kubia

              ports:

              - containerPort: 8080

    创建RC

    [root@k8s-master-node1 pod-controller]# kubectl create -f kubia-rc.yaml

    查看一下有没有生成Pod

    [root@k8s-master-node1 pod-controller]# kubectl get po --show-labels -o wide

    会生成指定的副本数3个Pod,也会贴上app=kubia的标签

    查看我们已经创建的ReplicationController

    [root@k8s-master-node1 pod-controller]# kubectl get replicationcontroller -o wide

    Replicationcontroller的缩写时rc

    [root@k8s-master-node1 pod-controller]# kubectl get rc -o wide

    上面的三列分别时所需的Pod数量,实际的Pod数量,已经准备就绪的Pod数量

    查看rc kubia的相信信息

    [root@k8s-master-node1 pod-controller]# kubectl describe rc kubia

    现在我们尝试删除一个Pod,看下发生了什么

    # 查看当前Pod

    [root@k8s-master-node1 pod-controller]# kubectl get po

    NAME          READY   STATUS    RESTARTS   AGE

    kubia-7x4dp   1/1     Running   0          32m

    kubia-f4b5d   1/1     Running   0          28m

    kubia-m7bv2   1/1     Running   0          32m

     

    # 尝试删除一个Pod

    [root@k8s-master-node1 pod-controller]# kubectl delete po kubia-7x4dp

     

    # 查看目前Pod 可以看到如果我们手动删除一个Pod,RC会自动的根据Pod template创建出一个Pod

    [root@k8s-master-node1 ~]# kubectl get po

    NAME          READY   STATUS              RESTARTS   AGE

    kubia-59r66   0/1     ContainerCreating   0          2s

    kubia-7x4dp   1/1     Terminating         0          34m

    kubia-f4b5d   1/1     Running             0          31m

    kubia-m7bv2   1/1     Running             0          34m

     

    # 我们使用标签选择器删除这三个Pod

    [root@k8s-master-node1 pod-controller]# kubectl delete  po -l app=kubia

     

     

    # 再次查看Pod情况

    [root@k8s-master-node1 ~]# kubectl get po

    NAME          READY   STATUS              RESTARTS   AGE

    kubia-59r66   1/1     Terminating         0          3m26s

    kubia-dpgp5   0/1     ContainerCreating   0          3s

    kubia-f4b5d   1/1     Terminating         0          34m

    kubia-jlw9l   0/1     ContainerCreating   0          3s

    kubia-m7bv2   1/1     Terminating         0          38m

    kubia-m8n9p   0/1     ContainerCreating   0          3s

     

    现在我们模拟一下节点故障

    目前有两个Pod运行在worker 节点2上,现在我们将节点2down掉

    # 我们看到节点2成为了NotReady状态

    [root@k8s-master-node1 ~]# kubectl get nodes

    NAME               STATUS     ROLES    AGE    VERSION

    k8s-master-node1   Ready      master   2d     v1.13.1

    k8s-worker-node1   Ready      <none>   2d     v1.13.1

    k8s-worker-node2   NotReady   <none>   4h4m   v1.13.1

     

    # 再查看Pod状态

    [root@k8s-master-node1 pod-controller]# kubectl get pods

    NAME          READY   STATUS    RESTARTS   AGE

    kubia-dpgp5   1/1     Running   0          21m

    kubia-jlw9l   0/1     Error     0          21m

    kubia-m8n9p   0/1     Error     0          21m

     

    # 等一会儿我们再次查看,K8s新创建了两个Pod,实现了自愈

    [root@k8s-master-node1 pod-controller]# kubectl get po

    NAME          READY   STATUS        RESTARTS   AGE

    kubia-dl9zv   1/1     Running       0          5m47s

    kubia-dpgp5   1/1     Running       0          29m

    kubia-jlw9l   0/1     Terminating   0          29m

    kubia-m8n9p   0/1     Terminating   0          29m

    kubia-rjvnm   1/1     Running       0          5m47s

    现在我们将节点2启动

    发现Pod不会在发生改变,会把之前的Erro状态的Pod删除掉。

    3.3 RC-作用域

    RC 负责管理与标签选择器匹配的Pod,而不是绑定关系,两者没有互相依赖的关系,我们可以通过修改Pod的标签,从而脱离RC的管理,但该脱离Pod只是不受RC管理了,不会产生任何影响,所不同的是如果该Pod节点发生故障,Pod因为是非托管的Pod,该Pod会被删除而不会重建。

    这里我们尝试修改其中一个Pod的标签

    # 以下三个Pod有一个app=kubia的标签

    [root@k8s-master-node1 pod-controller]# kubectl get po --show-labels

    NAME          READY   STATUS    RESTARTS   AGE   LABELS

    kubia-dl9zv   1/1     Running   0          35m   app=kubia

    kubia-dpgp5   1/1     Running   0          58m   app=kubia

    kubia-rjvnm   1/1     Running   0          35m   app=kubia

     

    # 现在我们修改其中一个Pod的标签

    [root@k8s-master-node1 pod-controller]# kubectl label po kubia-dl9zv app=wangys --overwrite

     

    # 现在看下Pod情况

    [root@k8s-master-node1 pod-controller]# kubectl get po --show-labels

    NAME          READY   STATUS              RESTARTS   AGE   LABELS

    kubia-dl9zv   1/1     Running             0          35m   app=wangys

    kubia-dpgp5   1/1     Running             0          59m   app=kubia

    kubia-p5clz   0/1     ContainerCreating   0          3s    app=kubia

    kubia-rjvnm   1/1     Running             0          35m   app=kubia

    [root@k8s-master-node1 pod-controller]# kubectl get po --show-labels

    NAME          READY   STATUS    RESTARTS   AGE   LABELS

    kubia-dl9zv   1/1     Running   0          35m   app=wangys

    kubia-dpgp5   1/1     Running   0          59m   app=kubia

    kubia-p5clz   1/1     Running   0          9s    app=kubia

    kubia-rjvnm   1/1     Running   0          35m   app=kubia

    说明:修改现有Pod的标签可以将该Pod移除RC的作用域,不受管理,但是该Pod正常运行不受影响,区别在于这个Pod节点故障就会被删除。

    3.4 RC-Pod模板

    对于Pod模板我们可能常常会更新,需要说明的是,如果Pod模板更新,并不会影响现有的Pod运行,影响的是新建的Pod,新建的Pod会根据这个Pod模板创建。

    我们可以通过修改模板来验证我们的结论

    # 现在三个Pod都有app=kubia的标签

    [root@k8s-master-node1 pod-controller]# kubectl get po --show-labels

    NAME          READY   STATUS    RESTARTS   AGE   LABELS

    kubia-dpgp5   1/1     Running   0          82m   app=kubia

    kubia-p5clz   1/1     Running   0          23m   app=kubia

    kubia-rjvnm   1/1     Running   0          59m   app=kubia

    # 修改rc文件,新增rel:beta标签

    [root@k8s-master-node1 pod-controller]# kubectl edit rc kubia

    # 再次查看 原Pod标签没有修改

    [root@k8s-master-node1 pod-controller]# kubectl get po --show-labels

    NAME          READY   STATUS    RESTARTS   AGE   LABELS

    kubia-dpgp5   1/1     Running   0          86m   app=kubia

    kubia-p5clz   1/1     Running   0          27m   app=kubia

    kubia-rjvnm   1/1     Running   0          63m   app=kubia

    我们删除一个Pod试试,新Pod会根据修改后的模板创建

    [root@k8s-master-node1 pod-controller]# kubectl delete po kubia-dpgp5

     

    [root@k8s-master-node1 ~]# kubectl get po --show-labels

    NAME          READY   STATUS        RESTARTS   AGE   LABELS

    kubia-2r2qx   1/1     Running       0          15s   app=kubia,rel=beta

    kubia-dpgp5   1/1     Terminating   0          88m   app=kubia

    kubia-p5clz   1/1     Running       0          29m   app=kubia

    kubia-rjvnm   1/1     Running       0          65m   app=kubia

    [root@k8s-master-node1 ~]# kubectl get po --show-labels

    NAME          READY   STATUS    RESTARTS   AGE   LABELS

    kubia-2r2qx   1/1     Running   0          38s   app=kubia,rel=beta

    kubia-p5clz   1/1     Running   0          30m   app=kubia

    kubia-rjvnm   1/1     Running   0          65m   app=kubia

    3.5 RC-Pod水平伸缩

    3.5.1  扩容

    可以通过手动的方式

    [root@k8s-master-node1 ~]# kubectl scale rc kubia --replicas=10

     

     

    # 查看状态

     

     

     

     

     

    [root@k8s-master-node1 pod-controller]# kubectl get po

    NAME          READY   STATUS    RESTARTS   AGE

    kubia-2r2qx   1/1     Running   0          8m30s

    kubia-5c47l   1/1     Running   0          3m33s

    kubia-bfksb   1/1     Running   0          3m33s

    kubia-ctkcm   1/1     Running   0          3m33s

    kubia-d6zh9   1/1     Running   0          3m33s

    kubia-g7296   1/1     Running   0          3m33s

    kubia-p5clz   1/1     Running   0          37m

    kubia-rjvnm   1/1     Running   0          73m

    kubia-rtg4q   1/1     Running   0          3m33s

    kubia-s9n8k   1/1     Running   0          3m33s

     

     

    通过编辑定义来扩容

    [root@k8s-master-node1 pod-controller]# kubectl edit rc kubia

    [root@k8s-master-node1 pod-controller]# kubectl get po

    NAME          READY   STATUS    RESTARTS   AGE

    kubia-2ctxt   1/1     Running   0          59s

    kubia-2r2qx   1/1     Running   0          16m

    kubia-5c47l   1/1     Running   0          11m

    kubia-7hmm6   1/1     Running   0          59s

    kubia-b5kxm   1/1     Running   0          59s

    kubia-bfksb   1/1     Running   0          11m

    kubia-ctkcm   1/1     Running   0          11m

    kubia-d6zh9   1/1     Running   0          11m

    kubia-g7296   1/1     Running   0          11m

    kubia-jvmt6   1/1     Running   0          59s

    kubia-k7kc4   1/1     Running   0          59s

    kubia-krbj6   1/1     Running   0          59s

    kubia-kw66f   1/1     Running   0          59s

    kubia-mktbp   1/1     Running   0          59s

    kubia-p5clz   1/1     Running   0          45m

    kubia-rjvnm   1/1     Running   0          81m

    kubia-rtg4q   1/1     Running   0          11m

    kubia-s9n8k   1/1     Running   0          11m

    kubia-w9jx6   1/1     Running   0          59s

    kubia-zr5s6   1/1     Running   0          59s

    3.5.2 缩容

    命令行/编辑文件,这里演示命令行

    [root@k8s-master-node1 pod-controller]# kubectl scale rc kubia --replicas=3

  • 相关阅读:
    opencv 遍历Mat对象中数据方法-转
    JVM OutOfMemoryError 分析
    hibernate validation HV000030: No validator could be found for constraint
    通过aop实现rpc统一参数校验&异常捕捉
    java8 lambda groupingby 分组保持原来顺序
    递归判断素组是否有序
    dubbo 直连
    Linux 删除openjdk
    telnet命令调用远程dubbo 接口
    git submodule ssh key
  • 原文地址:https://www.cnblogs.com/wc89/p/10245035.html
Copyright © 2011-2022 走看看