K8s 架构简介(一)

news2024/10/3 6:35:00

一、前言

在开始学习K8s之前,让我们对容器有一个基本的了解

1.1 什么是容器

一个容器镜像是一个可运行的软件包,其中包含了一个完整的可执行程序,包括代码和运行时需要应用、系统库和全部重要设置的默认值。

通过将应用程序本身,和其依赖容器化,操作系统发行版本和其他基础环境造成的差异,都被抽象掉了。

应用程序通过使用容器与底层的宿主机架构解耦。如下图所示,我们可以利用底层机器在容器引擎之上运行多个容器。这促进了容器在各种操作系统和云场景中的部署。
请添加图片描述

每天有数千个容器实例被大型和小型软件组织部署,操作简单了但是管理复杂,容器编排工具应运而生。

K8s凭借其各种优势和功能特性在行业占据主导地位。

容器化是一种趋势,主要应用的是docker。

1.2 为什么市场推荐K8s

K8s是第一个由云原生计算基金会(Cloud Native Computing Foundation, CNCF)和谷歌基金会倡议的项目,是继Linux之后增长最快的开源软件项目。

为什么现在有很多企业依赖K8s来满足他们的容器编排需求? 原因有很多:

  • 可移植性和灵活性:K8s有很强的兼容性,因为它可以在各种基础设施和环境设置下运行。大多数其他编排器没有这种灵活性。它们被锁定在特定的运行时或基础架构中。

  • 开源:CNCF负责管理K8s,这是一个完全开源、由社区驱动的项目。它有许多重要的企业赞助商,但没有一家公司能“控制”这个平台或者控制它的发展方向。

  • 多云兼容性:K8s不但可以将工作负载托管在单个云上,而且可以将工作负载分布在多个云上。 K8s也能轻松地将其环境从一个云扩展到另一个云。虽然其它编排器也能支持多云架构,但K8s在多云兼容性性方面可以完全超越它们。

  • 市场领导者:大部分公司都在使用K8s。根据红帽公司的一项调查,K8s被客户广泛使用 (88%),尤其在生产环境中(74%)。

二、docker

2.1 什么是docker

Docker 是一种开源项目,用于将应用程序自动部署为可在云或本地运行的便携式独立容器。是一个可以把开发的应用程序自动部署到容器的开源引擎。

docker包括三个概念:镜像(image),容器(container)、仓库(repository)

通过仓库中的镜像可以很方便的移植到其他机器上,不需要重新搭环境。

所以大家需要注意,Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。

2.2docker和VM差异

在这里插入图片描述
如上图,容器有点像一个个的集装箱,彼此之间隔离,但是共享同一套操作系统,

docker是一个应用层的抽象,容器之间通过网络命名空间进行隔离,多个容器共享同一个操作系统内核。VM是对物理硬件层的抽象,每个VM都包含独立的操作系统,重且启动缓慢。VM主要为了提供系统环境,容器主要是为了提供应用环境。

三、K8S

3.1 架构图

![在这里插入图片描述](https://img-blog.csdnimg.cn/e67238f18053482991aac652a19ee083.png在这里插入图片描述

由 Master 节点和 Node 节点组成,Master为控制节点,Node为计算节点。

3.2 Master

Master节点负责维护集群的目标状态,由三个紧密协作的组件组成,分别为:

  • kube-api-server:提供 “声明式” API服务。
  • kube-scheduler:负责调度,将新创建的Pod安排到合适的几点运行。”合适的” 需要考虑Pod的资源需求、硬件/软件/策略约束、数据位置等。
  • kube-controller-manager:负责编排,用于调节系统状态。通过apiserver监控集群状态,并将状态调整为目标状态。现今,K8s自带的控制器包含:副本控制器、节点控制器、命名空间控制器和ServiceAccounts控制器。

整个集群状态的持久化放在etcd这个kv数据库中.

3.3 node

节点组件是Kubernetes中的worker机器,受到master的管理。节点可以是虚拟机(VM)或物理机器——Kubernetes在这两种类型的系统上都能良好运行。每个节点都包含运行pod的必要组件:

  • kubelet – 为位于那个节点上的pod监视API服务器,确保它们正常运行
  • cAdvisor - 收集在特定节点上运行着的pod的相关指标
  • kube-proxy - 监视API服务器,实时获取pod或服务的变化,以使网络保持最新
    容器运行时 - 负责管理容器镜像,并在该节点上运行容器

3.3.1 节点组件详解

总而言之就是,节点上运行着两个最重要的组件——kubelet和kube-proxy,除此之外还有一个负责运行应用容器化应用程序的容器引擎。

3.3.1.1 kubelet

kubelet处理着master和在其上运行的节点之间的所有通信。它以manifest的形式接收来自主设备的命令,manifest定义着工作负载和操作参数。它与负责创建、启动和监视pod的容器运行时进行接合。

kubelet还会周期性地对配置的活跃度探针和准备情况进行检查。它会不断监视pod的状态,并在出现问题时启动新实例。kubelet还有一个内部HTTP服务器,在端口10255上显示一个只读视图。除此之外,在/healthz上还有一个健康检查端点,以及一些其他状态端点。例如,我们可以在/pods获取正在运行的pod的列表。我们还可以在/spec获取kubelet正在运行的机器的详情。

3.3.1.2 kube-proxy

kube-proxy组件在每个节点上运行,负责代理UDP、TCP和SCTP数据包(它不了解HTTP)。它负责维护主机上的网络规则,并处理pod、主机和外部世界之间的数据包传输。它就像是节点上运行着的pod的网络代理和负载均衡器一样,通过在iptables使用NAT实现东/西负载均衡。

kube-proxy过程位于连接到Kubernetes的网络和在该特定节点上运行的pod之间。它本质上是Kubernetes的核心网络组件,负责确保跨集群的所有元素有效地进行通信。当用户创建Kubernetes服务对象时,kube-proxy实例会负责将该对象转换为位于worker节点的、本地iptables规则集上的有意义的规则。iptables用于将分配给服务对象的虚拟IP转换为服务映射的所有pod IP。

3.3.1.3 容器运行时

容器运行时负责从公有或私有镜像仓库中拉取镜像,并根据这些镜像运行容器。当下最流行的容器引擎无疑是Docker,不过Kubernetes还支持诸如rkt、runc等的其他容器运行时。正如我们在上文中提到过的,kubelet会直接与容器运行时交互,以启动、停止或删除容器。

3.3.1.4 cAdvisor

cAdvisor是一个开源代理,它能够监视资源使用情况并分析容器的性能。cAdvisor最初由谷歌创建,现在已与kubelet集成。

位于每个节点上的cAdvisor实例,会收集、聚合、处理和导出所有正在运行的容器的指标,如CPU、内存、文件和网络使用情况等。所有数据都将发送到调度程序,以确保调度程序了解节点内部的性能和资源使用情况。这些信息会被用于执行各种编排任务,如调度、水平pod扩展、管理容器资源限制等。

3.4 pod

Kubernetes为每个Pod都分配了唯一的IP地址,称之为Pod IP。一个Pod里多个容器共享Pod
IP地址。Kubernetes要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信(这通常使用虚拟二层网络技术来实现)。

Pod 是K8s基础单位,可以封装单个容器或多个容器,容器间共享网络、存储等。

3.4.1 主要使用方式

Pod 的两个主要用途如下所示:

  • 运行单个容器的 Pod

每个 Pod 一个容器的模型是最常见的使用情况,在这种情况下,可以将 Pod 看作单个容器的包装器,并且 Kubernetes 直接管理 Pod,而不是容器。

  • 运行多个协同工作的容器的 Pod

Pod 可能封装由多个紧密耦合且需要共享资源的共处容器组成的应用程序,Pod 将这些容器和存储资源打包为一个可管理的实体。

3.4.1 网络如何共享

  • 同一个 Pod 内部通讯:

同一个 Pod 共享同一个网络命名空间,共享同一个 Linux 协议栈。

  • 不同 Pod 之间通讯:

Pod1 和 Pod2 在同一台 Node 主机,由 docker0 网桥直接转发请求到 Pod2 上面
Pod1 和 Pod2 不在同一台 Node 主机,Pod 的地址是与 docker0 在同一个网段的,但 docker0 网络与宿主机网卡是两个完全不同的 IP 网段,并且不同的 Node 之间的通讯只能通过宿主机的物理网卡进行。

将 Pod 的 IP 地址和所在 Node 的 IP 地址关联起来,通过这个关联让 Pod 可以互相访问。

  • Pod 至 Service 的网络

目前基于性能考虑,全部为 iptables 或 lvs 维护和转发。

  • Pod 到外网

Pod 想外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主机网卡完成路由选择之后,iptables 或 lvs 执行 Masquerade,把源 IP 地址更改为宿主机的网卡的 IP 地址,然后向外网服务器发送请求。

  • 外网访问 Pod

通过 Service 服务来向外部提供 Pod 服务。

四、rancher

由于K8S自带的管理界面不太好,rancher开始流行起来管理K8S,通过界面方式操作yaml\json配置化文件。

4.1 Namespace

Namespace 是k8s 中非常重要的一种资源,它的主要作用是用来实现多套环境的资源隔离或多租户的资源隔离。

默认情况下,K8s 集群中所有的pod 都可以互相访问,但是在实际中,可能不想让两个pod 之间相互访问,这个时候就需要将这两个pod 划分到不同的namespace 之下,K8s 通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的“组”。 以方便不同组的资源进行隔离使用和管理。

可以根据K8s 授权机制,将不同的namespace 交给不同的租户进行管理。这样就实现了多租户的资源隔离。此时还可以结合K8s 的资源配额机制,限定不同的租户能占用的资源,如cpu 使用量, 内存使用量等等。 来实现租户可用资源的管理。

4.2 副本

一个pod是一组容器, k8s操作最小单位是pod, 如果pod副本设置多个,表示 有多个一样的pod同时在运行。

由于时间有限,后面有时间再写系列课程

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

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

相关文章

虹科新闻|虹科与Telco Systems正式建立合作伙伴关系

近日,虹科与美国Telco Systems达成战略合作,虹科正式成为Telco Systems在中国区域的认证授权代理商。未来,虹科将携手Telco Systems,共同为新一代边缘计算和企业网络提供创新通信软件产品。虹科及Telco Systems双方都对彼此的合作…

C语言(逻辑运算符和条件运算符)

目录 一.逻辑运算符 1.原理 2.等级排序 3.求值顺序 二.条件运算符:? 一.逻辑运算符 1.原理 && 与(条件都为真,才为真) || 或(一个条件为真,才为真) ! 非(条件为假&…

【R语言(二):Nomogram(诺莫图/列线图)绘制 / R语言逻辑回归分析】

R语言(二):Nomogram(诺莫图/列线图)绘制 1、基本概念 Nomogram,中文常称为诺莫图或者列线图。简单的说是将Logistic回归或Cox回归的结果进行可视化呈现。它根据所有自变量回归系数的大小来制定评分标准,给每个自变量的每个取值水平一个评分&…

怎样的目标管理能真正实现目标?做到这3点就对了

目标应该是每个人人生中接触最多的一样东西了,大到分分钟几百万上下的项目目标,小到一次考试。目标能不能完成,关键还是看目标管理有没有做好,做到下面这三点,不论是在职场中管团队,还是在生活中管个人&…

十四、平衡二叉树

1、看一个案例(说明二叉排序树可能的问题) 给你一个数列{1,2,3,4,5,6},要求创建一棵二叉排序树(BST),并分析问题所在。 上面二叉排序树存在问题分析: 左子树全部为空,从形式上看&…

tr命令笔记

tr 是Unix命令行专家工具箱中的一件万能工具。它可用于编写优雅的单行命令。 tr 可以对 来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。 tr 是translate(转换)的简写, 因为它可以将一组字符转换成另一组字符。 tr 只能…

Windows 11 + WSL(ubuntu 20.04) + CLion(2022.3) 编译OpenJDK12

编译OpenJDK12 目录编译OpenJDK12前言一、下载OpenJDK源码二、编译OpenJDK参考https://openjdk.org/groups/build/doc/building.html1:安装编译所需的组件2:执行编译命令3:验证编译结果三、在Clion中调试OpenJDK源码1:Clion中配置…

R语言GD包地理探测器分析时报错、得不到结果等情况的解决方案

本文介绍在利用R语言的GD包,实现自变量最优离散化方法选取与执行、地理探测器(Geodetector)操作时,出现各类报错信息、长时间得不到结果等情况的解决方案。 在之前的文章R语言GD包基于栅格图像实现地理探测器与连续参数的自动离散…

深度解读Webpack中的loader原理

一、前言 webpack 是一个现代 JavaScript 应用的静态模块打包器。那么 webpack 是怎样实现不同种类资源模块加载的呢? 没错就是通过 loader。loader 用于对模块的源代码进行转换。loader 可以使你在 import 或加载模块时预处理文件。 我们带着下面几个问题&#…

css中的盒子模型

1、盒子模型:CSS中规定盒子分别由:内容区域(content)、内边距区域(padding)、边框区域(border)、外边距区域(margin)构成。 2、盒模型分为IE盒模型和W3C标准…

内存泄漏检测组件 -- hook

目录 hook malloc与free出现的问题 builtin_return_address(N) C/CLinux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂 hook malloc与free出现的问题 #define _GNU_SOURCE #include <stdio.h> #include <dlfcn.h> #include <stdlib.h> /****…

Android Studio多渠道打包及自动化构建

Android 有不同的应用市场&#xff0c;也就是不同的渠道&#xff0c;需要为每个应用市场打一个安装包&#xff0c;但主要的代码是一样的&#xff0c;可能部分资源不一样&#xff0c;部分代码不一样&#xff0c;如果每个渠道都需要修改&#xff0c;然后打包&#xff0c;非常耗时…

思科三层交换机配置

三层交换机是什么为什么会有三层交换机三层交换机的工作原理三层交换机的应用1.三层交换机是什么 三层交换机就是具有部分路由器功能的交换机&#xff0c;工作在OSI网络标准模型的第三层&#xff1a;网络层。三层交换机的最重要目的是加快大型局域网内部的数据交换&#xff0c;…

操作系统-处理机调度

1.处理机调度的概念、层次1.1调度的基本概念制定某种规则来决定处理任务的顺序。1.2调度的三个层次高级调度&#xff08;作业调度&#xff09;中级调度&#xff08;内存调度&#xff09;进程的挂起态与七状态模型低级调度&#xff08;进程调度&#xff09;小结2.进程调度的时机…

VMware安装Linux虚拟机后忘记root密码处理方法

OS版本&#xff1a;Red Hat 7.7 问题说明&#xff1a; 之前用VMWare安装了一台Linux虚机&#xff0c;由于长期没使用&#xff0c;导致忘记了root密码。所以需要修改root密码。 Root密码修改 现将修改root密码的操作步骤记录如下。 1.启动虚拟机&#xff0c;出现启动倒计时…

2023年,智能家居老板如何低成本多开10家店?

作者 | 启明 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn2023年智能家居老板需要一些什么样的新思维来助力业绩增长呢&#xff1f;智哪儿从今天起推出系列观察文章与各位老板共勉。在《三体》电视剧中&#xff0c;三体人在乱纪元通过“脱水”来延续生命&#xff0c;在恒纪元则通过“…

mac 安装、配置、卸载mysql

文章目录mac 安装、配置、卸载mysql安装下载mysql dmg包安装mysql服务启动mysql服务配置系统环境变量配置修改默认密码配置运行远程连接配置my.cnf文件卸载mac 安装、配置、卸载mysql 安装 下载mysql dmg包 下载地址&#xff1a;https://downloads.mysql.com/archives/commu…

面试必问:进程和线程的区别(从操作系统层次理解)

1.什么是进程&#xff1f;为什么要有进程&#xff1f; 进程有一个相当精简的解释&#xff1a;进程是对操作系统上正在运行程序的一个抽象。 这个概念确实挺抽象&#xff0c;仔细想想却也挺精准。 我们平常使用计算机&#xff0c;都会在同一时间做许多事&#xff0c;比如边看…

springboot(6)之前端传递参数的方式 普通 集合 数组

实体类传递 首先我们在后端定义一个实体类&#xff0c;通过lombok插件重写 有参 无参 get set toString 方法, 然后前端发送数据&#xff0c;后端就会自动收到&#xff0c;然后属性填写 后端代码如下 AllArgsConstructor Data NoArgsConstructor public class role …

【Pygame实战】有趣又益智的游戏:看图猜四字成语,最后一个几乎没人会,哪位学霸来猜猜?这么难的嘛?(猜个锤子)

导语 看图猜成语&#xff0c;是考验一个人的反应能力&#xff0c;也考验一个人的右脑思维。 据说越聪明的人&#xff0c;这道题的完成率越高。你想试一试嘛&#xff1f;今天就给你这次机会啦&#xff01; 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码…