# Pod概念

# 什么是Pod?

Pod可简单地理解为是一组、一个或多个容器,具有共享存储/网络及如何运行容器的规范。Pad包含一个或多个相对紧密耦合的应用程序容器,处于同一个Pod中的容器共享同样的存储空间(Volume,卷或存储卷)、IP地址和Port端口,容器之间使用localhost:port相互访问。根据Docker的构造,Pod可被建模为一组具有共享命令空间、卷、IP地址和Port端口的Docker容器。 Pod包含的容器最好是一个容器只运行一个进程。每个Pod包含一个pause容器,pause容器是Pod的父容器,它主要负责僵尸进程的回收管理。 Kubernetes为每个Pod都分配一个唯一的IP地址,这样就可以保证应用程序使用同一端口,避免了发生冲突的问题

# Pod字段解析

apiVersion: v1 # 必选,API的版本号
kind: Pod	# 必选,类型Pod
metadata:	# 必选,元数据
  name: nginx	# 必选,符合RFC 1035规范的Pod名称
  namespace: web-testing # 可选,不指定默认为default,Pod所在的命名空间
  labels:	# 可选,标签选择器,一般用于Selector
    - app: nginx
  annotations:	# 可选,注释列表
    - app: nginx
spec:	# 必选,用于定义容器的详细信息
  containers:	# 必选,容器列表
  - name: nginx	# 必选,符合RFC 1035规范的容器名称
    image: nginx: v1	# 必选,容器所用的镜像的地址
    imagePullPolicy: Always	# 可选,镜像拉取策略
	command: 
	- nginx	# 可选,容器启动执行的命令
	- -g
	- "daemon off;"
		workingDir: /usr/share/nginx/html	# 可选,容器的工作目录
		volumeMounts:	# 可选,存储卷配置
		- name: webroot # 存储卷名称
		  mountPath: /usr/share/nginx/html # 挂载目录
		  readOnly: true	# 只读
		ports:	# 可选,容器需要暴露的端口号列表
		- name: http	# 端口名称
		  containerPort: 80	# 端口号
		  protocol: TCP	# 端口协议,默认TCP
		env:	# 可选,环境变量配置
		- name: TZ	# 变量名
		  value: Asia/Shanghai
		- name: LANG
		  value: en_US.utf8
		resources:	# 可选,资源限制和资源请求限制
		  limits:	# 最大限制设置
			cpu: 1000m
			memory: 1024MiB
		  requests:	# 启动所需的资源
			cpu: 100m
			memory: 512MiB
		readinessProbe:	# 可选,容器状态检查
		httpGet:	# 检测方式
			path: /	# 检查路径
			port: 80	# 监控端口
		  timeoutSeconds: 2	# 超时时间 
		  initialDelaySeconds: 60	# 初始化时间
		livenessProbe:	# 可选,监控状态检查
		  exec:	# 检测方式
			command: 
			- cat
			- /health
		  httpGet:	# 检测方式
			path: /_health
			port: 8080
			httpHeaders:
			- name: end-user
			  value: jason
		  tcpSocket:	# 检测方式
			port: 80
		  initialDelaySeconds: 60	# 初始化时间
		  timeoutSeconds: 2	# 超时时间
		  periodSeconds: 5	# 检测间隔
		  successThreshold: 2 # 检查成功为2次表示就绪
		  failureThreshold: 1 # 检测失败1次表示未就绪
		securityContext:	# 可选,限制容器不可信的行为
		  provoleged: false
	  restartPolicy: Always	# 可选,默认为Always
	  nodeSelector:	# 可选,指定Node节点
		region: subnet7
	  imagePullSecrets:	# 可选,拉取镜像使用的secret
	  - name: default-dockercfg-86258
	  hostNetwork: false	# 可选,是否为主机模式,如是,会占用主机端口
	  volumes:	# 共享存储卷列表
	  - name: webroot # 名称,与上述对应
		emptyDir: {}	# 共享卷类型,空
		hostPath:		# 共享卷类型,本机目录
		  path: /etc/hosts
		secret:	# 共享卷类型,secret模式,一般用于密码
		  secretName: default-token-tf2jp # 名称
		  defaultMode: 420 # 权限
		  configMap:	# 一般用于配置文件
		  name: nginx-conf
		  defaultMode: 420
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
79
80
81
82