Kubernetes的API对象描述
API对象是K8s集群中的管理操作单元。K8s集群系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作。
每个API对象都有4大类属性:API组和类型,元数据metadata、规范spec和状态status
API组和类型,描述了当前的 配置文件应该由谁进行处理
元数据,是用来标识API对象的,每个对象都至少有3个元数据:namespace,name,uid,除此之外还有labels,annotations
规范,描述了用户期望K8s集群中的分布式系统达到的理想状态(Desired State)
状态,描述了系统实际当前达到的状态(Status)
API组和类型
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: kube-system
labels:
app: nginx
spec:
apiVersion
描述使用的 API 组,kind
描述API 组中的资源类型,它们共同描述了当前 配置文件应该由谁来进行处理。
API 组包括,核心 API组,如api/v1
,扩展 API 组 ,如apis/extensions/v1beta1
,和自定义的新的API对象类型。
元数据
metadata
提供了一些用于唯一标识对象的数据,包括namespace
,name
,uid
,和用于分类的 labels
,以及用于扩展功能的注解 annotations
,还有creationTimestamp,generateName,resourceVersion,selfLink,ownerReferences。
namespace,对资源进行隔离,不同namespace,无法直接使用service name通信,而需要使用完全限定域名FQDN(fully qualified domain name)。
label,对 Kubernetes 对象进行分类。每一个 Kubernetes 对象都可以被打上多个标签,我们可以使用标签选择器对这些标签进行过滤,帮助我们选择和管理集群内部的 Kubernetes 对象。
spec:
selector:
matchLabels:
app: nginx
规范
Kubernetes中所有的配置都是通过API对象的Spec去设置的,也就是用户通过配置系统的理想状态来改变系统。
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: kube-system
labels:
app: nginx
spec:
containers:
- image: nginx
command:
- sleep
- "36000"
imagePullPolicy: IfNotPresent
name: nginx
restartPolicy: Always
状态
Status 对外暴露集群内对象的运行状态。
Kubernetes 对象的 Status 不仅能够用来观察目前集群中对象的运行状态,还能帮助我们对集群中出现的问题进行排查以及修复,并能提供一些信息辅助优化集群中资源的利用率。
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2020-03-16T10:09:30Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2020-03-16T10:12:32Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2020-03-16T10:12:32Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2020-03-16T10:10:10Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: docker://5bc08ac0a3fad9225504f9412d2a703aadb3544c29746e627b37d2052315c47c
image: nginx
imageID: docker-pullable://nginx@sha256:2ff5d1d10e8689e616a3cca2fb42151f314042baf857668fb0ea9f78f977eec2
lastState: {}
name: nginx
ready: true
restartCount: 0
state:
running:
startedAt: "2020-03-16T10:09:31Z"
hostIP: 192.168.40.210
phase: Running
podIP: 10.244.84.173
qosClass: Burstable
startTime: "2020-03-16T10:09:30Z"