使用 Kubernetes API

简介: 使用 Kubernetes API


Kubernetes 公开了一个强大的 API,可让您控制集群的各个方面。

大多数时候,它隐藏在 kubectl 后面,但没有人会阻止您直接使用它。

在本文中,您将学习如何使用 curl 或者您喜欢的编程语言向 Kubernetes API 发出请求。

但首先,让我们回顾一下 Kubernetes API 的工作原理。

当您键入命令时,kubectl:

  • 客户端校验请求。
  • 在文件上生成 YAML(例如kubectl run)。
  • 构造运行时对象。

Client side validation in kubectl

此时,kubectl 还没有向集群发出任何请求。

下一步,它查询当前的 API 服务器并发现所有可用的 API 端点。

OpenAPI descovery in kubectl

最后,kubectl 使用运行时对象和端点来协商正确的 API 调用。

如果您的资源是 Pod,kubectl 会读取 apiVersionkind 字段并确保它们在集群中可用和受支持。

然后它发送请求。

API negotiation in kubectl

理解在 Kubernetes 中 API 是分组的这很重要的。

为了进一步隔离多个版本,资源被版本化。

Kubernetes API groups, versions and resources

现在您已经掌握了基础知识,让我们来看一个示例。

您可以使用 kubectl proxy 启动到 API 服务器的本地隧道。

但是如何检索所有 deployments 呢?

Proxy to kubernetes API

Deployments 属于 apps 组并且有一个 v1 版本。

您可以列出它们:

curl localhost:8001/apis/apps/v1/namespaces/{namespace}/deployments

List deployments

列出所有正在运行的 pod 怎么样?

Pod 属于 ""(空)组并且有一个 v1 版本。

您可以列出它们:

curl localhost:8001/api/v1/namespaces/{namespace}/pods

List pods

group 为空看起来有点奇怪——还有更多例外吗?

好吧,现实是有一种更简单的方法来构建 URL。

我通常使用 Kubernetes API 参考文档,因为路径都整齐地列出了。

让我们看另一个示例,但这次是在 API 参考的帮助下。

如果你想收到 pod 更改的通知怎么办?

在 API 中称为 watch,命令为:

GET /api/v1/watch/namespaces/{namespace}/pods/{name}

Watch pods

太好了,但这一切有什么意义呢?

直接访问 API 允许您构建脚本来自动执行任务。

或者您可以构建自己的 kubernetes 扩展。

我来给你展示。

这是一个约 130 行 Javascript 的小型 kubernetes 仪表板。


它调用了 2 个 API:

  1. 列出所有 pod
  2. watch pod 的变化

其余代码用于对节点进行分组和显示。

在 Kubernetes 中,将列出和更新资源结合起来非常普遍,以至于它成为一种称为 shared informer 的模式。

Javascript/Typescript API 有一个很好的 shared informer 的例子.

但它只是 2 个 GET 请求(和一些缓存)的奇特名称。

API 不止于读取资源。

您还可以创建新资源并修改现有资源。

例如,您可以修改部署的副本:

PATCH /apis/apps/v1/namespaces/{namespace}/deployments/{name}

使用 curl 修补 Kubernetes 部署

为了进行实验,我建造了一些非常规的东西。

xlskubectl 是我尝试使用 Excel/Google 表格控制 kubernetes 集群。

Sheetops — 使用电子表格控制 Kubernetes

该代码与上述 Javascript 代码非常相似:

  1. 它使用 shared informer
  2. 它轮询 google sheets 的更新
  3. 它将所有内容呈现为单元格

这个示例是一个好主意吗? 可能并不是。

希望它能帮助您实现直接使用 Kubernetes API 的潜力。

这些代码都不是用 Go 编写的——您可以使用任何编程语言去调用 Kubernetes API。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
6月前
|
Prometheus Kubernetes Cloud Native
云原生周刊:Argo Rollouts 支持 Kubernetes Gateway API 1.0 | 2024.7.1
探索开源世界:Kubetools的推荐系统[Krs](https://github.com/kubetoolsca/krs)助力K8s优化,追踪K8s组件清单,指引IAC集成。阅读建议: Prometheus与Thanos的进化故事,Adidas容器平台管理经验,K8s请求实现详解。关注云原生:Argo Rollouts支持Gateway API 1.0,Kubewarden v1.14强化策略与镜像安全。
|
3月前
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
265 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
5月前
|
Kubernetes Serverless API
Kubernetes 的架构问题之利用不可变性来最小化对API Server的访问如何解决
Kubernetes 的架构问题之利用不可变性来最小化对API Server的访问如何解决
93 7
|
5月前
|
资源调度 Kubernetes API
在K8S中,能否实现不通过api-Server创建Pod?
在K8S中,能否实现不通过api-Server创建Pod?
|
5月前
|
Kubernetes 负载均衡 API
在K8S中,api-service 和 kube-schedule 高可用原理是什么?
在K8S中,api-service 和 kube-schedule 高可用原理是什么?
|
5月前
|
Kubernetes 监控 API
在k8S中,各模块如何与API Server进行通信的?
在k8S中,各模块如何与API Server进行通信的?
|
5月前
|
存储 Kubernetes 负载均衡
在K8S中,api-server究竟是如何实现高可用?
在K8S中,api-server究竟是如何实现高可用?
|
6月前
|
Kubernetes Java 应用服务中间件
Kubernetes 上搭建一个 Nginx 的 Pod,并确保传入的 API 请求被均匀地分发到两个 Java 业务 Pod 上
Kubernetes 上搭建一个 Nginx 的 Pod,并确保传入的 API 请求被均匀地分发到两个 Java 业务 Pod 上
100 0
|
JSON Kubernetes API
k8s技术预研14--kubernetes API详解
1、kubernetes API概述 Kubernetes API是集群系统中的重要组成部分,Kubernetes中各种资源(对象)的数据通过该API接口被提交到后端的持久化存储(etcd)中,Kubernetes集群中的各部件之间通过该API接口实现解耦合,同时Kubernetes集群中一个重要且便捷的管理工具kubectl也是通过访问该API接口实现其强大的管理功能的。
4097 0
|
20天前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
67 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动