Kubernetes – Pod

Pod是Kubernetes应用程序的基本执行单元 —— 创建或部署的Kubernetes对象模型中最小、最简单的单元。Pod表示在集群上运行的进程。

Pod封装了应用程序的容器(在某些情况下是多个容器)、存储资源、惟一的网络IP和控制容器如何运行的选项。Pod表示一个部署单元: Kubernetes中的应用程序的单个实例,它可能由单个容器或少量紧密耦合且共享资源的容器组成。

Docker是Kubernetes Pod中最常用的容器运行时,但是Pod也支持其他容器运行时。

Kubernetes集群中的Pod主要有两种使用方式:

  • 单个容器
  • 多个容器

单个容器

是Kubernetes最常见的用例,一个容器一个pod。在这种情况下,你可以将Pod看作单个容器的包装器,Kubernetes直接管理Pod而不是容器。

启动pod,可以直接使用命令,也可使用yaml文件。

示例

使用kubectl命令启动指定镜像nginx的pod,pod名称是nginx4:

kubectl run --generator=run-pod/v1 nginx4 --image=nginx

示例

pod yaml模板:

pod-demo.yaml

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:

kubectl create -f ./pod-demo.yaml

多个容器

Pod可以封装多个容器组成的应用程序,这些容器是紧密耦合的,需要共享资源。这些位于同一位置的容器可能形成服务的单个内聚单元 — 一个容器将文件从共享卷提供给外部,而另一个“sidecar”容器将刷新或更新这些文件。Pod将这些容器和存储资源打包成一个可管理的实体。

示例

多个容器pod yaml模板文件:

apiVersion: v1
kind: Pod
metadata:
  name: two-containers
spec:

  restartPolicy: Never

  volumes:
  - name: shared-data
    emptyDir: {}

  containers:

  - name: nginx-container
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html

  - name: debian-container
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /pod-data
    command: ["/bin/sh"]
    args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]

在配置文件中,可以看到Pod有一个名为shared-data的卷。
配置文件中列出的第一个容器运行nginx服务器。共享卷的挂载路径是/usr/share/nginx/html。第二个容器基于debian映像,共享卷的挂载路径是/pod-data

每个Pod都意味着运行指定应用程序的单个实例。如果你想水平扩展你的应用程序(例如,运行多个实例),你应该使用多个pod,每个实例一个。在Kubernetes中,这通常被称为复制。复制的pod通常通过一个称为控制器的抽象创建,并作为一个组进行管理。



浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载