k8s--工作负载资源

k8s资源对象的基本属性

  1. apiVersion: 创建该对象所使用的 Kubernetes API 的版本

  2. kind:想要创建的对象的类别

  3. metadata (ObjectMeta): 帮助唯一标识对象的一些数据,包括一个 name 字符串、UID 和可选的 namespace
    标准的对象元数据。 更多信息

  4. spec - 你所期望的该对象的状态

名字空间

什么是名字空间

初始名字空间

  • default 没有指明使用其它名字空间的对象所使用的默认名字空间
  • kube-system Kubernetes 系统创建对象所使用的名字空间
  • kube-public 这个名字空间是自动创建的,所有用户(包括未经过身份验证的用户)都可以读取它。 这个名字空间主要用于集群使用,以防某些资源在整个集群中应该是可见和可读的。 这个名字空间的公共方面只是一种约定,而不是要求。
  • kube-node-lease 此名字空间用于与各个节点相关的 租约(Lease)对象。 节点租期允许 kubelet 发送心跳,由此控制面能够检测到节点故障。
    将同一集群中的资源划分为相互隔离的组。

DNS 条目官文-dns条目

该条目的形式是 <服务名称>.<名字空间名称>.svc.cluster.local,这意味着如果容器只使用 <服务名称>,它将被解析到本地名字空间的服务。

工作负载

工作负载是在 Kubernetes 上运行的应用程序。

负载资源(负载资源来替用户管理一组 Pod)

负载资源

为了减轻用户的使用负担,通常不需要用户直接管理每个 Pod。 而是使用负载资源来替用户管理一组 Pod。 这些负载资源通过配置 控制器 来确保正确类型的、处于运行状态的 Pod 个数是正确的,与用户所指定的状态相一致。

Kubernetes 提供若干种内置的工作负载资源:

  • Deployment 和 ReplicaSet (替换原来的资源 ReplicationController)。 Deployment 很适合用来管理你的集群上的无状态应用,Deployment 中的所有 Pod 都是相互等价的,并且在需要的时候被替换。
  • StatefulSet 让你能够运行一个或者多个以某种方式跟踪应用状态的 Pods。 例如,如果你的负载会将数据作持久存储,你可以运行一个 StatefulSet,将每个 Pod 与某个 PersistentVolume 对应起来。你在 StatefulSet 中各个 Pod 内运行的代码可以将数据复制到同一 StatefulSet 中的其它 Pod 中以提高整体的服务可靠性。
  • DaemonSet 定义提供节点本地支撑设施的 Pods。这些 Pods 可能对于你的集群的运维是 非常重要的,例如作为网络链接的辅助工具或者作为网络 插件 的一部分等等。每次你向集群中添加一个新节点时,如果该节点与某 DaemonSet 的规约匹配,则控制面会为该 DaemonSet 调度一个 Pod 到该新节点上运行。
  • Job 和 CronJob。 定义一些一直运行到结束并停止的任务。Job 用来表达的是一次性的任务,而 CronJob 会根据其时间规划反复运行。
  • 定制资源定义(CRD)

pod 官文-pod

Pod 代表的是集群上处于运行状态的一组 容器 的集合。
Pod 还可以包含:

  • 应用容器,
  • 在 Pod 启动期间运行的 Init 容器。
  • 你也可以在集群中支持临时性容器 的情况下,为调试的目的注入临时性容器。

spec (PodSpec)

对 Pod 预期行为的规约。更多信息

containers ([]Container),必需

  • 属于 Pod 的容器列表。当前无法添加或删除容器。Pod 中必须至少有一个容器。无法更新。
  • 要在 Pod 中运行的单个应用容器。
name (string),必需

指定为 DNS_LABEL 的容器的名称。Pod 中的每个容器都必须有一个唯一的名称 (DNS_LABEL)。无法更新。

image (string)
  • 容器镜像名称。
  • 更多信息。
  • 此字段是可选的,以允许更高层的配置管理进行默认设置或覆盖工作负载控制器(如 Deployment 和 StatefulSets) 中的容器镜像。
ports([]ContainerPort)

映射:键 containerPort, protocol 组合的唯一值将在合并期间保留

要从容器暴露的端口列表。此处不指定端口不会阻止该端口被暴露。 任何侦听容器内默认 “0.0.0.0” 地址的端口都可以从网络访问。使用策略合并补丁来修改此数组可能会破坏数据。 更多细节请参阅 https://github.com/kubernetes/kubernetes/issues/108255。 无法更新。

ContainerPort 表示单个容器中的网络端口。

ports.containerPort (int32),必需
  • 要在 Pod 的 IP 地址上公开的端口号。
  • 这必须是有效的端口号,0 < x < 65536。
ports.hostIP (string)
  • 绑定外部端口的主机 IP。
ports.hostPort (int32)
  • 要在主机上公开的端口号。
  • 如果指定,此字段必须是一个有效的端口号,0 < x < 65536。
  • 如果设置了 hostNetwork,此字段值必须与 containerPort 匹配。大多数容器不需要设置此字段。
ports.name (string)

如果设置此字段,这必须是 IANA_SVC_NAME 并且在 Pod 中唯一。 Pod 中的每个命名端口都必须具有唯一的名称。服务可以引用的端口的名称。

ports.protocol (string)

端口协议。必须是 UDP、TCP 或 SCTP。默认为 TCP。

imagePullPolicy (string)

镜像拉取策略。“Always”、“Never”、“IfNotPresent” 之一。如果指定了 :latest 标签,则默认为 “Always”, 否则默认为 “IfNotPresent”。无法更新。更多信息: https://kubernetes.io/zh-cn/docs/concepts/containers/images#updating-images

initContainers ([]Container)

  • 属于 Pod 的 Init 容器列表。
  • Init 容器在容器启动之前按顺序执行。
  • 如果任何一个 Init 容器发生故障,则认为该 Pod 失败,并根据其 restartPolicy 处理。
  • Init 容器或普通容器的名称在所有容器中必须是唯一的。
  • Init 容器不可以有生命周期操作、就绪态探针、存活态探针或启动探针。
  • 在调度过程中会考虑 Init 容器的资源需求,方法是查找每种资源类型的最高请求/限制, 然后使用该值的最大值或正常容器的资源请求的总和。
  • 对资源限制以类似的方式应用于 Init 容器。当前无法添加或删除 Init 容器。无法更新。更多信息

volumes ([]Volume)

可以由属于 Pod 的容器挂载的卷列表。 更多信息

调度

nodeSelector (map[string]string)

nodeSelector 是一个选择算符,这些算符必须取值为 true 才能认为 Pod 适合在节点上运行。 选择算符必须与节点的标签匹配,以便在该节点上调度 Pod。更多信息: https://kubernetes.io/zh-cn/docs/concepts/configuration/assign-pod-node/

nodeName (string)

nodeName 是将此 Pod 调度到特定节点的请求。 如果字段值不为空,调度器只是直接将这个 Pod 调度到所指定节点上,假设节点符合资源要求。

affinity (Affinity)

Affinity 是一组亲和性调度规则。

  • affinity.nodeAffinity (NodeAffinity)
    描述 Pod 的节点亲和性调度规则。
  • affinity.podAffinity (PodAffinity)
    描述 Pod 亲和性调度规则(例如,将此 Pod 与其他一些 Pod 放在同一节点、区域等)。
  • affinity.podAntiAffinity (PodAntiAffinity)
    描述 Pod 反亲和性调度规则(例如,避免将此 Pod 与其他一些 Pod 放在相同的节点、区域等)。

tolerations ([]Toleration)

生命周期

主机名和名称解析

hostname (string)

指定 Pod 的主机名。如果此字段未指定,则 Pod 的主机名将设置为系统定义的值。

setHostnameAsFQDN (boolean)

如果为 true,则 Pod 的主机名将配置为 Pod 的 FQDN,而不是叶名称(默认值)。 在 Linux 容器中,这意味着将内核的 hostname 字段(struct utsname 的 nodename 字段)设置为 FQDN。 在 Windows 容器中,这意味着将注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 的 hostname 键设置为 FQDN。如果 Pod 没有 FQDN,则此字段不起作用。 默认为 false。

subdomain (string)

如果设置了此字段,则完全限定的 Pod 主机名将是 ...svc.<集群域名>。 如果未设置此字段,则该 Pod 将没有域名。

hostAliases ([]HostAlias)

hostAliases 是一个可选的列表属性,包含要被注入到 Pod 的 hosts 文件中的主机和 IP 地址。 这仅对非 hostNetwork Pod 有效。

HostAlias 结构保存 IP 和主机名之间的映射,这些映射将作为 Pod 的 hosts 文件中的条目注入。

hostAliases.hostnames ([]string)

指定 IP 地址对应的主机名。

hostAliases.ip (string)

主机文件条目的 IP 地址。

status (PodStatus)

最近观察到的 Pod 状态。这些数据可能不是最新的。由系统填充。只读。 更多信息

Pod Template

每个 Pod 都旨在运行给定应用程序的单个实例
负载资源控制器通常使用 Pod 模板(Pod Template) 来替你创建 Pod 并管理它们。
Pod 模板是包含在工作负载对象中的规范,用来创建 Pod。这类负载资源包括 Deployment、 Job 和 DaemonSets 等。
工作负载的控制器会使用负载对象中的 PodTemplate 来生成实际的 Pod。 PodTemplate 是你用来运行应用时指定的负载资源的目标状态的一部分。

template (PodTemplateSpec)

template 定义将基于此 Pod 模板所创建的 Pod。

spec (PodSpec)

Pod 预期行为的规约。

.spec.selector

.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。

pvc

每个 PVC 对象都有 spec 和 status 部分,分别对应申领的规约和状态。 PersistentVolumeClaim 对象的名称必须是合法的 DNS 子域名.

accessModes

PersistentVolume 卷可以用资源提供者所支持的任何方式挂载到宿主系统上。 如下表所示,提供者(驱动)的能力不同,每个 PV 卷的访问模式都会设置为 对应卷所支持的模式值。 例如,NFS 可以支持多个读写客户,但是某个特定的 NFS PV 卷可能在服务器 上以只读的方式导出。每个 PV 卷都会获得自身的访问模式集合,描述的是 特定 PV 卷的能力。

访问模式有:

  1. ReadWriteOnce
    卷可以被一个节点以读写方式挂载。 ReadWriteOnce 访问模式也允许运行在同一节点上的多个 Pod 访问卷。
  2. ReadOnlyMany
    卷可以被多个节点以只读方式挂载。
  3. ReadWriteMany
    卷可以被多个节点以读写方式挂载。
  4. ReadWriteOncePod
    卷可以被单个 Pod 以读写方式挂载。 如果你想确保整个集群中只有一个 Pod 可以读取或写入该 PVC, 请使用ReadWriteOncePod 访问模式。这只支持 CSI 卷以及需要 Kubernetes 1.22 以上版本。
    这篇博客文章 Introducing Single Pod Access Mode for PersistentVolumes 描述了更详细的内容。

节点

节点内容

节点管理

节点状态

命令

kubectl describe node <节点名称>

地址(Addresses)

  • HostName:由节点的内核报告。可以通过 kubelet 的 — hostname-override 参数覆盖。
  • ExternalIP:通常是节点的可外部路由(从集群外可访问)的 IP 地址。
  • InternalIP:通常是节点的仅可在集群内部路由的 IP 地址。

状况(Condition)

conditions 字段描述了所有 Running 节点的状况:
Ready
DiskPressure
MemoryPressu
NetworkUnavailable

容量与可分配(Capacity)

这两个值描述节点上的可用资源:CPU、内存和可以调度到节点上的 Pod 的个数上限。

信息(Info)

你可能感兴趣的:(k8s与docker容器技术,kubernetes,容器,云原生)