Kubernetes 系列:Kubernetes 关键组件和概念(二)

技术 · 2023-06-25
Kubernetes 系列:Kubernetes 关键组件和概念(二)

上一篇我们介绍了 k8s 的基本架构,我们在这篇文章将介绍 Kubernetes 关键组件和概念。

还是先来一张图:

1_2pdatNn7KzcQZpc8cOALOQ.webp

根据上图我们分别对DeploymentReplicaSetPod详细的介绍,其他的几个在上一篇也做了介绍:

Deployment

DeploymentKubernetes 中的资源对象,为应用程序提供声明性更新。部署允许你描述应用程序的生命周期。也就是说他的主要作用就是管理和控制 Pod 和 ReplicaSet,监控它们运行在用户所期望的状态中。例如应用程序使用哪些镜像像、应该有的 Pod 数量以及更新它们的方式。

ReplicaSet

ReplicaSet 是一个运行 Pod 的多个实例并保持指定的 Pod数量不变的进程。目的就是在任何时间内维持集群中运行的指定数量的 Pod 实例,以防止用户在 Pod 发生故障或无法访问时失去对其应用程序的访问权限,如果监控到某一个Pod不能继续服务的时候,他会确保我们的应用程序Pod总体服务数量保持在我们期望的数量,然后再重新启动一个Pod

这里说一下Replication ControllerReplicaSetReplication Controller是一个较老的版本,后面被新版本ReplicaSet取代,不过他们的作用是类似的。

我们在实时情况下,通常不会手动创建或管理ReplicaSet甚至 Pod, 我们会使用Deployment的资源类型在 Kubernetes 中部署 Pod。该Deployment会在后台自动为我们创建一个ReplicaSet,然后该ReplicaSet负责创建和管理Deployment文件中提到的所需数量的 Pod 和 Pod 副本。

Pod

PodKubernetes 的最小的构建块或者说最小的部署单元。Pod 包含一组一个或多个容器。一般来说,每个Pod有一个容器。Pod 封装了应用程序容器、存储资源、唯一的网络 ID 以及有关如何运行容器的其他配置。如下图:

15CA4E66D8254C57BF86EED6D05AB637.jpg

当应用程序通过 ReplicaSet 水平扩展时,Pod 就会被复制。每个 Pod 会运行相同的容器代码。

我们在接触k8s的时候经常会听到ServiceVolumesnamespace那么这几个的作用又是什么呢,我们继续向下看:

Service

在 Kubernetes 中,Service是一个实体,代表一组运行应用程序或功能组件的 Pod。该Service保存访问策略,并负责对传入请求强制执行这些策略
对于Service的需求源于 Kubernetes 中 pod 的生命周期很短,可以随时更换。Kubernetes 保证给定 pod 和副本的可用性,但不保证单个 pod 的活跃性,比如一组后端 Pod 为群集内的其他前端 Pod 提供功能,前端如何找到并跟踪要连接的 IP 地址呢?这就需要它们连接到Service,该Service将它们中继到相关的当前正在运行的 Pod。

该Service分配一个虚拟 IP 地址,称为 clusterIP,该地址将一直存在,直到被明确销毁为止。该Service充当组件或应用程序之间通信的可靠端点。

对于 Kubernetes 本机应用程序,使用服务的另一种方法是直接通过 Kubernetes API Server 发出请求。API Server 自动公开并维护运行 Pod 的端点。

Volume

类似于 Docker 中的容器Volume,但 Kubernetes Volume适用于整个 Pod,并挂载在 Pod 中的所有容器上。Kubernetes 确保数据在容器重新启动时得以保留。仅当 pod 被破坏时,该 Volume 才会被删除。此外,一个 Pod 可以关联多个Volume(可能是不同类型的)。

Volume 是 Pod 的一个组件,Volume 是在 Pod 规范中创建的,不能单独删除。

Namespace

namespace是一种将集群组织成虚拟子集群的方法,当不同的团队或项目共享 Kubernetes 集群时就需要用到namespace。集群内支持任意数量的namespace,每个namespace在逻辑上彼此分离,能够相互通信,但是不能相互嵌套。
Kubernetes 中的任何资源都存在于default这个namespace或由集群操作员创建的namespace中。

总结

这篇文章主要介绍了k8s里面一些重要概念,DeploymentReplicaSetPod以及ServiceVolumesnamespace,当然还有很多的一些抽象概念,比如Ingress等,总之k8s里面一堆的东西,一时半会儿也是理解不完的,这个需要长久的去学习深挖,这里就不过多的去一一介绍了,接下来会直接去介绍怎么使用k8s以及使用k8s的一些问题。

Kubernetes k8s 微服务 云原生
Theme Jasmine by Kent Liao