使用 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。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
7月前
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
480 17
|
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强化策略与镜像安全。
175 0
|
12月前
|
Kubernetes 安全 Cloud Native
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。
993 0
云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问
|
Kubernetes Serverless API
Kubernetes 的架构问题之利用不可变性来最小化对API Server的访问如何解决
Kubernetes 的架构问题之利用不可变性来最小化对API Server的访问如何解决
152 8
|
资源调度 Kubernetes API
在K8S中,能否实现不通过api-Server创建Pod?
在K8S中,能否实现不通过api-Server创建Pod?
|
Kubernetes 负载均衡 API
在K8S中,api-service 和 kube-schedule 高可用原理是什么?
在K8S中,api-service 和 kube-schedule 高可用原理是什么?
|
Kubernetes 监控 API
在k8S中,各模块如何与API Server进行通信的?
在k8S中,各模块如何与API Server进行通信的?
|
存储 Kubernetes 负载均衡
在K8S中,api-server究竟是如何实现高可用?
在K8S中,api-server究竟是如何实现高可用?
|
JSON Kubernetes API
k8s技术预研14--kubernetes API详解
1、kubernetes API概述 Kubernetes API是集群系统中的重要组成部分,Kubernetes中各种资源(对象)的数据通过该API接口被提交到后端的持久化存储(etcd)中,Kubernetes集群中的各部件之间通过该API接口实现解耦合,同时Kubernetes集群中一个重要且便捷的管理工具kubectl也是通过访问该API接口实现其强大的管理功能的。
4289 0
|
1月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。

热门文章

最新文章