本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名原文链接~~~

Kubernetes Pod YAML 参数详解

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:


Pod 是 Kubernetes 的最小单元,它的信息都记录在一个 YAML 文件里。那么这个 YAML 文件应该怎么写呢?里面有哪些参数?如何修
改 YAML 文件?带着这几个问题,我们来深入了解 YAML 文件。

初学者看到 Kubernetes 的 YAML 配置文件会觉得又长又没规律。

其实,我们可以从两个方面对其进行梳理:第一是找出必选参数,第二是找出主要参数对象。

必选参数

注意,对于 YAML 文件,下面几个参数是必须要声明的,不然运行绝对会出错,YAML 文件参数、字段类型及说明如下表所示。

参数名字段类型说明
versionStringKubernetes API 的版本,可以用 kubectl api-versions 命令查询。
kindString标明 YAML 定义的资源类型和角色,如 PodDeployment 等。
metadataString元数据对象。
metadata.nameString元数据对象的名字,可自定义,比如命名 Pod 的名字。
specObject详细定义对象。
spec.containers[]List容器列表定义。
spec.containers[].nameString定义容器的名字。
spec.containers[].imageString定义容器使用的镜像。

以上这些都是编写 YAML 文件的必选参数,每个 YAML 文件都包含它们。

主要参数对象

上文说的都是必选参数,其他功能的参数,虽然不是必选项,但是可以让 YAML 定义得更详细、功能更丰富。接下来的参数都是 spec 对象下面的,主要分为 spec. containersspec.volumes

spec.containers

spec.containers 是一个 List 数组, 它用来描述 container 容器方面的参数,所以包含的参数非常多,如下表所示。

参数名字段类型 说明
spec.containers[].nameString定义容器的名字。
spec.containers[].imageString定义容器使用的镜像。
spec.containers[].imagePullPolicyS定义镜像拉取策略,有 3 个值可选: (1) Always,每次都尝试重新拉取镜像;(2) Never,仅使用本地镜像;(3) IfNotPresent,如果本地有镜像就使用本地镜像,没有就拉取在线镜像。如果上面 3 个值都没有设置,则默认是 Always
spec.containers[].command[]List指定容器启动命令,因为是数组形式,所以可以指定多个启动命令,不指定则使用镜像打包时的启动命令。
spec.containers[].args[]List指定容器启动命令参数,因为是数组形式,所以可以指定多个参数。
spec.containers[].workingDirString指定容器的工作目录
spec.containers[].volumeMounts[]List指定容器内部的存储卷配置
spec.containers[].volumeMounts[].nameString指定可以被容器挂载的存储卷的名称
spec.containers[].volumeMounts[].mountPathString指定可以被容器挂载的存储卷的路径。
spec.containers[].volumeMountsf].readOnlyString设置存储卷路径的读写模式,true 或者 false,默认为读写模式。
spec.containers[].ports[]List指定容器需要用到的端口列表。
spec.containers[].ports[].nameString指定端口名称。
spec.containers[].ports[].containerPortString指定容器需要监听的端口号。
spec.containers[].ports[].hostPortString指定容器所在主机需要监听的端口号,默认和 spec.containers[].ports[].containerPort 相同。注意,设置了则同一台主机无法启动该容器的相同副本(主机的端口号不能相同,若相同,会引发冲突)。
spec.containers[].ports[].protocolString指定端口协议,支持 TCP 和 UDP,默认值为 TCP 。
spec.containers[].env[]List指定容器运行前需要设置的环境变量列表。
spec.containers[].env[].nameString指定环境变量名称。
spec.containers[].env[].valueString指定环境变量值。
spec.containers[].resourcesObject指定资源限制和资源请求的值(这里开始就是设置容器的资源上限)。
spec.containers[].resources.limitsObject指定设置容器运行时资源的运行上限。
spec.containers[].resources.limits.cpuString指定 CPU 的限制,单位为 core,是用于运行 docker run --cpu-shares 命令的参数。
spec.containers[].resources.limits.memoryString指定内存的限制,单位为 MiB 或 GiB。
spec.containers[].resources.requestsObject指定容器启动和调度时的限制。
spec.containers[].resources.requests.cpuStringCPU 请求,单位为 core,容器启动时初始化可用数量。
spec.containers[].resources.requests.memoryString内存请求,单位为 MiB 或 GiB,容器启动的初始化可用数量。
spec.containers[].livenessProbeObject指定 Pod 内容器健康检查的设置,当探测几次无响应后,系统将自动重启该容器。参数可以设置为 exechttpGettcpSocket
spec.containers[].livenessProbe.execObject指定 Pod 内容器健康检查的设置,确定是 exec 方式。
spec.containers[].livenessProbe. exec.command[]String指定 exec 方式后用这个参数设置需要指定的命令或者脚本。
spec.containers[].livenessProbe.httpGetObject指定 Pod 内容器健康检查的设置,确定是 httpGet 方式。
spec.containers[].livenessProbe.tcpSocketObject指定 Pod 内容器健康检查的设置,确定是 tcpSocket 方式。
spec.containers[].livenessProbe.initialDelaySecondsNumber指定容器启动完成后延迟多久开始首次探测的时间间隔,单位为秒。
spec.containers[].livenessProbe.timeoutSecondsNumber容器健康检查的探测等待时间,单位为秒,默认为 1 秒。若超过该时间,则认为该次探测失败。
spec.containers[].livenessProbe.periodSecondsNumber对容器健康检查的定期探测时间设置,单位为秒,默认每 10 秒探测一次。

spec.volumes

spec.volumes 是一个 List 数组,很明显,看名字就知道它是用于定义同步存储的参数,包含的参数非常多,如下表所示。

参数名字段类型 说明
spec.volumes[].nameString定义 Pod 共享存储卷的名称,容器定义部分 spec.containers[].volumeMounts[].name 的值和这里是一样的。
spec.volumes[].emptyDirObject指定 Pod 的临时目录,值为一个空对象:emptyDir:{}
spec.volumes[].hostPathObject指定挂载 Pod 所在宿主机的目录。
spec.volumes[].hostPath.pathString指定 Pod 所在主机的目录,将被用于容器中 mount 的目录。
spec.volumes[].secretObject指定类型为 Secret 的存储卷,Secret 意为私密、秘密,这很容易理解,它存储一些密码、密钥等敏感安全文件。挂载集群预定义的 Secret 对象到容器内部。
spec.volumes[].configMapObject指定类型为 ConfigMap 的存储卷,表示挂载集群预定义的 ConfigMap 对象到容器内部。

额外的参数对象

除了上面介绍的 spec.containersspec.volumes 两个主要参数,还有几个额外的参数对象,如下表所示。

参数名 参数类型 说明
spec.restartPolicyString定义 Pod 的重启策略,可选值为 AlwaysOnFailure, 默认值为 Always。(1) Always,Pod 一旦终止运行,无论容器是如何终止的,kubelet 服务都将重启它;(2) OnFailure,只有 Pod 以非零退出码终止时,kubelet 才会重启该容器。如果容器正常结束(退出码为 0),则 kubelet 将不会重启它; (3) Never,Pod 终止后,kubelet 将退出码报告给 master,不会重启该 Pod。
spec.nodeSelectorObject定义节点的过滤标签(以 key:value 格式指定)。
spec.imagePullSecretsList定义拉取镜像时使用 Secret 名称(以 name:secretkey 格式指定)。
spec.hostNetworkBoolean定义是否使用主机网络模式,默认值为 false。 设置 true 表示使用宿主机网络,不使用 Docker 网桥,同时设置了 true 将无法在同一台宿主机上启动第二个副本。

YAML 里的这些参数其实是 Kubernetes 声明式的一种体现,我们可以简单地把它理解为用户操作 Kubernetes 的一个接口。YAML 里设置的参数数值,最终都会持久化到 ETCD 里。

# Kubernetes  

如果这篇文章对您有帮助,可点击下方链接分享给你的朋友们😋,如果遇到问题欢迎评论、留言~~~😇

评论

公众号:zze_coding

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×