Controller:执行运行POD的任务
控制器,Kubernetes一般情况人们不会直接创建 Pod,而是通过创建Controller来管理 Pod 的。Controller 中定义了 Pod 的部署特性,比如有几个副本,在什么样的 Node 上运行等。为了满足不同的业务场景,Kubernetes 提供了多种 Controller,包括 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 等,我们逐一讨论。一般创建POD,都是直接创建Deployment的kind,然后定义该Deployment下有几个pod的副本,一般情况至少有俩,保证pod的高可用。注意:deployment下创建的多个pod的功能和内容是一模一样的,多个pod被分配到多个节点,以便实现负载均衡和高可用,pod比较轻量,就算挂了一个,还可以自动销毁后再自动启动一个,所以,不要把一个deployment下的多个pod分开理解,他们是一个整体
Deployment #是最常用的 Controller。Deployment 可以管理 Pod 的多个副本,并确保 Pod 按照期望的状态运行。比ReplicaSet还多了几个功能支持滚动更新和回滚,支持声明式配置的功能
- ReplicaSet 实现了 Pod 的多副本管理,一般情况ReplicaSet管理无状态的Pod。使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本,我们通常不需要直接使用 ReplicaSet。 ReplicaSet一般由下面三个组件组成,当启动Pod时,按照如下顺序进行创建Pod
- 用户期望的副本数,即希望创建多少个与该Pod一样的副本,进行统一管理,创建在不同Node上以实现负载均衡以及高可用,这些Pod的功能与服务一模一样
- 标签选择器,以便选定由自己管理和控制的Pod,如果标签选择器选择的pod数量少于用户期望的副本数,则使用Pod资源模板
- Pod资源模板,新建Pod资源
- Deployment的滚动更新可以进行定制化配置,比如仅更新一个pod到新版,观察其稳定情况几天后决定是否更新现网其余pod,使用的方式详见kubectl set image命令的内容
DaemonSet #用于每个 Node 最多只运行一个 Pod 副本的场景。正如其名称所揭示的,DaemonSet 通常用于运行 daemon。
- 当一个服务可以想象成守护进程的时候,使用该类型
StatefulSet #StatefulSet表示对Pod设定一致性身份(consistent identities)
Identities的定义:
- Network:单一稳定的主机名和DNS
- Storage: 具有同样的一些VolumeClaims. StatefulSet保证给定的网络标识将始终映射到相同的存储标识。
StatefulSet能够保证 Pod 的每个副本在整个生命周期中名称是不变的,一般情况StatefulSet管理有状态的Pod。而其他 Controller 不提供这个功能,当某个 Pod 发生故障需要删除并重新启动时,Pod 的名称会发生变化。同时 StatefulSet 会保证副本按照固定的顺序启动、更新或者删除。
- 当需要保持Pod不变,比如数据库类型的服务,则使用该类型
- 当一个有状态的应用失败需要重启的时候,比如主从结构的数据库,其中需要进行的操作时非常复杂的,这时候需要通过一个脚本来定义statefulset的功能,如果以后的研发人员可以基于kubernetes来开发有状态的应用(比如数据库等),让新的应用在开发的时候就想着要放在云上运行,这种云原生的应用,则可以让statefulset更好的支持他
使用StatefulSet的说明:
- 至少需要三个组件:
- headless service无头服务:使用无头服务类型,确保解析的名称直达后端IP
- statefulset:
- VolumeClaimTemplate存储卷申请模板:每个Pod都要有一个单独Volume
HPA #Horizontal Pod Autoscaler
Job #用于运行结束就删除的应用。而其他 Controller 中的 Pod 通常是长期持续运行。
定义Deployment对象的yaml文件
apiVersion: XXXX kind: Deployment metadata: name: NAME #指定该资源的名字 sepc: #指明该Deployment的规格 replicas: NUM #指明运行Pod的副本数量,默认为1 selector: matchLabels: KYE: YALUE strategy: #定义用一个新的pod代替现有pod的部署策略(更新pod的策略) rollingUpdate: #当更新策略为rollingUpdate时,需要配置滚动更新的参数 maxSurge: NUM #设定在更新时最大可用的Pod数,就是先添加几个新的Pod再删除老的 maxUnavailable: NUM #设定在更新时最大不可用的Pod数 type: Recreate|RollingUpdate #指定更新策略的类型,默认为RollingUpdate(滚动更新);Recreate为重塑,删除一个更新一个 template: #定义pod的模板,即使用上文中Pod类型的metadata和spec metadata: #与Pod定义的内容基本一样 .... spec: #与Pod定义的内容基本一样 ......
原文地址:https://www.cnblogs.com/Forsake-dream/p/9980748.html