Kubernetes Pod

本文将介绍 Kubernetes 中的核心概念 Pod,它是建立在容器上的一层抽象。

一、什么是 Pod?

Pod,原意是豌豆荚,后又衍生出 “舱室”、”太空舱” 等含义,形象地说,Pod 就是包含了很多组件的一种结构。

二、为什么需要 Pod?

在现实的生产环境中,应用往往不是完全独立的,而是与其它应用协同工作。

某些情况下,应用的关系比较松散,可以通过诸如 HTTP 请求的方式相互协作。但也有一些特殊情况,应用之间的关系十分紧密,无法拆开(例如:有些应用运行前需要其它应用进行初始化;某些应用与日志代理应用协同工作,日志代理应用需要读取它的本地文件然后再进行转发)。一种做法是将紧密的若干个应用放在一个容器中运行,这种做法违背容器 “对应用独立封装” 的初衷;另一种做法是在引入 “打包仓” 概念,其内的多个容器既保持相对独立,又能够共享网络、存储等资源,这便是 Pod。

三、Kubernetes 中的 Pod

Pod 中包含多个容器,它是多个容器的 “打包仓”。

Pod 作为一个整体,是应用调度部署的 最小单位 ,将被一起调度、一起运行。

Pod 作为 Kubernetes 中的核心,有大量的资源对象依附于它,每个资源对象都对应着现实中的实际运维需求,如下:

四、Pod 的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Kubernetes的KPI版本号
apiVersion: v1
# 资源对象的类型 【Pod、Node、Job、Service等】
kind: Pod
# 元信息,用于标记资源对象
metadata:
# 名称
name: test-pod
# 标签,方便归类与识别
labels:
owner: chrono
env: demo
region: north
tier: back
# 说明,描述资源对象的目标状态
spec:
# 容器数组
containers:
# 容器名
- name: busy
# 容器名
image: busybox:latest
# 镜像拉取策略 【Always/Never/IfNotPresent】
imagePullPolicy: IfNotPresent
# 环境变量
env:
- name: os
value: "ubuntu"
- name: debug
value: "on"
# 容器启动时要执行的命令,类似于Dockerfile的ENTRYPOINT
command:
- /bin/echo
# command的参数
args:
- "$(os), $(debug)"

参考

  • Kubernetes
  • Kubernetes 入门实战课
  • 深入剖析 Kubernetes