📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。
📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看
📙Java并发编程系列,设计模式系列、go web开发框架 系列正在发展中,喜欢Java,GoLang,Rust,的朋友们可以关注一下哦!
文章目录
- 什么是Kubernetes对象
- 对象的spec和status
- 描述Kubernetes对象
- 必填字段
- 管理Kubernetes对象
- 管理方式
- 指令性的命令行
- 指令性的对象配置
- 声明式的对象配置
什么是Kubernetes对象
Kubernetes对象指的是Kubernetes系统的持久化实体,所有这些对象合起来,代表了你集群的实际情况。常规的应用里,我们把应用程序的数据存储在数据库中,Kubernetes将其数据以Kubernetes对象的形式通过 api server存储在 etcd 中。具体来说,这些数据(Kubernetes对象)描述了:
- 集群中运行了哪些容器化应用程序
- 集群中对应用程序可用的资源
- 应用程序相关的策略定义,例如,重启策略、升级策略、容错策略
- 其他Kubernetes管理应用程序时所需要的信息
对象的spec和status
每一个 Kubernetes 对象都包含了两个重要的字段:
- spec 必须由您来提供,描述了您对该对象所期望的 目标状态
- status 只能由 Kubernetes 系统来修改,描述了该对象在 Kubernetes 系统中的 实际状态
Kubernetes通过对应的控制器,不断地使实际状态趋向于您期望的目标状态。
描述Kubernetes对象
当您在 Kubernetes 中创建一个对象时,您必须提供
- 该对象的 spec 字段,通过该字段描述您期望的 目标状态
- 该对象的一些基本信息,例如名字
如果使用 kubectl 创建对象,您必须编写 .yaml 格式的文件,如果通过 Kuboard 图形化工具创建,则在Kuboard 对应的界面功能中完成表单填写即可。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # 运行 2 个容器化应用程序副本
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
使用 kube apply 命令可以创建该 .yaml 文件中的 Deployment 对象:
kubectl apply -f https://kuboard.cn/statics/learning/obj/deployment.yaml
输出结果如下所示:
deployment.apps/nginx-deployment created
使用 kubectl delete 命令可以删除该 .yaml 文件中的 Deployment 对象:
kubectl delete -f https://kuboard.cn/statics/learning/obj/deployment.yaml
必填字段
在上述的 .yaml 文件中,如下字段是必须填写的:
- apiVersion 用来创建对象时所使用的Kubernetes API版本
- kind 被创建对象的类型
- metadata 用于唯一确定该对象的元数据:包括 name 和 namespace,如果 namespace 为空,则默认值为 default
- spec 描述您对该对象的期望状态
管理Kubernetes对象
管理方式
管理方式 | 操作对象 | 推荐的环境 | 参与编辑的人数 | 学习曲线 |
---|---|---|---|---|
指令性的命令行 | Kubernetes对象 | 开发环境 | 1+ | 最低 |
指令性的对象配置 | 单个 yaml | 文件 | 生产环境 | 1 |
声明式的对象配置 | 包含多个 yaml 文件的多个目录 | 生产环境 | 1+ | 最高 |
指令性的命令行
当使用指令性的命令行(imperative commands)时,用户通过向 kubectl 命令提供参数的方式,直接操作集群中的 Kubernetes 对象。此时,用户无需编写或修改 .yaml 文件。
创建一个 Deployment 对象,以运行一个 nginx 实例:
kubectl run nginx --image nginx
kubectl create deployment nginx --image nginx
指令性的对象配置
使用指令性的对象配置时,需要向 kubectl 命令指定具体的操作(create,replace,apply,delete等),可选参数以及至少一个配置文件的名字。配置文件中必须包括一个完整的对象的定义,可以是 yaml 格式,也可以是 json 格式。
通过配置文件创建对象
kubectl create -f nginx.yaml
删除两个配置文件中的对象
kubectl delete -f nginx.yaml -f redis.yaml
直接使用配置文件中的对象定义,替换Kubernetes中对应的对象:
kubectl replace -f nginx.yaml
声明式的对象配置
当使用声明式的对象配置时,用户操作本地存储的Kubernetes对象配置文件,然而,在将文件传递给 kubectl 命令时,并不指定具体的操作,由 kubectl 自动检查每一个对象的状态并自行决定是创建、更新、还是删除该对象。使用这种方法时,可以直接针对一个或多个文件目录进行操作。
例子
处理 configs 目录中所有配置文件中的Kubernetes对象,根据情况创建对象、或更新Kubernetes中已经存在的对象。可以先执行 diff 指令查看具体的变更,然后执行 apply 指令执行变更:
kubectl diff -f configs/
kubectl apply -f configs/
递归处理目录中的内容:
kubectl diff -R -f configs/
kubectl apply -R -f configs/