n3-Kubernets对象字段描述一览
[TOC]
0x00 前言简述
什么是Kubernetes对象? 答:Kubernetes对象指的是Kubernetes系统的持久化实体,所有这些对象合起来代表了你集群的实际情况。创建一个k8s对象就是告诉Kubernetes,您需要的集群中的工作负载是什么(集群的目标状态), 因为一个Kubernetes对象代表着用户的一个意图(a record of intent),一旦您创建了一个Kubernetes对象,Kubernetes将持续工作以尽量实现此用户的意图。
常规的应用里我们把应用程序的数据存储在数据库中,Kubernetes将其数据以Kubernetes对象的形式通过 api server
存储在 etcd 中;
Kubernetes对象数据描述的信息:
- 集群中运行了哪些容器化应用程序(以及在哪个节点上运行)
- 集群中对应用程序可用的资源
- 应用程序相关的策略定义,例如,重启策略、升级策略、容错策略
- 其他Kubernetes管理应用程序时所需要的信息
如何进行Kubernetes对象的CURD呢? 答:自带的kubectl命令或者一些管理k8s的图形化界面工具比如Kuboard或者Kubedash;
PS:kubectl、kuboard 最终都通过调用 kubernetes API 来实现对 Kubernetes 对象的操作。您也可以直接在自己的程序中调用 Kubernetes API,此时您可能要有用到 Client Libraries
0x01 对象字段
描述: 每个K8s控制器对象都包含了两个重要的字段,即 spec
和 status
字段, Kubernetes通过对应的控制器,不断地使实际状态趋向于您期望的目标状态。
- spec 必须由您来提供,描述了您对该对象所
期望
的 目标状态 - status 只能由 Kubernetes 系统来修改,描述了该对象在 Kubernetes 系统中的
实际状态
例如,一个 Kubernetes Deployment 对象可以代表一个应用程序在集群中的运行状态。当您创建 Deployment 对象时,您可以通过 Deployment 的 spec 字段指定需要运行应用程序副本数(replicas假设为3)。Kubernetes 从 Deployment 的 spec 中读取这些信息,并为您创建指定容器化应用程序的 3 个副本,再将实际的状态更新到 Deployment 的 status 字段。Kubernetes 系统将不断地比较 实际状态 staus 和 目标状态 spec 之间的差异,并根据差异做出对应的调整。 例如,如果任何一个副本运行失败了,Kubernetes 将启动一个新的副本,以替代失败的副本。
apiVersion - 必须
描述: 用来创建对象时所使用的Kubernetes API版本,可通过kubectl api-versions
命令查询可用API版本;
#常用
apiVersion: apps/v1
# API版本
apps/v1
v1
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
crd.projectcalico.org/v1
discovery.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
kind - 必须
描述:被创建对象的类型常用的有Deployment(部署)、Service(服务端口)
metadata - 必须
描述:用于唯一确定该对象的元数据,包括 name
和 namespace
,如果 namespace 为空,则默认值为 default;
metadata:
name: nginx-deployment # 应用 + 绑定类型
namespace: nginx-app # 名称空间默认为default
spec - 必须
描述:您对该对象的期望状态但是需注意不同类型的 Kubernetes,其 spec 对象的格式不同(含有不同的内嵌字段),通过 API 手册 可以查看 Kubernetes 对象的字段和描述;
例如,假设您想了解 Pod 的 spec 定义,可以在 这里 找到,Deployment 的 spec 定义可以在 这里 找到;
0x02 编写示例
apiVersion: apps/v1 # apiserver版本
kind: Deployment # 绑定动作
metadata:
name: nginx-deployment # 应用 + 绑定类型
namespace: nginx-app # 名称空间
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
role: master
tier: backend
replicas: 2 # 运行 2 个容器化应用程序副本
template:
metadata:
labels:
app: nginx
role: master
tier: backend
spec:
containers:
- name: nginx
image: nginx:1.7.9
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 8080
Yaml 配置文件相关操作:
#1.使用 kube apply 命令可以创建该 .yaml 文件中的 Deployment 对象
kubectl apply -f deployment.yaml
kubectl apply -f https://weiyigeek.top/k8s/deployment.yaml
- python和C语言混编的几种方式
- 通过“四大行为”对WCF的扩展[实例篇]
- 古中国数学家的计算力真是惊人
- 基于Apache Spark机器学习的客户流失预测
- 数据库连接字符串的处理方法!加密解密连接字符串。
- ASP.net实现无扩展名的URL重写。简单、方便、无需ISAPI。
- 通过自定义ServiceHost实现对WCF的扩展[实例篇]
- 通过自定义ServiceHost实现对WCF的扩展[原理篇]
- python使用rsa库做公钥解密(网上别处找不到)
- 通过“四大行为”对WCF的扩展[原理篇]
- WCF客户端运行时架构体系详解[下篇]
- WCF客户端运行时架构体系详解[上篇]
- WCF服务端运行时架构体系详解[续篇]
- [WCF-Discovery] 实例演示:如何利用服务发现机制实现服务的“动态”调用?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 宇智波程序笔记8- 解数独(Sudoku Solver)
- Angular如何响应DOM event
- Angular Template expression operators介绍
- k8s资源对象的升级、回滚、扩容、缩容
- emgucv之Matrix操作
- 使用 K8s 进行作业调度实战分享
- Kafka 常用运维脚本
- R语言进阶之Lattice绘图
- Scala守卫语句的集中用法
- SQL中的Null值处理
- SQL 获取上一个订单的状态
- Redis案例:Redis Cluster分片数据不均匀
- Kubectl命令行jsonpath的使用
- Fiddler Everywhere工具答疑
- Groovy重载操作符(终极版)