kuberneters

Kubernetes对象之Pod

2018-03-13  本文已影响1087人  伊凡的一天

学习本节内容之前,希望你已经对Kubernetes有了初步的概念。具体请参考这篇文章:

Pod是Kubernetes调度的最小单元。一个Pod可以包含一个或多个容器,因此它可以被看作是内部容器的逻辑宿主机。Pod的设计理念是为了支持多个容器在一个Pod中共享网络和文件系统。因此处于一个Pod中的多个容器共享以下资源:

Pod,容器与Node(工作主机)之间的关系如下图所示:


Pod,Container与Node之间的关系

1. Pod的定义

通过yaml文件或者json描述Pod和其内容器的运行环境和期望状态,例如一个最简单的运行nginx应用的pod,定义如下:

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

在生产环境中,推荐使用诸如Deployment,StatefulSet,Job或者CronJob等控制器来创建Pod,而不是直接创建。

将上述pod描述文件保存为nginx-pod.yaml,使用kubectl apply命令运行pod

kubectl apply -f nginx-pod.yaml

下面简要分析一下上面的Pod定义文件:

Kubernetes在每个Pod启动时,会自动创建一个镜像为gcr.io/google_containers/pause:version的容器,所有处于该Pod中的容器在启动时都会添加诸如--net=container:pause --ipc=contianer:pause --pid=container:pause的启动参数,因此pause容器成为Pod内共享命名空间的基础。所有容器共享pause容器的IP地址,也被称为Pod IP。

如果我们希望从外部访问这nginx应用,那么我们还需要创建Service对象来暴露IP和port。具体请参考后面的这篇文章:Kubernetes对象之Service

2. Pod的生命周期

Pod的生命周期是Replication Controller进行管理的。一个Pod的生命周期过程包括:

在整个过程中,Pod通常处于以下的五种阶段之一:

2.1 Restart policy

定义Pod时,可以指定restartPolicy字段,表明此Pod中的容器在何种条件下会重启。restartPolicy拥有三个候选值:

2.2 通过controller管理Pod

Pod本身不具备容错性,这意味着如果Pod运行的Node宕机了,那么该Pod无法恢复。因此推荐使用Deployment等控制器来创建Pod并管理。

一般来说,Pod不会自动消失,只能手动销毁或者被预先定义好的controller销毁。但有一种特殊情况,当Pod处于Succeeded或Failed阶段,并且超过一定时间后(由master决定),会触发超时过期从而被销毁。

总体上来说,Kubernetes中拥有三种类型的controller:

参考文章

上一篇下一篇

猜你喜欢

热点阅读