在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

K8s-Pod控制器的更多相关文章

  1. k8s之pod控制器

    1.生产中,很少会跑一个自主式pod,一般由控制器去创建pod,其配置文件中内嵌了pod的创建方式. pod控制器:ReplicaSet.Deployment.DaemonSet.Job.Cronjo ...

  2. k8s之pod与Pod控制器

    k8s中最为重要的基础资源,pod,pod controller,service pod controller类型有多种需要向控制器赋值之后使用: kubectl命令使用 kubectk get no ...

  3. K8S Pod及其控制器

    Pod K8S里能够运行的最小逻辑单元,1个Pod可以运行多个容器 Pod 控制器 Pod控制器是Pod启动的一种模版,用来保证在K8S中启动的Pod始终按照人们的预期运行(副本数,生命周期.健康状态 ...

  4. k8s学习笔记之六:Pod控制器(kube-controller-manager)

    第一章.什么是kube-controller-manager? Controller Manager 由 kube-controller-manager 和 cloud-controller-mana ...

  5. k8s的Pod控制器

    pod的配置清单常见选项: apiVersion,kind,metadata,spec,status(只读) spec: containers: nodeSelector: nodeName: res ...

  6. Kubernetes学习之路(十二)之Pod控制器--ReplicaSet、Deployment

    一.Pod控制器及其功用 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会重新新建pod的资源. pod控制器 ...

  7. Kubernetes 学习8 Pod控制器

    一.回顾 1.Pod是标准的kubernetes资源,因此其遵循为其资源清单配置定义的基本格式,包含:apiVersion,kind,metadata,spec,status(只读) 2.spec的内 ...

  8. Kubernetes 学习6 Pod控制器应用进阶

    一.资源配置清单 1.自主式Pod资源 2.资源的清单格式,大多数清单格式都遵循如下条件: a.一级字段:apiVersion(group/version),kind,metadata(name,na ...

  9. 8and9 pod控制器

    Pod控制器: 自主定义的pod资源删除后不会被重启,被Pod控制器管理的pod资源被删除后会重启. pod控制器的种类: ReplicationController: (最早使用,现在已经被废弃,太 ...

  10. 五,pod控制器应用进阶

    目录 Pod 资源 标签 给资源打标签 标签选择器 Pod 生命周期 pod状态探测 livenessProbe 状态探测 livenessProbe exec 测试 livenessProbe ht ...

随机推荐

  1. 微信小程序获取手机验证码

    一种比较常见的功能获取手机验证码 先看效果图: 其实这个功能实现起来很简单,主要就是调取第三方接口,拿到返回值验证的问题 直接上代码吧: wxml页面: <view class='changeI ...

  2. 基本类型变量、引用类型变量的在java中的存放位置

    一.局部变量存储在方法栈中 在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法 ...

  3. SpringSocial业务系统与社交网站的绑定与解绑

    SpringSocial提供了了以下三个服务,我们要做的仅仅是调用它们的服务,但是SpringSocial仅仅只提供了数据,没有提供视图 ⒈拿到所有社交网站与业务系统的绑定信息 SpringSocia ...

  4. Java基础3-数组操作;类概述

    昨日内容回顾 数据类型 基本数据类型 1) byte, short, int, long, float, double 2) boolean[true, false] 3) char 100: 默认为 ...

  5. SSH命令行管理文件

    1.从服务器上下载文件 ssh root@13.111.122.133 2.从服务器上下载文件 scp username@servername:/path/filename /var/www/loca ...

  6. vmware启动虚拟机发现没权限

    前期安装未参与,但了解大致情况: 物理机上安装CentOS7系统,然后安装VMWare,虚拟了几台CentOS6 遇到的问题:物理机重启后,以root进入系统,但打开VMWare显示是普通用户权限,以 ...

  7. Linux内核调试:kdump、vmcore、crash、kernel-debuginfo【转】

    转自:https://blog.csdn.net/guowenyan001/article/details/19807555 一.简介 linux内核发送崩溃时,kdump会生成一个内核转储文件vmc ...

  8. Epoll模型【转】

    转自:https://www.cnblogs.com/tianhangzhang/p/5295972.html 相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率.因为 ...

  9. 工程师死绝的世界答案-python3版

    エンジニアが死滅シタ世界|アンドロイドとふたりぼっちで生きろ. 荒れ果てた警察署 [MISSION LEVEL: D] 难度D 题目要求: あなたは 0 から 9 の数字を 3 つ入力すると開く扉を開 ...

  10. 第八章 让Bootstrap轮播插件carousel支持左右滑动手势的三种方法

    因为最近开发的项目涉及到移动设备上的 HTML5 开发,其中需要实现轮播效果.然后最快捷的方式,你知道的(Bootstrap),然后原生的 Bootstrap 的 carousel.js 插件并没有支 ...