DaemonSet 和 CronJob 等相关内容,具体如下:
- Replication Controller 和 ReplicaSet :
- Replication Controller:确保 Pod 副本数达到期望值,自动替换失败、删除或终止的 Pod,类似于进程管理程序,监视多个节点上的多个 Pod。使用示例包括编辑和创建文件,以及删除 Pod 和 Replication Controller 等操作。
- ReplicaSet:是下一代 Replication Controller,支持标签选择器,主要用于 Deployment 协调创建、删除和更新 Pod,一般建议使用 Deployment 来自动管理,除非有特殊需求。定义 ReplicaSet 的实例包括编辑文件和创建 RS 等操作。
- 标签与标签选择器 :
- 标签:是用来标识 K8S 对象的一组附加在其上的键值对,通过标签可以方便地筛选或排除一组对象,标签的名称和值有一定的规范要求。
- 标签选择器:APIServer 支持基于等式和基于集合的两种标签选择器,基于集合的标签选择器支持多种操作符,可以同时选择一组对象,两种选择方式之间的选择条件在相同意义上是等价的。
- 标签与标签选择器举例:给出了基于等式和基于集合的标签选择器的具体示例。4
- 无状态应用管理 Deployment :
- 定义和特点:无状态服务对单次请求的处理不依赖其他请求,服务器本身不存储任何信息,多个实例可以共享相同的持久化数据,响应结果完全一致,多服务实例之间没有依赖关系,在 k8s 控制器中动态启停无状态服务的 pod 不会对其它的 pod 产生影响,相关的 k8s 资源有 ReplicaSet、ReplicationController、Deployment,Deployment 被设计用来管理无状态服务的 pod,每个 pod 完全一致,创建顺序没有顺序,名称随机,重新启动调度后名称与 IP 会发生变化,背后是共享存储的,扩缩容方式为随机缩容。
- 创建方式:包括编写 Deployment 文件、使用 kubectl create 创建 Deployment、查看 Deployment 的状态、使用 rollout 查看创建过程状态、查看对应的 RS 和创建的 pod 等步骤。
- 更新 Deployment:通过更改 Deployment 文件的配置文件或镜像版本,Deployment 会创建新的 ReplicaSet 并对 Pod 进行滚动升级,包括更新 pod 的 image、查看更新过程、查看 RS 和 Deployment 的详细信息等步骤。
- 回滚 deployment:当更新的版本不稳定或配置不合理时,可以对其进行回滚操作,包括多更新几次 deployment、查看更新历史、查看某次更新的详情、回滚到指定版本和回滚到上次版本等步骤。
- 扩容 deployment:通过调整 pod 的副本数来实现扩容。
- 暂停和恢复 deployment 更新:可以暂停更新并进行相关操作,最后统一开始更新。
- 删除 Deployment:使用 kubectl delete 命令删除 Deployment。
- 有状态应用管理 StatefulSet :
- 定义:常用于部署有状态的且需要有序启动的应用程序,为每个 Pod 维护了一个标识,Pod 不可互换,有持久的标识符,有状态服务需要在本地存储持久化数据,典型应用是分布式数据库,实例之间有依赖的拓扑关系,常用于实现事务。
- 特征:包括数据方面需要在本地存储持久化数据,结果方面实例之间请求结果可能存在不一致,关系方面分布式节点实例之间有依赖的拓扑关系,影响方面停止分布式集群中任一实例 pod 可能会导致数据丢失或集群崩溃,示例方面有 mysql 数据库、kafka、zookeeper、Redis 主从架构等,资源方面使用 statefulSet,创建方式为 statefulSet 管理,Pod 具有唯一性、顺序性、稳定的网络标识和持久化存储等特征。
- 编写 statefulSet 资源文件:包括定义 statefulSet 资源文件和创建 statefulSet 等步骤,创建后可以查看 statefulSet 状态和群集状态。
- statefulSet 扩容:通过修改副本数来实现扩容。
- 缩容:包括动态显示缩容流程、修改副本数和查看最终结果等步骤。
- 非级联删除 statefulSet:使用非级联方式删除 StatefulSet 时,Pod 不会被删除,需要手动删除对应的持久卷声明。
- 级联删除 statefulSet:使用级联方式删除 StatefulSet 时,StatefulSet 和它的 Pod 都会被删除。
- 守护进程集 DaemonSet :
- 定义:确保全部(或符合条件)的节点上运行一个 Pod 副本,当有新的节点加入集群时会为其新增一个 Pod,当节点从集群中移除时,这些 Pod 会被回收,删除 DaemonSet 将会删除它创建的所有的 Pod。20
- 定义一个 DaemonSet:包括 apiVersion、kind、metadata、spec 等部分,指定了 Pod 的相关信息。
- 创建 DaemonSet:包括创建 namespace 和使用 kubectl create 命令创建 DaemonSet 等步骤。21
- 查看 DaemonSet:使用 kubectl get ds 命令查看 DaemonSet 的相关信息。
- 查看 pod 所在的节点:使用 kubectl get pod 命令查看 pod 所在的节点信息。
- 删除 DaemonSet:使用 kubectl delete ds 命令删除 DaemonSet。
- CronJob :
- 定义:用于以时间为基准的周期性地执行任务,与 Linux 系统上的 CronJob 类似。
- 创建 CronJob:包括编辑 Cronjob 文件和使用 kubectl create 命令创建 CronJob 等步骤,创建后可以查看 CronJob、生成的 jobs 和 pod 的执行日志,并可以删除 CronJob。
标签选择器的操作符包括:
- 基于等式的标签选择方式:可以使用 =、==、!= 三种操作符来进行选择,前两个的含义是一样的,都代表相等,第三种代表不等。选择条件可以通过 "," 叠加,例如 date=day1,name!=build 代表选择 date 值为 day1 且 name 值不为 bui1d 的对象。
- 基于集合的标签选择方式:支持的操作符有 in、notin、exists。具体的使用方法为:
- 选择 date 包含有值为 day1、day2、day3 的标签:date in (day1,day2,day3)。
- 选择 name 值不为 bui1d、pipline 的标签:name notin (bui1d,pipline)。
- 选择所有包含 test 的标签:test。
- 选择所有不包含 test 的标签:!test。
基于集合的标签选择器也支持使用 "," 分隔以同时叠加选择,相同意义上的选择条件在这两种选择方式之间是等价的。