apiVersion: 创建该对象所使用的 Kubernetes API 的版本
kind:想要创建的对象的类别
metadata (ObjectMeta): 帮助唯一标识对象的一些数据,包括一个 name 字符串、UID 和可选的 namespace
标准的对象元数据。 更多信息
spec - 你所期望的该对象的状态
该条目的形式是 <服务名称>.<名字空间名称>.svc.cluster.local,这意味着如果容器只使用 <服务名称>,它将被解析到本地名字空间的服务。
工作负载是在 Kubernetes 上运行的应用程序。
负载资源
为了减轻用户的使用负担,通常不需要用户直接管理每个 Pod。 而是使用负载资源来替用户管理一组 Pod。 这些负载资源通过配置 控制器 来确保正确类型的、处于运行状态的 Pod 个数是正确的,与用户所指定的状态相一致。
Kubernetes 提供若干种内置的工作负载资源:
Pod 代表的是集群上处于运行状态的一组 容器 的集合。
Pod 还可以包含:
- 应用容器,
- 在 Pod 启动期间运行的 Init 容器。
- 你也可以在集群中支持临时性容器 的情况下,为调试的目的注入临时性容器。
对 Pod 预期行为的规约。更多信息
指定为 DNS_LABEL 的容器的名称。Pod 中的每个容器都必须有一个唯一的名称 (DNS_LABEL)。无法更新。
映射:键 containerPort, protocol 组合的唯一值将在合并期间保留
要从容器暴露的端口列表。此处不指定端口不会阻止该端口被暴露。 任何侦听容器内默认 “0.0.0.0” 地址的端口都可以从网络访问。使用策略合并补丁来修改此数组可能会破坏数据。 更多细节请参阅 https://github.com/kubernetes/kubernetes/issues/108255。 无法更新。
ContainerPort 表示单个容器中的网络端口。
如果设置此字段,这必须是 IANA_SVC_NAME 并且在 Pod 中唯一。 Pod 中的每个命名端口都必须具有唯一的名称。服务可以引用的端口的名称。
ports.protocol (string)
端口协议。必须是 UDP、TCP 或 SCTP。默认为 TCP。
镜像拉取策略。“Always”、“Never”、“IfNotPresent” 之一。如果指定了 :latest 标签,则默认为 “Always”, 否则默认为 “IfNotPresent”。无法更新。更多信息: https://kubernetes.io/zh-cn/docs/concepts/containers/images#updating-images
可以由属于 Pod 的容器挂载的卷列表。 更多信息
nodeSelector 是一个选择算符,这些算符必须取值为 true 才能认为 Pod 适合在节点上运行。 选择算符必须与节点的标签匹配,以便在该节点上调度 Pod。更多信息: https://kubernetes.io/zh-cn/docs/concepts/configuration/assign-pod-node/
nodeName 是将此 Pod 调度到特定节点的请求。 如果字段值不为空,调度器只是直接将这个 Pod 调度到所指定节点上,假设节点符合资源要求。
Affinity 是一组亲和性调度规则。
指定 Pod 的主机名。如果此字段未指定,则 Pod 的主机名将设置为系统定义的值。
如果为 true,则 Pod 的主机名将配置为 Pod 的 FQDN,而不是叶名称(默认值)。 在 Linux 容器中,这意味着将内核的 hostname 字段(struct utsname 的 nodename 字段)设置为 FQDN。 在 Windows 容器中,这意味着将注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 的 hostname 键设置为 FQDN。如果 Pod 没有 FQDN,则此字段不起作用。 默认为 false。
如果设置了此字段,则完全限定的 Pod 主机名将是 ..
hostAliases 是一个可选的列表属性,包含要被注入到 Pod 的 hosts 文件中的主机和 IP 地址。 这仅对非 hostNetwork Pod 有效。
HostAlias 结构保存 IP 和主机名之间的映射,这些映射将作为 Pod 的 hosts 文件中的条目注入。
指定 IP 地址对应的主机名。
主机文件条目的 IP 地址。
最近观察到的 Pod 状态。这些数据可能不是最新的。由系统填充。只读。 更多信息
每个 Pod 都旨在运行给定应用程序的单个实例
负载资源的控制器通常使用 Pod 模板(Pod Template) 来替你创建 Pod 并管理它们。
Pod 模板是包含在工作负载对象中的规范,用来创建 Pod。这类负载资源包括 Deployment、 Job 和 DaemonSets 等。
工作负载的控制器会使用负载对象中的 PodTemplate 来生成实际的 Pod。 PodTemplate 是你用来运行应用时指定的负载资源的目标状态的一部分。
template 定义将基于此 Pod 模板所创建的 Pod。
Pod 预期行为的规约。
.spec.selector 是指定本 Deployment 的 Pod 标签选择算符的必需字段。
.spec.selector 必须匹配 .spec.template.metadata.labels,否则请求会被 API 拒绝。
在 API apps/v1版本中,.spec.selector 和 .metadata.labels 如果没有设置的话, 不会被默认设置为 .spec.template.metadata.labels,所以需要明确进行设置。 同时在 apps/v1版本中,Deployment 创建后 .spec.selector 是不可变的。
当 Pod 的标签和选择算符匹配,但其模板和 .spec.template 不同时,或者此类 Pod 的总数超过 .spec.replicas 的设置时,Deployment 会终结之。 如果 Pods 总数未达到期望值,Deployment 会基于 .spec.template 创建新的 Pod。
PersistentVolume 卷可以用资源提供者所支持的任何方式挂载到宿主系统上。 如下表所示,提供者(驱动)的能力不同,每个 PV 卷的访问模式都会设置为 对应卷所支持的模式值。 例如,NFS 可以支持多个读写客户,但是某个特定的 NFS PV 卷可能在服务器 上以只读的方式导出。每个 PV 卷都会获得自身的访问模式集合,描述的是 特定 PV 卷的能力。
访问模式有:
节点内容
kubectl describe node <节点名称>
conditions 字段描述了所有 Running 节点的状况:
Ready
DiskPressure
MemoryPressu
NetworkUnavailable
这两个值描述节点上的可用资源:CPU、内存和可以调度到节点上的 Pod 的个数上限。