Pod概念与结构

Pod 是 K8s最重要的基本概念,官网给出概念:Pod是Kubernates可调度的最小的、可部署的单元。怎么理解呢?最简单的理解是,Pod是一组容器。

再详细些,Pod是一组容器组成的概念,这些容器都有共同的特点:

都有一个特殊的被称为“根容器”的Pause容器。Pause容器镜像属于K8s平台的一部分
包含一个或多个紧密相关的用户业务容器。假设个场景:业务容器需要独立的redis提供服务,这里就可以将它们两个部署在同一Pod中。
pod的组成示意图:
在这里插入图片描述
为什么Kubernetes会设计出一个全新的概念与Pod会有这样特殊的结构呢?

原因之一:K8s需要将一组容器视为一个单元处理。当其中某些容器死亡了,此时无法判定这组容器的状态。而当成一个单元,只要其中有一个容器挂了,这个单元就判定挂了。
原因之二:通过Pause共享容器IP,共享Pause挂接的Volume,简化密切关联的业务容器之间的通信问题和文件共享问题
K8s为每个Pod都分配了唯一的IP地址,称为Pod IP,一个Pod里的多个容器共享Pod IP地址。需要牢记的一点是:在 kubernetes 里,一个 Pod 里的容器与另外主机上的 Pod 容器能够直接通信。

Pod的创建流程

当一个普通的Pod被创建,就会被放入etcd中存储,随后被 K8s Master节点调度到某个具体的Node上并进行绑定(Binding),随后该Pod被对应的Node上的kubelet进程实例化成一组相关的Docker容器并启动。

当Pod中有容器停止时,K8s 会自动检测到这个问题并重启这个 Pod(Pod里所有容器);如果Pod所在的Node宕机,就会将这个Node上的所有Pod重新调度到其他节点上。

Service概念

Service服务是Kubernetes里的核心资源对象之一,从名称上来看,理解其为一个”服务“也不为过,Service的作用是为相同标识的一系列Pod提供唯一的访问地址。

Service使用的唯一地址称为ClusterIP,仅当在集群内的容器才能通过此IP访问到Service

它具体实现对一系列Pod绑定,需要再引入Label的概念,才能做出解答。

Label概念

Kubernetes 提供了Label(标签)来对Pod、Service、RC、Node等进行标记。相当于打标签,Label可以是一组KV键值对,也可以是一个set

一个资源对象可以定义任意数量的Label,同一个Label可以添加到任意数量的资源对象上。通常由定义资源对象时添加,创建后亦可动态添加或删除。
在这里插入图片描述
在这里插入图片描述
Service如何动态绑定Pods?
原来,在定义 Pod 时,设置一系列 Label 标签,Service 创建时定义了 Label Selector(Label Selector 可以类比为对 Label 进行 SQL 的 where 查询),kube-proxy 进程通过 Service的Label Selector 来选择对应的 Pod,自动建立每个 Service 到对应 Pod 的请求转发路由表,从而实现 Service 的智能负载均衡机制。

在这里插入图片描述
转载:https://www.cnblogs.com/hellxz/p/how-kubernetes-deploy-application.html

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐