K8S对象
K8S对象是系统中的持久性实体。使用这些实体表示集群状态。描述如下信息
- 那些容器化应用正在运行(以及在那些节点上运行)
- 可以被应用使用的资源
- 关于应用运行时行为的策略,如重启策略、升级策略以及容错策略
操作K8S对象————无论是创建、修改或者删除都需要使用K8S API
对象规约(Spec)与状态(status)
每个K8S对象包含两个嵌套的对象字段,负责管理对象的配置:对象spec
(规约)和对象status
(状态),具有spec
的对象,必须在创建对象时设置其内同,描述其期望状态。
status
描述了对象的当前状态,由K8S系统和组件设置并更新。在任何时刻,K8S控制平面一直管理着对象的实际状态,以达成期望状态。
描述K8S对象
创建K8S对象时,必须提共对象的spec
,用来描述对象的期望状态和一些基本信息。当使用K8S创建对象时(直接创建或经由kubectl
创建),API 请求必须在请求主体中包含JSON格式的信息。通常使用清单(Manifest)文件为kubectl
提共这些信息,清单文件为YAML格式(也可以使用JSON格式),kubect通过HTTP进行API请求时,会将清单中的信息转换为JSON或其他受支持的序列化格式。
清单示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 #告知Deployment运行2个与该模板匹配的Pod
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
images: nginx:1.14.2
ports:
- containerPort: 80
与使用清单文件创建deployment类似,另一种方式是使用kubectl
命令行接口的kubectl apply
命令,将.yaml
文件作为参数,如:
kubectl apply -f https://k8s.io/examples/application/deployment.yaml
输出如下
deployment.apps/nginx-deployment created
必须字段
在创建K8S对象对应的清单(YAML或JSON文件)中,需配置如下字段:
- apiVersion 创建该对象使用的K8S API 的版本
- kind 创建对象的类别
- metadata 唯一标识对象的一些数据,包括一个
name
字符串、UID
和可选的namespace
- spec 期望状态
服务器端字段验证
从K8S V1.25开始API服务器提供了服务器端字段验证,检测对象中未被识别或重复的字段,提供了kubectl --validate
的所有功能
kubectl
工具使用--validate
标志来设置字段验证机别。默认验证设置为--validate=true
验证级别 | 描述 |
---|---|
Strice | 严格的字段验证,验证失败时会报错 |
Warn | 执行字段验证,但错误会以警告形式提供而不是拒绝请求 |
Ignore | 不执行服务器端字段验证 |
交流群: