Kubernetes深度剖析,从基础到高级,带你领略K8s的魅力

news2024/11/20 20:31:52
3f3a58f1297a23ac8492a4b31ac3908d.jpeg

一、Kubernetes 是 Google 团队发起并维护的基于 Docker 的开源容器集群管理系统,它不仅支持常见的云平台,而且支持内部数据中心。

建于 Docker 之上的 Kubernetes 可以构建一个容器的调度服务,其目的是让用户透过 Kubernetes 集群来进行云端容器集群的管理,而无需用户进行复杂的设置工作。系统会自动选取合适的工作节点来执行具体的容器集群调度处理工作。其核心概念是 Container Pod。一个 Pod 由一组工作于同一物理工作节点的容器构成。这些组容器拥有相同的网络命名空间、IP以及存储配额,也可以根据实际情况对每一个 Pod 进行端口映射。此外,Kubernetes 工作节点会由主系统进行管理,节点包含了能够运行 Docker 容器所用到的服务。

二、架构模型为master/nodes(work)

可以理解master为蜂后,nodes为工蜂(干活的)

1. master为集群唯一入口,需要做高可用。

2. 每一个node节点都提供一部分计算能力和存储能力。(运行容器的节点)

71a8771105cf725c70a46968ebbb302f.jpeg

请求过程:

1 客户端请求(创建启动容器)首先发往master,master当中有一个调度器,会去分析各node节点的资源状态.

2 找一个最佳适配运行用户所请求的容器的节点,并把它调度上去,由这个node的docker或是其他容器引擎来负责把这个容器启动起来。

3 启动容器时检查本地是否有镜像,如果没有需要从镜像仓库中pull来启动(镜像仓库可以是云上的,也可以是自检的私有仓库,也可以以容器运行在node节点上)。

三、Master集群组件

  • API Server 接收并处理用户请求
  • Scheduler 调度容器创建的请求
两级调度第一步:先做预选1. 评估各node有几个是符合需求的第二步:再做优选2. 再从符合需求中的几个选出最优的(优选算法)> 负责观测每一个node之上总共可用的计算和存储资源,并根据用户所请求创建的容器所需要的资源量来评估
  • controller-manager 确保已创建的容器处于健康状态

控制器管理器是确保控制器健康的,控制器是用来确保容器健康的。

  • label selector 可以通过控制器给pod打标签,之后控制器可以根据tag来识别出pod

创建pod时可以给pod直接打上一个标签,然后让控制器通过标签的值来识别出pod来

四、Node集群组件

  • kubelet 与apiserver交互运行的,接收并处理master调度过来的各种任务。
  • docker 运行pod中的容器

1. 在K8s上运行的最小单元不是容器,而是pod

2. kubernets并不直接调度容器,而是调度pod,pod是对容器的一层封装。

3. pod里可以有多个容器,他们共享同一网络协议栈,存储卷

4. 一般一个pod只有一个容器

  • kube-proxy 与apiserver进行通信,每一个pod发生变化,结果是需要保存到apiserver中,apiserver会生成一个通知事件,该事件可以被任何关联的组建所接收到, 管理service,service的创建及变动是依靠kube-proxy在iptables上创建出规则

Pod简介

08d693edef46d26d08c08a491269f125.jpeg
  • pod中的每一个容器有自己的user,mnt,pid的名称空间,然后他们共享pod的net,uts,ipc的名称空间。
  • 一般一个pod中只有一个容器,除非容器之间有特别特别紧密的关系需要放在同一pod中,如果一个pod放置了多个容器,通常有一个为主容器,其他容器来辅助主容器上的应用程序完成更多功能来实现。
  • 创建pod时可以给pod直接打上一个标签,然后让控制器通过标签的值来识别出pod来

由于pod为kubernet集群中的原子单元,是不可再分割的,一个pod中无论是一个容器还是多个容器,当pod被master调度至某一node上时,这个pod中的所有容器都被调度到了一台node上

1. 自主式Pod

自我管理,创建后仍然要提交给apiserver,由apiserver将其调度至指定的node的节点,由node启动此pod,如果一个pod中的容器出现故障,需要重启容器,需要又kubelet来完成。但是,如果节点故障了,该容器就消失了。无法实现全局进行调度。

2. 控制管理的Pod

  • 正是有控制器机制的引入使得pod成为有生命周期的对象,而后由调度器将其调度至集群中的某节点运行以后,有一些任务作为守护进程运行为pod或容器,要确保它们随时处于运行状态,一旦发生故障,要随时重启它或者替代它。

pod控制器种类

1. Replication Controller

- 多退少补,必须精确符合人定义的期望- 滚动更新(类似用户无感知发布)- 回滚

2. ReplicaSet

3. Deployment 只能管理无状态应用

4. StatefulSet 管理有状态的应用

5. DaemonSet 每个node上运行一个副本,而不是随意运行

6. Job,Cronjob 运行作业或者周期性作业

- 有些任务是临时需要而运行,运行完以后结束,这种不需要一直处于运行状态,可以运行为一个job

7 . HPA(HorizontalPodAutoscaler) 自动监控并系统负载分析添加或减少pod

服务发现功能

  1. 每重新生成一个pod都是一个全新的pod,比如ip地址和主机名之前的是不一样的。
  2. kubernets为每一组提供同类服务的pod和它的客户端之间添加了一个中间层,这个中间层(service)是固定的,service再将客户端请求端口代理至后端pod上(通过dnat规则 ),一旦其中一个pod宕机了,一个新的pod会立即被关联上来(通过标签选择器,具有相同标签的来关联起来),然后在动态探测新关联的pod的ip地址和主机名,
b623c8688eb99666a99f671b279f1c2f.jpeg

五、k8s网络模型

136e02eb5150693a9005d547a2c1ed31.jpeg

1. pod网络。各pod运行在同一个网络,pod的网络地址是真实的地址,存在于它的网络名称空间当中。

2. service网络(集群网络)。service地址不是真的地址,存在于iptables中或者ipvs规则中。

3. 节点网络 。

六、k8s通信分类

1. 同一pod内的多个容器间:lo网络

2. 各pod之间通信。(overlay network,叠加网络)

各pod之间直接通信,无论pod运行在哪个节点之上,各pod的地址是不应该也绝对不可以相同。

3. pod与servic之间通信

service地址只不过是主机上的一条iptables规则中的地址,所以需要配置一下目标地址不是自己的指向网关。每个主机上都应该有所有的service的地址规则。当pod试图访问service的地址时,首先将请求送给网关(一般为docker0桥),然后docker0桥通过内核发现当前访问的地址为一条iptables或ipvs规则,然后将请求送达。

之前说过,当service后端的node节点宕机,pod的控制器通过标签选择器会自动创建一个新的pod并加入至该服务中,而node中的另一个组件,kube-proxy 在此时会将service的变动存储在master上的api server中,然后api server生成通知事件,又kube-porxy将iptables规则的变化反映至每一个节点的iptables规则上。

4c12f9fe541aced0005cb860f9203383.jpeg

七、etcd k8s的存储

Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息。

存储集群的所有变化信息以及网络配置,非常重要,所以需要做高可用。

八、k8s集群组成要件

dd9e262bac8d9a3e2d0a72f5ee5b03bc.jpeg

如图所示,每一个服务都有一个service,用来调度请求流量。

如果其中的某个服务中的pod宕机了,pod控制器会自动创建一个新的pod并加入到该服务中。不同的pod的控制器通过pod标签来管理其所属的pod。

当然k8s集群内部也是需要主机名来表示不同的主机的,提供dns服务的也是通过pod,同样的它也有一个service,也有一个pod控制器来管着的dns的pod。

总结。

画了个图总结一下整个的k8s集群,如下。

7a1fe75a5a61bae30d65afd2d8aa4b7f.jpeg


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

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

相关文章

星环科技分布式向量数据库Transwarp Hippo正式发布,拓展大语言模型时间和空间维度

随着企业、机构中非结构化数据应用的日益增多以及AI的爆发式增长所带来的大量生成式数据,所涉及的数据呈现了体量大、格式和存储方式多样、处理速度要求高、潜在价值大等特点。但传统数据平台对这些数据的处理能力较为有限,如使用文件系统、多类不同数据…

0002net程序设计-net家电维修保养信息系统

文章目录 **摘要**目录系统设计开发环境 摘要 家电维修保养信息系统提供给用户一个家电信息管理的网站,最新的家电信息让用户及时了解维修知识,保养方式的同时,还能通过交流区互动更方便。本系统采用了B/S体系的结构,使用了net技术以及SQL SERVER作为后…

uniapp 关于 video 组件的缩放比例问题

在 container 样式的 padding-bottom 设置比例值 9/16 比例值&#xff1a;56.25% 3/4 比例值&#xff1a;75% <view class"container"><video class"video-box" src"xxx.mp4" /> </view> .container {position: relative;wid…

【STL】:list用法详解

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关list的使用&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结构…

SQL注入思路扩展

目录 一、资产搜集 二、开始sql注入常规流程 三、sqlmap验证 总结&#xff1a;测试sql注入的时候不要只局限于明文传输&#xff0c;也要注意编码或者加密后的值。 还没看够&#xff1f;欢迎关注&#xff0c;带你走进黑客世界&#xff0c;下面也有免费的靶场视频 一、资产搜…

HCIA --- 综合实验(结束)

一、实验拓扑及要求 二、整体IP规划 三、解决方案 四、解决步骤配置命令 一、基本部分 一、交换机 1、创建对应VLAN&#xff0c;对应接口划入对应VLAN中&#xff0c;创建Trunk干道&#xff0c;配置HTTP服务器IP LSW1 [sw1]vlan batch 2 to 3 [sw1]interface e0/0/1 [sw1-E…

idea提交代码一直提示 log into gitee

解决idea提交代码一直提示 log into gitee问题 文章目录 打开setting->Version control->gitee,删除旧账号&#xff0c;重新配置账号&#xff0c;删除重新登录就好 打开setting->Version control->gitee,删除旧账号&#xff0c;重新配置账号&#xff0c;删除重新登…

部署前端项目到宝塔面板(腾讯阿里服务器均适用)

写在前面&#xff0c;本网站部署的是前端nuxt.js项目&#xff0c;后端部分在本人的其他博文&#xff0c;请移步 【起步】服务器端 打开自己的轻量服务器的管理面板 确保服务器已经打开&#xff0c;如下图所示 来到域名列表&#xff0c;解析域名&#xff0c;如下图所示 的…

[转载]C++序列化框架介绍和对比

Google Protocol Buffers Protocol buffers 是一种语言中立&#xff0c;平台无关&#xff0c;可扩展的序列化数据的格式&#xff0c;可用于通信协议&#xff0c;数据存储等。 Protocol buffers 在序列化数据方面&#xff0c;它是灵活的&#xff0c;高效的。相比于 XML 来说&…

怎么理解电流超前电压、电压超前电流?

电容和电感&#xff0c;电压超前电流&#xff0c;电流超前电压都是我们经常听到的。作为非专业人士&#xff0c;这些听起来确实有点摸不着头脑&#xff0c;今天特别查了下电容、电感、电压电流相关资料&#xff0c;总算是弄明白了&#xff0c;在此特地记录下&#xff01; 1. 电…

打造企业级门户,WorkPlus助您打造个性化与高效的企业通讯平台

在现代企业运营中&#xff0c;良好的内部沟通与信息管理至关重要。为满足企业对于高效沟通与信息发布的需求&#xff0c;WorkPlus推出了企业门户APP&#xff0c;为企业提供全新的信息管理与沟通协作体验。 作为一站式企业门户&#xff0c;WorkPlus连接了组织、员工和信息的纽带…

GitLab(2)——Docker方式安装Gitlab

目录 一、前言 二、安装Gitlab 1. 搜索gitlab-ce镜像 2. 下载镜像 3. 查看镜像 4. 提前创建挂载数据卷 5. 运行镜像 三、配置Gitlab文件 1. 配置容器中的/etc/gitlab/gitlab.rb文件 2. 重启容器 3. 登录Gitalb ① 查看初始root用户的密码 ② 访问gitlab地址&#…

阿里云国际版和国内版的区别是什么,为什么很多人喜欢选择国际版?

阿里云国际版和国内版区别如下&#xff1a; 谈到区别&#xff0c;我们不妨先来对比下相同点与不同点&#xff0c;才能清晰明确的知道二者区别 下面先介绍不同点&#xff1a; 面向市场更广泛 阿里云国际版主要是面向国际&#xff08;全球&#xff09;客户的&#xff0c;而国内…

如何用ChatGPT快速写出一份合格的PPT报告

我们【AI写稿专家】的小伙伴中有很多企业高管和公务员&#xff0c;大家经常有写报告写ppt的需求&#xff0c;下面小编给大家介绍一下我们新发布生成PPT的功能&#xff0c;很简单很方便&#xff0c;看完大家不到1分钟就能生成一份拿得出手的PPT报告&#xff0c;再也不用费尽心思…

华为云之使用CCE云容器引擎部署Nginx应用【玩转华为云】

华为云之使用CCE云容器引擎部署Nginx应用【玩转华为云】 一、本次实践介绍1.本次实践简介2.本次实践目的 二、CEE介绍1.CCE简介2.CCE产品链接 三、创建虚拟私有云VPC1.访问VPC2.创建VPC3.查看VPC列表 四、创建密钥对1.进入密钥对界面2.创建密钥对3.保存密钥文件到本地 五、创建…

Softing dataFEED OPC Suite将西门子PLC数据存储到Oracle数据库中

一 背景 现代工业产品生产批量大、过程自动化程度高&#xff0c;这对于用户追溯产品设计与制造过程中产生的数据而言&#xff0c;无疑是一大新挑战。与此同时&#xff0c;制造商们对产品制造过程中产生的大量工艺数据也愈发重视&#xff0c;并在不断寻求存储与分析产品制造数据…

【zTree】节点添加不同操作按钮,点击后生成弹窗

zTree api 文档&#xff1a;https://www.treejs.cn/v3/api.php 1. 初始化树的配置项 const initZtreeSetting () > {const setting {view: {addHoverDom: addHoverDom, // 显示用户自定义控件selectedMulti: false,// 是否允许同时选中多个节点&#xff0c;默认为truesh…

HarmonyOS鸿蒙原生应用开发设计- 隐私声明

HarmonyOS设计文档中&#xff0c;为大家提供了独特的隐私声明&#xff0c;开发者可以根据需要直接引用。 开发者直接使用官方提供的隐私声明内容&#xff0c;既可以符合HarmonyOS原生应用的开发上架运营规范&#xff0c;又可以防止使用别人的内容产生的侵权意外情况等&#xff…

程序开发官网地址汇总

这里写目录标题 官网地址汇总开发环境开发工具数据库驱动包其他 官网地址汇总 开发环境 1 JDK &#xff1a;https://www.oracle.com/java/technologies/java-se-glance.html 2 Maven&#xff1a;https://maven.apache.org/download.cgi 3 Maven Repository: https://mvnrep…

启动U盘制作工具------------Ventoy 最新版 v1.0.96

Ventoy最新版是一款功能强大的启动U盘制作工具,Ventoy最新版支持多系统启动盘的制作功能,Ventoy最新版一次还可以拷贝很多个不同类型的ISO文件,软件支持自动安装部署、支持超过4GB的ISO文件、支持大部分常见操作系统和无差异支持Legacy+UEFI模式。软件能够直接启动WIM文件。…