Kubernetes Pod定义详解
Pod
定义详解
# 版本号,例如v1
apiVerison: v1
# 类型,例如 Pod,Deployment
# 参考 https://kubernetes.io/docs/concepts/
Kind: Pod
# 元数据
metedata:
# Pod的名称,命名规范需符合RFC1035规范
name: string
# Pod所属的命名空间,默认值为default
namespace: string
# 自定义标签列表
labels:
# 定义方式相当于 key : value
- name: string
# 自定义注解列表
annotations:
# 定义方式相当于 key : value
- name: string
# Pod 中容器的详细定义
spec:
# Pod 中的容器列表
containers:
# 容器名称,需要符合RFC 1035规范
- name: string
# 容器的镜像名称
image: string
# 获取镜像策略,默认值为 Always
# Always: 表示每次都尝试重新下载镜像
# IfNotPresent: 表示如果本地有該镜像,则使用该镜像,本地不存在时下载镜像
# Never: 表示仅使用本地镜像
imagePullPolicy: [Always | Never | IfNotPresent]
# 容器的启动命令列表,如果不指定,则使用镜像打包时的自动命令,也就是 CMD / ENTRYPOINT
command: [string]
# 容器的启动命令参数列表
args: [string]
# 容器的工作目录
workingDir: string
# 挂载到容器内部的存储卷配置
volumeMounts:
# 引用 Pod 定义的共享存储卷的名称,需要使用volumes[]部分定义的共享存储卷的名称
- name: string
# 存储卷在容器内Mount的绝对路径,应少于512个字符
mountPath: string
# 是否为只读模式,默认值为读写模式
readOnly: boolean
# 容器需要暴露的端口号列表
ports:
# 端口名称
- name: string
# 容器需要监听的端口号
containerPort: int
# 容器所在主机需要监听的端口号,默认与containerPort相同.
# 设置hostPort时,同一台宿主机将无法启动该容器的第二份以上的副本 (因为宿主机端口被占用了,无法绑定
hostPort: int
# 端口协议.支持TCP 和 UDP,默认值为 TCP
protocol: string
# 容器运行需要设置的环境变量列表
env:
# 设置方法类似于 key : value
- name: string
value: string
# 资源限制和资源请求的设置
resources:
# 资源限制的设置
limits:
# CPU 限制,单位为 m.最小可以设置 1m ,即 0.001(cpu)
cpu: string
# 内存限制,单位可以为 MiB/GiB/Mi 等
memory: string
# 资源初始分配.
requests:
# CPU 要求.一般用于 Pod 调度
# 比如设置 cpu : "32"
# 则表明需要有node配备 32vCPU 才会被调度
# 否则APIServer 会报错提示说没有资源进行分配,即使实际情况下用不到这么大
cpu: string
# 同上.同上
memory: string
# 检测容器是否准备好服务请求。如果就绪探针失败,则端点控制器将从与Pod匹配的所有服务的端点中删除Pod的IP地址。初始延迟之前的默认就绪状态为Failure
readinessProbe:
tcpSocket:
port: int
# 告诉kubelet在执行第一个探测之前应等待 int 秒
initialDelaySeconds: int
# 检测容器是否正在运行。如果活动探针失败,kubelet 将终止容器,容器将受其重新启动策略的影响
livenessProbe:
exec:
# 执行命令,例子如下
# command:
# - cat
# - /tmp/healthy
# 如果 command 执行成功,返回 0 认为Pod为 Started 状态.
# 如果 command 执行失败,则认为Pod为 Unhealthy 状态.
# kubelet就会结束这个副本并重启一个.
command: [string]
# 定义一个liveness HTTP请求
httpGet:
# 在 HTTP 服务器上访问的路径
path: string
# 要在容器上访问的端口的名称或编号。数字必须位于 1 到 65535 的范围内。
port: int
# 要连接到的主机名,默认为 Pod IP
host: string
# 用于连接到主机(HTTP 或 HTTPS)的方案。默认为 HTTP。
scheme: string
# 要在请求中设置的自定义标头。HTTP 允许重复标头。
httpHeaders:
- name: string
value: string
# 使用 TCP 套接字。使用此配置,kubelet 将尝试打开指定端口上的容器的套接字。如果它可以建立连接,则容器将被视为正常,如果不能,则被视为失败
tcpSocket:
port: int
# 执行探测的频率(以秒为单位)。默认为 10 秒。最小值为 1
initialDelaySeconds: int
# 超时设置 int 秒
timeoutSeconds: int
# 规定kubelet要每隔 int 秒执行一次liveness probe
periodSeconds: int
# 探测失败后被认为成功的最小连续成功次数
# 如果失败然后连续 int 次成功才会被当作正常
# 默认值为 1.最小值为 1.
successThreshold: int
#当Pod启动并且探针失败时,Kubernetes会继续尝试
#当failureThreshold多次后才会放弃并重新启动容器
# 如果准备就绪,则将Pod标记为 Unready
# 默认值为3。最小值为1
# 最糟糕的启动时间应该为 failureThreshold * periodSeconds
# 超过此时间会根据策略进行操作
failureThreshold: int
# 容器重启策略
# 具体情况略多,可以翻阅 https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/ 查看详情
restartPolicy: [Always | Never | OnFailure]
# node 过滤器.以 key :value 方式指定
nodeSelector: object
# 要从私有注册表中提取映像,Kubernetes需要凭据
# imagePullSecrets配中的字段指定 Kubernetes 凭据的名称
imagePullSecrets:
- name: string
# 是否使用主机网络模式.默认值为false
# 如果设置为true,则表示容器使用宿主机网络,不再使用docker 网桥
# 该Pod无法在同一台宿主机上启动两个以上副本
hostNetwork: false
# 在该Pod上定义的共享存储卷列表
volumes:
# 共享存储卷的名称,应符合RFC1035规范
# 可以定义多个 volume,每个volume的 name 保持唯一
# Volume 支持类型可以参考 https://kubernetes.io/docs/concepts/storage/volumes/
- name: string
# 类型为 emptyDir的存储卷,表示与Pod同生命周期的一个临时目录,其值为一个空对象: emptyDir: {}
emptyDir: {}
# 类型为 hostPath的存储卷,表示挂载Pod所在宿主机的目录
hostPath:
# 通过 spec.volumes[].hostPath.path 指定挂载到宿主机具体目录
path: string
# 类型为 secret 的存储卷,表示挂载集群预定义的secret对象到容器内部
secret:
secreName: string
items:
- key: string
path: string
更多学习文章在点击访问