Pod是什么
Pod是Kubernetes 对象模型中最小的、最简单的可部署的对象,是最小的基本执行单元。是一个在群集上运行的进程。Pod封装了一个或多个应用程序的容器、存储资源,唯一的网络IP以及管理一个或多个容器应该如何运行的配置选项。一个Pod代表一个部署在Kubernetes 中应用的一个单个实例,该应用可能是一个容器或少量紧密耦合并共享资源的容器。
Pod的构建方式
Kubernetes集群中Pod有两种构建方式:
1.运行单个容器的Pod
“one-container-per-Pod”模型是Kubernetes使用Pod最常见的方式。可以将Pod视为单个容器的包装,但是,Kubernetes直接管理Pod而不是容器。
2.运行多个需要协同工作的容器的Pod
Pod可以封装一个由多个具有相同网址的容器组成的应用程序,这些容器业务上紧密耦合且需要共享资源。这些容器将对外提供统一的服务。 一个容器共享卷向其他容器提供文件服务,其他容器可以更新这些文件。Pod将这些容器和存储资源包装在一起,由Kubernetes统一管理。
Pod如何管理多个容器
Pod中的多个容器位于群集中的同一物理或虚拟机上,容器间可以共享存储和网络资源,Pod统一调度、协调和管理容器,以支持多个协作流程,形成一个服务单元。
在一些紧密耦合的特定实例中,单个Pod内部可以对容器进行分组。如:一个Web服务器容器提供共享文件卷,另一个容器从远程更新这些文件,如下图所示:
Pod管理容器的两种共享资源:网络和存储。
网络
每个Pod都分配有唯一的IP地址。Pod中的每个容器都共享网络命名空间,包括IP地址和网络端口。这实际上就是每个容器都通过同一个网桥进行连接(相关知识可参见《Docker网络基础入门》、《Docker桥接网络入门》和《实战:Docker桥接网络连通性测试》)。Pod内的容器可以使用localhost相互通信。当Pod中的容器与Pod 外部的实体通信时,需要协调如何使用共享的网络资源(如端口)。
存储
Pod可以指定一组共享存储卷。Pod中的所有容器都可以访问共享卷,实现容器间共享数据。如果重新启动其中一个容器,则卷上数据会持久存活,不会影响其他容器对数据的使用。
Pod如何使用
每个Pod都是运行某一应用程序的单个实例。在Kubernetes中很少直接创建单独的pods。当Pod创建后(无论是直接创建或由控制器Controller间接创建),都运行在某一集群的节点上,直到应用进程终止、pod对象被删除、因资源不足Pod崩溃,或者Node失败。
Pod本身不能自我修复。如果将Pod调度到损坏的节点,或者调度操作本身失败,则删除Pod;同样,由于缺乏资源或节点维护,Pod也将被删除。一般地,Kubernetes使用Controller控制器(更高级别的抽象)来管理Pod实例的工作。因此,虽然可以直接使用Pod,但在Kubernetes中使用Controller管理Pod更为常见。
比如:如果要水平扩展应用程序(即,运行多个实例),则应使用多个Pod(在Kubernetes中称为复制)。复制Pod通常由控制器Controller创建和管理。
Controller创建和管理多个Pod、处理复制和部署,并在集群范围内提供自我修复功能。例如,如果某节点发生故障,Controller将在不同节点上自动部署新的Pod来替换发生故障节点的Pod。
控制器Controller包括:Deployment、StatefulSet和DaemonSet。
Pod模板
控制器Controller使用Pod模板来创建Pod。
Pod模板是包含在Controller对象(如 Replication Controllers,Jobs和 DaemonSets。)中的pod规范。控制器使用Pod模板制作实际的pod。
下面的示例是Pod的简单清单,其中包含一个打印消息的容器。
apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: containers: - name: myapp-container image: busybox command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
Pod模板不是指定所有副本的当前所需状态。对模板的后续更改甚至切换到新模板对已创建的Pod没有直接影响。类似地,随后可以直接更新并由复制控制器创建新的Pod。
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777