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

k8s控制器

一、Pod控制器及其功用

Pod控制器,又称之为工作负载(workload),是用于实现管理pod的中间层,确保pod资源符合预期的状态,确保以一定的数量和副本可以运行,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的资源。
 

二、pod控制器有多种类型

1、ReplicaSet: 代用户创建指定数量的pod副本,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能。
ReplicaSet主要三个组件组成:
(1)用户期望的pod副本数量
(2)标签选择器,判断哪个pod归自己管理
(3)当现存的pod数量不足,会根据pod资源模板进行新建
帮助用户管理无状态的pod资源,精确反应用户定义的目标数量,但是RelicaSet不是直接使用的控制器,而是借助于使用Deployment。

2、Deployment:工作在ReplicaSet之上,用于管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功能,还提供声明式配置。
ReplicaSet 与Deployment 这两个资源对象逐步替换之前RC的作用。

3、DaemonSet:用于确保集群中的每一个节点只运行特定的pod副本,通常用于实现系统级后台任务。比如ELK服务
特性:服务是无状态的
服务必须是守护进程

4、StatefulSet:管理有状态应用

5、Job:只要完成就立即退出,不需要重启或重建

6、Cronjob:周期性任务控制,不需要持续后台运行

三、Pod与控制器之间的关系

Pod和控制器之间的关系是通过Label和Label Selector建立的。

每个Pod都可以定义一组Label,而控制器则使用Label Selector来选择和管理这些Pod。

例如,一个Deployment可以定义一个Label Selector来选择具有特定Label的Pod,并管理这些Pod的副本数量、滚动更新等。

四、具体实验

4.1、Deployment

应用场景:web服务
部署无状态应用
管理Pod和ReplicaSet
具有上线部署、副本设定、滚动升级、回滚等功能
提供声明式更新,例如只更新一个新的image

示例:
vim nginx-deployment.yaml

apiVersion: apps/v1  # 指定使用的Kubernetes API版本
kind: Deployment     # 声明这是一个Deployment资源
metadata:name: nginx-deployment  # Deployment的名称labels:               # 为Deployment添加标签,方便后续筛选和管理app: nginx-bq1       # 标签的键为app,值为nginx-bq1
spec:replicas: 3           # 指定要运行的Pod副本数量selector:             # 定义Pod选择器,用于匹配哪些Pod应该被该Deployment管理matchLabels:app: nginx-bq1    # 选择器使用的标签键和值,与Pod模板中的标签一致template:             # 定义Pod模板,用于创建Podmetadata:labels:app: nginx-bq1  # Pod的标签,与选择器中的标签一致,确保Deployment能够正确管理这些Podspec:containers:       # Pod中容器的列表- name: nginx     # 容器的名称image: nginx:1.15.4  # 容器使用的镜像,这里使用的是nginx的1.15.4版本ports:- containerPort: 80  # 容器暴露的端口,这里暴露的是80端口

kubectl create -f nginx-deployment.yaml

kubectl get pods,deploy,rs

 查看控制器配置

kubectl edit deployment/nginx-deployment
 

查看历史版本
kubectl rollout history deployment/nginx-deployment

4.2、SatefulSet

部署有状态应用

  • 常见的应用场景:数据库(主从复制)

需要三个条件

1、启动顺序

2、pod有独立的存储

3、IP地址有独立的变化

StatefulSet 运行一组 Pod,并为每个 Pod 保留一个稳定的标识。 这可用于管理需要持久化存储(2)稳定唯一网络标识(3)的应用。↓

 StatefulSet 为它们的每个 Pod 维护了一个有粘性的 ID。这些 Pod 是基于相同的规约来创建的, 但是不能相互替换:无论怎么调度,每个 Pod 都有一个永久不变的 ID

尽管 StatefulSet 中的单个 Pod 仍可能出现故障, 但持久的 Pod 标识符使得将现有卷与替换已失败 Pod 的新 Pod 相匹配变得更加容易。在这里可以使用存储卷为工作负载提供持久存储

  1. 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
  2. 稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(无头模式,即没有Cluster IP的Service)来实现有序部署,
  3. 有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现有序收缩,有序删除(即从N-1到0)

总结一下

  • 给定 Pod 的存储必须由pv provisioner  基于所请求的 storage class

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

相关文章:

  • Java Web开发:从基础到高级,掌握核心技术与最佳实践,打造高效、安全的Web应用!
  • Unity Pico 实现离线TTS
  • leetcode105.从前序与中序遍历序列构造二叉树
  • 后端向前端传值
  • [SAP ABAP] 将内表数据转换为HTML格式
  • 283.移动零(超简单讲解)
  • [创业之路-198]:华为的成立发展与新中国的建立与发展路径的相似性比较
  • Windows系统VSCode 搭建ESP-IDF环境
  • 【Vue.js 3.0】provide 、inject 函数详解
  • 单步调试Android Framework——App冷启动
  • SAM大模型实践(一)
  • HCIA-Access V2.5_4_1_1路由协议基础_IP路由表
  • 车牌识别之二:车牌OCR识别(包含全部免费的数据集、源码和模型下载)
  • Chinese-Clip实现以文搜图和以图搜图
  • Qt WORD/PDF(四)使用 QAxObject 对 Word 替换(QWidget)
  • 使用 DeepSpeed 微调 OPT 基础语言模型
  • 【并发容器】ConcurrentLinkedQueue:优雅地实现非阻塞式线程安全队列
  • 掌握时间,从`datetime`开始
  • Windows环境 (Ubuntu 24.04.1 LTS ) 国内镜像,用apt-get命令安装RabbitMQ
  • 241217-解决Ollama无法通过配置文件修改模型下载路径的方法
  • VirtualBox使用教程
  • python03-保留字、标识符;变量、常量;数据类型、数据类型之间的转化
  • ST-Linker V2 烧录器详解说明文档
  • STM32 水质水位检测项目(硬件架构)及(软件架构)
  • 实训项目11基于51单片机的门禁监测系统设计
  • Java系统对接企业微信审批项目流程