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 ...
随机推荐
- python numpy 三行代码打乱训练数据
今天发现一个用 numpy 随机化数组的技巧. 需求 我有两个数组( ndarray ):train_datasets 和 train_labels.其中,train_datasets 的每一行和 t ...
- TCP连接的TIME_WAIT和CLOSE_WAIT 状态解说【转】
相信很多运维工程师遇到过这样一个情形: 用户反馈网站访问巨慢, 网络延迟等问题, 然后就迫切地登录服务器,终端输入命令"netstat -anp | grep TIME_WAIT | wc ...
- Python3学习笔记27-ConfigParser模块
ConfigParser模块在Python3修改为configparser,这个模块定义了一个ConfigeParser类,该类的作用是让配置文件生效.配置文件的格式和window的ini文件相同,大 ...
- JavaScript拼接html字符串时截断问题
在项目中碰到一个问题,就是JavaScript拼接html标签时,里面特殊字符会有些问题,比如单引号截断配对,导致后面的内容不显示或显示错误.在此记录一下. 下面贴一段简化的代码,若有描述不清的地方还 ...
- 题解-AtCoder Code-Festival2017qualA-E Modern Painting
Problem CODE-FESTIVAL 2017 qual A 洛谷账户的提交通道 题意:有一个\(n\)行\(m\)列的方格,在边界外有可能有机器人(坐标为\((0,x),(n+1,x),(x, ...
- Unity3D RTS游戏中帧同步实现
帧同步技术是早期RTS游戏常用的一种同步技术,本篇文章要给大家介绍的是RTX游戏中帧同步实现,帧同步是一种前后端数据同步的方式,一般应用于对实时性要求很高的网络游戏,想要了解更多帧同步的知识,继续往下 ...
- $Django 路飞学城项目简介
- 基于极验实现动态验证码 - 在线视频播放:cc,HTML用的Flash - 基于Rest Framework实现 API接口 - 自定义rest认证token 认证 - 序列化以及自定义验证对请求 ...
- ansible笔记(9):常用模块之包管理模块
ansible笔记():常用模块之包管理模块 yum_repository模块 yum_repository模块可以帮助我们管理远程主机上的yum仓库. 此处我们介绍一些yum_repository模 ...
- Zabbix3.0.4监控Windows的CPU使用百分比并在CPU使用率超过90%触发报警
Zabbix3.0.4监控Windows的CPU使用百分比 Zabbix 自带的模块没有 CPU 使用率(百分比)这个监控项,我们可以通过添加计数器的方式实现 CPU 百分比的监控. 1.在Zabbi ...
- JS:判断是否是移动端
通过User-Agent判断 代码: if(navigator.userAgent.match(/mobile/i)) { //业务层代码 $('body').removeClass("si ...