写点什么

【K8s 入门必看】第三篇 —— K8s 必备基础概念大梳理

  • 2022 年 8 月 04 日
  • 本文字数:2084 字

    阅读完需:约 7 分钟

【K8s入门必看】第三篇 —— K8s必备基础概念大梳理


@[toc]



🌟 前言

要想深入理解 Kubernetes 系统的特性与工作机制,不仅需要理解系统关键资源对象的概念,还要明确这些资源对象在系统中所扮演的角色。


下面将介绍与 Kubernetes 集群相关的概念和术语,Kubernetes 集群架构如图所示。


1. Pod

Pod(直译为豆荚)是 Kubernetes 中最小管理单位(容器运行在 Pod 中),一个 Pod 可以包含一个或多个相关容器。


在同一个 Pod 内的容器可以共享网络名称空间和存储资源,也可以由本地的回环接口(lo)直接通信,但彼此又在 MountUserPID 等命名空间上保持隔离。


Pod 抽象图如图所示。


2. Label 和 Selector

Label标签)是资源标识符,用来区分不同对象的属性。Label 本质上是一个键值对(Key Value),可以在对象创建时或者创建后进行添加和修改。


Label 可以附加到各种资源对象上,一个资源对象可以定义任意数量的 Label


用户可以通过给指定的资源对象捆绑一个或多个 Label 来实现多维度的资源分组管理功能,以便于灵活地进行资源分配、调度、配置、部署等管理工作。


Selector选择器)是一个通过匹配 Label 来定义资源之间关系的表达式。


给某个资源对象定义一个 Label,相当于给它打一个标签,随后可以通过 Label Selector标签选择器)查询和筛选拥有某些 Label 的资源对象,LabelPod 的关系如图所示。


3. Pause 容器

Pause 容器用于 Pod 内部容器之间的通信,是 Pod 中比较特殊的 "根容器"


它打破了 Pod 中命名空间的限制,不仅是 Pod 的网络接入点,而且还在网络中扮演着 "中间人" 的角色。


每个 Pod 中都存在一个 Pause 容器,其中运行着进程用来通信。


Pause 容器与其他进程的关系如图所示。


4. Replication Controller

Pod 的副本控制器(Replication Controller,RC),在现在的版本中是一个总称。


老版本中使用 Replication Controller 来管理 Pod 副本(副本指一个 Pod 的多个实例),新版本增加了 Replica SetDeployment 来管理 Pod 的副本,并将三者统称为 Replication Controller


Replication Controller 保证了集群中存在指定数量的 Pod 副本。


当集群中副本的数量大于指定数量,多余的 Pod 副本会停止,反之,欠缺的 Pod 副本则会启动,保证 Pod 副本数量不变。


Replication Controller 是实现弹性伸缩、动态扩容和滚动升级的核心。


ReplicaSet 是创建 Pod 副本的资源对象,并提供声明式更新等功能。


Deployment 是一个更高层次的 API 对象,用于管理 ReplicaSetsPod,并提供声明式更新等功能,比老版本的 Replication Controller 稳定性高。


官方建议使用 Deployment 管理 ReplicaSets,而不是直接使用 ReplicaSet,这就意味着可能永远不需要直接操作 ReplicaSet 对象,而 Deployment 将会是使用最频繁的资源对象。


DeploymentReplicaSetRS)的关系如图所示。


5. StatefulSet

Kubernetes 系统集群中,Pod 的管理对象 StatefulSet 用于管理系统中有状态的集群,如 MySQLMongoDBZooKeeper 集群等。


这些集群中每个节点都有固定的 ID 号,集群中的成员通过 ID 号相互通信,且集群规模是比较固定的。


另外,为了能够在其他节点上恢复某个失败的节点,这种集群中的 Pod 需要挂载到共享存储的磁盘上。


在删除或者重启 Pod 后,Pod 的名称和 IP 地址会发生改变,为了解决这个问题,Kubernetes v1.5 版本中加入了 StatefulSet 控制器。


StatefulSet 可以使 Pod 副本的名称和 IP 地址在整个生命周期中保持不变,从而使 Pod 副本按照固定的顺序启动、更新或者删除。


StatefulSet 有唯一的网络标识符(IP 地址),适用于需要持久存储、有序的部署、扩展、删除和滚动更新的应用程序。

6. Service

Service 其实就是经常提起的微服务架构中的一个 "微服务",网站由多个具备不同业务能力而又彼此独立的微服务单元所组成,服务之间通过 TCP/UDP 进行通信,从而形成了强大而又灵活的弹性网络,拥有强大的分布式能力、弹性扩展能力、容错能力。


Service 服务提供统一的服务访问入口和服务代理与发现机制,前端的应用(Frontend Pod)通过 Service 提供的入口访问一组 Pod 集群。


Kubernetes 集群中存在 DNS 附件时,Service 服务会自动创建一个 DNS 名称用于服务发现,将外部的流量引入集群内部,并将到达 Service 的请求分发到后端的 Pod 对象上。


因此,Service 本质上是一个四层代理服务。PodRCServiceLabel Selector 四者的关系如图所示。


7. Namespace

集群中存在许多资源对象,这些资源对象可以是不同的项目、用户等。


Namespace(命名空间)将这些资源对象从逻辑上进行隔离并设定控制策略,以便不同分组在共享整个集群资源时还可以被分别管理。

8. Volume

Volume存储卷)是集群中的一种共享存储资源,为应用服务提供存储空间。


Volume 可以被 Pod 中的多个容器使用和挂载,也可以使用于容器之间共享数据。

9. Endpoint

Endpoint 是一个抽象的概念,主要用于标识服务进程的访问点。


可以理解为 "容器端口号 + Pod 的 IP 地址 = Endpoint"


Endpoint 抽象图如图所示。


总结

本篇文章主要讲解了 集群中的资源对象 以及它们在 集群中实现的作用


通过上一篇文章和本章的学习,相信大家不仅学会了部署集群,还掌握了各个组件间的依赖关系。

发布于: 刚刚阅读数: 4
用户头像

🏅️ InfoQ 专家博主 2022.03.08 加入

CSDN:飞向星的客机

评论

发布
暂无评论
【K8s入门必看】第三篇 —— K8s必备基础概念大梳理_Docker_飞向星的客机_InfoQ写作社区