当前位置: 首页 > news >正文

Kubernetes Pod调度基础

  1. pod控制器
  • 复制控制器(RC)

(为pod做副本)

  • 复制集(RS)集合(set)

(为pod做副本),是一个基于集合的标签选择器

与复制控制器最大的不同就是在标签与选择器方面

    • APIServer支持两种标签选择器
      • 基于等式的标签选择器
        • 在这种选择方式下可以使用=、==、!=三种操作符来进行选择,前两个的含义是一样的,都代表相等,第三种代表不等。选择条件可以通过,叠加,例如date=day1,name!=build 代表选择 date 值为 day1 且 name 值不为 build 的对象。
      • 基于集合的标签选择器
        • 这种选择器可以同时选择一组对象。支持的操作符有:in、notin、exists。具体的使用方法为:选择 date 包含有值为 day1、day2、day3 的标签:date in(day1,day2,day3)选择 name 值不为 build、pipline 的标签:name notin(build,pipline)选择所有包含 test 的标签:test。选择所有不包含 test的标签:!test基于集合的标签选择器也支持使用“,”分隔以同时叠加选择,相同意义上的选择条件在这两种选择方式之间是等价的。
  • 无状态集 deployment(部署):是复制集的管理者
    • 滚动更新(不影响当正在进行的应用程序)——》附带回滚
    • 修改副本数量(扩缩容)
    • 服务器本身不存储任何信息
    • 没有特殊状态的服务,服务器对请求进行无差别处理
    • 特点:
      • 数据方面:不会在本地持久化存储数据,多个实例共享相同的持久化数据
      • 结果方面:多个服务实例对于同一个用户请求的响应结果是完全一致的
      • 关系方面:服务实例之间没有依赖关系
      • 影响方面:在k8s控制器中动态启动或停止无状态服务的pod并不会对其他pod产生影响
      • 示例:nginx实例,Tomcat实例、Web应用
  • 有状态集(STS)
    • 容器数据持久化保持
    • 常用于部署有状态的且需要有序启动的应用程序,例如Elasticsearch集群、MongoDB集群、RabbitMQ集群、Redis集群、Kafka集群、Zookeeper集群
    • 特征:
      • 数据方面:需要持久化存储、例如分布式数据库
      • 结果方面:实例之间,请求结果可能不一致
      • 关系方面:分布式节点之间有依赖关系、例如主从关系
      • 影响方面:k8s停止分布式集群中任何一个实例,都有可能会导致数据丢失或者集群崩溃

(stateful管理有状态的应用,pod有以下特征)

1、唯一性:每个pod被分配一个唯一序列号

2、顺序性:pod启动、更新、销毁都是按顺序进行

3、稳定的网络标识:pod主机名、DNS地址不会随着pod重新调度而发生变化

4、稳定的持久化存储:pod被重新调度后,仍然能挂载原有的PV,保证了数据的完整性和一致性

  • 守护进程集(DS)
    • 有时候我们需要在每个 Kubernetes 节点或符合条件的节点上都部署某个应用,那么就可以使用 Kubernetes 的 DaemonSet 调度 Pod。Daemonset 确保全部(或符合条件)的节点上运行一个Pod 副本。当有新的节点加入集群时,也会为他们新增一个 Pod,当节点从集群中移除时,这些 Pod会被回收,删除 Daemonset将会删除它创建的所有的 Pod。
  • 计划任务

无状态集和有状态集之间的区别:

无状态服务

服务不依赖自身的状态,实例的状态数据可以维护在内存中。

任何一个请求都可以被任意一个实例处理。

不存储状态数据,实例可以水平拓展,通过负载均衡将请求分发到各个节点。

在一个封闭的系统中,只存在一个数据闭环。

通常存在于单体架构的集群中。

有状态服务

服务本身依赖或者存在局部的状态数据,这些数据需要自身持久化或者可以通过其他节点恢复。

一个请求只能被某个节点(或者同等状态下的节点)处理。

存储状态数据,实例的拓展需要整个系统参与状态的迁移。

在一个封闭的系统中,存在多个数据闭环,需要考虑这些闭环的数据一致性问题。

通常存在于分布式架构中。

pod调度命令

  1. 创建一个资源对象类型为复制控制器的pod

  1. 复制控制器的yaml文件内容

  1. 查看创建的pod详细信息

  1. 删除其中一个副本(指定要删除的副本的名称)

  1. 由于yaml文件中指定的pod的副本数量是3个,只删除其中一个,删除之后会自动生成一个新的pod的副本

  1. 删除整个pod(指定pod的yaml文件)

  1. 创建一个资源对象类型为复制集的pod

  1. 复制集的yaml文件的内容

  1. 查看、删除方法一如既往
  2. 创建一个无状态集(deployment),

  1. 查看deployment状态

  1. 使用rollout查看deployment创建过程

  1. 更新deployment的pod的镜像版本
    1. 使用命令行更新

    1. 在线编辑

  1. 更新完镜像版本之后,有生成新的

  1. 使用describe查看跟新的详细信息

  1. 查看deployment历史更新操作

  1. 查看特定某一次的更新操作

  1. 回滚到某一次的版本

(后面不跟回滚到的某一次,默认是回滚到上一次的版本)

  1. 调整pod的副本数量

  1. 创建有状态集statefulset控制器

  1. 查看集群状态

  1. 查看statefulset状态

  1. 查看pod信息

  1. 扩展集群数量,并查看结果

  1. 非级联删除

删除 statefulset 有两种方式:级联删除和非级联删除。

使用非级联方式删除Statefulset 时,Statefulset 的 Pod 不会被删除。使用级联方式删除Statefulset 时,statefulset 和它的 Pod 都会被删除。

    1. 非级联删除

    1. 级联删除(直接删除指定文件)

  1. 创建守护进程集daemonset
    1. 先创建一个dev的命名空间

    1. 根据yaml文件创建daemonset

    1. 查看daemonset详细信息

    1. 查看pod所在节点(要加上命名空间)

    1. 删除daemonset守护进程集

  1. 创建计划任务CronJob
    1. 创建cronjob

    1. 查看cronjob

    1. 查看生成的pod(由于设定的是每分钟执行一次,所以结果要等一分钟之后才有)

    1. 查看生成的pod

    1. 查看pod生成的日志

    1. 删除cronjob计划任务


http://www.mrgr.cn/news/34499.html

相关文章:

  • 链表练习包括(创建遍历插入删除逆置排序)
  • 常见协议及其默认使用的端口号
  • 全栈开发(二):springBoot3连接mysql数据库
  • Spring Boot | 使用 `@Scheduled`: 定时任务的实现与优化
  • 【论文速看】DL最新进展20240923-长尾综述、人脸防伪、图像分割
  • c语言面试字符串复制
  • Python练习宝典:Day 3 - 选择题 - 字符串与正则表达式、基础练习补充
  • C:内存函数
  • Python 二次开发金橙子打印软件:开启高效打印新旅程
  • 【已解决】键盘输入数字-使用JAVA语言实现键盘输入的数字再通过快速排序算法输出
  • 二期 1.4 Nacos安装部署 - Window版
  • 注册讲堂 | 医疗器械组合包类产品常见问题(2)
  • 【既约分数 / B】
  • ZH_qaq 博客公告
  • 测试面试题:Web端与APP端区别?
  • Linux下搭建iSCSI共享存储-(Linux-IO Target)
  • 【链表操作】链表长度
  • 分享5款全能AI论文写作工具,一键生成万字论文
  • 在线文档搜索服务测试报告
  • 机械快门,电子快门,电子前帘快门 的原理