Pod的控制器

news2024/11/19 3:31:02

Pod的控制器是什么?

pod控制器:工作负载均衡。workload。用于管理pod的中间层。确保pod资源符合预期的状态。

预期状态:

  1. 副本数

  2. 容器的重启策略

  3. 镜像拉取策略

pod出现故障时的重启等等

Pod控制器的类型

1、 replicaSet:指定副本的数量

三个组件:

  1. Pod的副本数

  2. 标签选择器:判断哪个pod归自己管理

  3. 扩缩容

2、 Deployment控制器,他是工作在replicaSet之上。管理无状态应用。目前是最好的控制器。支持滚动跟新和回滚。提供声明式配置。

3、 statefulSet:也是控制器的一种,管理有状态的应用。也可也设置副本数,可以扩缩容。 Pod的序号是固定的。重启之后,Pod的名称也不会发生变化。表示有状态的pod

4、 DaemonSet:可以在所有节点部署一个pod。它没有副本数。可以限制部署的节点。也是无状态应用。服务必须是守护进程。例如: ingress、logstash、flannel

5、 job:工作pod控制器。执行完成即可退出。不需要重启,不需要重建。

6、 cronjob:周期性的定时任务控制器。不需要再后台持续运行。

Pod与控制器之间的关系

1、 controllers

1、 controllers:管理控制器

pod通过label---selector进行关联。

通过标签和选择标签和控制器关联

strategy字段:

web应用不需要加strategy字段会导致服务中断。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx1
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx1
  strategy:
      type: Recreate
#每次有更新,都会把旧的pod全部停止,然后再启动新的实例。服务可能会短暂的终端。无特殊需要可不加
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
      - image: nginx:1.22
        name: nginx

strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25%

这是deployment的默认更新策略

rollingUpdate:滚动跟新

maxSurge: 25% 升级过程中,新启动的pod数量不能超过期望pod数的25%

maxUnavailable: 25% 升级过程中,新的pod启动好后,销毁的旧pod数量不能超过期望pod的25%

升级和销毁都不能超过期望pod的25%这样不会导致业务中断

2、 无状态应用

2、 无状态应用:pod名称是无序的。认为所有pod都是一体的。共享NFS存储。

所有deployment下的pod共享一个存储。

statfulSet:有状态应用。pod的名称是有序的。所有pod都是独立的。存储卷也是独立的。顺序从0开始到n。

delete删除也不会改变pod的序号。扩缩容也是有序扩缩容。同样从0开始

headless service:无头服务,他没有clusterIP。必须要有动态的pvc

statfulSet有状态应用控制器实验举例:

apiVersion: v1
kind: Service
metadata:
  name: nginx-web
  labels:
    app: nginx2

spec:
  ports:
  - port: 80
    targetPort: 80
  clusterIP: ""
  selector:
    app: nginx2
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
  labels:
    app: nginx2

spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx2
  serviceName: "nginx-web"
  template:
    metadata:
      labels:
        app: nginx2
    spec:
    apiVersion: v1
kind: Service
metadata:
  name: nginx-web
  labels:
    app: nginx2

spec:
  ports:
  - port: 80
    targetPort: 80
  clusterIP: ""
#clusterIP必须为空
  selector:
    app: nginx2
---
apiVersion: apps/v1
#开始创建控制器
kind: StatefulSet
metadata:
  name: web
  labels:
    app: nginx2

spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx2
  serviceName: "nginx-web"
  #定义应用哪个service文件
  template:
    metadata:
      labels:
        app: nginx2
    spec:
      containers:
      - name: nginx
        image: nginx:1.22
        volumeMounts:
#定义挂载卷
        - name: html
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  #定义动态卷
  - metadata:
      name: html
    spec:
      accessModes: ["ReadWriteMany"]
#定义挂载卷权限
      storageClassName: "nfs-client-storageclass"
      resources:
        requests:
          storage: 2Gi

headless service无头服务:是k8s集群中一种特殊的服务类型。

  1. 他不分配clusterIP给service。

  2. 不会负载均衡到后端的pod。

  3. 通过DNS来提供服务的发现和访问。

由于ClusterIP是空的。k8s集群会给每个headless service中的pod创建一个dns记录。

格式: pod-name.headless-service-name.namespace.svc.cluster.local.

通过dns直接解析访问pod的IP地址

为什么要使用headless?

有序、独立个体

deployment的pod是没有名称的。随机字符串且无序的。他需要一个集中的clusterIP来集中统一为pod提供网络。

statefulset是有序的。pod名称是固定的。即便是重建之后pod的表示也不变。pod的名称是唯一的标识符。

系统直接通过pod名称解析IP地址。

只要pod名称不变通过pod名来映射IP地址即可

为什么要使用动态PV?

只要是有状态的副本集群都会涉及到持久化存储。但是每个pod是独立个体。每个pod都有自己专用的存储点。

statefulSet再定义时就规定了每个pod不能使用同一个存储卷。所以才需要动态PV

定义好了每个pod都必须绑定一个存储卷所以使用动态pv

statefulset的使用场景
  1. 用于不是固定节点的应用。不是固定IP的应用。

  2. 更新发布比较频繁的场景

  3. 支持自动伸缩。节点资源不够,可以自动扩容的场景。

删除statefulset

不需要clusterIP。没有clusterIP的就是无头服务headless

3、 demonSet

3、 demonSet:确保每个节点上都运行一个pod副本。如果有node加入集群,也会为他薪资一个pod

实验举例:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-daemon
  labels:
    app: nginx1
#提高代码的可读性。方便别人读。不同业务可以通过namespace隔离。
#命名时根据业务进行专业命名
spec:
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
      - name: nginx
        image: nginx:1.22
#部署一个daemonset的控制器。
#daemonset不能指定副本数他会在每个节点上都创建一个pod

和deployment一样都是无状态应用。

指定节点部署:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-daemon
  labels:
    app: nginx1
#提高代码的可读性。方便别人读。不同业务可以通过namespace隔离。
#命名时根据业务进行专业命名
spec:
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
      - name: nginx
        image: nginx:1.22
      nodeSelector:
        ingress: "true"
#只在有ingress为true这个标签的节点上部署,没有这个标签的节点不会部署

kubectl delete daemonsets.apps nginx-daemon
#删除daemonSet控制器

daemonSet不需要指定调度策略,默认会在每个节点上创建一个pod。除非设置了污点。我们也可以通过指定的方式。只把daemonSet部署在指定的节点。

daemonSet没有副本数选择。

控制器类型的资源创建方式:基于控制器创建的pod,delete只是相当于重启。要彻底删除pod,必须删除控制器

千万不要随别delete

4、job

4、 job:分为两类

job表示普通任务

cronjob表示定时任务

job的作用就是执行只需要执行一次性的任务。例如:执行脚本、数据库迁移、视频解码等等业务。

job普通任务

实验举例:

apiVersion: batch/v1
kind: Job
metadata:
  name: centos
spec:
  template:
    spec:
      containers:
      - name: centos
        image: centos:7
        command: ["/bin/bash", "-c", "test -e /etc/passwd"]
#定义一个任务
#Job类型的参数必须要设置重启策略。只支持“OnFailure、Never”两种策略
      restartPolicy: Never
#指定重启策略
  backoffLimit: 4
#定义重启次数。如果不加默认6次
#允许任务失败的次数是4次。
#当达到4次之后。根据容器的重启策略restartPolicy来进行容器的重启或者是不重启。

kubectl delete jobs.batch centos
#删除控制器

对于k8s系统来说,既然定义了是job。你只需要执行一次,或者指定册数即可。不能一直允许。

它拥有两个限制:

  1. 必须要指定容器容器策略:OnFailure、Never

  2. 执行失败的次数也是受限制的。默认是6次。字数可以通过添加 backoffLimit 来自定义失败次数

  3. 跟新yaml文件要先删除任务。再更新。不能动态更新。

5、 cronjob

cronjob:周期性执行任务,定时执行。和linux的crontab含义是一样的。语法一样都是 分 时 日 月 周

应用场景:定时备份、通知作用、定时检查(结合探针一起布置设定多长时间执行一次)

实验举例:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  concurrencyPolicy: Allow
#可选字段 执行失败任务的保留个数
  startingDeadlineSeconds: 15
#可选字段 pod启动之后必须在一定时间内开始执行。如果超过15秒仍未运行,则任务将不会运行。任务也会标记失败。
  successfulJobsHistoryLimit: 3
#可选字段 保留成功的任务数。默认保留3个
  jobTemplate:
#定义任务模板。容器需要执行的命令是什么
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: centos:7
            command: ["/bin/bash", "-c", "date; echo zyg"]
          restartPolicy: Never

kubectl delete cronjobs.batch hello
#删除定时任务

总结

五个都是控制器创建的pod都是依赖于控制器。

deployment:无状态应用。最好用的。也是最多的

statefulSet:有状态应用。有序的。独立的pod

daemonSet:无状态应用。不能定义副本数。每个系欸但都运行一个pod。可以指定节点。

job:执行一次性的任务。必须要有重启策略。同时默认失败次数6次。只有失败次数达到,重启策略才会生效

cronjob:定时任务。通知。备份或者探测。执行定时任务。必须要有重启策略。默认失败3次。只有失败次数达到后重启策略才会生效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1385995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RC4(CTFshow re2)

基本原理 RC4属于对称密码算法中的流密码加密算法 什么是对称密码? 使用同一个密钥进行加密和解密 什么是流密码? 一个字节一个字节的进行加密/解密 RC4密钥长度是可以变的,面向字节操作 它以一个足够大的表s为基础 对表进行非线性变换&…

Web3去中心化存储:重新定义云服务

随着Web3技术的崭露头角,去中心化存储正在成为数字时代云服务的全新范式。传统的云服务依赖于中心化的数据存储架构,而Web3的去中心化存储则为用户带来了更安全、更隐私、更可靠的数据管理方式,重新定义了云服务的未来。 1.摒弃中心化的弊端 …

酒类销售新模式:用户裂变,利润倍增的秘诀

在当今竞争激烈的市场环境中,如何设计出既吸引用户又能带来高利润的商业模式,成为了企业成功的关键。酒类销售也不例外。最近,一种创新的酒类销售模式在市场上悄然兴起,它不仅让消费者在购买中获得实实在在的优惠,还通…

java基础之线程知识点

线程 进程的概念 操作系统(OS)中并发(同时)执行的多个程序任务 进程的特点 宏观并行,微观串行 在一个时间段内,CPU会将时间段划分为若干个时间片,一个时间片是能被一个程序拥有,且只有拥有时间片的程序才能执行自身内容,所以当时间片的划分足够细小,交替频率足够快,就会形…

keycloak部署

https://downloads.jboss.org/keycloak/11.0.2/keycloak-11.0.2.zip 1.上传zip 并解压 uzip keycloak-11.0.2.zip 2.创建mysql数据库 CREATE SCHEMA keycloak DEFAULT CHARACTER SET utf8 ; 3.安装mysql的jdbc驱动 下载mysql的JDBC驱动(mysql-connector-java-8…

基于ssm的校园二手交易平台的设计与开发+vue论文

摘 要 社会和科技的不断进步带来更便利的生活,计算机技术也越来越平民化。二十一世纪是数据时代,各种信息经过统计分析都可以得到想要的结果,所以也可以更好的为人们工作、生活服务。二手物品是学校里最常见的物品,把二手物品再次…

sql | 学生参加各科考试次数

学生表: Students------------------------ | Column Name | Type | ------------------------ | student_id | int | | student_name | varchar | ------------------------ 在 SQL 中,主键为 student_id(学生ID)。 该表内的每…

海格里斯HEGERLS仓储货架生产厂家|载荷1.5T运行速度1.7~2m/s的智能四向穿梭车系统

四向穿梭车立体库是近年来出现的一种智能型密集系统,通过使用四向穿梭车在货架的水平和纵向轨道上运行来搬运货物,一台四向穿梭车就能完成货物的搬运工作,大大提高了工作效率。同时配合提升机、自动化仓库管理系统(WMS)和仓库调度系统(WCS)&a…

Express框架搭建项目

1. Express简介 EXpress: 精简的、灵活的Node.js Web程序框架,为构建单页、多页及混合的Web程序提供了一系列健壮的功能特性。 精简: Express在你的想法和服务器之间充当薄薄的一层,尽量少干预你,在你充分表达自己思…

v-if 实现不同的状态样式

目录 一、实现思路 二、实现步骤 案例一: ①view部分展示 ②JavaScript 内容 ④ 效果展示 案例二: ①view部分展示 ②JavaScript 内容 ④ 效果展示 ​编辑 一、实现思路 通过v-for循环获取数据并进行判断该条记录中status的状态 给不同的状态赋值&am…

引领安全创新 | 安全狗方案入选工信部《2023年工业和信息化领域数据安全典型案例名单》

近日,工业和信息化部网络安全管理局公布了2023年工业和信息化领域数据安全典型案例名单。 安全狗与厦门卫星定位应用股份有限公司、中移 (上海) 信息通信科技有限公司联合申报的智慧交通云数据安全与隐私保障典型案例也成功入选。 厦门服云信息科技有限公司&#xf…

WebStom中代码美化工具prettier的配置

如果你的项目使用到了prettier代码美化工具之后,使用ctrlaltL调整代码格式的时候会发现,代码没有被正确格式化,这是因为prettier代码美化工具没有设置格式化vue代码的设置。在下面中的run for files的括号里面加上vue即可 最后一步就是确保es…

【已解决】c++如何打印变量的类型

本博文源于笔者正在编写的c代码,在c/c中我们经常用auto去接一个变量,这样我们既可以不用知道变量或函数结果的类型,就可以轻松愉快编码,如果想要知道变量的类型呢?那就需要这样一个函数。 问题再现 想要用函数去打印…

【web】springboot3 生成本地文件 url

文章目录 流程效果静态资源访问ServiceServiceImplController 流程 avatar_dir:请求图片在服务端的存放路径user.dir:项目根目录 效果 静态资源访问 application.yml 设置静态文件存储路径custom:upload:avatar_dir: ${user.dir}/avatar_dir/avatar_d…

基于Java SSM框架实现在线作业管理系统项目【项目源码】

基于java的SSM框架实现在线作业管理系统演示 JSP技术 JSP技术本身是一种脚本语言,但它的功能是十分强大的,因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时,它可以使显示逻辑和内容分开,这就极大的方便了运动员的需求…

2024年初会报名照片要求(必须白底哦)

24初级会计报名照片要求 近期彩色标准1寸、(白色背景), jpg格式,大于10KB ,像素>295*413. 初级会计考试报名照片要求为本人近期正面、免冠、清晰完整的证件电子照。 初级会计报名照片应显示报考人员双肩、双耳、双眉,不得佩戴首饰&#xf…

基地动态|天府新区兴隆街道领导一行莅临天府锋巢直播产业基地考察交流

11月30日,天府新区兴隆街道党工委委员周杰、兴隆街道营商环境办主任章瑞芸、兴隆湖社区党委书记等领导一行莅临天府锋巢直播产业基地考察交流。天府锋巢直播产业基地运营团队、招商代表、入驻企业代表陪同参与。 考察中,基地运营团队向天府新区兴隆街道领…

打破硬件壁垒:TVM 助力 AI技术跨平台部署

文章目录 《TVM编译器原理与实践》编辑推荐内容简介作者简介目录前言/序言获取方式 随着人工智能(Artificial Intelligence,AI)在全世界信息产业中的广泛应用,深度学习模型已经成为推动AI技术革命的关键。TensorFlow、PyTorch、MX…

codeblock如何使用

codeblock 使用的codeblock20.03版本,功能简介如下 settings, 全局设置compiler和debugger的配置 build option,项目右键配置项目编译属性 debugger,gdb调试路径不能包含中文或者空格 问题 不能调试的问题 编译代码-g参数输出调试符号重…

python tcp socket中实现SSL/TLS认证

SSL/TLS介绍 官话说SSL是安全套接层(secure sockets layer),TLS是SSL的继任者,叫传输层安全(transport layer security)。 说白点,就是在明文的上层和TCP层之间加上一层加密,这样就保证上层信息传输的安全。如HTTP协议是明文传输…