技术编程|图解 K8s 核心概念和术语( 二 )


从图上可看出 , 在 Node 节点上面 , 还需要一个容器运行环境 , 如果使用 Docker 技术栈 , 则还需要在 Node 节点上面安装 Docker Engine , 专门负责该节点容器管理工作 。 Pod
Pod 是 k8s 最重要而且是最基本的一个资源对象 , 它的结构如下:

技术编程|图解 K8s 核心概念和术语
本文插图

从以上 Pod 的结构图可以看出 , 它其实是容器的一个上层包装结构 , 这也就是为什么 K8s 可以支持多种容器类型的原因 , 基于这方面 , 我理解 k8s 的定位就是一个编排与调度工具 , 而容器只是它调度的一个资源对象而已 。
Pod 可包含多个容器在里面 , 每个 Pod 至少会有一个 Pause 容器 , 其它用户定义的容器都共享该 Pause 容器 , Pause 容器的主要作用是用于定义 Pod 的 ip 和 volume 。
Pod 在 k8s 集群中的位置如下图所示:

技术编程|图解 K8s 核心概念和术语
本文插图

Label
Label 在 k8s 中是一个非常核心的概念 , 我们可以将 Label 指定到对应的资源对象中 , 例如 Node、Pod、Replica Set、Service 等 , 一个资源可以绑定任意个 Label , k8s 通过 Label 可实现多维度的资源分组管理 , 后续可通过 Label Selector 查询和筛选拥有某些 Label 的资源对象 , 例如创建一个 Pod , 给定一个 Label , workerid=123 , 后续可通过 workerid=123 删除拥有该标签的 Pod 资源 。

技术编程|图解 K8s 核心概念和术语
本文插图

Replica Set
Replica Set 目的是为了定义一个期望的场景 , 比如定义某种 Pod 的副本数量在任意时刻都处于 Peplica Set 期望的值 , 假设 Replica Set 定义 Pod 的副本数目为:replicas=2 , 当该 Replica Set 提交给 Master 后 , Master 会定期巡检该 Pod 在集群中的数目 , 如果发现该 Pod 挂掉了一个 , Master 就会尝试依据 Replica Set 设置的 Pod 模板创建 Pod , 以维持 Pod 的数量与 Replica Set 预期的 Pod 数量相同 。
通过 Replica Set , k8s 集群实现了用户应用的高可用性 , 而且大大减少了运维工作量 。 因此生产环境一般用 Deployment 或者 Replica Set 去控制 Pod 的生命周期和期望值 , 而不是直接单独创建 Pod 。

技术编程|图解 K8s 核心概念和术语
本文插图

类似 Replica Set 的还有 Deployment , 它的内部实现也是通过 Replica Set 实现的 , 可以说 Deployment 是 Replica Set 的升级版 , 它们之间的 yaml 配置文件格式大部分都相同 。 Service
Service 是 k8s 能够实现微服务集群的一个非常重要的概念 , 顾名思义 , k8s 的 Service 就是我们平时所提及的微服务架构中的“微服务” , 本文上面提及的 Pod、Replica Set 等都是为 Service 服务的资源 ,如下图表示 Service、Pod、Replica Set 的关系:

技术编程|图解 K8s 核心概念和术语
本文插图

从上图可看出 , Service 定义了一个服务访问的入口 , 客户端通过这个入口即可访问服务背后的应用集群实例 , 而 Service 则是通过 Label Selector 实现关联与对接的 , Replica Set 保证服务集群资源始终处于期望值 。
以上只是一个微服务 , 通常来说一个应用项目会由多个不同业务能力而又彼此独立的微服务组成 , 多个微服务间组成了一个强大而又高可用的应用服务集群 。

技术编程|图解 K8s 核心概念和术语


推荐阅读