资源清单
简介
在k8s使用资源清单描述k8s中的对象,使用yaml或json来保存这些信息
资源清单中主要有四个必要的字段
1 | apiVersion: |
解释:
来自https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/kubernetes-objects/
- apiVersion: 创建该对象所使用的 Kubernetes API 的版本
- kind: 对象的类别
- metadata: 帮助唯一性标识对象的一些数据,包括一个 name 字符串、UID 和可选的namespace
- spec: 所期望的该对象的状态
Pod
Pod是什么?
Pod 的共享上下文包括一组 Linux 名字空间、控制组(cgroup)和可能一些其他的隔离 方面,即用来隔离 Docker 容器的技术。 在 Pod 的上下文中,每个独立的应用可能会进一步实施隔离。
就 Docker 概念的术语而言,Pod 类似于共享名字空间和文件系统卷的一组 Docker 容器。
简单来说,可以认为Pod代表一个虚拟主机
构建pod
对于pods
1 | apiVersion: v1 |
初始化容器
在spec下的数组字段initContainers的成员用于描述初始化容器,初始化容器在pod启动的时候会被按照顺序一次执行,要求钱一个容器正常退出(返回0)才可执行启动后一个容器,如果有任何一个初始化容器没有正常退出,即重新构建整个pod。
初始化容器不应该无限期运行,但是可以一直等待下去,以实现容器间的同步。
Probe
K8s提供了Probe(探针)用于辅助管理Pod中的容器
共有3种探测方式
ExecAction: 在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功。
TCPSocketAction: 对容器的 IP 地址上的指定端口执行 TCP 检查。如果端口打开,则诊断被认为是成功的。
HTTPGetAction: 对容器的 IP 地址上指定端口和路径执行 HTTP Get 请求。如果响应的状态码大于等于 200 且小于 400,则诊断被认为是成功的。
每次探测都将获得以下三种结果之一:
Success
(成功):容器通过了诊断。Failure
(失败):容器未通过诊断。Unknown
(未知):诊断失败,因此不会采取任何行动。
1 | apiVersion: v1 |
readinessProbe
就绪探针,在容器字段下的readinessProbe字段用于描述就绪探针。
因为在容器成功启动后并不能保证容器立即可用,因此在容器启动一段时间后检测容器是否启动成功,如果失败那么等待一段时间后再次检测,以防容器一启动便将其用于提供服务。
livenessProbe
容器下的livenessProbe成员用于描述存活探针。
存活探针用于检测容器是否存活,如果探测失败会杀死容器。因为如果用于服务的进程已经结束运行但容器并没有结束运行,会导致不能其正常提供服务。
startupProbe
检测容器是否已经启动,该探针与其他所有探针互斥(会禁用所有其他探针)
事件处理函数
事件处理函数(钩子),被配置在容器中,在容器中的进程启动前和结束前运行
1 | apiVersion: v1 |
hook的类型
- exec 执行命令
- HTTP 发送HTTP报文
postStart
Kubernetes 在容器创建后立即发送 postStart 事件。 然而,postStart 处理函数的调用不保证早于容器的入口点(entrypoint) 的执行。postStart 处理函数与容器的代码是异步执行的,但 Kubernetes 的容器管理逻辑会一直阻塞等待 postStart 处理函数执行完毕。 只有 postStart 处理函数执行完毕,容器的状态才会变成 RUNNING。
preStop
Kubernetes 在容器结束前立即发送 preStop 事件。除非 Pod 宽限期限超时,Kubernetes 的容器管理逻辑 会一直阻塞等待 preStop 处理函数执行完毕。