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
K8s-Pod控制器的更多相关文章
- k8s之pod控制器
1.生产中,很少会跑一个自主式pod,一般由控制器去创建pod,其配置文件中内嵌了pod的创建方式. pod控制器:ReplicaSet.Deployment.DaemonSet.Job.Cronjo ...
- k8s之pod与Pod控制器
k8s中最为重要的基础资源,pod,pod controller,service pod controller类型有多种需要向控制器赋值之后使用: kubectl命令使用 kubectk get no ...
- K8S Pod及其控制器
Pod K8S里能够运行的最小逻辑单元,1个Pod可以运行多个容器 Pod 控制器 Pod控制器是Pod启动的一种模版,用来保证在K8S中启动的Pod始终按照人们的预期运行(副本数,生命周期.健康状态 ...
- k8s学习笔记之六:Pod控制器(kube-controller-manager)
第一章.什么是kube-controller-manager? Controller Manager 由 kube-controller-manager 和 cloud-controller-mana ...
- k8s的Pod控制器
pod的配置清单常见选项: apiVersion,kind,metadata,spec,status(只读) spec: containers: nodeSelector: nodeName: res ...
- Kubernetes学习之路(十二)之Pod控制器--ReplicaSet、Deployment
一.Pod控制器及其功用 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会重新新建pod的资源. pod控制器 ...
- Kubernetes 学习8 Pod控制器
一.回顾 1.Pod是标准的kubernetes资源,因此其遵循为其资源清单配置定义的基本格式,包含:apiVersion,kind,metadata,spec,status(只读) 2.spec的内 ...
- Kubernetes 学习6 Pod控制器应用进阶
一.资源配置清单 1.自主式Pod资源 2.资源的清单格式,大多数清单格式都遵循如下条件: a.一级字段:apiVersion(group/version),kind,metadata(name,na ...
- 8and9 pod控制器
Pod控制器: 自主定义的pod资源删除后不会被重启,被Pod控制器管理的pod资源被删除后会重启. pod控制器的种类: ReplicationController: (最早使用,现在已经被废弃,太 ...
- 五,pod控制器应用进阶
目录 Pod 资源 标签 给资源打标签 标签选择器 Pod 生命周期 pod状态探测 livenessProbe 状态探测 livenessProbe exec 测试 livenessProbe ht ...
随机推荐
- Linux 创建交换分区扩展虚拟内存
当计算机的物理内存不足时,可以利用磁盘空间扩张为物理内存,实现的方式则是创建交换分区. 命令:mkswap + 分区设备 (格式化交换分区) mkswapon +分区设备 (启用交换分区) ...
- 关于python中的矩阵乘法(array和mat类型)
关于python中的矩阵乘法,我们一般有两种数据格式可以实现:np.array()类型和np.mat()类型: 对于这两种数据类型均有三种操作方式: (1)乘号 * (2)np.dot() (3)np ...
- node.js总结
1.NPM安装报错:no such file or directory, open 'C:\Users\HP\package.json' npm WARN saveError ENOENT: no s ...
- python实现求最大公约数与最小公倍数
记录python实现最大公约数&最小公位数两种算法 概念 最大公约数:指两个或多个整数共有约数中最大的一个 最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就 ...
- 前端----css的继承性和层叠性
css有两大特性; 继承性和层叠性 继承性 继承:给父级设置一些属性,子级继承了父级的该属性, 这就是我们的css中的继承, 需要注意的是 有一些属性是可以继承下来的: color , font ...
- <转载>关系规范化之求最小函数依赖集(最小覆盖)
原文链接http://blog.csdn.net/icurious/article/details/51240114 最小函数依赖集 一.等价和覆盖 定义:关系模式R<U,F>上的两个依赖 ...
- 接口签名进行key排序,并MD5加密
import org.apache.commons.codec.digest.DigestUtils; import java.io.UnsupportedEncodingException; imp ...
- 将list集合转json
public static class DataHelper { /// /// js 序列化器 /// static JavaScriptSerializer jss = new JavaScrip ...
- android7.0以上使用融云即使通讯的坑
一.连接服务器不走connect()方法 在android6.0以下,在使用融云sdk时,直接将依赖库引入到项目中即可.但是在7.0及以上时,直接应用会发现消息一直发送不出去,错误提示为dlopen ...
- robot启动
可以这句写入到bat文件里 pythonw.exe -c "from robotide import main; main()"