一文读懂美联储6月议息会议,一文读懂元宇宙

现在主要负责的项目(容器云)涉及到的概念和知识点,平时也有学习和记录,但很碎片化,最近刚好有时间可以做一次系统的梳理。一、Kubernetes是什么及架构1.

我现在做的项目(容器云)相关的概念和知识点平时都是学习和记录的,但最近我有很碎片的时间来系统回顾一下。

1.什么是Kubernetes 及其架构?

1.什么是k8s?

首先,截取Kubernetes 官网的截图。您可以查看Kubernetes 的官方定义。 Kubernetes (k8s) 是一个开源系统,可自动部署、扩展和管理容器化应用程序。

bdd6b03e8e204bd59d1f89bb408ba2b1~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=fE5UkyZ8sReUJ7nqVKz2fBpxPZE%3D

Kubernetes 这个词是一个希腊词,中文翻译为“舵手”或“飞行员”。你还会在一些通用信息中看到“ks”一词,即“k8s”。

这是一个缩写,将“ubernete”的八个字母替换为“8”。为什么Kubernetes 以“舵手”命名?

e011063280b5401bb07aca20f7986c1f~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=Zm%2F3kK0M3cb6xnclaZ857gwwrWw%3D

这是一艘满载集装箱的船,在海上运输集装箱并将其运送到目的地。 Container在英语中还有另一个含义:“容器”。

从这个意义上讲,Kubernetes希望成为容器的容器,帮助你管理容器,也就是管理它们。

这就是为什么选择Kubernetes 这个词来描述这个项目。更具体地说,Kubernetes 是一个自动化容器编排平台。

负责应用程序部署、应用程序弹性和应用程序管理。

2.k8s可以做什么?

服务发现和负载平衡容器自动装箱也称为调度。这意味着“调度”,当您将容器放置在集群中的特定机器上时,Kubernetes 会执行存储编排并帮助完成存储生命周期。它与容器生命周期相关并建立自动容器恢复。集群经常遇到主机问题,导致容器本身变得不可用。 Kubernetes 会自动恢复这些不可用的容器,并自动释放和回滚与应用管理作业相关的配置密文。对于这些类型的任务,Kubernetes 可以执行批量执行,并在Containers 2.1 中支持水平扩展,使这个集群和应用程序更加灵活。

Kubernetes 可以将您提交的容器放置在Kubernetes 管理的集群中的节点上。 Kubernetes 调度程序是执行此功能的组件。

监控预定集装箱的尺寸和规格。

例如,找出一个容器需要多少CPU,需要多少内存,然后在集群中找到一台相对空闲的机器来执行放置操作。

2f4ce218609048b8b7d7056b43197d4e~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=uAwDgSXPfex4bBkJys7x7Xia1hQ%3D

2.2. 自动修复

Kubernetes 具有节点健康检查功能,可以在主机本身故障或软件故障时监控集群中的所有主机。

此节点运行状况检查会自动发现该节点。然后,Kubernetes 会自动迁移在这些故障节点上运行的容器。

通过将集群中的容器迁移到健康的主机来完成容器的自动恢复。

ffb844972e98412b8171788c402f8f59~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=8s7ZbO%2BcHA7K4A4H%2FAox5v6mL64%3D

ed468e4fc72d448fb939941a86b4cbbc~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=pkjdFcaSO8g%2Fa7S768bEDEmOBRs%3D

2.3 水平扩展Kubernetes有能力检查业务负载,监控业务自身CPU使用率或内存使用率是否过高。

或者,如果响应时间太长,您的业务可能会增长一次。

例如,在下面的示例中,如果黄色负载过高,Kubernetes 可以将黄色负载从1 更改为3。下一个,

负载均衡可以将分配给第一个黄色负载的负载均匀分配到三个黄色负载中,从而提高响应速度。

c7fca1a525564b5da55810617330ac40~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=J4uo1V2QTRCqG5Cpekck60MX26U%3D

3.k8s架构

Kubernetes架构是典型的两层、服务器-客户端架构。 Master作为中央管理和控制节点,与各节点建立连接。

所有UI、客户端和用户端组件仅连接到主组件并向其发送任何所需的状态或要执行的命令。

主站将这些命令或状态发送到相应的节点最终执行。

bef445e6423d4b04b3d62f694aae760a~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=HR6L4AUvPMtOVlRcj0K7cbPf4Ps%3D

掌握

Kubernetes Master 包括四个主要组件:API 服务器、控制器、调度器、etcd。

50f254368f7549a4981630aaaaf17830~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=UJaxEylGVH%2FKgkR5fW31Y2AS1oQ%3D

API服务器:为资源操作提供单点入口,提供认证、授权、访问控制、API注册、发现等机制。 Kubernetes 的所有组件都连接到API 服务器。通常,组件之间没有独立的连接,所有消息发送都依赖于API 服务器。

Controller:负责维护集群状态的控制器,包括故障检测、自动伸缩、滚动更新等。在上面的两个示例中,第一个示例自动修复容器,第二个示例自动水平扩展容器。两者都是由控制器完成。调度器负责资源调度,根据给定的调度将Pod 调度到相应的容器中。机器上的策略。例如,在上面的示例中,用户提交的Pod 会根据CPU 和内存请求大小放置在适当的节点上。 etcd:是一个分布式存储系统,存储集群范围内的Pod、服务等状态。以及其他对象信息。 API服务器所需的原始信息放在etcd中。 etcd 本身是一个确保Kubernetes 主组件高可用性的系统。节点

Kubernetes 节点实际上运行的是业务负载,每个业务负载都以pod 的形式运行。一个或多个容器在pod 内运行。

6c8539b3dd204f3094798d33e56a4226~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=u4X1QSBoSVYkPt1N0HhbrKeFwr8%3D

kubelet:Node 节点上的master 代理,是实际运行pod 的组件,负责节点上pod 的创建、修改、监控和删除的生命周期管理。同时,Kubelet 会定期向API 服务器“报告”该节点的状态信息。通过API Server接收Pod所需的执行状态。然后将其发送到容器运行时组件。容器运行时:容器运行时。它负责镜像管理以及pod 和容器(CRI)的实际操作,可以理解为类似于JVMStorage 插件或网络插件的东西。您需要管理存储和网络,创建在操作系统上运行容器的环境,最后是容器或Pod 的存储和网络管理。 Kubernetes 不直接与网络存储交互。它依赖存储插件或网络插件来工作。用户自己或者云厂商创建相应的存储插件或者网络插件来完成存储或者网络操作。 Kube-proxy:负责提供服务集群内的服务发现和负载均衡,并完成服务组网。 Kubernetes自身的环境也有一个Kubernetes网络,用于为网络提供服务网络。真正完成服务组网的组件是Kube-proxy。它利用iptable 的强大功能组成Kubernetes 网络,这是一个集群网络。组件之间的通信

步骤说明:

1. 通过UI 或CLI 将pod 提交到Kubernetes 进行部署。下一步,该pod 请求首先发送到API 服务器,然后调度程序将此信息写入存储系统etcd。通过API服务器的监控机制获取。您会收到以下消息: 有一个Pod 需要进行调度。 2. 调度器根据节点集群的内存状态做出调度决策。一旦这个调度完成,它就会向API服务器报告,“OK!这个Pod收到后应该调度到XX节点”。 API 服务器将此操作的结果写回到etcd。 3. API Server通知相应节点开始实际运行该Pod。通知对应节点上的kubelet,kubelet调度容器运行时实际启动并配置容器和容器执行环境,调度存储插件配置存储,调度网络插件配置存储。贮存。通讯网络。 2.Kubernetes核心概念

第一个概念:pod

Pod 是Kubernetes 中最小的调度和资源单元。您可以生成Pod 并让Kubernetes 通过Kubernetes Pod API 来调度它们。这意味着您可以在Kubernetes 管理的节点上部署和运行pod。 Pod 只是一组包含一个或多个容器的容器的抽象。

如下图所示,这个pod包含两个容器,每个容器可以有所需的资源大小。当然,这个pod还可以包括其他所需的资源,例如所示的卷存储资源。

e78d5cea21cc4805b5e9b65648c28779~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=hSwhmMc%2B04CLsxRnmDoHXOOslkI%3D

第二个概念:体积

管理Kubernetes 存储。这用于声明pod 内的容器可以访问的文件目录。卷可以安装到pod 内的一个或多个容器中的指定路径。

卷本身是一个抽象的概念,可以支持多种后端存储。 Kubernetes 卷支持许多存储插件。

它可以支持本地和分布式存储(ceph、GlusterFS等)。还可以支持阿里云云盘、AWS云盘、谷歌云盘等云存储。

f24d167430554c1fbdc0d837b3f2d90e~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=FzZdvuhaG1Syb600%2BmaTqsMDKRI%3D

第三个概念:简介

部署是Pod 的更高级别的抽象,允许您定义一组Pod 的副本数量以及Pod 的版本。部署通常用于执行应用程序的实际管理。

Pod 是构成部署的最小单元。

Kubernetes 通过控制器维护部署中的pod 数量,并且控制器还可以帮助自动恢复部署中失败的pod。

例如,您可以定义需要两个Pod 的部署。当Pod 发生故障时,控制器会检测到它并生成一个新的Pod。

将部署中的Pod 数量从1 更改回2。您还可以通过控制器实施滚动升级、重新生成升级、版本回滚等发布策略。

049d1aa9207a4fd6bc665104dc204bfd~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=FIg%2Bfl%2BMeFS9Q%2FO%2BgDJLvS5tY%2BM%3D

第四理念:服务

服务:为一个或多个Pod实例提供稳定的访问地址

例如,一个Deployment 可能包含两个或多个相同的Pod。对于外部用户来说,无论访问哪个Pod都是一样的,所以我们希望能够负载均衡。

在进行负载均衡时,您只需要访问固定的VIP或虚拟IP地址,而不需要知道每个特定Pod的IP地址。

如果某个Pod 出现故障,您可以用新的Pod 替换它。对于外部用户来说,提供了多个特定的Pod地址,因此Pod地址必须不断更新。

如果有一个抽象可以在pod 失败并重新启动时将所有pod 访问功能抽象为第三方IP 地址,那么实现此功能的Kubernetes 抽象称为服务。

实现一个Service有多种入口方式。

1. ClusterIP:集群中服务的唯一IP地址。该IP 允许您以平衡的方式访问后端Pod,而不必担心特定的Pod。 2. NodePort:服务在集群中的每个节点上启动一个端口,任意节点上都可以通过这个端口访问pod。 3、负载均衡器:基于NodePort,利用公有云环境创建外部负载均衡器,将请求转发到NodeIP:NodePort。 4.ExternalName:通过DNS CNAME记录(在spec.externlName中设置)将服务定向到指定的域名。

353a54f4f80a4f4697953962d2256ba3~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=c7r6YdrbjFfN8gWnZo3Wc9PVh7w%3D” />
第五个概念:Namespace
Namespace:用来做一个集群内部的逻辑隔离,包括鉴权、资源管理等。Kubernetes 的每个资源,比如Pod、Deployment、Service
都属于一个 Namespace,同一个 Namespace 中的资源需要命名的唯一性,不同的 Namespace 中的资源可以重名。
4af59d4d532149ea808a2125cb137311~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=m0w4wxAZyY8E37LY5qbttvvQ8NE%3D
K8S的API
Kubernetes API 是由 HTTP+JSON 组成的:用户访问的方式是HTTP,访问API 中 content 的内容是JSON格式的。
用Kubectl 命令、Kubernetes UI或者Curl,直接与Kubernetes交互都是使用 HTTP + JSON 的形式。
如下图,对于这个Pod类型的资源,它的HTTP访问的路径就是 API,apiVesion: V1, 之后是相应的Namespaces,
以及Pods资源,最终是 Podname,也就是Pod的名字。
2f63273cef7d4089ae699b51e7d34fe9~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=54w5ckW%2BXk1slD0Ezm4YvZ8soSk%3D
当提交一个 Pod,或者 get 一个 Pod 的时候,它的 content 内容都是用JSON 或者是YAML表达的。上图中YAML的例子,
在这个YAML文件中,对Pod资源的描述分为几个部分。
第一个部分,一般是 API 的 version。比如在这个例子中是 V1,它也会描述我在操作哪个资源; kind 如果是 pod,在 Metadata 中,
就写上这个 Pod 的名字;比如nginx。也会给pod打一些 label,在 Metadata 中,有时候也会去写 annotation,也就是对资源的额外的一些用户层次的描述。
比较重要的一个部分叫 Spec,Spec 也就是希望 Pod 达到的一个预期的状态。比如pod内部需要有哪些 container 被运行;
这里是一个name为nginx 的 container,它的 image 是什么?它暴露的 port 是什么?
当从 Kubernetes API 中去获取这个资源的时候,一般在 Spec 下面会有一个status字段 ,它表达了这个资源当前的状态;
比如一个 Pod 的状态可能是正在被调度、或者是已经 running、或者是已经被 terminates(被执行完毕)。
Label是一个比较有意思的 metadata,可以是一组KeyValue的集合。
如下图,第一个 pod 中,label 就可能是一个 color 等于 red,即它的颜色是红颜色。当然也可以加其他 label,
比如size: big 就是大小,定义为大的,它可以是一组label。
这些 label 是可以被 selector(选择器)所查询的。就好比sql 类型的 select 语句。
ad58609b71ba4ffc8056add8bc6aef3b~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1717774589&x-signature=27V4c46xPfpZD%2F7Ktnw%2FHn8NujI%3D
通过label,kubernetes 的API层就可以对这些资源进行筛选。
例如,Deployment可能代表一组Pod,是一组Pod 的抽象,一组Pod就是通过label selector来表达的。
当然Service对应的一组Pod来对它们进行统一的访问,这个描述也是通过label selector来选取的一组Pod。
推荐
https://kubernetes.io/docs/home/(Kubernetes官方文档)
http://docs.kubernetes.org.cn/(Kubernetes中文文档)

原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/83506.html

(0)
小条's avatar小条
上一篇 2024年5月31日 下午11:36
下一篇 2024年5月31日 下午11:36

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注