【Kubernetes】9-Pod控制器

news2025/1/11 19:39:04

一、什么是 pod 的控制器

Pod控制器,又称之为工作负载(workload),是用于实现管理pod的中间层

确保pod资源符合预期状态;pod的资源故障时会进行重启;

当重启策略无效时,则会重新新建pod的资源

二、pod控制器的多种类型

1、ReplicaSet

代用户创建指定数量的pod副本,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能。

ReplicaSet 的主要三个组件

1)用户期望的pod副本数量

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

3)当现存的pod数量不足时,会根据pod资源模板进行新建

帮助用户管理无状态的pod资源,精确反应用户定义的目标数量,但是RelicaSet不是直接使用的控制器,而是使用Deployment

2、Deplayment

工作在ReplicaSet 之上,用于管理无状态应用,是目前来说最好的控制器;

支持滚动更新和回滚功能,还提供声明式配置。
ReplicaSet 与Deployment 这两个资源对象逐步替换之前RC的作用。

3、DaemonSet

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

4、StatefulSet

管理有状态应用

5、Job

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

6、CronJob

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

三、pod 与控制之间的关系

controllers:在集群上管理和运行容器的 pod 对象, pod 通过 label-selector 相关联。
Pod 通过控制器实现应用的运维,如伸缩,升级等。

1、Deployment

部署无状态应用

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

通过陈述式生成声明式的yaml文件

kubectl create deployment nginx-dep --imae=nginx:1.15 --port=80 --replicas=1 --dry

查看控制器配置
kubectl edit deployment/nginx-deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2021-04-19T08:13:50Z"
  generation: 1
  labels:
    app: nginx					#Deployment资源的标签
  name: nginx-deployment
  namespace: default
  resourceVersion: "167208"
  selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/nginx-deployment
  uid: d9d3fef9-20d2-4196-95fb-0e21e65af24a
spec:
  progressDeadlineSeconds: 600
  replicas: 3					#期望的pod数量,默认是1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%				#升级过程中会先启动的新Pod的数量不超过期望的Pod数量的25%,也可以是一个绝对值
      maxUnavailable: 25%		#升级过程中在新的Pod启动好后销毁的旧Pod的数量不超过期望的Pod数量的25%,也可以是一个绝对值
    type: RollingUpdate			#滚动升级
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx				#Pod副本关联的标签
    spec:
      containers:
      - image: nginx:1.15.4				#镜像名称
        imagePullPolicy: IfNotPresent	#镜像拉取策略
        name: nginx
        ports:
        - containerPort: 80				#容器暴露的监听端口
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always				#容器重启策略
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
......

 查看历史版本,升级,回滚

2、SatefulSet

部署有状态应用

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

Headless 无头模式

k8s 中pod 因为故障导致重启或新建会导致pod名称和IP地址发生改变;(IP改变会导致数据丢失以及服务无法访问)

k8s 中的数据库的 ip 也会因此发生改变,为了避免这种情况;通过设置Headless无头模式

Headless 通过dns解析来让外部访问

headless 会定义好service的名称,分配时不会分配ip

为什么要有 volumeClainTempalte 

实现K8S 里 DNS 功能的插件:

skyNDS

清单定义StatefulSet

拉取一个centos:7 镜像

倒叙删除

k8s 内部负载均衡是根据访问量来算的,所以可能会导致一直访问到同一个服务器

那是k8s内部的负载均衡 ,会根据资源占比进行调度,会调度到资源少的,请求少的pod

滚动更新

除了创建时是正序,其他如删除、更新时都是倒叙进行

 DaemonSet

 DaemonSet会在每个node节点都会创建;删除也是同时删除

Job

重启的是pod 不是容器

5、CronJob

可以用于进行周期性备份,把xx文件拷贝出来,存储到xxx

周期性创建pod

总结

创建pod的两种方式

自主式pod和以控制器创建的pod

什么是有状态、无状态?

无状态就是类似于nginx 的静态页面,一般不会进行改变;每次访问内容都是一样的

有状态则类似于数据库,每天都会进行改变;每次访问都是不一样的

声明式 == yaml文件

陈述式 == 命令

kafka消息队列

Pod 控制器

①deployment 部署无状态应用的管理RS 和 pod 创建Pod,主要是维护pod副本数量与期望状态一致

创建和删除pod是并行执行的;升级时也是 先创建一部分再删除一部分

②statfulset 部署有状态的应用时,每个pod的名称唯一且不变,每个pod 拥有自己专属的持久化存储(PV和PVC)

在 k8s 集群内部可以通过{pod_name}.{service_name}.{namespace}.svc.cluster.local 解析出pod 的IP(基于headless service 和 coreDNS)

在创建和pod时是有顺序的,串行执行;升级时也是串行执行,会删除旧的pod,再创建新pod;

删除和升级时是倒叙执行的(从标识符最大的 n-1 开始,一直到最小的 0)

③Daemonset 理论上在k8s 集群的所有node节点上创建相同的pod(无论node节点什么时候加入到k8s 集群),但是会受到node节点上污点影响

④部署一次性任务的pod,正常完成后容器立即退出并且不重启容器(restartpolicy 不设置Always),也不会重建异常完成后重试任务

重建次数根据 backofflimit 配置(默认为6次)

⑤CronJob 周期性部署任务的pod,正常完成后容器会立即退出,并不会重启容器(restartpolicy 不设置Always),也不不会重建pod

schedule 配置周期性的事件表分时日月周 * * * * *

无状态

常规service和无头服务的区别

扩展伸缩

可以通过 logs 和 describe 来排查pod的异常信息

html 页面的协议

SLB 负载均衡

网关:转发请求,获取信息

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

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

相关文章

通过ssr-echarts,服务端生成echarts图

ssr-echarts :一个开源项目,它能够服务端渲染 ECharts 图表,并直接生成 PNG 图片返回。该项目提供了多种主题,并且支持 GET 和 POST 请求。如果参数较多,建议使用 POST 方法。用户可以自己部署这个服务。 1. 服务端安装…

uniapp打包网页版配置页面窗口标题

问题描述: 项目场景:在uniapp打包网页的时候会出现项目标题为:uni-app 原因分析: 当时是直接在这里面修改的,但是打包之后发现标题还是没有改过来 解决方案: 后来才发现这里修改是没有用的&#xff0…

最新OpenAI免费API-openai api key获取方式

最近又开始准备LLM 应用开发,要用到api key,才发现过我之前免费发放的额度没了!我都没咋用过,痛心😭😭😭! 现在 OpenAI 有要求必须充值 5 刀才能使用,问就是没钱&#x…

人工智能芯片封装技术及应用趋势分析

简介人工智能(AI)、物联网(IoT)和大数据的融合正在开创全新的智能时代,以智能解决方案改变各行各业。人工智能芯片在支持人工智能学习和推理计算方面发挥着非常重要的作用,可实现各行各业的多样化应用。 本…

Arduino网页服务器:如何将Arduino开发板用作Web服务器

大家好,我是咕噜铁蛋!今天,我将和大家分享一个有趣且实用的项目——如何使用Arduino开发板搭建一个简易的网页服务器。通过这个项目,你可以将Arduino连接到互联网,并通过网页控制或查询Arduino的状态。 一、项目背景与…

C#——随机类Random类

Random类 C#的Random类是用于生成随机数的类,属于System命名空间,可以生成各种类型的随机数,例如整型、双精度浮点型、布尔型等。 使用方法: 使用random数据类型关键字 声明一个random的变量 值使用new random 来实例化这个变量…

基于STM32开发的智能农业灌溉控制系统

目录 引言环境准备智能农业灌溉控制系统基础代码实现:实现智能农业灌溉控制系统 4.1 土壤湿度传感器数据读取4.2 水泵控制4.3 环境监测与数据记录4.4 用户界面与多功能显示应用场景:农业灌溉与环境监测问题解决方案与优化收尾与总结 1. 引言 随着农业…

大模型+编程,未来程序员躺平还是失业?

前言 随着科技的飞速发展,大模型与编程技术的结合正在逐步改变着我们的世界。**在这样的背景下,很多程序员开始担忧:未来的我们,是会“躺平”享受技术的红利,还是会因为技术变革而面临失业的风险?**今天&a…

Linuxftp服务001匿名登入

在Linux系统中搭建FTP(File Transfer Protocol)服务,可以让用户通过网络在服务器与其他客户端之间传输文件。它有几种登入模式,今天我们讲一下匿名登入。 操作系统 CentOS Stream9 操作步骤 首先我们先下载ftp [rootlocalhost…

使用Matlab软件绘制函数图像

【实验目的】 1.利用Matlab实现平面上曲线和三维空间中曲线绘制,重点掌握隐函数、极坐标图像绘制的相关命令。 2.利用Matlab实现三维曲面绘制,加深对高等数学课程所学内容的理解 【实验内容与实现】 1、用两种方法绘制下面的曲线图 (1&am…

区块链游戏(链游)安全防御:抵御攻击的策略与实践

一、引言 区块链游戏,或称为链游,近年来随着区块链技术的普及而迅速崛起。然而,如同其他任何在线平台一样,链游也面临着各种安全威胁。本文将探讨链游可能遭遇的攻击类型以及如何通过有效的策略和技术手段进行防御。 二、链游可…

3072. 将元素分配到两个数组中 II Rust 线段树 + 离散化

题目 给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 现定义函数 greaterCount ,使得 greaterCount(arr, val) 返回数组 arr 中 严格大于 val 的元素数量。 你需要使用 n 次操作,将 nums 的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操…

完美解决 mysql 报错ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded

文章目录 错误描述错误原因解决步骤 跟着我下面的步骤走,解决你的问题,如果解决不了 私信我来给你解决 错误描述 执行ALTER USER root% IDENTIFIED WITH mysql_native_password BY 123456;报错ERROR 1524 (HY000): Plugin mysql_native_password is not …

PPT的文件怎么做二维码?适合多种文件使用的二维码制作技巧

现在很多人会将ppt文件转换成二维码之后,分享给其他人查看,比如常见的有学习资料、作品展示、个人简历、方案计划等内容都可以通过生成二维码的方式来提供展示。通过手机扫码就能够快速预览文件内容,与使用邮箱或网盘传输相比,更加…

SpaceX 首席火箭着陆工程师 MIT论文详解:非凸软着陆最优控制问题的控制边界和指向约束的无损凸化

上一篇blog翻译了 Lars Blackmore(Lars Blackmore is principal rocket landing engineer at SpaceX)的文章,SpaceX 使用 CVXGEN 生成定制飞行代码,实现超高速机载凸优化。利用地形相对导航实现了数十米量级的导航精度,着陆器在着陆过程中成像行星表面并将特征与机载…

Python考试复习--day7

1.IP地址转换I ipinput() if len(ip)32 and set(ip)<{0,1}:print(..join([ str(int(ip[8*i:8*(i1)],2)) for i in range(4)])) else:print(data error!) 2.找数字&#xff0c;做加法 ainput() binput() d1 d2 for i in a:if i.isnumeric():d1i for i in b:if i.isnumeric(…

RabbitMQ支持的消息模型

RabbitMQ基础RabbitMQ支持的消息模型 一、第一种模型(直连) 我们将用Java编写两个程序&#xff0c;发送单个消息的生成者和接收消息并打印出来的消费者。 在下图&#xff0c;“P”是生成者&#xff0c;“C”消费者。中间框是一个队列RabbitMQ保留的消息缓冲区 。 首先构建一个…

十一、完善增删改查操作

分为两部分&#xff1a; 第一部分在解析xml的时候&#xff0c;要解析select、insert、update、delete的语句&#xff0c;封装成mapperStatement放到configuration中 第二部分在执行的时候&#xff0c;执行到代理类的invoke方法&#xff0c;然后在MapperMethod判断执行增删改查…

dns域名解析服务和bond网卡

目录 dns域名解析服务 一、DNS 1、定义 2、以www.baidu.com为例 3、域名体系结构 4、DNS解析使用的协议和端口 5、dns域名解析的过程 6、dns解析的优先级 二、如何实现域名解析 1、域名解析 2、bind配置文件位置 &#xff08;一&#xff09;正向解析 &#xff08;…

基础数学-求平方根(easy)

一、问题描述 二、实现思路 1.题目不能直接调用Math.sqrt(x) 2.这个题目可以使用二分法来缩小返回值范围 所以我们在left<right时 使 mid (leftright)/21 当mid*mid>x时&#xff0c;说明right范围过大&#xff0c;rightright-1 当mid*mid<x时&#xff0c;说明left范…