title: “[Kubernetes] 理解kubernetes对象”
catalog: true
date: 2018-03-01 10:50:57
type: “categories”
subtitle:
header-img: “http://ozilwgpje.bkt.clouddn.com/article2.jpg
tags:

  • Kubernetes
    catagories:
  • Kubernetes

1. kubernetes对象概述

kubernetes中的对象是一些持久化的实体,可以理解为是对集群状态的描述或期望

包括:

  • 集群中哪些node上运行了哪些容器化应用
  • 应用的资源是否满足使用
  • 应用的执行策略,例如重启策略、更新策略、容错策略等。

kubernetes的对象是一种意图(期望)的记录,kubernetes会始终保持预期创建的对象存在和集群运行在预期的状态下

操作kubernetes对象(增删改查)需要通过kubernetes API,一般有以下几种方式:

  • kubectl命令工具
  • Client library的方式,例如 client-go

2. Spec and Status

每个kubernetes对象的结构描述都包含specstatus两个部分。

  • spec:该内容由用户提供,描述用户期望的对象特征及集群状态。
  • status:该内容由kubernetes集群提供和更新,描述kubernetes对象的实时状态。

任何时候,kubernetes都会控制集群的实时状态status与用户的预期状态spec一致。

例如:当你定义Deployment的描述文件,指定集群中运行3个实例,那么kubernetes会始终保持集群中运行3个实例,如果任何实例挂掉,kubernetes会自动重建新的实例来保持集群中始终运行用户预期的3个实例。

3. 对象描述文件

当你要创建一个kubernetes对象的时候,需要提供该对象的描述信息spec,来描述你的对象在kubernetes中的预期状态。

一般使用kubernetes API来创建kubernetes对象,其中spec信息可以以JSON的形式存放在request body中,也可以以.yaml文件的形式通过kubectl工具创建。

例如,以下为Deployment对象对应的yaml文件:

  1. apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-deployment
  5. spec:
  6. replicas: 3
  7. selector:
  8. matchLabels:
  9. app: nginx
  10. template:
  11. metadata:
  12. labels:
  13. app: nginx
  14. spec:
  15. containers:
  16. - name: nginx
  17. image: nginx:1.7.9
  18. ports:
  19. - containerPort: 80

执行kubectl create的命令

  1. #create command
  2. kubectl create -f https://k8s.io/docs/user-guide/nginx-deployment.yaml --record
  3. #output
  4. deployment "nginx-deployment" created

4. 必须字段

在对象描述文件.yaml中,必须包含以下字段。

  • apiVersion:kubernetes API的版本
  • kind:kubernetes对象的类型
  • metadata:唯一标识该对象的元数据,包括name,UID,可选的namespace
  • spec:标识对象的详细信息,不同对象的spec的格式不同,可以嵌套其他对象的字段。

文章参考:

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