声明:这是我在大学毕业后进入第一家互联网公司学习的内容


Kubernetes 对象

在 Kubernetes 系统中,Kubernetes 对象 是持久化的实体。Kubernetes 使用这些实体去表示整个集群的状态。特别地,它们描述了如下信息:

哪些容器化应用在运行(以及在哪个 Node 上)
可以被应用使用的资源
关于应用运行时表现的策略,比如重启策略、升级策略,以及容错策略
Kubernetes 对象是 “目标性记录” —— 一旦创建对象,Kubernetes 系统将持续工作以确保对象存在。通过创建对象,本质上是在告知 Kubernetes 系统,所需要的集群工作负载看起来是什么样子的,这就是 Kubernetes 集群的 期望状态(Desired State)。

操作 Kubernetes 对象 —— 无论是创建、修改,或者删除 —— 需要使用 Kubernetes API。比如,当使用 kubectl 命令行接口时,CLI 会执行必要的 Kubernetes API 调用,也可以在程序中使用客户端库直接调用 Kubernetes API。

对象规则约定(Spec)与状态(Status)

每个 Kubernetes 对象包含两个嵌套的对象字段,它们负责管理对象的配置:对象 spec 和 对象 status 。 spec 是必需的,它描述了对象的期望状态(Desired State) —— 希望对象所具有的特征。 status 描述了对象的 实际状态(Actual State) ,它是由 Kubernetes 系统提供和更新的。在任何时刻,Kubernetes 控制面一直努力地管理着对象的实际状态以与期望状态相匹配。

例如,Kubernetes Deployment 对象能够表示运行在集群中的应用。 当创建 Deployment 时,可能需要设置 Deployment 的规约,以指定该应用需要有 3 个副本在运行。 Kubernetes 系统读取 Deployment 规约,并启动我们所期望的该应用的 3 个实例 —— 更新状态以与规约相匹配。 如果那些实例中有失败的(一种状态变更),Kubernetes 系统通过修正来响应规约和状态之间的不一致 —— 这种情况,会启动一个新的实例来替换。

描述 Kubernetes 对象

当创建 Kubernetes 对象时,必须提供对象的规约,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如名称)。 当使用 Kubernetes API 创建对象时(或者直接创建,或者基于kubectl),API 请求必须在请求体中包含 JSON 格式的信息。 大多数情况下,需要在 .yaml 文件中为 kubectl 提供这些信息。 kubectl 在发起 API 请求时,将这些信息转换成 JSON 格式。

这里有一个 nginx.yaml 示例文件,展示了 Kubernetes Deployment 的必需字段和对象规约:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:name: nginx-deployment
spec:selector:matchLabels:app: nginxreplicas: 2 # tells deployment to run 2 pods matching the templatetemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80

使用类似于上面的 .yaml 文件来创建 Deployment,一种方式是使用 kubectl 命令行接口(CLI)中的 kubectl apply 命令, 将 .yaml 文件作为参数。下面是一个示例:

kubectl apply -f nginx.yaml --record输出:
deployment.apps/nginx-deployment created

必需字段

在想要创建的 Kubernetes 对象对应的 .yaml 文件中,需要配置如下的字段:

  • apiVersion - 创建该对象所使用的 Kubernetes API 的版本
  • kind - 想要创建的对象的类型
  • metadata - 帮助识别对象唯一性的数据,包括一个 name 字符串、UID 和可选的 namespace

您也需要提供对象的 spec 字段。对象 spec 的精确格式对每个 Kubernetes 对象来说是不同的,包含了特定于该对象的嵌套字段。Kubernetes API 参考能够帮助我们找到任何我们想创建的对象的 spec 格式。 例如,可以从 这里 查看 Pod 的 spec 格式, 并且可以从 这里 查看 Deployment 的 spec 格式。

Kubernetes API

REST API是Kubernetes的基础架构。组件之间的所有操作和通信,以及外部用户命令都是API Server处理的REST API调用。因此,Kubernetes平台中的所有内容都被视为API对象,并且在API中具有相应的条目 。

大多数操作可以通过 kubectl命令行界面或其他命令行工具(例如kubeadm)执行,而后者又使用API​​。但是,您也可以使用REST调用直接访问API。

如果要使用Kubernetes API编写应用程序,请考虑使用一种客户端库。

Kubernetes API是通过HTTP提供的基于资源的(RESTful)编程接口。它支持通过标准HTTP动词(POST,PUT,PATCH,DELETE,GET)检索,创建,更新和删除主要资源,包括许多对象的附加子资源,这些对象允许进行细粒度的授权(例如将Pod绑定到节点) ,并且可以方便或有效地接受并以不同的表示形式提供这些资源。它还支持通过“监视”和一致的列表对资源进行有效的更改通知,以允许其他组件有效地缓存和同步资源状态。

标准API术语

大多数Kubernetes API资源类型都是对象:它们代表集群上某个概念的具体实例,例如pod或名称空间。API资源类型的一个较小数目是“虚拟” -它们通常代表操作,而不是物体,如权限检查(使用POST用的JSON编码体SubjectAccessReview到subjectaccessreviews资源)。所有对象都将具有唯一名称,以允许进行幂等的创建和检索,但是如果虚拟资源类型不可检索或不依赖幂等,则它们可能没有唯一的名称。

资源类别

这是Kubernetes API提供的基本资源类型及其主要功能的高级概述。

  • 工作负载是用于在集群上管理和运行容器的对象。

  • 发现和LB资源是用于将工作负载“缝合”到外部可访问的负载平衡服务中的对象。

  • 配置和存储资源是用于将初始化数据注入到应用程序中并持久化容器外部数据的对象。

  • 群集资源对象定义了群集本身的配置方式。这些通常仅由集群运营商使用。

  • 元数据资源是用于配置集群中其他资源行为(例如HorizontalPodAutoscaler扩展工作负载)的对象。

资源对象

资源对象通常具有3个组成部分:

  • Resource ObjectMeta:这是有关资源的元数据,例如其名称,类型,api版本,注释和标签。它包含最终用户和系统都可能更新的字段(例如,注释)。
  • ResourceSpec:由用户定义,并描述所需的系统状态。在创建或更新对象时填写。
  • ResourceStatus:这由服务器填充,并报告系统的当前状态。在大多数情况下,用户无需更改此设置。

资源运作

大多数资源提供以下操作:

Create(创建)

创建操作将在存储后端中创建资源。创建资源后,系统将应用所需的状态。

Update(更新)

更新有2种形式:Replace(替换)和补丁

  • Replace(替换):替换资源对象将通过使用提供的规范替换现有规范来更新资源。对于先读后写操作,这是安全的,因为如果在读写之间修改了资源,则会发生乐观锁定失败。注意:ResourceStatus将被系统忽略,并且不会更新。要更新状态,必须调用特定的状态更新操作。

注意:替换资源对象可能不会立即导致更改传播到下游对象。例如,替换a ConfigMap或Secretresource不会导致所有Pod都看到更改,除非Pod重新带外重启。

  • Patch(补丁):补丁会将更改应用于特定字段。每个字段定义了如何合并更改。列表可以被替换或合并。合并列表将不会保留顺序。
    修补程序永远不会导致乐观的锁定失败,并且最后的写入将获胜。 如果在更新之前未读取完整状态,或者不希望出现乐观锁定失败,则建议使用修补程序。在修补复杂类型,数组和映射时,将按字段定义修补程序的应用方式,并且可以替换字段的当前值,也可以将内容合并为当前值。

Read(读)

读分为3种形式:Get、 List 、 Watch

  • Get:Get将按名称检索特定的资源对象。
  • List:List将检索名称空间中特定类型的所有资源对象,并且结果可以限制为与选择器查询匹配的资源。
    列出所有命名空间:与列表类似,但在所有命名空间中检索资源。
  • Watch:Watch将在更新对象时流式传输结果。类似于回调,Watch用于响应资源更改。

Delete(删除)

删除将删除资源。根据特定的资源,子对象可能会也可能不会被服务器垃圾回收。有关详细信息,请参见有关特定资源对象的注释。

Additional Operations(附加操作)

资源可以定义特定于该资源类型的其他操作。

  • Rollback(回滚):将PodTemplate回滚到以前的版本。仅适用于某些资源类型。
  • Read / Write Scale(读取/写入比例):读取或更新给定资源的副本数。仅适用于某些资源类型。
  • Read / Write Status(读取/写入状态):读取或更新资源对象的状态。只能通过这些更新操作来更改状态。

总结

Kubernetes API是系统描述性配置的基础。 Kubectl 命令行工具被用于创建、更新、删除、获取API对象。

Kubernetes 通过API资源存储自己序列化状态(现在存储在etcd)。

Kubernetes 被分成多个组件,各部分通过API相互交互。

Kubernetes 对象一般由3个部分组成(Resource ObjectMeta、ResourceSpec、ResourceStatus)

而操作 Kubernetes 对象 —— 无论是创建、修改,或者删除都要使用 Kubernetes API。

从下章开始,我具体讲解各个 Kubernetes 对象的实体化。

参考资料

API参考

Kubernetes API概念

Kubernetes入门篇(三)——Kubernetes的对象和API相关推荐

  1. 【Kubernetes理论篇】Kubernetes核心组件及资源介绍

    文章目录 一.Kubernetes架构 二.Kubernetes核心组件 三.Kubernetes核心资源 四.拓展 1.Service和Ingress的区别是什么? 2.Replicaset和Dep ...

  2. C++入门篇,类与对象(中篇)

    C++入门篇--类与对象(中篇) 该篇是介绍类与对象的核心篇章,主要介绍类的默认成员函数,操作符重载以及const成员函数等. 1 类的六个默认成员函数 我们知道一个类如果什么都没有,叫做空类. 但是 ...

  3. 《Kubernetes知识篇:Kubernetes污点和容忍度》

    文章目录 一.简介 二.pod对象的排斥等级 三.污点且无容忍度 3.1.污点之排斥等级NoSchedule 3.2.污点之排斥等级NoExecute 3.3.污点之排斥等级PreferNoSched ...

  4. 《Kubernetes故障篇:Kubernetes Node节点DiskPressure异常处理》

    文章目录 一.问题背景 二.问题分析 2.1.查看问题pod日志信息 2.2.查看节点磁盘容量信息 2.3.查看系统日志信息 三.解决方案 3.1.方案一 3.2.方案二 总结:整理不易,如果对你有帮 ...

  5. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息]

    三.使用Azure AD 管理用户信息 在上一章我们采用OpenID的方案和Azure AD交互进行身份验证,本章节我们继续了解如何在Azure AD中创建用户,列出用户信息,修改用户信息和删除用户信 ...

  6. Serverless Kubernetes 入门:对 Kubernetes 做减法

    作者 | 贤维  阿里巴巴高级技术专家 导读:Serverless Kubernetes 是阿里云容器服务团队对未来 Kubernetes 演进方向的一种探索,通过对 Kubernetes 做减法,降 ...

  7. Vue学习-基础入门篇(三万字收藏篇)

    目录 前言 一.Vue介绍 1.Vue是什么 2.Vue的特点 二.Vue.js的安装 1.使用Vite创建 三.Vue声明式渲染 四.Data Property 和方法 1.Data Propert ...

  8. 软件测试基础理论(入门篇三)---缺陷管理理论与工具(禅道)

    目录 一.软件的缺陷 二.缺陷管理 2.1 提交缺陷注意事项 2.2 缺陷的跟踪流程 三.项目管理工具之一---禅道 3.1 禅道介绍 3.1.1 基础了解 3.1.2 禅道使用流程 3.1.3测试人 ...

  9. 算法入门篇三 详解桶排序和整理排序知识 堆的相关操作 补充 不完整

    归并排序不使用递归 使用一个变量,使其按照1.2.4.8递增,控制左右两边1个元素.2个元素.4个元素等元素的合并 完全二叉树 完全二叉树 要不全是满的,要不叶子节点出现在最后一层,只要出现了叶子节点 ...

最新文章

  1. Java项目:智能制造生产管理平台(java+SSM+mysql+Maven+Easyui+JSP)
  2. 2020-08-23logloss对数损失函数
  3. javascript操作select下拉列表框的一点小经验
  4. php 第三方DB库NOTORM
  5. linux split 命令 大文件 文件 分块 分割
  6. linux redis 配置详解
  7. python模拟c的struct
  8. 学习PWM的一些总结
  9. 【Linux】一步一步学Linux——虚拟机简介和系统要求(04)
  10. 当session会话结束时,重定向到登录页显示在iframe框内的问题
  11. 机器学习经典算法笔记——KNN
  12. 拼多多api接口php算法,PHP 调用 拼多多 API 模板
  13. js 自学,云知梦知识 点理论
  14. 自动化测试之—Hamcrest匹配器
  15. IT计算机实习:JAVA实习报告范文(三)
  16. 百度地图省市县乡镇街道对应的zoom级别
  17. python3数学建模基础(三)实现斐波那契数列
  18. 织梦标签调用:根据特定需求调用文章的标签代码
  19. authorized_keys 不允许的操作
  20. XlsReadWriteII 版本声明操作要点

热门文章

  1. 全球十年来含金量最高护照阿联酋列榜首,超过111个国家免签
  2. 战队口号霸气押韵8字_霸气押韵的团队口号集锦
  3. 测试代码运行时write to txt格式
  4. msgbox函数和inputbox函数应该注意的几点
  5. 免费打印控件Lodop
  6. JS中常用的事件操作
  7. python 可以根据元素值删除的是_python中删除某个元素的方法解析
  8. 【python】Matplotlib作图常用marker类型、线型和颜色
  9. 关于h5页面手机访问获取用户地理位置的功能——Geolocation位置API
  10. 关于cmd中路径包含空格的解决办法