Kubernetes——Pod是什么

Pod是什么

Pod是你可以在Kubernetes中创建与管理的最小的可部署的计算单元。

Pod是一组容器的集合(就像鲸鱼群或豌豆夹),它包括一个或多个容器,这些容器共享存储及网络资源,以及如何运行容器的规范。Pod中的容器及组件总是在一个运行的共享上下文中共同协作及共同调度。Pod建模于一个特定于应用程序的“逻辑主机”。它包含一个或多个相对于紧密耦合的应用容器。在非云的上下文中,应用程序运行在物理或虚拟机;这和云应用运行在逻辑主机上是一样的。

Pod的共享上下文是Linux的namespace、cgroups以及其他潜在的隔离组件所构成的一个集合——它们一起被隔离在一个容器中。在Pod的上下文内部,各个应用也可以进一步的应用子隔离。

创建Pod

$vim nginx.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

创建pod

kubectl apply -f nginx.yaml
kubectl get pods

Pod虽然可以使用这种方式创建,但是我们通常不会这样做(直接创建)。而是使用工作负载资源以间接的方式创建出来。

使用工作负载管理Pod

通常我们不需要直接创建Pod,即使是单例的Pod也不会如此。取而代之,会使用工作负载资源来创建Pod,例如Deployment或Job等。如果,你需要跟踪Pod的状态,可以考虑使用StatefulSet资源。

在Kubernetes集群中有两种方式使用Pod:

1、运行单个的容器的Pod:每个Pod一个容器(one-container-per-Pod)方式是kubernetes最常用的一种方式。使用这种方式,你可以把Pod想像成是一个单个容器的包装器。Kubernetes管理Pod胜过它直接管理容器。

2、包含需要运行在一起的多个容器的Pod:Pod可以封装由多个共同协作的容器组成的应用程序,这些容器联系紧密且需要共享资源。这些共同协作的容器构成一个服务的总成。例如,一个容器使用共享的公共存储卷来提供数据存储,而一个单独的sidecar容器刷新或更新这些文件。Pod将这些容器、存储资源及短生命周期的网络实例封装成一个独立的单元。

每一个Pod都意味着运行一个指定的应用程序的一个单独的实例。如果你想横向扩展应用程序(通过运行更多的实例来提供更多的资源),可以运行多个Pods,每个Pod对应一个实例,这通常被称为replication(复制),复制Pods通常是由工作负载资源及其控制器作为一个组来创建或管理的。

Pod是如何管理多个容器的

Pods被设计为支持多协作处理单元(作为容器),从而提供一个完整的服务单元。Pods中的容器在一个集群中的物理或虚拟机中是自动协作及自动调度的。这些容器之间互相可以共享资源、组件,通讯,以及如何关闭。

例如,你可能有一个容器用于提供共享卷文件服务的web服务器,并且还有一个名为“sidecar”的容器用于从远程资源更新这些文件,如下图所示:

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注