Kubernetes Pod

Kubernetes Pod

Pod是一个Kubernetes抽象,表示一组一个或多个应用程序容器(如Docker或rkt)以及这些容器的一些共享资源。这些资源包括:

  • 共享存储,作为卷
  • 网络,作为唯一的集群IP地址
  • 有关如何运行每个容器的信息,例如容器映像版本或要使用的特定端

Pod用于模拟特定于应用程序的“逻辑主机”,并可以包含相对紧密耦合的不同应用程序容器。例如,一个Pod可能包含带有Node.js应用程序的容器,也包含一个不同的容器,用于提供由Node.js Web服务器发布的数据。Pod中的容器共享一个IP地址和端口空间,总是共址和共同调度,并在同一个节点上的共享上下文中运行。

Pod是Kubernetes平台上的最小单元。当我们在Kubernetes上创建一个部署时,这个部署创建了带有容器的Pod(而不是直接创建容器)。每个Pod与其调度的节点绑定,并保持到终止(根据重新启动策略)或删除。如果发生节点故障,则在群集中的其它可用节点上调度相同的pod

节点

Pod总是在节点上运行。节点是Kubernetes中的工作器,可能是虚拟机或物理机,具体取决于群集。每个节点由主管理。一个节点可以有多个容器,而Kubernetes主站自动处理在集群中节点上的容器的调度。主站的自动调度考虑到每​​个节点上的可用资源。

每个Kubernetes节点至少运行:

  • Kubelet,负责Kubernetes Master和Node之间的通信的过程; 它管理在机器上运行的Pod和容器。

  • 容器runtime,(如docker,rkt),负责从注册表中拉取镜像,解包容器并运行应用程序。

    Kubernetes服务概述

    Kubernetes 荚是凡人。豆荚实际上有一个生命周期。当工作者节点死亡时,运行在节点上的Pod也丢失。然后,ReplicationController可能会通过创建新的Pod来动态地将群集驱动回所需的状态,以保持应用程序的运行。作为另一个例子,考虑具有3个副本的图像处理后端。那些副本是可以替换的。前端系统不应该关心后端副本,或者即使Pod丢失并重新创建。也就是说,Kubernetes集群中的每个Pod都具有唯一的IP地址,即使是同一个节点上的Pod也是如此,因此需要一种自动协调Pod之间的更改的方法,以便您的应用程序继续运行。

    Kubernetes中的服务是一个抽象,它定义了Pod的逻辑集合以及访问它们的策略。服务启用依赖Pod之间的松散耦合。使用YAML (首选)或JSON 定义服务,就像所有Kubernetes对象一样。服务所针对的Pod集通常由LabelSelector来确定(请参阅下面为什么您可能需要Service而不包含selector在规范中)。

    虽然每个Pod都有一个唯一的IP地址,但是这些IP不会在没有服务的情况下暴露在群集之外。服务允许您的应用程序接收流量。通过type在ServiceSpec中指定一个服务可以以不同的方式暴露:

    • ClusterIP(默认) - 将服务公开在群集中的内部IP上。这种类型使服务只能从群集内访问。
    • NodePort - 使用NAT在集群中每个选定节点的同一端口上公开服务。使群集外部的服务可以使用:。ClusterIP的超集。
    • LoadBalancer - 在当前云中创建一个外部负载均衡器(如果支持),并为服务分配一个固定的外部IP。NodePort的Superset。
    • ExternalName - 使用任意名称(externalName在规范中指定)通过返回具有名称的CNAME记录公开该服务。没有使用代理。此类型需要v1.7或更高版本kube-dns

    服务和标签

    服务通过一组Pod来路由流量。服务是允许吊舱在Kubernetes中死亡和复制而不影响应用程序的抽象。在相关的Pod(例如应用程序中的前端和后端组件)之间的发现和路由由Kubernetes Services处理。

    服务使用标签和选择器来匹配一组Pod,这是一个允许对Kubernetes中的对象进行逻辑操作的分组原语。标签是连接到对象的键/值对,可用于多种方式:

    • 指定用于开发,测试和生产的对象
    • 嵌入版本标签
    • 使用标签分类对象 标签可以在创建时或之后附加到对象。可以随时修改。

你可能感兴趣的:(Docker,Kubernetes)