Kuberbetes Pod调度基础

DaemonSet 和 CronJob 等相关内容,具体如下:

  1. Replication Controller 和 ReplicaSet
    • Replication Controller:确保 Pod 副本数达到期望值,自动替换失败、删除或终止的 Pod,类似于进程管理程序,监视多个节点上的多个 Pod。使用示例包括编辑和创建文件,以及删除 Pod 和 Replication Controller 等操作。
    • ReplicaSet:是下一代 Replication Controller,支持标签选择器,主要用于 Deployment 协调创建、删除和更新 Pod,一般建议使用 Deployment 来自动管理,除非有特殊需求。定义 ReplicaSet 的实例包括编辑文件和创建 RS 等操作。
  2. 标签与标签选择器
    • 标签:是用来标识 K8S 对象的一组附加在其上的键值对,通过标签可以方便地筛选或排除一组对象,标签的名称和值有一定的规范要求。
    • 标签选择器:APIServer 支持基于等式和基于集合的两种标签选择器,基于集合的标签选择器支持多种操作符,可以同时选择一组对象,两种选择方式之间的选择条件在相同意义上是等价的。
    • 标签与标签选择器举例:给出了基于等式和基于集合的标签选择器的具体示例。4
  3. 无状态应用管理 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。
  4. 有状态应用管理 StatefulSet
    • 定义:常用于部署有状态的且需要有序启动的应用程序,为每个 Pod 维护了一个标识,Pod 不可互换,有持久的标识符,有状态服务需要在本地存储持久化数据,典型应用是分布式数据库,实例之间有依赖的拓扑关系,常用于实现事务。
    • 特征:包括数据方面需要在本地存储持久化数据,结果方面实例之间请求结果可能存在不一致,关系方面分布式节点实例之间有依赖的拓扑关系,影响方面停止分布式集群中任一实例 pod 可能会导致数据丢失或集群崩溃,示例方面有 mysql 数据库、kafka、zookeeper、Redis 主从架构等,资源方面使用 statefulSet,创建方式为 statefulSet 管理,Pod 具有唯一性、顺序性、稳定的网络标识和持久化存储等特征。
    • 编写 statefulSet 资源文件:包括定义 statefulSet 资源文件和创建 statefulSet 等步骤,创建后可以查看 statefulSet 状态和群集状态。
    • statefulSet 扩容:通过修改副本数来实现扩容。
    • 缩容:包括动态显示缩容流程、修改副本数和查看最终结果等步骤。
    • 非级联删除 statefulSet:使用非级联方式删除 StatefulSet 时,Pod 不会被删除,需要手动删除对应的持久卷声明。
    • 级联删除 statefulSet:使用级联方式删除 StatefulSet 时,StatefulSet 和它的 Pod 都会被删除。
  5. 守护进程集 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。
  6. CronJob
    • 定义:用于以时间为基准的周期性地执行任务,与 Linux 系统上的 CronJob 类似。
    • 创建 CronJob:包括编辑 Cronjob 文件和使用 kubectl create 命令创建 CronJob 等步骤,创建后可以查看 CronJob、生成的 jobs 和 pod 的执行日志,并可以删除 CronJob。

标签选择器的操作符包括

  1. 基于等式的标签选择方式:可以使用 =、==、!= 三种操作符来进行选择,前两个的含义是一样的,都代表相等,第三种代表不等。选择条件可以通过 "," 叠加,例如 date=day1,name!=build 代表选择 date 值为 day1 且 name 值不为 bui1d 的对象。
  2. 基于集合的标签选择方式:支持的操作符有 in、notin、exists。具体的使用方法为:
    • 选择 date 包含有值为 day1、day2、day3 的标签:date in (day1,day2,day3)。
    • 选择 name 值不为 bui1d、pipline 的标签:name notin (bui1d,pipline)。
    • 选择所有包含 test 的标签:test。
    • 选择所有不包含 test 的标签:!test。

基于集合的标签选择器也支持使用 "," 分隔以同时叠加选择,相同意义上的选择条件在这两种选择方式之间是等价的。

相关推荐
阿尔帕兹2 分钟前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
ZHOU西口1 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
景天科技苑4 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge5 小时前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇5 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
川石课堂软件测试7 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
昌sit!13 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
追风林14 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
A ?Charis16 小时前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
城南vision16 小时前
Docker学习—Docker核心概念总结
java·学习·docker