k8s学习笔记-基础概念
(作者:陈玓玏)
- deployment特别的地方在于replica和selector,docker根据镜像起容器,pod控制容器,job、cronjob、deployment控制pod,job做离线任务,pod大多一次性的,cronjob控制离线定时任务,deployment保证pod挂掉的情况下自动重启,永远保持设置的副本数个的pod,修改副本数即可伸缩容(应该都是基于同一个镜像的容器的pod的副本),通过selector可以管理对应标签的pod;
- daemonset和deployment的区别是,deployment会自动重启pod到副本个数,保证业务永远在线,但不会在意pod在集群的哪个节点上。而daemonset会保证每个节点上都有一个pod,用于与其他节点进行通信、监控本节点、上报节点信息等,是守护进程,又称看门狗,能让每个节点都得到守护。但daemonset可能不会运行在master上,因为master上默认有一个“污点”,为了避免乱七八糟的业务都往master上部,所以如果想要master也有守护进程,可以修改守护进程的yaml中的“容忍度”。
- 容忍度就是每个pod能容忍有哪些“污点”的节点,“污点”就是节点有哪些限制等,修改污点和容忍度就能调节pod可以部署在哪些节点上,对deployment、daemonset来说都是一样的;
- service存在的意义就是,deployment保证永远能保持有n个在线的pod,daemonset就是能保证每个节点上都有可通信、监控的pod,service就是在复杂的pod重启后,保持前端只需要访问固定的ip。如果没有service,pod重启后,ip可能会变化,但service让前端只需要访问固定的ip,service去把具体的需求转发给具体的pod,称为服务发现。Service是利用kubeproxy实现的,有四层结构,有四种模式,只有nodeport和clusterip是非云厂商模式,前者能直接外网访问服务,后者只能集群内部访问。service是为动态ip地址的服务提供静态ip或域名访问,域名访问需要dns解析。域名访问可以用服务名加命名空间的形式来访问,Service另一个主要功能就是做负载均衡。
- Service的四层负载均衡和虚拟ip域名这些,导致它只适合做集群内部的负载均衡,要做外部的负载均衡,还需要更高级的功能,比如能利用常用的七层网络协议做负载均衡,并且能对接外部流量,对接到内部以后再由sevice做负载均衡。所以就有了ingress。Ingress的意思就是集群内外边界上的入口。你应该知道,Service 本身是没有服务能力的,它只是一些 iptables 规则,真正配置、应用这些规则的实际上是节点里的 kube-proxy 组件。如果没有 kube-proxy,Service 定义得再完善也没有用。ingress controller最常用的就是nginx。ingress和ingress controller中间还有一层ingress class,不同业务领域可以用不同的class,对接到不同的controller,避免了太多controller无法管理。
- 为什么要有持久卷?因为pod里的容器是由镜像产生的,镜像文件不能写,只能在pod里临时有个存储空间来写,如果pod消失了,存储空间和它里面的文件也就消失了,所以需要持久卷来持久化存储某些文件。持久卷一般通过挂载的形式挂载到容器中,其本质就是ceph、nfs等存储空间,pod没有管理权限。持久卷涉及两个概念,pvc和sc,pvc是代表pod向系统申请pv,一旦申请成功,k8s会把pv和pvc绑定在一起,sc叫storageclass,可以帮pvc找到合适的pv,避免pvc自己在一堆pv里面去找。pv就是持久卷,可以挂载到pod中的可持久化存储的位置,pvc就是代替pod向系统申请pv存储资源的,sc就是帮助pvc快速找到合适的pv的。一般我们想要持久化存储,先创建pv,再创建pvc,再把pv挂载到容器中,就可以在容器中实现持久化存储了。
- 持久卷如果使用hostpath,就是在本机,但pod可能在任意节点上,想要在集群任意节点实现持久化存储,就需要用网络存储,通常采用的就是分布式存储。
- 为什么有了deployment,还要有statefulset?因为deployment可以部署无状态应用,比如nginx,随时重启都可以接受网络请求,不需要记住上次运行到哪里了,然后接着运行,但有些应用是需要记住上次崩溃或者结束时的运行状态,中断重启需要能够接着运行,这就叫有状态的应用,deployment做不到,就需要statefulset。statefulset应用如果要对外提供服务,也需要配service,一般的service的域名使用的是“对象名. 名字空间”,每个 Pod 也会有一个域名,形式是“IP 地址. 名字空间”,但pod的ip不稳,所以一般不用,但有状态集的pod是有状态应用,需要有稳定的pod地址,所以service一般用有状态pod的新的域名,格式是“Pod 名. 服务名. 名字空间.svc.cluster.local”。为了保证有状态应用的持久化存储不会因为读写冲突而丢失数据,statefulset的持久化存储是专门内嵌在statefulset的yaml中的volumeClaimTemplates字段表示的。
- 滚动升级,pod中会定义策略strategy字段,用来指定应用升级的方式,比如滚动升级,共20个pod,每次杀掉的pod不能超过75%,必须留下25%的pod保证应用稳定运行,让前端客户感知不到升级。当机器资源足够时,我们可以先起升级的20个pod,确定可以运行之后再杀掉原来的20个pod,或者一部分一部分地升级,如果资源不够,就只能一次少升级几个pod,或者先杀掉pod,再升级。有状态应用的升级比较复杂,还需要考虑到pod之间的依赖关系,即使按照依赖关系进行升级,升级过程中也可能出现问题,比如前一个未执行完,就因为时间到了而被杀掉,或者被杀掉的pod还没完全启动,就已经跑到这个位置了,容易出现问题。
10.怎么让应用运行得更健康? 可以限制pod能够申请的资源,通过resource字段,其中的requests和limits,可以写申请的资源和资源的上限。cpu一般用0.1之类的,memory一般用Ki、Mi、Gi 来表示 KB、MB、GB。还可以设置容器探针,Startup是启动探针,检查程序是否成功启动,Liveness是存活探针,用来检查应用是否正常运行,是否存在死锁、死循环。Readiness,就绪探针,用来检查应用是否可以接收流量,是否能够对外提供服务。另一种方法是对命名空间使用ResourceQuota这个api对象,来限制每个命名空间可占用的资源份额。
问题:
11. deployment部署的是服务pod,所以才有下面这张图是吗?是不是表示,deployment部署服务pod,然后service可以去代理对应标签的服务pod?所以daemonset部署的应该不是服务pod,而是监控的pod对吗?

相关文章:
k8s学习笔记-基础概念
(作者:陈玓玏) deployment特别的地方在于replica和selector,docker根据镜像起容器,pod控制容器,job、cronjob、deployment控制pod,job做离线任务,pod大多一次性的,cronj…...
C语言 变量
变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。 变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头…...
2024年2月16日优雅草蜻蜓API大数据服务中心v1.1.1大更新-UI全新大改版采用最新设计ui·增加心率计算器·退休储蓄计算·贷款还款计算器等数接口
2024年2月16日优雅草蜻蜓API大数据服务中心v1.1.1大更新-UI全新大改版采用最新设计ui增加心率计算器退休储蓄计算贷款还款计算器等数接口 更新日志 前言:本次更新中途跨越了很多个版本,其次本次ui大改版-同步实时发布教程《带9.7k预算的实战项目layuiph…...
WEB漏洞 逻辑越权之支付数据篡改安全
水平越权 概述:攻击者尝试访问与他拥有相同权限的用户的资源 测试方法:能否通过A用户操作影响到B用户 案例:pikachu-本地水平垂直越权演示-漏洞成因 1)可以看到kobe很多的敏感信息 2)burp抓包,更改user…...
45、WEB攻防——通用漏洞PHP反序列化POP链构造魔术方法原生类
文章目录 序列化:将java、php等代码中的对象转化为数组或字符串等格式。代表函数serialize(),将一个对象转换成一个字符;反序列化:将数组或字符串等格式还成对象。代表函数unserialize(),将字符串还原成一个对象。 P…...
雾锁王国服务器怎么建?雾锁王国服务器搭建方法
雾锁王国Enshrouded服务器搭建怎么搭建?非常简单,阿里云计算巢雾锁王国程序,可以一键搭建雾锁王国多人联机服务器,腾讯云是基于雾锁王国镜像系统,阿里云服务网aliyunfuwuqi.com汇总雾锁王国服务器搭建,超简…...
设计模式篇---观察者模式
文章目录 概念结构实例总结 概念 观察者模式:定义对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其他相关依赖对象都得到通知并被自动更新。 观察者模式是使用频率较高的一个模式,它建立了对象与对象之间的依赖…...
Docker常用命令Top20
Docker常用命令Top20 Docker是一种容器化平台,通过使用Docker,开发人员可以轻松地打包、交付和运行应用程序。以下是Docker中最常用的20个命令: docker run: 运行一个容器。 docker run <image_name>docker ps:…...
Redis的发布订阅机制及其使用场景
Redis的发布订阅(Pub/Sub)机制是一种消息通信模式,其中发送者(发布者)将消息发送到特定的频道,而订阅者则订阅其中一个或多个频道,以接收感兴趣的消息。这种模式可以用于构建实时通信系统、消息…...
计算机网络的基础知识
网络的性能指标:网络速率,bpsbit/s; 时延包括四个组成部分:发送时延、传播时延、排队时延、处理时延; 网络各个层次结构设计的基本三原则:各个层次之间是相互独立的,每一个层之间有足够的灵活…...
QT-Http post 同步请求
在 Qt 中,你可以使用 QNetworkAccessManager 对象的 sendCustomRequest 方法来发送同步的 HTTP 请求。以下是一个演示如何使用该方法发送同步 HTTP POST 请求的示例代码: #include <QCoreApplication> #include <QNetworkAccessManager> #i…...
【JVM】StringTable 字符串常量池
参考:javaGuide 字符串常量池 是 JVM 为了提升性能和减少内存消耗针对字符串(String 类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建 String的不可变性 1.通过字面量的方式(区别于new)给一个…...
Unity中URP实现水体(水的焦散)
文章目录 前言一、原理1、 通过深度图,得到 对应像素 在 世界空间下的Z值2、得到模型顶点在 观察空间 下的坐标3、由以上两点得到 深度图像素 对应的 xyz 值4、最后,转化到 模型本地空间下,用其对焦散纹理采样 二、实现1、获取深度图2、在顶点…...
vue构建版本
完整版:同时包含编译器和运行时的版本。 编译器:用来将模板字符串编译成为 JavaScript 渲染函数的代码。 运行时runtime:用来创建 Vue 实例、渲染并处理虚拟 DOM 等的代码。基本上就是除去编译器的其它一切。 UMD:UMD 版本可以…...
Docker挂载镜像到本地(日常记录)
Docker挂载镜像到本地 1、进入jar包文件夹 cd docker-publish/2、编写DockFile文件 #使用Jdk8环境作为基础镜像,如果镜像不在本地则会从DockerHub进行下载 #FROM openjdk:8-jdk-alpine FROM openjdk:11 #VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/l…...
【Elasticsearch查询】精确查询
文章目录 复合查询constant_score querybool querydis_max queryfunction_score queryboosting query单层嵌套双层嵌套 词项查询term query(词项查询)数字的精确查询文本的精确查询查询优化 terms query(多词项查询)terms_set que…...
小狐狸chat2.7.2免授权修复版可用版
小狐狸chat2.7.2免授权修复版可用版 在网络上面找了好几个版本不能使用,今天发布这个仔细测试正常使用 主要功能:独立版无限多开支持分销会员充值自己APP打包小程序万能创作MJ绘图多个国内接口 国外很火的ChatGPT,这是一种基于人工智能技术…...
通过QScrollArea寻找最后一个弹簧并且设置弹簧大小
项目原因,最近需要通过QScrollArea寻找其中最后一个弹簧并且设置大小和策略,因为无法直接调用UI指针,所以只能用代码寻找。 直接上代码: if (m_scrollArea){int iScrollWidth m_labelSelectedTitle->width();m_scrollArea-&g…...
為什麼使用海外動態代理IP進行網路爬蟲?
網路爬蟲作為獲取網路數據的重要工具,其重要性不言而喻。但隨著網站反爬策略的日益嚴格,爬蟲任務變得愈發困難,不過海外動態代理IP可以很好地解決這一問題。本文將詳細闡釋動態代理IP在爬蟲中的應用,以及如何使用動態代理IP提升爬…...
LeetCode 热题100 刷题笔记
一:哈希表 一般哈希表都是用来快速判断一个元素是否出现集合里。 直白来讲其实数组就是一张哈希表,哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。 1.两数之和 题目链接:. - 力扣(LeetCode…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
