spec field¶
不同的资源,spec字段不尽相同,用于定义资源规格,代表了对资源状态的期望
pod资源类型¶
containers¶
pod spec中必须存在的字段
- 定义属于当前pod的container。
- 多个container用list方式定义。用
-。
- containers下的field:
name 表示container的名称。
- image 表示该container使用的镜像。
- env 传入镜像的变量,多个变量用list的方式。
- name 变量名
- value 变量值
- imagePullPolicy 表示镜像获取策略。
- 如果镜像标签为latest,则默认值为
Always,表示总是去镜像仓库下载。 Never, 本地有就用,没有就不下载,也不进行后续处理。IfNotPresent, 本地有就使用,如果没有则去镜像仓库下载。
- 如果镜像标签为latest,则默认值为
- command 表示当启用该镜像的时候,同时需要执行的命令, 将忽略镜像中的entrypoint和cmd。
类似dockerfile中的entrypoint。
如果没有指定command,镜像中存在entrypoint,则镜像启动的时候执行entrypoint。
- 他不会运行在shell中,所以如果要用shell运行,则需要指定”/bin/sh”。
command: - "/bin/sh" - "-c" - "echo hello"
- args 表示启用镜像的时候,传递给程序的参数。(ps: dockerfile中,如果只有cmd,则运行cmd,如果entrypoint和cmd共存,则cmd作为参数传递给entrypoint。)
- 默认如果不提供args,则镜像中的cmd作为参数传递给镜像中的entrypoint。
- 如果指定了args,则args将取代cmd,作为参数传递给镜像中的entrypoint。
- args中若要定义变量,则使用$(VAR_NAME)。变量逃逸,$$(VAR_NAME)。
- command args的情况参考官方文档。
- ports 表示容器内需要暴露出去的端口,可以多个,用list方式。 这定义仅仅是信息性的定义,具体暴露哪个端口还是看容器镜像。
- containerPort: 信息性定义容器端口。
- name: 信息性定义端口含义。
- protocol: 没有定义则默认为tcp。
- livenessProbe: 如果检测失败,则进行容器重启。
- 包含三种探针,exec httpGet tcpSocket。
- exec 执行命令的方式进行探测,根据返回值来确定失败还是成功。
exec: command: ["test", "-e", "/tmp/healthy"]
- httpGet 通过http的方式进行探测。
httpGet: port: 80 path: /index.html
tcpSocket 通过tcp的方式进行探测。
failureThreshold 表示连续失败n次才算失败,防止探测抖动。默认3次。
periodSeconds 表示每次探测间隔时长,默认10s。
timeoutSeconds 表示每次探测超时时长,默认1s。
initialDelaySeconds 表示等待容器初始化时间,在这个时间后再进行探测,确保容器启动正常。默认容器启动就探测。
readinessProbe 表示容器服务是否正常的探测。如果探测失败,则在服务节点上移除这个容器。
- lifecycle 用于容器启动和结束前后的钩子。
- postStart 容器刚运行时执行的行为。
- preStop 容器停止前执行的行为。
- volumeMounts 指定挂载哪些个存储或存储卷。
- name 选择volume的名称,这个在pod层定义了。
- mountPath: 挂载容器内的路径。
- env 定义container的环境变量。
- name 变量名。
- value 变量值。
- valueFrom 从其他资源引入环境变量。
- configMapKeyRef 从configmap的某个key引入。
- fieldRef 从pod自身的字段引入。比如metadata.namespace。
- resourceFieldRef 从资源限制的字段引入。比如limits.memory。
- secretKeyRef 从secret资源的某个key引入。
nodeSelector¶
- pod将倾向运行在包含这些label的node上。
nodeName¶
- pod运行在指定nodename的节点上。
restartPolicy¶
- 表示当pod挂了重启的策略。
- restartPolicy的参数:
- Always,一旦容器挂了,就重启,总是重启。默认为Always。
- OnFailure,状态为错误的时候才会重启,正常关闭容器不会重启。
- Never,从不重启容器。
hostNetwork¶
- 这个pod将直接使用主机的网络名称空间。
ReplicaSet资源类型¶
replicas¶
- 定义需要创建的副本数量
template¶
- 定义pod模板
里面包含了两个字段,都是pod的属性,一个是 metadata ,一个是 spec ,具体可以参考pod中的对应字段解释。
metadata字段下的label标签必须和ReplicaSet中的spec字段下的selector的标签对应,也就是被管理的pod和replicaset的标签要对应。
Deployment资源类型¶
虽然Deployment通过管理ReplicaSet,间接管理pod,但是在定义其yaml文件中是不存在ReplicaSet的。
strategy¶
- 用于定义滚动更新时候的策略。
- 存在两个字段:
- rollingUpdate 当type的类型为rollingUpdate的时候,该字段的内容才生效。
- maxSurge 指定具体数量,或者百分比。
- maxUnavailable 指定最多有多少个不可用。
- type
- Recreate 重建更新,删除一个创建一个的机制。
- rollingUpdate 采用滚动更新机制。
revisionHistoryLimit¶
- 定义保留过去多少个副本,用于回滚。默认为10个。如果是0,则不保存。
paused¶
- 控制更新是否暂停。
volumes¶
- 主要指定存储卷的类型。
- volumes下的field:
- name 存储卷名字。
- emptyDir 通过节点node,挂载到pod,随着pod的释放而释放存储卷。可以当临时目录或缓存用。同个pod内多个容器若选用同个存储卷挂载,则这些个容器都能相互访问到挂载的路径。
- medium 选择存储媒介类型,是用node节点的物理存储,还是用node节点的内存。
- sizeLimit 设置空间上限。
- gitRepo 把git仓库作为存储卷使用,宿主机node把git仓库中的内容clone到本地,挂载进pod里面。
- hostPath pod被删除后,存储卷依旧保留在node节点上,不会被删除。只要pod被重新调度到这个node节点上,依旧可以加载到原有的数据。但是若节点node挂了,则会影响到存储。
- path 定义宿主机上的路径。
- type 7种类型。
- DirectoryOrCreate 挂载node节点上的路径,如果不存在则创建该路径。
- Directory 挂载一个node节点上已经存在的的路径。
- FileOrCreate 挂载node节点文件,如果不存在则创建文件。
- File 挂载node节点文件。
- Socket 挂载node节点的socket。
- CharDevice 挂载node节点上的字符类型设备。
- BlockDevice 挂载node节点上的块设备。
- nfs 使用nfs挂载。可以持久化,pod释放也不会收到影响。
- path 指定nfs暴露出来的路径。
- readOnly 是否只读。默认为false。
- server nfs服务器地址。
- persistentVolumeClaim 使用pvc关联pv。
- claimName pvc名称,需要和已经存在的pv名称一致。
- readOnly 是否只读
- secret 给pod资源注入secret配置信息。密文存放。
- configMap 给pod资源注入配置信息。可以作为k8s的配置中心。
DaemonSet资源类型¶
和ReplicaSet类似,但不存在 ``replicas`` 字段。
updateStrategy¶
- 设定更新策略。
其和Deployment一样有着 type 字段。
- type 设定更新类型,默认为
OnDelete,再删除时更新。- rollingUpdate 滚动更新策略只有
maxUnvaliable。
Service资源类型¶
ports¶
- 指定service某端口和后端容器端口建立关系。
- name 表示port的名称。
- nodePort 表示指定节点上的端口。 前提是type类型为NodePort。
- port 被service暴露给外部,对外提供服务的端口。
- targetPort pod容器端口。
selector¶
- 表示关联哪些pod资源。
clusterIP¶
- 手动指定service的ip。
type¶
- 指定service的类型。
- ClusterIP 默认类型,仅用于集群内通信。此时ports字段只有
port和targetPort有用。 - NodePort 让集群外部的流量进行访问。通过每个Node上的IP和静态端口(NodePort)暴露服务。NodePort服务会路由到ClusterIP服务,这个ClusterIP服务会自动创建。通过请求<NodeIP>:<NodePort>,可以从集群的外部访问一个NodePort服务。若没有指定,则是随机端口。
- LoadBalancer 使用云厂商提供的负载均衡器,对外暴露服务。
- ExternalName 把集群外部的服务引入集群内部。
- ClusterIP 默认类型,仅用于集群内通信。此时ports字段只有
sessionAffinity¶
- session亲和性,类似调度后端的权重。
- None 类似轮训请求pod服务。
- ClusterIP 根据ClusterIP指定调度。
Ingress资源类型¶
rule¶
- 用于定义配置主机的调度规则。如果没有配置,则流量都被转发给默认backend。
- host 指定调度给某主机。类似nginx的server_name。
- http 指定调度给某http。
- path 指定路径。类似nginx的location。
- backend 调度给后端的service。
- serviceName 指定service的名称。
- servicePort 指定service的端口。
tls¶
- 使用https的时候才会用到。
pvc资源类型¶
accessModes¶
- 访问模型,三种类型:
- ReadWriteOnce(RWO) 单路读写
- ReadOnlyMany(ROX) 多路只读
- ReadWriteMany(RWX) 多路读写
- pvc的accessModes必须得是pv的accessmodes的子集。
resources¶
- 资源限制。
- request: 设定资源需求。
- storage 指定存储资源限制。
selector¶
- 标签选择器,可以通过标签匹配指定的pv资源。
volumeMode¶
- 存储卷的模式。
volumeName¶
- 存储卷名称。
pv资源类型¶
- pv的spec内容几乎和pod上的volumes的spec几乎一致。
- 也就是由pv资源统一配置好需要的关联的实体存储设备,然后在pod上用pvc来调用即可。
capacity¶
- 指定存储空间大小。通过resourceModel来指定类型。 resource model on github
- 对于存储的资源限制只有
storage这一个类型。 - storage 限制存储空间大小,需要携带单位(E, P, T, G, M, K, m)或者(Ei, Pi, Ti, Gi, Mi, Ki)。
- 对于存储的资源限制只有
persistentVolumeReclaimPolicy¶
官方persistentVolumeReclaimPolicy
存储卷reclaim规则可以通过 kubectl get pv查看。
- 设定存储卷重新调用的策略,总共三种:
- retain 当pod不在关联pvc,pvc释放后,数据依旧保留不释放。
- delete 当pod不在关联pvc,pvc释放后,pv自身也释放数据,并且自身pv也释放。
- recycle 当pod不在关联pvc,pvc释放后,数据不再保留,但pv自身还在,可以被其他pvc使用。