K8s关键性概念图解

news2024/12/28 20:57:27

Kubernetes可以看做云原生时代的操作系统,统一管理下层的基础设施,如计算资源、网络资源、存储资源等等。将集群中存在的各种复杂关系抽象成各种API资源,以统一的方式暴露出各种接口,也便于未来的扩展以及开发团队根据自己的需要定制。基于这样的设计思路,理清各种API对象的作用和关系就变得很重要了,只有理解了才能正确地使用K8s,接下来我们就通过一张关系图一点点的来说明。

通过Pod终结单容器的时代

在这里插入图片描述

在接触K8s之前,大多人首先要接触到的就是Docker。我们得到一个容器的镜像之后,要把应用运行起来最简单的方式就是docker run的命令。然而在实际的生产环境中,很少仅靠一个单容器就能够满足。比如,一个Web前端的应用,可能还得依赖后端的一个容器服务;后端的容器可能需要数据库服务;后端的服务需要多副本等等场景。在这些假想的场景中,比较真实的需求就是这些容器应用需要共享同一个网络栈,同一个存储卷等,还有它们的生命周期如何管理调度。这个时候,仅仅依靠容器无法解决这个问题,我们第一个选手Pod就闪亮登场了。

在这里插入图片描述

Pod内共享配置

有了Pod之后,同一个Pod内的容器可以共享很多信息,也可能需要读取同一份配置。比如Pod内有两个容器需要访问同一个数据库,那么我们可以把相关的配置信息写到ConfigMap里。那如果还有一些比较敏感的信息的话,就需要放到Secret对象中,它其实是一个保存在 Etcd 里的键值对数据。这样,你把 Credential 信息以 Secret 的方式存在 Etcd 里,Kubernetes 就会在你指定的 Pod(比如,Web 应用的 Pod)启动时,自动把 Secret 里的数据以 Volume 的方式挂载到容器里。

在这里插入图片描述

任务和定时任务

有了Pod之后,事情就变得更清晰了。在集群内,我们可能会有多种形式的要求。比如,我们可能希望一个应用每天固定时间运行或者只允许运行一次,可能希望某个应用以守护进程的方式运行。在K8s里,自然也有方案来解决这些问题。

首先来看定时任务的需求,假设我的系统内有一个全网信息排行榜展示,要求每天需要在凌晨0点的时候更新一次。这个需求在K8s里就可以用CronJob来搞定。而如果仅仅需要执行一次的任务,那就直接使用Job对象就可以了。

在这里插入图片描述

默默工作的DaemonSet

再接下来,可能需要以守护进程的方式运行一个应用。比如,我想要在后台进行日志的收集。这个时候DaemonSet就派上了用场,它会保证在所有的目标节点上运行一个Pod的副本。在这期间,如果有新的Node加入到K8s集群中的话,它也会自动完成调度,在新的机器上运行一个Pod副本。因此,前面说的监控、日志等任务很适合用DaemonSet的方式执行。

在这里插入图片描述

Deployment管理Pod

说完DaemonSet,下一个重点Deployment来了。前面说过容器之间的关联关系、共享资源等问题需要处理,从而引入了Pod。对于Pod,也是同样的问题需要解决,只不过高了一个抽象层次罢了。因为面临Pod的生命周期管理、调度、多副本等问题需要解决,聪明的设计者引入了Deployment。它可以根据我们的需求(比如通过标签)将Pod调度到目标机器上,调度完成之后,它还会继续帮我们继续监控容器是否在正确运行,一旦出现问题,会立刻告诉我们Pod的运行不正常以及寻找可能的解决方案,比如目标节点不可用的时候它可以快速地调度到别的机器上去。另外,如果需要对应用扩容提升响应能力的时候,通过Deployment可以快速地进行扩展。

在这里插入图片描述

在实际的工作中,Deployment并不是直接控制着Pod的,中间实际上还有一个ReplicaSet,但是在这里为了简化理解过程,可以先忽略。

提供容器服务

前面的内容主要是围绕着Pod自身的运行调度管理,下面面临的问题是解决如何将服务提供给第三方的问题。

对内提供服务

首先要解决的是将服务提供给同一个集群内的其他服务使用。可能刚入门的同学会问为什么我们不能直接使用Pod的IP呢?原因是这样,前面也说过Pod是会被管理调度的,可能被调度到不同的机器上,同时生命周期也可能会发生变化。这导致一个应用的IP可能会随时发生变化,那么直接使用Pod的IP自然是不合理的。

针对这个问题K8s提供了Service对象来解决。

在这里插入图片描述

但是,并不是说Service就有一个固定的IP。而且,它和Pod IP还有很不一样的地方。Pod的网络是K8s在物理机上建立了一层Overlay Network实现的,而且在网卡上能够看到这个网络的地址。但是Service是一个完全虚拟的网络层,并不会存在于任何网络设备上。它通过修改集群内部的路由规则,仅对集群内部有效。Deploment创建好应用之后,再为它生成一个Service对象。接下来就可以通过Service的域名访问到服务,形式是.,比如你有为Deployment的应用创建了一个名为portal的Service在默认的命名空间,那么集群内想要通过Http访问这个应用,就可以使用http://portal.default。这个域名仅在集群内有效,因为是内部的一个DNS负责解析。

对外提供服务

说完如何给内部提供服务以后,剩下的就是如何给外部提供服务了。在K8s里把这个叫做Ingress,正如其名,它是集群的入口。比如我们的集群Web应用想要让用户能够访问,那必然要在Ingress入口上增加一条解析记录。这一点,熟悉像Nginx的朋友应该比较容易理解,事实上Nginx Ingress也是K8s生态中的一个成员。

在这里插入图片描述

关于Ingress的使用,在之前我曾写过一篇使用Traefik作为Ingress的文章,我们可以通过Traefik实现为需要暴露的服务提供负载均衡、自动签发Https证书、限流等很多功能。

总结

一张图解决所有问题:

在这里插入图片描述

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

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

相关文章

JS创建ZIP文件,JSZip的使用

Hi I’m Shendi 最近编写压缩工具,需要使用js创建zip文件,使用 JSZip 插件 官网: https://stuk.github.io/jszip/ Github: https://github.com/Stuk/jszip https://sdpro.top/blog/html/article/1012.html 下载 NPM : npm inst…

论文笔记:NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

目录 文章摘要 1 Neural Radiance Field Scene Representation (基于神经辐射场的场景表示) 2 Volume Rendering with Radiance Fields (基于辐射场的体素渲染) 2.1 经典渲染方程 2.2 经典的体素渲染方法 2.3 基于分段采样近似的体素渲染方法 3 Optimizing a Neural Rad…

高通开发系列 - linux kernel启动阶段串口无打印采用LED点灯

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 问题背景kernel启动汇编探测kernel启动C函数阶段探测这篇文章之前请参考下:高通开发系列 - MSM8909指示灯操作 问题背景 最近在基于…

38. 外观数列

打卡!!!每日一题 今天给大家带来一道比较有意思的题目,先看看题目描述 题目描述: 题目示例: 大家题目读完可能还没太理解什么意思,我简单给大家翻译翻译: n:表示我们要计算多少次 每一次都是对前面一个…

详细介绍Sentence-BERT:使用连体BERT网络的句子嵌入

Sentence-BERT:Sentence Embeddings using Siamese BERT-Networks 使用连体BERT网络的句子嵌入 BERT和RoBERTa在诸如语义文本相似性(STS)的句子对回归任务上创造了新的最优的性能。然而,它要求将两个句子都输入网络,这导致了巨大的…

代码随想录--二叉树章节总结Part IV 完结篇

代码随想录–二叉树章节总结Part IV 完结篇🎉 1.Leetcode501 二叉树中的众数 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如…

大数据行业如何获取高薪岗位offer?

在互联网行业需要保持不断的学习。学习大数据先思考自身未来想往哪个方向发展,想要入门快、基础深厚,并且需求多应用广建议从JAVA开始学起,找到适合自己的学习方法。 大数据行业人才稀缺,据第三方统计2020年全国招收程序员394699…

mybatis-plus2

目录 一、乐观锁 二、乐观锁与悲观锁的区别 1.乐观锁和悲观锁的应用场景 三、条件查询构造器 四、分页查询 五、逻辑删除 六、在Mybatis-plus中使用xml配置 一、乐观锁 乐观锁插件 | MyBatis-PlusMyBatis-Plus 官方文档https://baomidou.com/pages/0d93c0/ 当要更新一条…

16. JSON解析

1. 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是轻量级的文本数据交换格式。 JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台…

Kettle基础操作

目录 Kettle基础操作 1 启动Kettle 2 创建本地资源库 3 基础操作 3.1 新建转换 3.2 新建作业 3.3 节点连接 4 导入/导出资源库 5 创建数据库连链接 Kettle基础操作 1 启动Kettle 前置环境:JDK 1.7以上、IE浏览器升级至IE10以上(Kettle7.0以下…

Java——打家劫舍

题目链接 leetcode在线oj题——打家劫舍 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入&#xff…

Hive数仓建设手册

1 数仓的分层及建模理论 1.1 数据仓库的用途 整合公司所有业务数据,建立统一的数据中心产生业务报表,用于作出决策为网站运营提供运营上的数据支持可以作为各个业务的数据源,形成业务数据互相反馈的良性循环分析用户行为数据,通…

MySQL中的正则表达式

目录 一.介绍 二.格式 三.操作 一.介绍 正则表达式(regular expression)描述了一种字符串匹配的规则,正则表达式本身就是一个字符串,使用这个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正…

5G小区选择重选参数的设置

学习大唐杯的过程中的一些总结。 目录 前言 一、S准则 二、R准则 三、关于频点优先级 总结 前言 5G参数总体的设计思想是在总体成本的控制下,满足覆盖范围和容量的同时,达到5G各个小区之间正确进行通信。 一、S准则 在后续介绍的频点优先级中&#xff0…

【多任务】任务损失/梯度优化策略合集

本文分享如何从loss和gradient方面,优化多任务模型,缓解负迁移或跷跷板的问题。不足之处,还望批评指正。 背景 最近工作中,有使用到多任务模型,但实际使用时,会面临负迁移、跷跷板等现象。 除了从模型角度优化,这里介绍从loss和gradient方面的优化

SpringBoot创建接口

目录 一、创建Spring Boot Project (一)配置Spring Boot (二)配置数据库连接,并启动tomcat 二、新建测试网页——这一步可以忽略,主要是测试配置是否成功 1.新建一个页面 2.创建TestController类 3.启动SpringbootpracticeApplication类——sprin…

【Linux】makemakefile

【Linux】make & makefile 文章目录【Linux】make & makefile1、makefile文件2、make命令3、make原理规则4、.PHONY5、编译与否的判断法1、makefile文件 makefile实际上是一个文件,配置文件 充当Linux上的工程管理工具,可以实现自动化编译 mak…

transformer库的思想

transformer库建立思路 (1) Model类: 如BertModel , 目前收录有超过30个PyTorch模型或Keras模型; (2) Configuration类: 如BertConfig , 用于存储搭建模型的参数; (3) Tokenizer类: 如BertTokenizer , 用于存储分词词汇表以及编码方式; 使用from_pretrained()和save_pretraine…

区块链知识系列 - 系统学习EVM(二)

特点 EVM出于所谓运算速度和效率方面考虑,采用了非主流的256bit整数。不支持浮点数缺乏标准库支持,例如字符串拼接、切割、查找等等都需要开发者自己实现给合约打补丁或是部分升级合约代码在EVM中是完全不可能的 存储 Code code 部署合约时储存 data 字段也就是合…

08-linux网络管理-iptables扩展模块

文章目录1. 概述2. icmp 模块2.1 示例(禁止本机ping其它主机)2.2 示例(其他主机ping本机)2.3 --icmp-type 说明3. iprange模块4. multiport 模块5. state 模块5.1 语法5.2 完整示例6. limit模块6.1 语法6.2 完整示例7. connlimit7…