• 理解K8s对象
    • 理解Kubernetes对象
      • 对象Spec和Status(规格和状态)
      • 描述Kubernetes对象
      • 必填字段
    • 原文

    理解K8s对象

    这个页面描述了Kubernetes对象在Kubernetes API中的表现,以及如何用.yaml 格式表达它们。

    理解Kubernetes对象

    Kubernetes对象是Kubernetes系统中的持久实体。Kubernetes使用这些实体来表示集群的状态。具体来说,它们可描述:

    • 容器化的应用程序正在运行什么(以及在哪些Node上运行)
    • 这些应用可用的资源
    • 这些应用的策略,例如重启策略,升级和容错

    Kubernetes对象是一种“意图记录”——一旦您创建对象,Kubernetes系统将持续工作以确保对象存在。通过创建一个对象,您可以有效地告诉Kubernetes系统您希望集群的工作负载是怎样的?这是您集群的期望状态

    要使用Kubernetes对象——无论是创建、修改还是删除它们,您都需要使用 Kubernetes API 。 例如,当您使用kubectl 命令行时,CLI会为您提供必要的Kubernetes API调用;您也可直接在自己的程序中使用Kubernetes API。Kubernetes目前提供了一个golang client library ,并且正在开发其他语言的客户端库(如 Python )。

    对象Spec和Status(规格和状态)

    每个Kubernetes对象都包含两个嵌套的对象字段,它们控制着对象的配置:对象spec和对象status 。您必须提供spec ,它描述了对象所期望的状态——您希望对象所具有的特性。status描述对象的实际状态,由Kubernetes系统提供和更新。在任何时候,Kubernetes Control Plane都会主动管理对象的实际状态,从而让其匹配你所期望的状态。

    例如,Kubernetes Deployment是一个表示在集群上运行的应用程序的对象。在创建Deployment时,可设置Deployment spec,例如指定有三个应用程序的replicas(副本)正在运行。这样,Kubernetes系统就会读取Deployment spec,并启动您想要的、应用程序的三个实例——根据您的spec更新status。如果任何一个实例失败(status发生改变),Kubernetes系统就会响应spec和status之间的差异,并进行更正——在这本例中,会启动一个替换实例。

    有关对象spec,status和metadata的更多信息,详见: Kubernetes API Conventions 。

    描述Kubernetes对象

    在Kubernetes中创建对象时,必须提供对象的spec,spec描述对象所期望的状态,以及一些关于对象的基本信息(如名称)。当您使用Kubernetes API创建对象(直接或通过kubectl )时,该API请求必须在请求体中包含该信息(以JSON格式)。 最常见的,可在一个.yaml文件中向kubectl提供信息。 在进行API请求时, kubectl 会将信息转换为JSON。

    如下是一个示例.yaml 文件,显示Kubernetes Deployment所需的字段和对象spec:

    1. apiVersion: apps/v1beta1
    2. kind: Deployment
    3. metadata:
    4. name: nginx-deployment
    5. spec:
    6. replicas: 3
    7. template:
    8. metadata:
    9. labels:
    10. app: nginx
    11. spec:
    12. containers:
    13. - name: nginx
    14. image: nginx:1.7.9
    15. ports:
    16. - containerPort: 80

    使用该.yaml 文件创建Deployment的一种方法是在kubectl 命令行界面中使用 kubectl create 命令,将.yaml文件作为参数传递。 例如:

    1. $ kubectl create -f docs/user-guide/nginx-deployment.yaml --record

    将会输出类似如下的内容:

    1. deployment "nginx-deployment" created

    必填字段

    在Kubernetes对象的.yaml 文件中,您需要为以下字段设置值:

    • apiVersion ——指定Kubernetes API的版本
    • kind ——你想创建什么类型的对象
    • metadata ——有助于唯一标识对象的数据,包括name 字符串,UID和可选的namespace

    您还需要提供spec 字段。对于不同的Kubernetes对象来说, spec的格式都是不同的。 Kubernetes API reference 可帮助您找到所有对象的spec格式。

    原文

    https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/