写在前面的话

从上一章节开始,我们一直在学习关于自主式 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)的更多相关文章

  1. 【07】Kubernets:资源清单(控制器 - DaemonSet)

    写在前面的话 前面讲解了 Pod / ReplicaSet / Deployment 的资源清单,我们这里谈一下 DaemonSet 的资源清单. 之前说过,DaemonSet 控制器能够保证资源在每 ...

  2. 【06】Kubernets:资源清单(控制器 - Deployment)

    写在前面的话 上一节主要简单的提了一下控制器都有哪些常用的,并且简单的功能是啥,最后一并提了 ReplicaSet 控制器. 但是 ReplicaSet 一般不需要我们直接配置,多以从本节开始,开始学 ...

  3. 【04】Kubernets:资源清单(pod)

    写在前面的话 前面我们提到过,纯手敲 K8S 名称管理 K8S 服务只是作为我们了解 K8S 的一种方案,而我们最终管理 K8S 的方法还是通过接下来的资源清单的方式进行管理. 所以从本章节开始,将会 ...

  4. k8s学习笔记之四:资源清单定义入门

    第一章.k8s中的资源 1.什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 2.在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet D ...

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

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

  6. (六)Kubernetes Pod控制器-ReplicaSet和Deployment和DaemonSet

    Pod控制器相关知识 控制器的必要性 自主式Pod对象由调度器调度到目标工作节点后即由相应节点上的kubelet负责监控其容器的存活状态,容器主进程崩溃后,kubelet能够自动重启相应的容器.但对出 ...

  7. Kubernetes 学习5 kubernetes资源清单定义入门

    一.kubernetes是有一个restful风格的 API,把各种操作对象都一律当做资源来管理.并且可通过标准的HTTP请求的方法 GET,PUT,DELETE,POST,等方法来完成操作,不过是通 ...

  8. kubernetes 资源清单定义入门

    k8s中的资源 什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet Deploymen ...

  9. Kubernetes【K8S】(三):资源清单

    K8S中的资源 K8S中所有的内容都抽象为资源,资源实例化之后叫做对象.一般使用yaml格式的文件来创建符合我们预期的pod,这样的yaml文件我们一般成为资源清单. 名称空间级资源 工作负载型资源( ...

随机推荐

  1. 前端技术扫盲-rem和px以及em关系

    首先rem,em和px都是长度单位,下面单独介绍各个单位的概念: px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的.PC端用比较多的. em是相对长度单位.相对于当前对象内 ...

  2. i春秋-第三届“百越杯”福建省高校网络空间安全大赛-Do you know upload?

    进去提示有提示文件包含漏洞 拿到源码发现这里上传验证只有MIME验证 可直接抓包改 image/gif 绕过 接下来就是这次学到的点了 菜刀连接过后怎么都找不到flag文件,但是这里找到了数据库配置文 ...

  3. selenium鼠标操作 包含右击和浮层菜单的选择

    感谢http://www.cnblogs.com/tobecrazy/p/3969390.html  博友的分享 最近在学习selenium的一些鼠标的相关操作 自己在百度的相关操作代码 /** * ...

  4. JAVA中为什么要配置环境变量?怎么配置环境变量?

    1.为什么要配置环境变量? 答:为了让javac命令(编译命令)和Java命令(运行命令)能在任何文件夹都能运行. 2.怎么配置环境变量? JAVA_HOME : D:\develop\Java\jd ...

  5. 8.了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透?

    作者:中华石杉 面试题 了解什么是 redis 的雪崩.穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透? 面试官心理分析 其实这是问到缓存必问的,因为缓 ...

  6. HBuilder创建app 基础

    一.了解HBuilder HBuilder内封装了大量的书籍,极大方便了使用 官方文档: http://dev.dcloud.net.cn/mui/ui/ 关于布局: mhead  表头.mbody ...

  7. 201871010133-赵永军《面向对象程序设计(java)》第八周学习总结

    201871010133-赵永军<面向对象程序设计(java)>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...

  8. python SSL 错误

    python 使用pip 安装模块是提示SSL错误 出现该问题的原因由于系统的openssl是1.0.1的版本,对于python3.7太老了,需要更新为openssl1.0.2或者libressl2. ...

  9. JQuery:

    一 jQuery是什么? <1> jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. <2>jQuery是继 ...

  10. TCP/IP协议族(五)

    目前实际使用的网络模型是 TCP/IP 模型,它对 OSI 模型进行了简化,只包含了四层,从上到下分别是应用层.传输层.网络层和链路层(网络接口层),每一层都包含了若干协议. 协议(Protocol) ...