pod 详解
版本
详解
kind: Pod
apiVersion: core/v1
metadata: (ObjectMeta)
annotations:
clusterName:
creationTimestamp: 不需要设置此值,服务端自动生成
deletionGracePeriodSeconds: 优雅删除时间,只有在deletionTimestamp:生效的时候才有效,Read-Only
deletionTimestamp: 服务端设置,客户端不能设置
finalizers:
generation:
labels: 用于副本控制器及服务的匹配标签
managedFields:
name:
namespace:
ownerReferences:
resourceVersion:
selfLink:
uid:
spec: (PodSpec)
activeDeadlineSeconds:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
-
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key:
operator:
values:
- String
matchFields:
- key:
operator:
values:
- String
podAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
- matchExpressions:
key:
operator:
values:
- String
matchLabels:
namespaces:
topologyKey:
weight: 1-100的数值
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key:
operator:
values:
- String
matchLabels:
namespaces:
- String
topologyKey:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key:
operator:
values:
- String
matchLabels:
namespaces:
- String
topologyKey:
weight: 1-100的数值
requiredDuringSchedulingIgnoredDuringExecution:
-
automountServiceAccountToken:
containers:
- args:
- String
command:
- String
env:
- name: 必须是: C_IDENTIFIER
value: 可以通过$(VAR_NAME)引用env变量
valueFrom: value来源,如果value不是空,此项不可用
configMapKeyRef:
key:
name:
optional:
fieldRef:
apiVersion:
fieldPath:
resourceFieldRef:
containerName:String 可选项,但是对于volumes必须配置
divisor: 指定暴露的资源的格式,默认为:1
resource:
secretKeyRef: 在pod的命名空间中选择一个密钥
key:
name:
optional:
image:
imagePullPolicy: 可选项为: Always, Never, IfNotPresent;如果latest tag指定,默认为:Always,否则为IfNotPresent
lifecycle:
postStart:
exec:
httpGet:
tcpSocket:
preStop:
exec:
httpGet:
tcpSocket:
livenessProbe:
exec:
command:
- String 容器中命令行可以执行的命令
failureThreshold: 认为probe失败的最少次数,默认:3,最小值为:1
httpGet:
host: 连接的主机名,默认为:pod的ip,可以在httpHeaders中设置:Host代替
httpHeaders: 用户自定义header,允许重复
name:
value:
path: 访问http server的路径
port: 访问容器的端口号或者名字,
scheme: 默认值为:HTTP
initialDelaySeconds:容器启动到livenness probes 初始化完成的时间
periodSeconds: 多长时间执行一次probe,默认:10s,最小:1s
successThreshold: 探测器在失败后被视为成功的最小连续成功次数。默认为1。必须为1才能激活和启动。最小值为1
tcpSocket:
host: 可选,要连接的主机名,默认为:pod的ip
port: 要在容器上访问的端口的编号或名称。数字必须在1到65535之间。名称必须是IANA_SVC_NAME名称
timeoutSeconds: probe超时时间,默认值为:1s,最小值为:1s
name: DNS_LABEL格式的名字
ports: 容器暴露的端口
- containerPort: pod的IP地址对应暴露的端口号 0 < x < 65536
hostIP: 要将外部端口绑定到的主机IP
hostPort: 主机暴露的端口号, 0 < x < 65536,如果指定HostNetwork,必须和containerPort一样
name: IANA_SVC_NAME格式,唯一
protocol: UDP, TCP, or SCTP. 默认为: "TCP"
readinessProbe:
exec:
command:
- String 容器中命令行可以执行的命令
failureThreshold: 认为probe失败的最少次数,默认:3,最小值为:1
httpGet:
host: 连接的主机名,默认为:pod的ip,可以在httpHeaders中设置:Host代替
httpHeaders: 用户自定义header,允许重复
name:
value:
path: 访问http server的路径
port: 访问容器的端口号或者名字,
scheme: 默认值为:HTTP
initialDelaySeconds:容器启动到livenness probes 初始化完成的时间
periodSeconds: 多长时间执行一次probe,默认:10s,最小:1s
successThreshold: 探测器在失败后被视为成功的最小连续成功次数。默认为1。必须为1才能激活和启动。最小值为1
tcpSocket:
host: 可选,要连接的主机名,默认为:pod的ip
port: 要在容器上访问的端口的编号或名称。数字必须在1到65535之间。名称必须是IANA_SVC_NAME名称
timeoutSeconds: probe超时时间,默认值为:1s,最小值为:1s
resources:
limits: Limits描述允许的最大计算资源量
requests: 请求描述所需的最小计算资源量
securityContext:
allowPrivilegeEscalation: boolean
capabilities: 运行容器时添加/删除的功能。默认为容器运行时授予的默认功能集
add:
- String
drop:
- String
privileged: 默认为:false
procMount: 默认为:DefaultProcMount ;
readOnlyRootFilesystem: 是否为只读的root文件系统,默认:false
runAsGroup: 运行容器entrypoint的用户的gid
runAsNonRoot: boolean,true: 非root运行; SecurityContext PodSecurityContext都设置,SecurityContext优先
runAsUser: 运行容器entrypoint的用户的uid
seLinuxOptions:
level:
role:
type:
user:
windowsOptions:
startupProbe:
exec:
command:
- String 容器中命令行可以执行的命令
failureThreshold: 认为probe失败的最少次数,默认:3,最小值为:1
httpGet:
host: 连接的主机名,默认为:pod的ip,可以在httpHeaders中设置:Host代替
httpHeaders: 用户自定义header,允许重复
name:
value:
path: 访问http server的路径
port: 访问容器的端口号或者名字,
scheme: 默认值为:HTTP
initialDelaySeconds:容器启动到livenness probes 初始化完成的时间
periodSeconds: 多长时间执行一次probe,默认:10s,最小:1s
successThreshold: 探测器在失败后被视为成功的最小连续成功次数。默认为1。必须为1才能激活和启动。最小值为1
tcpSocket:
host: 可选,要连接的主机名,默认为:pod的ip
port: 要在容器上访问的端口的编号或名称。数字必须在1到65535之间。名称必须是IANA_SVC_NAME名称
timeoutSeconds: probe超时时间,默认值为:1s,最小值为:1s
stdin: 是否为stdin分配buffer,默认false
stdinOnce:
terminationMessagePath:
terminationMessagePolicy:
tty: 是否为容器分配一个tty,默认:false
volumeDevices: 容器使用块设备
- devicePath: 块设备映射到容器的路径
name: 与pod中pvc的名字必须匹配
volumeMounts: 挂载到容器的文件系统
- mountPath: 容器内路径,可以为目录,如果要是文件名,必须有subPath,并且必须包含subPath,例如:/cloud/standalone.xml subPath必须为:
mountPropagation:
name: volume名字
readOnly: 是否以只读方式挂载,如果为:true,只读,默认为:false
subPath:文件名,如果要挂载为指定文件,必须把文件名写在此处,例如:standalone.xml
subPathExpr: 类似subPath,支持 $(VAR_NAME)扩展
workistandalone.xml
dnsConfig:
nameservers: dns ip列表
- String
options: dns解析选项
- name:
value:
searches: 用于主机名查找的DNS搜索域列表
-
dnsPolicy: 有效值为 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None',默认:ClusterFirst
enableServiceLinks: service注射到pod的环境变量,默认为:true
ephemeralContainers: 临时容器列表
- args:
- String
command:
- String
env:
- name
value:
valueFrom:
configMapKeyRef:
fieldRef:
resourceFieldRef:
secretKeyRef:
envFrom:
- configMapRef:
prefix:
secretRef:
image:
imagePullPolicy:
lifecycle:
livenessProbe:
name:
ports:
readinessProbe:
resources:
securityContext:
startupProbe:
stdin:
stdinOnce:
targetContainerName:
terminationMessagePath:
terminationMessagePolicy:
tty:
volumeDevices:
-
volumeMounts:
-
workingDir:
hostAliases: 注射到pod的hosts中的ip 主机名信息
- hostnames:
ip:
hostIPC: 使用主机的ipc命名空间,默认为:false
hostNetwork: 是否使用主机网络,默认为:false
hostPID: 使用主机的pid名称空间,默认为:false
hostname: 指定pod的主机名,如果不设置,生成默认值
imagePullSecrets: 可选,在同一个namespace中的secret
- name:
initContainers:
- args:
- String
command:
- String
env:
- name: 必须是: C_IDENTIFIER
value: 可以通过$(VAR_NAME)引用env变量
valueFrom: value来源,如果value不是空,此项不可用
configMapKeyRef:
key:
name:
optional:
fieldRef:
apiVersion:
fieldPath:
resourceFieldRef:
containerName:String 可选项,但是对于volumes必须配置
divisor: 指定暴露的资源的格式,默认为:1
resource:
secretKeyRef: 在pod的命名空间中选择一个密钥
key:
name:
optional:
image:
imagePullPolicy: 可选项为: Always, Never, IfNotPresent;如果latest tag指定,默认为:Always,否则为IfNotPresent
lifecycle:
postStart:
exec:
httpGet:
tcpSocket:
preStop:
exec:
httpGet:
tcpSocket:
livenessProbe:
exec:
command:
- String 容器中命令行可以执行的命令
failureThreshold: 认为probe失败的最少次数,默认:3,最小值为:1
httpGet:
host: 连接的主机名,默认为:pod的ip,可以在httpHeaders中设置:Host代替
httpHeaders: 用户自定义header,允许重复
name:
value:
path: 访问http server的路径
port: 访问容器的端口号或者名字,
scheme: 默认值为:HTTP
initialDelaySeconds:容器启动到livenness probes 初始化完成的时间
periodSeconds: 多长时间执行一次probe,默认:10s,最小:1s
successThreshold: 探测器在失败后被视为成功的最小连续成功次数。默认为1。必须为1才能激活和启动。最小值为1
tcpSocket:
host: 可选,要连接的主机名,默认为:pod的ip
port: 要在容器上访问的端口的编号或名称。数字必须在1到65535之间。名称必须是IANA_SVC_NAME名称
timeoutSeconds: probe超时时间,默认值为:1s,最小值为:1s
name: DNS_LABEL格式的名字
ports: 容器暴露的端口
- containerPort: pod的IP地址对应暴露的端口号 0 < x < 65536
hostIP: 要将外部端口绑定到的主机IP
hostPort: 主机暴露的端口号, 0 < x < 65536,如果指定HostNetwork,必须和containerPort一样
name: IANA_SVC_NAME格式,唯一
protocol: UDP, TCP, or SCTP. 默认为: "TCP"
readinessProbe:
exec:
command:
- String 容器中命令行可以执行的命令
failureThreshold: 认为probe失败的最少次数,默认:3,最小值为:1
httpGet:
host: 连接的主机名,默认为:pod的ip,可以在httpHeaders中设置:Host代替
httpHeaders: 用户自定义header,允许重复
name:
value:
path: 访问http server的路径
port: 访问容器的端口号或者名字,
scheme: 默认值为:HTTP
initialDelaySeconds:容器启动到livenness probes 初始化完成的时间
periodSeconds: 多长时间执行一次probe,默认:10s,最小:1s
successThreshold: 探测器在失败后被视为成功的最小连续成功次数。默认为1。必须为1才能激活和启动。最小值为1
tcpSocket:
host: 可选,要连接的主机名,默认为:pod的ip
port: 要在容器上访问的端口的编号或名称。数字必须在1到65535之间。名称必须是IANA_SVC_NAME名称
timeoutSeconds: probe超时时间,默认值为:1s,最小值为:1s
resources:
limits: Limits描述允许的最大计算资源量
requests: 请求描述所需的最小计算资源量
securityContext:
allowPrivilegeEscalation: boolean
capabilities: 运行容器时添加/删除的功能。默认为容器运行时授予的默认功能集
add:
- String
drop:
- String
privileged: 默认为:false
procMount: 默认为:DefaultProcMount ;
readOnlyRootFilesystem: 是否为只读的root文件系统,默认:false
runAsGroup: 运行容器entrypoint的用户的gid
runAsNonRoot: boolean,true: 非root运行; SecurityContext PodSecurityContext都设置,SecurityContext优先
runAsUser: 运行容器entrypoint的用户的uid
seLinuxOptions:
level:
role:
type:
user:
windowsOptions:
startupProbe:
exec:
command:
- String 容器中命令行可以执行的命令
failureThreshold: 认为probe失败的最少次数,默认:3,最小值为:1
httpGet:
host: 连接的主机名,默认为:pod的ip,可以在httpHeaders中设置:Host代替
httpHeaders: 用户自定义header,允许重复
name:
value:
path: 访问http server的路径
port: 访问容器的端口号或者名字,
scheme: 默认值为:HTTP
initialDelaySeconds:容器启动到livenness probes 初始化完成的时间
periodSeconds: 多长时间执行一次probe,默认:10s,最小:1s
successThreshold: 探测器在失败后被视为成功的最小连续成功次数。默认为1。必须为1才能激活和启动。最小值为1
tcpSocket:
host: 可选,要连接的主机名,默认为:pod的ip
port: 要在容器上访问的端口的编号或名称。数字必须在1到65535之间。名称必须是IANA_SVC_NAME名称
timeoutSeconds: probe超时时间,默认值为:1s,最小值为:1s
stdin: 是否为stdin分配buffer,默认false
stdinOnce:
terminationMessagePath:
terminationMessagePolicy:
tty: 是否为容器分配一个tty,默认:false
volumeDevices: 容器使用块设备
- devicePath: 块设备映射到容器的路径
name: 与pod中pvc的名字必须匹配
volumeMounts: 挂载到容器的文件系统
- mountPath: 容器内路径
mountPropagation:
name: volume名字
readOnly: 是否以只读方式挂载,如果为:true,只读,默认为:false
subPath: 应从中装入容器卷的卷中的路径
subPathExpr: 类似subPath,支持 $(VAR_NAME)扩展
workingDir: 容器的工作目录
nodeName: 调度到指定的node
nodeSelector: 调度到打了指定label的node
overhead: pod相关的资源开销,admission controller自动填充
preemptionPolicy: 是用于抢占具有较低优先级的pod的策略;默认值: PreemptLowerPriority,有效值为: Never, PreemptLowerPriority
priority: 值越大,优先级越高
priorityClassName:
readinessGates: 如果指定,所有准备状态门都将评估pod准备状态
- conditionType:
restartPolicy: Always, OnFailure, Never. 默认值为: Always
runtimeClassName:
schedulerName:指定使用的调度器的名称,在一个集群中可以有多个scheduler
securityContext:
allowPrivilegeEscalation: boolean
capabilities: 运行容器时添加/删除的功能。默认为容器运行时授予的默认功能集
add:
- String
drop:
- String
privileged: 默认为:false
procMount: 默认为:DefaultProcMount ;
readOnlyRootFilesystem: 是否为只读的root文件系统,默认:false
runAsGroup: 运行容器entrypoint的用户的gid
runAsNonRoot: boolean,true: 非root运行; SecurityContext PodSecurityContext都设置,SecurityContext优先
runAsUser: 运行容器entrypoint的用户的uid
seLinuxOptions:
level:
role:
type:
user:
windowsOptions:
serviceAccount:
serviceAccountName:
shareProcessNamespace:
subdomain:
terminationGracePeriodSeconds:
tolerations: 如果指定,则为pod的耐受性
- effect:string类型,有三个值:NoSchedule, PreferNoSchedule 和 NoExecute
key:
operator:
tolerationSeconds:当effect的值为:NoExecute,表示pod还能再node上运行的时间;当effect的值不是:NoExecute时,忽略此配置项。
value:
topologySpreadConstraints: 描述了一组pod应该如何跨拓扑学域分布。调度器将以一种遵守约束的方式调度pod。alpha级别的,只有启用EvenPodsSpread特性的集群才用它。AND
- labelSelector:
matchExpressions:
- key:
operator: 有效的操作符为: In, NotIn, Exists and DoesNotExist.
values:
- String
matchLabels
maxSkew:
topologyKey:
whenUnsatisfiable:
volumes:
- awsElasticBlockStore:
azureDisk:
azureFile:
cephfs: 对象为:CephFSVolumeSource
monitors: ceph的monitors
path: 默认为:/ 可选
readOnly: true-只读,默认为:false 可读写 可选
secretFile: 可选
secretRef: 用户的认证秘钥,默认为empty
name: 参照名
user: rados用户名,默认为:admin
cinder:
fsType: "ext4", "xfs", "ntfs" ,默认为:"ext4"
readOnly: 默认:false
secretRef: 指向包含用于连接到OpenStack的参数的机密对象
name: String
volumeID: cinder中卷的标识id
configMap:
defaultMode: 创建文件默认的权限位,默认:0644
items:
- key:
mode:
path:
name: 参照名
optional: boolean,指定configMap中的keys是否必须定义
csi:
driver:
fsType:
nodePublishSecretRef: 传递给csi驱动的包含敏感信息的secret对象,
name: 参照名
readOnly: 默认:false
volumeAttributes: 传递给csi的参数
downwardAPI:
emptyDir:
fc:
flexVolume:
flocker:
gcePersistentDisk:
gitRepo: DEPRECATED
glusterfs:
hostPath: HostPath表示主机上直接暴露给容器的预先存在的文件或目录
path: 主机目录
type: 默认为: ""
iscsi:
chapAuthDiscovery:
chapAuthSession:
fsType: "ext4", "xfs", "ntfs",默认为:ext4
initiatorName:
iqn:
iscsiInterface:
lun:
portals:
readOnly:
secretRef:
name: 参照名
targetPortal
name: DNS_LABEL 唯一
nfs:
persistentVolumeClaim:
photonPersistentDisk:
portworxVolume:
projected:
quobyte:
rbd:
scaleIO:
secret:
storageos:
vsphereVolume: VsphereVirtualDiskVolumeSource
fsType: "ext4", "xfs", "ntfs" ,默认为:"ext4"
storagePolicyID: Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName
storagePolicyName: Storage Policy Based Management (SPBM) profile name
volumePath: Path that identifies vSphere volume vmdk
样例yaml
如何使用emptyDir
- 同一个pod中,一个容器在写入,一个容器在读取,业务系统容器写日志,另外一个容器读取日志并送往其它日志平台
apiVersion: v1
kind: Pod
metadata:
name: shared-volume-pod
labels:
app: shared-volume-pod
spec:
containers:
- name: alpine-write # 第一个容器模拟写日志
image: alpine
volumeMounts:
- name: shared-volume
mountPath: /var/log/app-logs # 容器内任意位置都行
readOnly: false
command:
- sh
- -c
- "while true; do date +'%Y-%m-%d %H:%M:%S' >> /var/log/app-logs/log.log; sleep 1; done"
- name: alpine-read # 第二个容器模拟收集日志
image: alpine
command: ["sh", "-c", "tail -f /var/log/collect-logs/log.log"]
volumeMounts:
- name: shared-volume
mountPath: /var/log/collect-logs # 容器内任意位置都行
readOnly: true
volumes:
- name: shared-volume # pod中有一个volume让其中的多个容器共享
emptyDir: {}
结语