一、Kubernetes API 设计原则

对于云计算系统,系统 API 实际上处于系统设计的统领地位,K8s 集群系统每支持一项新功能,引入一项 新技术,一定会新引入对应的 API 对象,支持对该功能的管理操作。

K8s 系统 API 的设计有以下几条原则:

  • 所有 API 应该是声明式的。
  • API 对象是彼此互补而且可组合的。
  • 高层 API 以操作意图为基础设计。
  • 低层 API 根据高层 API 的控制需要设计。
  • 尽量避免简单封装,不要有在外部 API 无法显式知道的内部隐藏的机制。
  • API 操作复杂度与对象数量成正比。
  • API 对象状态不能依赖于网络连接状态。
  • 尽量避免让操作机制依赖于全局状态,因为在分布式系统中要保证全局状态的同步是非常困难的。

二、Kubernetes 的核心技术概念和 API 对象

API 对象是 K8s 集群中的管理操作单元。K8s 集群系统每支持一项新功能,引入一项新技术,一定会
新引入对应的 API 对象,支持对该功能的管理操作。
每个 API 对象都有以下3大类属性

  1. 元数据 metadata:元数据是用来标识 API 对象的,每个对象都至少有3个元数据:namespace,name 和 uid;除此以外还有各种各样的标签 labels 用来标识和匹配不同的对象,例如用户可以用标签 env来标识区分不同的服务部署环境,分别用 env=devenv=testing、env=production 来标识开发、测试、生产的不同服务。
  2. 规范 spec:规范描述了用户期望 K8s 集群中的分布式系统达到的理想状态(Desired State),例如用 户可以通过复制控制器 Replication Controller 设置期望的 Pod 副本数为3。
  3. 状态 status:status 描述了系统实际当前达到的状态(Status),例如系统当前实际的 Pod 副本数为 2;那么复制控制器当前的程序逻辑就是自动启动新的 Pod,争取达到副本数为

三、Kubernetes 常用 API 对象使用举例

Pod

请添加图片描述
Pod 是 Kubernetes 中的最小运行单位,可以理解其是对容器的一种封装
解析:
在 Kubernetes 中运行任务,都需要使用 yaml 文件
**apiVersion:**定义了所使用的 kubernetes 中 api-server 的哪个版本
Kind:定义了任务类型
Metadata:定义了一些 pod 的元数据,如名称、命名空间、label 标签
Spec:定义了具体需要运行的容器信息,如使用哪个镜像、暴露的端口等
只需要在 kubernetes 的 master 节点上使用 kubectl apply –f <yaml文件名称>
可运行Pod
此示例是简版,实际 Pod 的 yaml 中还提供了很多配置项,具体可以参考官方文
档 https://kubernetes.io

Deployment

请添加图片描述
Deployment 是目前推荐的服务部署方式,可以理解其是 Pod 的循环控制器,他能提供更
多的对于 Pod 的管理方式,如设置 Pod 的副本数量,升级模式、网络模式等,并且它会持
续的监听 Pod 的运行状态和副本数量,它将保证 Pod 实际运行的数量和期望数量一致。
解析:
在 Kubernetes 中运行任务,都需要使用 yaml 文件
apiVersion:定义了所使用的 kubernetes 中 api-server 的哪个版本,
Kind:定义了任务类型
Metadata:定义了一些 Pod 的元数据,如名称、命名空间、label 标签
一级Spec:定义了具体需要管理关联的 Pod 的相关配置参数,如副本数、升级模式

二级 Spec:定义了具体需要运行的容器信息,如使用哪个镜像、暴露的端口等
只需要在 kubernetes 的 master 节点上使用 kubectl apply –f <yaml文件名称> 即
可运行此 Deployment
此示例是简版,实际 Deployment 的 yaml 中还提供了很多配置项,具体可以参考官方文档 https://kubernetes.io

Service

请添加图片描述
Service 任务是 kubernetes 用来暴露 Pod 网络访问的方式,它具 备对所暴露的服务的自动服务发现功能,即它所暴露的服务如果进 行扩展或收缩,它都将自动在网络转发列表中增加或异除相关服务解析:在 Kubernetes 中运行任务,都需要使用 yaml 文件
Spec:定义了 Service 相关的配置,如 selector 是定义关联具备
哪个标签的服务;type 定义了暴露类型:
ClusterIP:代表仅内部暴露,但是可以通过增加 externalIPs 来指
定使用节点的 IP 地址,对外部进行暴露。
NodePort: 代表对暴露,选择此模式后会随机选择一个30000以上
的端口,集群中所有的节点加上此端口,都能访问到服务。
只需要在 kubernetes的master 节点上使用 kubectl apply –f
<yaml 文件名称>
即可运行此 Service

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐