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。

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

相关推荐
huosenbulusi5 小时前
helm推送到harbor私有库--http: server gave HTTP response to HTTPS client
云原生·容器·k8s
不会飞的小龙人6 小时前
Docker Compose创建镜像服务
linux·运维·docker·容器·镜像
不会飞的小龙人6 小时前
Docker基础安装与使用
linux·运维·docker·容器
张3蜂6 小时前
docker Ubuntu实战
数据库·ubuntu·docker
元气满满的热码式11 小时前
K8S中Service详解(三)
云原生·容器·kubernetes
染诗11 小时前
docker部署flask项目后,请求时总是报拒绝连接错误
docker·容器·flask
张3蜂12 小时前
docker 部署.netcore应用优势在什么地方?
docker·容器·.netcore
心惠天意15 小时前
docker-compose篇---创建jupyter并可用sudo的创建方式
docker·jupyter·容器
huaweichenai16 小时前
windows下修改docker的镜像存储地址
运维·docker·容器
菠萝炒饭pineapple-boss16 小时前
Dockerfile另一种使用普通用户启动的方式
linux·docker·dockerfile