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

k8s---pod控制器

pod控制器发的概念:

工作负载,workload用于管理pod的中间层,确保pod资源符合预期的状态。

预期状态:

1、副本数

2、容器重启策略

3、镜像拉取策略

pod出故障的出去等等

pod控制器的类型:

1、replicaset:指定pod副本的数量

三个组件:

1、pod的副本

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

3、扩缩容

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

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

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

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

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

pod和控制器的关系:

1、controllers:管理控制器。

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

1、Deployment控制器

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

这是Deployment的默认更新策略

rollingUpdate:滚动更新

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

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

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

2、statefulSet 有状态应用

无状态应用,pod名称是无序的,任务所有pod的都是一体的。共享存储 NFS,所有deployment下的pod共享一个存储。

statefulSet:有状态的应用。pod名称是有序的,所有pod都是独立的。存储卷也是独立的

顺序:0-n,delete删除也不会改变pod的序号,扩缩容也是有序的。

apiVersion: v1
kind: Service
metadata:name: nginx-weblabels:app: nginx2
spec:ports:- port: 80targetPort: 80clusterIP: ""selector:app: nginx2
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: weblabels:app: nginx2
spec:replicas: 2selector:matchLabels:app: nginx2serviceName: "nginx-web"template:metadata:labels:app: nginx2spec:containers:- name: nginximage: nginx:1.22volumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlvolumeClaimTemplates:- metadata:name: htmlspec:accessModes: ["ReadWriteMany"]storageClassName: "nfs-client-storageclass"resources:requests:storage: 2Gi

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

k8s集群当中一种特殊的服务类型。不分配ClusterIP给Service,不会负载均衡到后端的pod。

dns来提供服务的发现和访问。

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

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

web-0 nginx-web defaults 本地地址(pod的IP当中)

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

类似于在集群中给pod做了一个映射

为什么要用headless????

有序。独立个体。

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

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

系统直接通过pod名称解析ip地址。IP地址会不会变???

答案:ip地址会变,类似于访问www.baidu.com 但访问的IP不是同一个。

为什么要有动态的pv???

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

statefulset在定义的时候就规定了每个pod是不能同一个存储卷。

不是固定节点的应用,不是固定节点的ip应用

更新发布比较频繁,名称不变。

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

3、daemonSet

daemonSet:确保每个节点上都运行一个副本,当有node加入集群,也会为他新增一个pod

当node节点从集群当中移除时,pod也会被回收。

daemonSet不需要指定调度策略,默认会在每个节点创建一个pod。除非污点

我们也可以通过指定的方式,只把deamonset部害在指定的节点。没有副本数选择,不需要设置

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

千万不要delete

部署在所有节点

apiVersion: apps/v1
kind: DaemonSet
metadata:name: nginx-deamonlabels:app: nginx1
#提高代码可读性,别人读
spec:selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- image: nginx:1.22name: nginx
#不定义副本数,DaemonSet在每一个node上部署一个。

指定节点部署

此处定义了node02节点标签 ingress=true

​
apiVersion: apps/v1
kind: DaemonSet
metadata:name: nginx2-deamonlabels:app: nginx2
#提高代码可读性,别人读
spec:selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22name: nginx2nodeSelector:ingress: "true"
#不定义副本数,DaemonSet在指定node上部署一个。
#除非污点,不部署

4、job

job:job分为两类:job普通任务 和 cronjob定时任务

job:执行只需要一次性的任务。

脚本需要执行,数据库迁移,视频解码等等业务。

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

第一个:必须指定容器的重启策略,onfailure never

第二个:执行失败的次数也是收限制的,,默认是6次

第三个:跟新yaml文件,先删除任务,再更新。不能动态更新。

坑:容器化部署过数据库没有??

可以,数据库是核心资产,不会容器化部署。你们公司是容器化部署吗?

前端你们会容器化部署吗??

nginx可以容器化部署。

apiVersion: batch/v1
kind: Job
metadata:name: centos-job
spec:template:spec:containers:- image: centos:7name: centoscommand: ["/bin/bash","-c","test -e /etc/passwd1"]restartPolicy: NeverbackoffLimit: 4
#允许任务失败的次数,4次后,restartPolicy的策略,来进行容器的重启或者不重启。

5、cronjob

周期性任务,定期执行,和linux的crontab的语法一模一样

分时日月周   * * * * * 

应用场景:定时备份 通知作用 定时检测(结合探针一起做)

定时任务yaml文件

apiVersion: batch/v1beta1
kind: CronJob
metadata:name: centos-cronjob
spec:schedule: "*/1 * * * *"concurrencyPolicy: Allow
#如果执行失败的任务的保留的个数 默认是1个startingDeadlineSeconds: 15
#pod启动之后必须在一定的时间内开始执行,如果超过15秒没有运行,任务将不会运行,任务也会标记失败successfulJobsHistoryLimit: 3
#保留成功的任务数,默认值就是3jobTemplate:spec:template:spec:containers:- image: centos:7name: centoscommand: ["/bin/bash","-c","date; echo lyw"]restartPolicy: Never

总结:

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

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

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

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

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

cronjob: 定时任务。通知,备份或者探测 cronjob定期检测nginx的80端口是 tcptocker */1 * * * *

相关文章:

k8s---pod控制器

pod控制器发的概念: 工作负载,workload用于管理pod的中间层,确保pod资源符合预期的状态。 预期状态: 1、副本数 2、容器重启策略 3、镜像拉取策略 pod出故障的出去等等 pod控制器的类型: 1、replicaset&#xf…...

2024.1.11力扣每日一题——构造有效字符串的最少插入数

2024.1.11 题目来源我的题解方法一 暴力模拟方法二 动态规划方法三 直接拼接方法四 计算组数 题目来源 力扣每日一题;题序:2645 我的题解 方法一 暴力模拟 直接模拟,根据题意可知 若是abc则不用插入,若是ab,ac,bc这需要 插入一…...

软件测试|如何使用Selenium处理隐藏元素

简介 我们在使用selenium进行web自动化测试时,有时候会遇到元素被隐藏,从而无法对元素进行操作,导致我们的用例报错的情况。当我们遇到元素被隐藏的情况时,需要先对隐藏的元素进行处理,才能继续进行我们的操作&#x…...

第三次面试总结 - 吉云集团 - 全栈开发

🧸欢迎来到dream_ready的博客,📜相信您对专栏 “本人真实面经” 很感兴趣o (ˉ▽ˉ;) 专栏 —— 本人真实面经,更多真实面试经验,中大厂面试总结等您挖掘 目录 总结(非详细) 面试内…...

buuctf-Misc 题目解答分解118-120

118.[INSHack2017]sanity 打开压缩包就是一个md 文件 typora 打开 发现flag INSA{Youre_sane_Good_for_you} 119.粽子的来历 解压压缩包 ,得到文件夹如下 用010 editor 打开 我是A.doc 这个有些可以 都改成FF 保存 然后再次打开 docx 文件就发现了屈原的诗 其他b…...

Hive数据定义(1)

hive数据定义是hive的基础知识,所包含的知识点有:数据仓库的创建、数据仓库的查询、数据仓库的修改、数据仓库的删除、表的创建、表的删除、内部表、外部表、分区表、桶表、表的修改、视图。本篇文章先介绍:数据仓库的创建、数据仓库的查询、…...

golang 反序列化出现json: cannot unmarshal string into Go value of type model.Phone

项目场景: 今天在项目公关的过程中,需要对interface{}类型进行转换为具体结构体 问题描述 很自然的用到了resultBytes, _ : json.Marshal(result),然后对resultBytes进行反序列化转换为对应的结构体err : json.Unmarshal(resultBytes, &…...

【闯关练习】—— 1400分(构造)

🌏博客主页:PH_modest的博客主页 🚩当前专栏:cf闯关练习 💌其他专栏: 🔴每日一题 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓…...

Qt QProgressBar进度条控件

文章目录 1 属性和方法1.1 值1.2 方向1.3 外观1.4 信号和槽 2 实例2.1 布局2.2 代码实现 QProgressBar是进度条控件,进度条用来指示任务的完成情况 1 属性和方法 QProgressBar有很多属性,完整的可查看帮助文档。这里以QProgressBar为例,列出…...

【新】Unity Meta Quest MR 开发(一):Passthrough 透视配置

文章目录 📕教程说明📕配置透视的串流调试功能📕第一步:设置 OVRManager📕第二步:添加 OVRPassthroughLayer 脚本📕第三步:在场景中添加虚拟物体📕第四步:设置…...

快速排序【hoare版本】【挖坑法】【双指针法】(数据结构)

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均…...

class_5:在c++中一个类包含另一个类的对象叫做组合

#include <iostream> using namespace std;class Wheel{ public://成员数据string brand; //品牌int year; //年限//真正的成员函数void printWheelInfo(); //声明成员函数 };void Wheel::printWheelInfo() {cout<<"我的轮胎品牌是&#xff1a;"<…...

Linux - No space left on device

问题描述 No space left on device 原因分析 说明在服务器设备上的存储空间已经满了&#xff0c;不能再上传或者新建文件夹或者文件等。 解决方案 确认查看服务器系统的磁盘使用情况是否是真的已经没有剩余空间&#xff0c;复制下面命令在服务器上运行&#xff0c;然后发现如果…...

STC8H8K蓝牙智能巡线小车——2. 点亮左右转弯灯与危险报警灯

任务调用示例 RTX 51 TNY 可做多任务调度&#xff0c;API较为简单。 /* 接口API */// 创建任务 extern unsigned char os_create_task (unsigned char task_id); // 结束任务 extern unsigned char os_delete_task (unsigned char task_id);// 等待 extern unsig…...

【微信小程序独立开发 3】个人资料页面编写

这一节完成用户个人信息昵称的填写和获取 上节编写完成后的页面如下所示&#xff1a; 首先进行用户昵称编辑功能的编写&#xff0c;铲屎官昵称采用了navigator标签&#xff0c;当点击昵称时会自动跳转到昵称编辑页面。 首先输入昵称编辑界面的导航栏名称 {"usingCompone…...

Linux笔记:Linux中的文件系统权限

在Red Hat Enterprise Linux 或其他类似的Linux发行版中&#xff0c;全局umask设置通常在几个不同的系统级配置文件中定义。以下是一些可能设置umask的地方&#xff1a; &#xff08;1&#xff09;/etc/profile: 这是为系统上的所有用户设置全局环境变量和启动程序的地方。通…...

Android基于Matrix绘制PaintDrawable设置BitmapShader,以手指触点为中心显示原图的圆切图,Kotlin(4)

Android基于Matrix绘制PaintDrawable设置BitmapShader&#xff0c;以手指触点为中心显示原图的圆切图&#xff0c;Kotlin&#xff08;4&#xff09; 这篇 Android基于Matrix绘制PaintDrawable设置BitmapShader&#xff0c;以手指触点为中心显示原图像圆图&#xff0c;Kotlin&am…...

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

问题背景 当我们尝试通过SSH&#xff08;Secure Shell&#xff09;连接到远程服务器时&#xff0c;有时会遇到一个警告信息&#xff1a;“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”。这个消息表明SSH客户端检测到远程主机的身份&#xff08;即其SSH密钥&#xff09…...

深入理解JVM虚拟机第三十九篇:JVM中新生代和老年代相关参数设置

😉😉 欢迎加入我们的学习交流群呀! ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring、Security、Docker、Grpc、消息中间件、Rpc、SpringCloud等等很多应用和源码级别高质量视频和笔记资料,你想学的我们这里都有! 🥭🥭3:…...

打造创新的金融数据平台,加速数字化和智能化转型丨PingCAP 官网金融行业专区上线

自诞生以来&#xff0c;TiDB 的原生分布式架构在强一致性、高可用性和可扩展性等方面与金融级业务需求高度契合&#xff0c;早期版本即为包括北京银行在内的金融用户提供服务。 TiDB 的核心能力始终源自与中国金融用户的共同创造。作为金融级分布式数据库&#xff0c;TiDB 在国…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...