K8S中的Objects

K8S中yaml文件主要由5个部分组成:
apiVersion - 创建该对象所使用的 Kubernetes API 的版本
kind - 想要创建的对象的类别
metadata - 帮助唯一性标识对象的一些数据
spec: spec 的精确格式对每个 Kubernetes 对象来说是不同的,包含了特定于该对象的嵌套字段。
status。

一、metadata
每个metadata必须要包含以下字段:
1、namespace:默认值default,在多个用户之间划分集群资源的一种方法,名字空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑名字空间。
2、name:
3、uid
非必须的字段:
1、annotations(注解):为对象附加元数据,键/值对形式。例如,项目名称、版本和构建信息
2、creationTimestamp:对象被创建的时间
3、generateName: k8s生成唯一的name给我们
4、labels:键/值对形式,标签旨在用于指定对用户有意义且相关的对象的标识属性。 标签可以用于组织和选择对象的子集
5、ownerReferences:指定属主和附属之间的关系,只能在同一个namespace下指定
6、resourceVersion:代表该资源在下层数据库中存储的版本
7、generation:表示所需状态的特定生成的序列号。由系统设置,按资源单调递增。
8、deletionTimestamp:对象被删除的时间,由系统设定

二、spec 表示对象的描述
1、Affinity 亲和性 https://blog.csdn.net/horsefoot/article/details/72827783
nodeAffinity:描述node亲和性调度规则
requiredDuringSchedulingIgnoredDuringExecution类型是一个强行要求,表示节点必须满足条件才能够部署Pod
preferredDuringSchedulingIgnoredDuringExecution是一个非强行要求,调度器会尝试去满足这个节点亲和性条件,但是如果没有满足节点亲和性条件的节点,那么就会将Pod部署在其他节点上。

podAffinity:描述pod亲和性调度规则
    preferredDuringSchedulingIgnoredDuringExecution:调度器会尝试去满足亲和性条件,但是如果没有满足条件的节点,那么就会将Pod部署在其他节点上
    requiredDuringSchedulingIgnoredDuringExecution:强行要求,表示必须满足才能够部署Pod

podAntiAffinity:描述pod反亲和性调度规则
    preferredDuringSchedulingIgnoredDuringExecution:调度器会尝试去满足反亲和性条件,但是如果没有满足条件的节点,那么就会将Pod部署在其他节点上
    requiredDuringSchedulingIgnoredDuringExecution:强行要求,表示Pod不能部署在这样节点上,这个节点上正在运行的Pod中满足某种条件
            labelSelector:一组资源上的标签查询
               -  matchExpressions
               -  matchLabels
            namespaceSelector
            namespaces
            topologyKey

2、containers:表示属于pod的容器列表,一个pod中至少有一个容器,不能被更新
字段如下:
args:字符串数组类型
command:字符串数组类型
env: EnvVar 数组
name
value
valueFrom

以上三个字段含义如下:
 如果在容器配置中没有设置 command 或者 args,那么将使用 Docker 镜像自带的命令及其参数。
 如果在容器配置中只设置了 command 但是没有设置 args,那么容器启动时只会执行该命令, Docker 镜像中自带的命令及其参数会被忽略。
 如果在容器配置中只设置了 args,那么 Docker 镜像中自带的命令会使用该新参数作为其执行时的参数。
 如果在容器配置中同时设置了 command 与 args,那么 Docker 镜像中自带的命令及其参数会被忽略。 容器启动时只会执行配置中设置的命令,并使用配置中设置的参数作为命令的参数。

envFrom:用于在容器中填充环境变量的源的列表
image: docker镜像名
imagePullPolicy: docker镜像拉取策略,Always, Never, IfNotPresent.
lifecycle
livenessProbe:用于pod健康检查探针
name:容器名称,一个pod必须唯一容器名
ports: 从容器暴露出的端口
resources:计算容器所需要的资源
limits: 最大需要的资源限制
requests:需要最低的资源
securityContext:pod运行时携带的安全项
privileged:boolean,默认false,如果true,会在权限模式下运行容器
terminationMessagePath:可选,容器终止时,日志记录到的文件路径
terminationMessagePolicy:终止log输出形式,默认file
volumeMounts:挂载到容器文件系统的pod 数据卷
mountPath: 挂载路径
name: 必须跟volumn的name一致
readOnly:只读

3、dnsPolicy:string类型,给pod设置 DNS 策略. 默认 "ClusterFirst",其他还有'ClusterFirstWithHostNet', 'Default' , 'None'.
4、enableServiceLinks:表示service相关信息是否要注册到pod的环境变量中,默认true
5、hostname:指定pod的主机名,如果没有设置,会自动被设定系统定义值
6、initContainers:pod的初始化容器列表,也叫中间容器,先于应用容器创建,字段同container
7、nodeName:string类型:用来将pod调度到指定nodename的节点上
8、nodeSelector:object类型: 是节点选择约束的最简单推荐形式,包含键值对的映射。为了使 pod 可以在某个节点上运行,该节点的标签中 必须包含这里的每个键值对(它也可以具有其他标签)。 最常见的用法的是一对键值对。
9、restartPolicy:pod上所有容器的重启策略,Always, OnFailure, Never,默认值always。
10、schedulerName:指定调度pod的调度器名称
11、securityContext:pod级别安全选项,默认为空字符串
12、serviceAccountName:访问k8s集群,运行pod的用户账号,没有指定,默认使用default账号
13、terminationGracePeriodSeconds:integer类型,pod需要优雅地终止所需要的持续时间,默认30s
14、volumes:被pod上容器所挂载的卷
name: 卷名称,在pod唯一
persistentVolumeClaim:简称pvc,持久卷申领,表达的是用户对存储的请求
hostPath:hostPath 卷能将主机节点文件系统上的文件或目录挂载到你的 Pod 中
emptyDir:当 Pod 分派到某个 Node 上时,emptyDir 卷会被创建,并且在 Pod 在该节点上运行期间,卷一直存在
configMap:配置文件的存储卷

三、status 表示对象的状态
1、conditions
lastProbeTime:上次探测 Pod 状况时的时间戳
lastTransitionTime: Pod 上次从一种状态转换到另一种状态时的时间戳
status: 表明该状况是否适用,可能的取值有 "True", "False" 或 "Unknown"
type: Pod 状况的名称,取值:PodScheduled:Pod 已经被调度到某节点;ContainersReady:Pod 中所有容器都已就绪;所有的 Init 容器 都已成功启动;Pod 可以为请求提供服务,并且应该被添加到对应服务的负载均衡池中。
2、containerStatuses
清单中每个容器有一个列表条目。每个条目当前都是“docker inspect”的输出。
3、hostIP :pod被分配到节点的ip
4、initContainerStatuses:清单中每个init容器有一个列表条目。
5、phase:Pod 的阶段(Phase)是 Pod 在其生命周期中所处位置的简单宏观概述,分为:Pending(悬决)、Running(运行中)、Succeeded(成功)、Failed(失败)、Unknown(未知)
6、podIP:pod的ip地址
7、podIPs:podIP列表
8、qosClass:服务质量,实现资源被有效调度和分配的同时提高资源利用率,包括:
Guaranteed:每个容器都必须设置CPU和内存的限制和请求。优先级最高的,Resource的limit和request都相等且不为0
Burstable:在不满足Guaranteed的情况下,至少设置一个CPU或者内存的请求
BestEffort:resource和request都不设置,意味着容器资源使用上限实际上即所在node的capacity
9、startTime:被Kubelet发现的时间,发生在pull 容器image前

posted @ 2021-06-07 19:56  茁壮的小草  阅读(620)  评论(0编辑  收藏  举报