# pod详解
# pod 相关概念
- 每个pod中包含一个或多个容器
- pod 中包含
- 根容器 Pause
- 根据它健康状态,判断健康中台
- 根容器设置IP(eg. 192.168.1.1),共享该ip,实现pod内部网络通信
- 用户容器
- 用户程序所在的容器可多可少
- 根容器 Pause
# pod的定义, 资源清单, yaml配置
- 使用如下命令查看可以的配置项
kubectl explain pod查看一级资源kubectl explain pod.metadata查看二级资源
apiVersion: v1
kind: Pod
metadata:
name: string
namespace: string
labels:
- name: string
spec:
containers:
- name: string
image: string
imagePullPolicy: [Always|Never|IfNotPressent] # 获取镜像策略
command: [string] # 容器启动命令,不指定则容器打包时候的命令
args: [string] # 容器命令参数列表
workingDir: string # 容器工作目录
volumeMounts: # 挂载到容器内部的存储卷设置
- name: string # pod定义共享存储卷的名称, volumes[]部分定义的卷名
mountPath: string # 在容器内的挂载的绝对路径
readOnly: boolern
ports: 暴露端口号列表
- name: string # 端口号名称
containerPort: int # 容器需要监听的端口号
hostPort: int # 容器所在主机需要监听的端口号, 需与默认 Container相同
protocol: string # 端口协议 TCP/UDP 默认TCP
env:
- name: string
value: string
resources: # 资源限制和请求的设置
limits: # 资源限制
cpu: string # cpu限制,将用于 docker run --cpu-share参数
memory: string # 内存限制 Mib/Gib 用于 docker run --memory
requests: # 资源请求
cpu: string # 启动容器时初始可用数量
memory: string # 内存请求,容器的初始可用数量
lifecycle: # 声名周期钩子
postStart: # 容器启动后立刻执行,执行失败则重启策略
preStop: # 容器终止前执行,结果如何都会终止
livenessProbe: # 对容器健康检查的设置,无响应几次后自动重启
exec: # 对容器内检查方法设置为exec方式
command: [string] # 需要指定exec的命令或脚本
httpGet:
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket:
port: number
initialDelaySeconds: 0 # 容器启动后首次探测时间
timeoutSeconds: 1 # 响应超时时间
periodSeconds: 10 # 周期探测时间
successThreshold: 0
failureThreshold: 0
securityContext:
privileged: false
restartPolicy: [Always|Never|OnFailure] # 容器重启策略
nodeName: <string> # 通过nodename将该pod指定到名称为node的节点上
nodeSelector: object # node选择器
imagePullSecrets: # pull镜像使用的secret名称。以key:secretkey格式指定
- name: string
hostNetwork: false # 使用主机网络模式,默认false
volumes:
- name: string
emptyDir: {} # 类型为emptyDir的存储卷,与Pod同周期的的临时目录
hostPath: string
path: string # pod所在宿主机的目录
secret:
scretbane: string
items:
- key: string
path: string
configMap:
name: string
items:
- key: string
path: string
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# pod配置
- 一级属性
- apiVersion api版本 kubectl api-versions
- kind 资源类型可以使用 kubectl api-resources 获取
- metadata 资源标识和说明,
- spec 各种资源的详细配置
- status , k8s自己生成
# sepc参数
- containers: 容器列表定义容器的详细信息
- name
- image 镜像名称(镜像时根据句集群配置拉去过来的)
- imagePullPolicy 镜像拉去策略, 默认值根据image的标签相关。image:latest则always, 否则ifNotPresent
- command
- args
- args
- env
- ports
- resources
- nodeName: 选择node
- nodeSelector: node选择器
- hostNetwork: 使用主计算机网络
- volumes: 存储卷
- restartPolicy 重启策略
# command && args
关于 command 和 args
- 如果command 和 args 都没有写,使用dockerfile的配置
- 如果command写了args没写那么dockerfile对应配置将忽略
- 如果command没写args写了, 那么dockerfile中Entrypoint命令会执行,并使用args
- 如果command和args都写了,dockerfile的配置忽略, 执行command并追加args参数
# 进入容器
kubectl exec pod-name -n dev -c busybox -it /bin/sh
- 如果pod只有一个用户容器时候可以省略 -c , 指定容器名字
# 容器暴露端口 ports
kubectl explain pod.spec.containers.ports
- name 给端口起个名, pod内唯一性
- containerPort: 容器的端口
- hostPort: 主机上端口, 一般不设置, 设置的话容易出现端口冲突问题
- hostIP: 外部端口绑定主机ip, 一般省略
- protocol: 端口协议 TCP/UDP/SCTP, 一般使用默认值 TCP
# 容器资源限制 内存 CPU
- containers 容器的 resources字段
- limits:限制容器使用最大资源, 超过limit时会被干掉,然后重启
- requests: 容器设置最小资源,如果环境资源不足这个参数,容器无法启动
- cpu: "2"