使用Kubernetes对象1---理解Kubernetes对象
本篇描述了Kubernetes对象是如何在Kubernetes API中表示的,以及你如何在.yaml格式中表示它们。
理解Kubernetes对象
Kubernetes对象是Kubernetes系统中持久化的实体。Kubernetes通过这些实体来表示集群的状态。具体来讲,它们可以描述:
- 什么容器化的应用正在运行(以及在哪个节点)
- 这些应用的可用资源
- 这些应用的行动策略,如重启策略、升级策略和容错策略
一个Kubernetes对象其实就是一个“目标记录“--一旦你创建了一个Kubernetes对象,Kubernetes系统就会持续工作以确保该对象存在。通过创建对象,你可以有效地告诉Kubernetes系统,你希望你的集群的工作负载是怎样的;这是你集群的期望状态。
使用Kubernetes对象--不管是创建、编辑还是删除它们--你都需要使用Kubernetes API。比如,当你使用kubectl命令行接口时,CLI会替你调用需要的Kubernetes API。你也可以在自己的程序中通过Client Libraries直接使用Kubernetes API。
对象规格(Spec)和状态(Status)
每个Kubernetes对象都包含两个嵌套对象字段来管理对象的配置:它们是对象规格和对象状态。对象规格是你必须提供的,它描述了你对对象的期望状态--你希望对象拥有的特征。对象状态描述了对象的实际状态,由Kubernetes系统提供和更新。在任何时间,Kubernetes控制面都会积极地管理对象的实际状态以匹配你提供的期望状态。
例如,Kubernetes Deployment(部署)是一个对象,用来表示在你集群上运行的一个应用。当你创建了Deployment,你可能需要设置Deployment的规格来指定:你希望该应用运行三个副本。Kubernetes系统读取Deployment的规格,并为你期望的应用启动三个实例--更新状态以匹配你的规格。如果其中任何实例失败了,Kubernetes系统会响应当前状态和规格的不一致,做出更正--在这种情况下会启动替代的实例。
关于对象规格、状态和元数据(metadata )的更多信息,请参阅Kubernetes API 约定(Kubernetes API Conventions)。
描述Kubernetes对象
当你在Kubernetes创建一个对象时,你必须提供描述期望状态的对象规格,该规格也包含一些对象的基本信息(比如名称)。当你使用Kubernetes API来创建对象时(直接或者通过kubectl), API请求必须包含这些信息将其以JSON格式加入请求的body中。通常通过一个.yaml文件将这些信息提供给kubectl。kubectl在生成API请求的时候,把这些信息转换成JSON格式。
下面是一个.yaml文件的例子,展示了一个Kubernetes Deployment所需要的字段和对象规格。
/*
application/deployment.yaml
*/
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
一种创建Deployment的方式是使用像上述例子那样的.yaml文件,在kubectl命令行接口使用kubectl create
命令,并传递
.yaml文件作为参数。举例:
kubectl create -f https://k8s.io/examples/application/deployment.yaml --record
输出类似于:
deployment.apps/nginx-deployment created
必需字段
在你想要创建的Kubernetes对象对应的.yaml文件中, 你需要为下列字段赋值:
- apiVersion - 你用来创建对象的Kubernetes API版本
- kind - 你想要创建的对象的类型
- metadata - 用来唯一确认对象的数据,包括一个name(名称)字符串、UID和可选的namespace(命名空间)
你还需要提供对象的spec字段。对每个Kubernetes对象来说,spec的准确格式都是不同的,特定于该对象包含了嵌套的字段。Kubernetes API 参考(Kubernetes API Reference)能帮助你找到所有你能通过Kubernetes创建的对象的规格格式。例如:Pod对象的规格格式可以在here找到,Deployment对象的规格格式可以在here找到。
接下来
- 学习最重要的Kubernetes基础对象,比如Pod。