【05】Kubernets:资源清单(控制器 - ReplicaSet)
写在前面的话
从上一章节开始,我们一直在学习关于自主式 Pod 的资源清单编写, 但是自主式 Pod 存在着一个问题,就是和我们直接 docker run 运行 docker 容器一样。如果我们想以集群的形式并配合复杂的处理逻辑就不那么好用了。
针对这点,我们将 Pod 的处理交给了控制器。
关于控制器
再详细讲解控制器怎么使用之前,我们得知道控制器是啥,以及我们需要使用哪些。
在讲解 K8S 的 Master 组成的时候说过,Master 节点有个重要组件叫做 Controller Manager。
Controller Manager 由 kube-controller-manager 和 cloud-controller-manager 组成,是 K8S 的核心。
Cloud controller 一般在配合云服务的时候再使用,所以不是我们关心得重点。
kube-controller-manager 由以下主要的控制器组成:
1. Replication Controller(已经废弃)
2. Replicaset
3. Deployment Controller
4. DaemonSet Controller
5. Job / CronJob Controller
6. Volume Controller
7. StatefulSet Controller
8. Node Controller
9. Service Controller
10. 等等...
常见控制器说明
Replication Controller:
保证了再特定时间内运行的副本数了,多退少补。并且不会去关注 pod 的状态,只要你被删除或者被终止,自动就把你替换掉。他就像一个进程管理器监管着多个节点的 pod。
该控制器只对 restartPolicy 配置为默认 Always 的生效,且控制器永远不会自己关闭。但我们更希望控制器是伴随着服务的生命周期创建删除,因为程序会更新。
ReplicaSet:
新一代的副本控制器,属于 Replication Controller 的升级版,区别在于新版本支持更为高级的 selector。
包含 3 个关键点:用户期望副本数,标签选择器,Pod 资源模板。
Deployment:
调度 ReplicaSet 实现我们的需求,官方也建议我们使用 Deployment 替代 ReplicaSet。例如:
使用 Deployment 来创建 ReplicaSet,ReplicaSet 会在后台启动相关的 Pod 并检测其状态。
当我们更新 Deployment 中定义的 Pod 状态时,会新建 ReplicaSet 并根据配置的策略,让 ReplicaSet 按照一定的规则来重建 Pod,实现切换。
StatefulSet:
主要用于解决有状态的服务的问题。后面会专门用到。
DaemonSet:
保证每个节点上都有运行一个副本,常用来作为集群日志收集,监控。
Replicaset Controller 资源清单
对于 Replicaset Controller 的资源清单,我们也可以像查看 Pod 一样查看:
kubectl explain rs
我们可以将 ReplicaSet 简写成为 rs,就像之前我们使用 service 简写成 svc 一样。
在 ReplicaSet 中,前面提到了 3 个关键点:副本数,标签选择器,Pod 资源模板。其结果如下表:
rs | |||
---|---|---|---|
apiVersion | extensions/v1beta1 | ||
kind | ReplicaSet | ||
metadata | |||
name | rs 的名称 | ||
namespace | 所属命名空间 | ||
labels | rs 的标签 | ||
annotations | rs 的说明 | ||
spec | |||
replicas | 副本数 | ||
selector | 标签选择器 | ||
matchExpressions | KV 列表 | ||
matchLabels | 标签选择键值对 | ||
template | 模板 | ||
metadata | Pod 的 metadata | ||
spec | Pod 的 spec |
相当于在 Pod 外面嵌套了一层,用来定义 rs 的相关信息,如副本数,标签选择器。例如(红色部分就是 Pod 定义):
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
name: rs-demo
namespace: default
labels:
app: rs
release: stable
annotations:
ezops.cn/create-by: "Dylan"
spec:
replicas: 3
selector:
matchLabels:
app: erp
release: stable
template:
metadata:
name: rs-pod
namespace: default
labels:
app: erp
release: stable
annotations:
ezops.cn/create-by: "Dylan"
spec:
containers:
- name: rs-container
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
- name: https
containerPort: 443
创建查看:
kubectl create -f rs-demo.yaml
kubectl get rs -o wide
结果如下:
对于 ReplicaSet 有几点需要我们注意:
1. 标签选择器中的标签在我们的 Pod 中必须有满足条件的。
2. ReplicaSet 创建完成后再去删除 Pod 会自动创建新的 Pod。
3. 修改集群中其他 Pod 的标签,改为满足 ReplicaSet 中标签选择器定义的需求。ReplicaSet 会干掉自己的 Pod,知道数量等于 replicas 定义的副本数。
4. 直接使用 edit 修改 ReplicaSet 的副本数量能够生效,但是修改镜像需要 Pod 在重启以后才能生效。
执行测试:
kubectl get pods
# 修改副本数为 5
kubectl edit rs rs-demo
# 再度查看
kubectl get pods
# 修改镜像版本为 v2
kubectl edit rs rs-demo
# 查看
kubectl get rs -o wide
# 访问查看
curl 10.1.2.4
结果如图:
小结
我这里准备将每个点都单独作为一个独立的章节记录,ReplicaSet 其实在之后的不会用到,但是我们需要理解原理,因为 Deployment 调度的其实就是 ReplicaSet。
【05】Kubernets:资源清单(控制器 - ReplicaSet)的更多相关文章
- 【07】Kubernets:资源清单(控制器 - DaemonSet)
写在前面的话 前面讲解了 Pod / ReplicaSet / Deployment 的资源清单,我们这里谈一下 DaemonSet 的资源清单. 之前说过,DaemonSet 控制器能够保证资源在每 ...
- 【06】Kubernets:资源清单(控制器 - Deployment)
写在前面的话 上一节主要简单的提了一下控制器都有哪些常用的,并且简单的功能是啥,最后一并提了 ReplicaSet 控制器. 但是 ReplicaSet 一般不需要我们直接配置,多以从本节开始,开始学 ...
- 【04】Kubernets:资源清单(pod)
写在前面的话 前面我们提到过,纯手敲 K8S 名称管理 K8S 服务只是作为我们了解 K8S 的一种方案,而我们最终管理 K8S 的方法还是通过接下来的资源清单的方式进行管理. 所以从本章节开始,将会 ...
- k8s学习笔记之四:资源清单定义入门
第一章.k8s中的资源 1.什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 2.在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet D ...
- Kubernetes学习之路(十二)之Pod控制器--ReplicaSet、Deployment
一.Pod控制器及其功用 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会重新新建pod的资源. pod控制器 ...
- (六)Kubernetes Pod控制器-ReplicaSet和Deployment和DaemonSet
Pod控制器相关知识 控制器的必要性 自主式Pod对象由调度器调度到目标工作节点后即由相应节点上的kubelet负责监控其容器的存活状态,容器主进程崩溃后,kubelet能够自动重启相应的容器.但对出 ...
- Kubernetes 学习5 kubernetes资源清单定义入门
一.kubernetes是有一个restful风格的 API,把各种操作对象都一律当做资源来管理.并且可通过标准的HTTP请求的方法 GET,PUT,DELETE,POST,等方法来完成操作,不过是通 ...
- kubernetes 资源清单定义入门
k8s中的资源 什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet Deploymen ...
- Kubernetes【K8S】(三):资源清单
K8S中的资源 K8S中所有的内容都抽象为资源,资源实例化之后叫做对象.一般使用yaml格式的文件来创建符合我们预期的pod,这样的yaml文件我们一般成为资源清单. 名称空间级资源 工作负载型资源( ...
随机推荐
- 前端技术扫盲-rem和px以及em关系
首先rem,em和px都是长度单位,下面单独介绍各个单位的概念: px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的.PC端用比较多的. em是相对长度单位.相对于当前对象内 ...
- i春秋-第三届“百越杯”福建省高校网络空间安全大赛-Do you know upload?
进去提示有提示文件包含漏洞 拿到源码发现这里上传验证只有MIME验证 可直接抓包改 image/gif 绕过 接下来就是这次学到的点了 菜刀连接过后怎么都找不到flag文件,但是这里找到了数据库配置文 ...
- selenium鼠标操作 包含右击和浮层菜单的选择
感谢http://www.cnblogs.com/tobecrazy/p/3969390.html 博友的分享 最近在学习selenium的一些鼠标的相关操作 自己在百度的相关操作代码 /** * ...
- JAVA中为什么要配置环境变量?怎么配置环境变量?
1.为什么要配置环境变量? 答:为了让javac命令(编译命令)和Java命令(运行命令)能在任何文件夹都能运行. 2.怎么配置环境变量? JAVA_HOME : D:\develop\Java\jd ...
- 8.了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透?
作者:中华石杉 面试题 了解什么是 redis 的雪崩.穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透? 面试官心理分析 其实这是问到缓存必问的,因为缓 ...
- HBuilder创建app 基础
一.了解HBuilder HBuilder内封装了大量的书籍,极大方便了使用 官方文档: http://dev.dcloud.net.cn/mui/ui/ 关于布局: mhead 表头.mbody ...
- 201871010133-赵永军《面向对象程序设计(java)》第八周学习总结
201871010133-赵永军<面向对象程序设计(java)>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...
- python SSL 错误
python 使用pip 安装模块是提示SSL错误 出现该问题的原因由于系统的openssl是1.0.1的版本,对于python3.7太老了,需要更新为openssl1.0.2或者libressl2. ...
- JQuery:
一 jQuery是什么? <1> jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. <2>jQuery是继 ...
- TCP/IP协议族(五)
目前实际使用的网络模型是 TCP/IP 模型,它对 OSI 模型进行了简化,只包含了四层,从上到下分别是应用层.传输层.网络层和链路层(网络接口层),每一层都包含了若干协议. 协议(Protocol) ...