kubernetes(k8s)架构及基础知识(三)之Kubernetes API 设计理念

本文详细阐述了Kubernetes API设计原则,介绍了核心API对象如Pod、Deployment和Service的使用实例,包括它们的元数据、规范和状态管理。通过实例演示,展示了如何声明式地创建和管理这些对象以实现高效分布式系统管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值