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 ...
随机推荐
- P4843 清理雪道
题目地址:P4843 清理雪道 上下界网络流 无源汇上下界可行流 给定 \(n\) 个点, \(m\) 条边的网络,求一个可行解,使得边 \((u,v)\) 的流量介于 \([B(u,v),C(u,v ...
- SpringSecurity实现短信验证码登录(Token)
- qemu中使用9p,支持host和guest中共享目录【转】
转自:https://blog.csdn.net/ayu_ag/article/details/52956351 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csd ...
- pt-table-sync同步报错Called not_in_left in state 0 at /usr/bin/pt-table-sync line 5231【原创】
试验环境MySQL5.7.19,自己使用pt-table-sync 3.0.2版本同步后,手动在从库执行后,在用pt-table-sync验证时报错 命令如下: pt-table-,u=用户名,p=, ...
- Spring HibernateTemplate与HibernateDaoSupport对比
HibernateTemplate与HibernateDaoSupport两者都是spring整合hibernate提供的模板技术. 对于保存一个对象,HibernateTemplate需要先配置 配 ...
- 打造一个上传图片到图床利器的插件(Mac版 开源)
写markdown博客如何将截图快速上传到图床--记一个工具插件的实现(windows版 开源)(2017-05-31 20:23) 打造一个上传图片到图床利器的插件 鉴于写博客截图手动上传到图床的步 ...
- Openssl与私有CA搭建
转自:http://www.tuicool.com/articles/aURnim 随着网络技术的发展.internet的全球化,信息共享程度被进一步提高,各种基于互联网的应用如电子政务.电子商务日益 ...
- 【转】关于Log4j
转自:http://www.open-open.com/lib/view/open1337754346355.html 原帖:http://blog.csdn.net/neareast/article ...
- 通过python脚本获取服务器硬件信息
#!/usr/bin/python # coding:utf-8 """ 采集机器自身信息 1 主机名 2 内存 3 ip与mac地址 4 cpu信息 5 硬盘分区信息 ...
- MS SqlServer还原数据库,出现媒体簇的结构不正确
出现此问题,是数据库版本过低导致,只要保证连接实例所在的版本号>=要还原的数据库的版本号,即可还原成功. 可以使用select @@VERSION,查看当前实例版本.