K8s学习日记(一)了解K8s对象

K8s对象是什么?

K8s对象是K8s系统中的持久实体,用来表示集群的状态。
K8s对象是“意图的记录”——创建对象后K8s会不断工作以保证该对象存在。通过创建K8s对象,K8s可以明白你希望集群怎么样运作。

对象的规范(spec)和状态(status)

几乎所有K8s对象都包含两个嵌套的对象字段,用于管理对象的配置: specstatus
spec是一个规范,在创建对象的时候我们需要设置它,用来描述我们希望它是一个什么状态(即希望资源具有的特征的描述)。
status描述对象的当前状态,这个状态由K8s系统及其部件供给和更新。K8s的控制平面control plane持续积极管理每个对象的实际状态status,将它匹配所需的状态spec

举个例子:在K8s中,一个部署Deployment是一个对象,代表运行在集群上的应用程序。创建部署Deployment的时候,可以将spec设置为指定要运行应用程序的三个副本。Kubernetes 系统读取部署规范Deployment spec并启动所需应用程序的三个实例——更新状态 status以匹配您的规范spec。如果这些实例中的任何一个失败(状态更改),Kubernetes 系统会通过进行更正来响应规范和状态之间的差异——在这种情况下,启动一个替换实例。

创建K8s对象

上面提到创建K8s对象时,必须描述对象所需的对象规范spec,除此以外还要有该对象的一些基本信息(例如名称)。使用K8s API创建对象时(直接创建或通过kubectl),API请求中必须包含前面所说的需要的信息,将信息作为JSON包含在请求中。大多数情况下,我们将在.yaml文件中向kubectl提供信息。kubectl在发出请求时将信息转换为JSON。
示例.yaml文件(包含所需字段和对象规范):

apiVersion: apps/v1
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.14.2
        ports:
        - containerPort: 80

必填字段:

  • apiVersion-使用哪个版本的K8s API创建此对象
  • kind-创建哪个类型的对象
  • metadata-能唯一标识对象的数据,包括name字符串UID、和可选namespace
  • spec-规范,即你希望对象应有的状态

.yaml文件中填好以上内容后,可以通过在kubectl命令行界面中使用kubectl apply命令,将.yaml文件作为参数传递。
例如:
kubectl apply -f https://k8s.io/examples/application/deployment.yaml --record
其中https://k8s.io/examples/application/deployment.yaml.yaml所在的位置。
输出类似于:
deployment.apps/nginx-deployment created

你可能感兴趣的:(K8s学习日记(一)了解K8s对象)