使用 Go 程序调用 Kubernetes API
在前面的章节中,我们介绍了快速部署 Kubernetes 和应用程序的方法,接下来在本章节中我们将对 Kubernetes 的 API 进行了解,并且进行调用,这是开发人员最关注的一环之一。
因为不论是 DevOps、基础架构,又或是自愈,都需要与 Kubernetes API 直接/间接接触,因此即使在你不懂 Kubernetes 的情况下,Kubernetes API 的知识点仍然属于必知必会,API 总得会调。
查看 Kubernetes API
kube-apiserver 架构图
(图来自 kubernetes.io)
在 Kubernetes 的架构中,由 kube-apiserver 组件在主节点上提供 Kubernetes API 服务,kube-apiserver 是 Kubernetes 所有控制的前端,对外提供大量的 RESTful API。
最常见的就是 kubelet 命令,实际上也是在调用 kube-apiserver 所提供的的 API。
访问 API 和查看列表
在了解 Kubernetes 的基本架构和提供 API 的方式后,接下来我们需要知道 Kubernetes 到底提供了哪些 API。为了方便调试,首先我们需要在本地运行 kubectl proxy
命令,kube-apiserver 就会在本地的 8001 端口上进行监听,也就是提供了一个 Kubernetes API 服务的 HTTP 代理。
这个时候我们可以访问:
|
|
查看所提供的对应 API‘s:
|
|
访问 api/v1/pods
路径,获取所有 Pods
|
|
访问结果:
{
"kind": "PodList",
"apiVersion": "v1",
"metadata": {
"selfLink": "/api/v1/pods",
"resourceVersion": "614376"
},
"items": [
{
"metadata": {
"name": "awesome-project-76788db95b-7ztwr",
"generateName": "awesome-project-76788db95b-",
"namespace": "default",
"selfLink": "/api/v1/namespaces/default/pods/awesome-project-76788db95b-7ztwr",
"uid": "4fdb6661-edbd-4fc6-bf71-1d2dadb3ffc1",
"resourceVersion": "608545",
"creationTimestamp": "2020-05-03T02:29:32Z",
"labels": {
"app": "awesome-project",
"pod-template-hash": "76788db95b"
},
...
]
},
]
更多的 API 列表和介绍可查看官方文档。
Go 程序调用 Kubernetes API
接下来进入在本章的重点,也就是在程序中调用 Kubernetes API,Kubernetes 官方提供了 Go 语言的 Client SDK,也就是kubernetes/client-go,我们借助上一章节的 Go 程序,对其进行改造。
Demo
首先写入如下方法:
|
|
编写获取 K8S Pod 列表的方法:
|
|
修改 main 方法中的路由:
|
|
在确定程序正常后,我们重新编译并打标签:
$ docker build -t zshipu/awesome-project:v0.0.2 .
$ docker login
$ docker push zshipu/awesome-project:v0.0.2
部署并验证
修改 go-deployment.yaml 文件:
containers:
- name: awesome-project
image: zshipu/awesome-project:v0.0.2
将其应用到 Kubernetes:
$ kubectl apply -f go-deployment.yaml
deployment.extensions/awesome-project configured
访问刚刚所编写的接口,如下:
$ curl http://website-ingress.local/k8s/pods
[{"metadata":{"name":"awesome-project-64979bcbd9-rm957","generateName":"awesome-project-64979bcbd9-","namespace":"default","selfLink":"/api/v1/namespaces/default/pods/awesome-project-64979bcbd9-rm957","uid":"b0a83787-c547-4d74-9bc4-c930b2188e84","resourceVersion":"...
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/go/posts/kubernetes/2020-05-10-api/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com