【kubernetes】k8s对象

文章目录

  • 1、什么是kubernetes对象
  • 2、如何描述kubernetes对象
  • 3、服务器端字段验证

1、什么是kubernetes对象

在k8s系统中,kubernetes 对象是持久化的实体,kubernetes使用这些实体去表示 整个集群的状态,具体而言,他们描述了以下信息:

  • 哪些容器化应用正在运行(运行在哪个节点上)
  • 可以被应用使用的资源
  • 关于应用运行时行为的策略,如重启策略、升级策略、容错策略等

kubernetes对象是一种 意向表达, 一旦创建该对象,kubernetes系统将不断工作,以确保该对象存在

通过创建对象,本质上是在告诉k8s系统,我们想要的集群工作负载状态看起来应该是什么样子,这就是k8s集群所谓的期望状态(Desired State)

操作k8s对象(无论是创建、修改还是删除),都需要使用 kubernetes API。比如,在使用kubectl命令行(CLI)接口时,CLI会调用必要的kubernetes API,也可以在程序中使用客户端库,来直接调用kubernetes API

对象规约(Spec)与状态(Status)

几乎每个k8s对象都包含两个嵌套的对象字段:对象规约对象状态,他们负责管理对象的配置

对于具有Spec的对象,必须在创建对象时设置其内容,描述你希望对象所具有的特征,即 期望状态(Desired State)

Status描述了对象的当前状态(Current State),他是由k8s系统和组件设置并更新的。在任何时刻,k8s控制平面都一直在积极地管理着对象的实际状态,以使之达成期望状态。

例如,Kubernetes 中的 Deployment 对象能够表示运行在集群中的应用。 当创建 Deployment 时,你可能会设置 Deployment 的 spec,指定该应用要有 3 个副本运行。 Kubernetes 系统读取 Deployment 的 spec, 并启动我们所期望的应用的 3 个实例 —— 更新状态以与规约相匹配。 如果这些实例中有的失败了(一种状态变更),Kubernetes 系统会通过执行修正操作来响应 spec 和 status 间的不一致 —— 意味着它会启动一个新的实例来替换

2、如何描述kubernetes对象

创建k8s对象时,必须提供对象的spec,用来描述该对象的期望状态,以及关于对象的一些基本信息。当使用kubernetes API(或者经由kubectl)创建对象时,API请求必须在请求主体中包含JSON 格式的信息,大多数情况下,我们是通过 清单(Manifest)文件为kubectl提供这些信息。按照惯例,清单是yaml格式的,当然,也可以使用JSON格式。

kubectl这样的工具在通过HTTP进行API请求的时候,会将清单中的信息转换为JSON 或者其他受支持的 序列化格式

这里有一个清单示例文件,展示了 kubernetes Deployment的必须字段

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
        image: nginx:1.14.2
        ports:
        - containerPort: 80

与上面使用 清单 的方式创建 deployment一致,另一种方式是使用kubectl命令行接口(CLI)的kubectl apply 命令,将 .yaml文件作为参数。具体如下所示:

kubectl apply -f https://k8s.io/examples/application/deployment.yaml

输出类似下面这样:

deployment.apps/nginx-deployment created

必需字段

在想要创建的kubernetes对象所对应的清单(yaml文件或JSON文件)中,需要配置的字段如下:

  • apiVersion
    创建该对象所使用的 kubernetes API 版本
  • kind
    想要创建的对象的类别
  • metadata
    帮助唯一标识对象的一些数据,包括一个name字符串、UID和可选的namespace
  • spec
    你所期望的该对象的状态

3、服务器端字段验证

k8s v1.25 开始,API 服务器提供了服务器端字段验证,可以检测对象中未被识别或重复的字段。他在服务器端提供了kubectl --validate的所有功能

kubectl工具使用--validate标志来设置字段验证级别。可以接受的值为:ignore warn strict,同时还接受值 true(等同于strict)false(等同于ignore)
kubectl的默认验证设置为--validate=true

  • strict
    严格的字段验证。验证失败的时候会报错
  • warn
    执行字段验证,但错误会以警告形式提供而不是拒绝请求
  • ignore
    不执行服务器端字段验证

当 kubectl 无法连接到支持字段验证的 API 服务器时,它将回退为使用客户端验证。 Kubernetes 1.27 及更高版本始终提供字段验证;较早的 Kubernetes 版本可能没有此功能

你可能感兴趣的:(kubernetes,kubernetes,容器,服务器)