如何使用Kubernetes API获取Kubernetes集群信息转储(dump)

3

Kubernetes提供了一个API来获取集群信息转储吗?我查看了它的API文档documentation,但没有找到能够实现这一功能的API。

现在该怎么办:

kubectl cluster-info dump --output-directory="dumpdir"

我想要的:

使用client-go/kubernetes API库,通过API调用从golang应用程序获取此dump。这可能吗?

我知道的:

每个资源都有单独的API,可以提供集群信息转储提供的所有信息,但我希望只使用一个API调用来完成。

例如,这段Golang代码将给我一个节点列表:

coreClient := kubernetesapi.CoreV1()
nodeList, err := coreClient.Nodes().List(metav1.ListOptions{})

是否有一个API可以返回类似于kubectl cluster-info dump的结果,以便我可以以编程方式获取所有详细信息?

3个回答

2
您可以通过在kubectl cluster-info命令中使用详细选项列出输出来捕获API调用: kubectl cluster-info dump -v 9 例如:

curl -k -v -XGET -H "Accept: application/json, /" -H "User-Agent: kubectl/v1.12.1 (linux/amd64) kubernetes/4ed3216" 'https://10.142.0.3:6443/api/v1/namespaces/kube-system/events'

获取集群授权的令牌: MY_TOKEN="$(kubectl get secret <default-secret> -o jsonpath='{$.data.token}' | base64 -d)" 现在您可以为目标资源进行API调用。
curl -k -v -H "Authorization : Bearer $MY_TOKEN" https://10.142.0.3:6443/api/v1/namespaces/kube-system/events

请记住,您可能需要角色绑定才能为您的服务账户授予查看权限:

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: default-view
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: view
subjects:
  - kind: ServiceAccount
    name: default
    namespace: default

1
我想我的问题没有表达清楚。实际上,我需要使用Kubernetes API执行kubectl cluster-info dump操作。也就是说,我需要通过从我的程序调用API来获取整个集群的dump,而不是手动运行命令“kubectl cluster-info dump”。 - Bharath
我猜这是不可行的,因为Kubernetes API没有直接的API调用来实现这一点,关于这一点@wilbeibi在他的回答中已经提到了。 - Nick_Kh

0

我需要在特定时间对集群进行快照。我知道可以使用API获取单个资源,例如配置映射,但是否有一个API可以给我所有资源,就像我使用kubectl手动执行cluster-info dump时一样? - Bharath
@Bharath 对于那个使用案例,你可以使用ark。 - Ijaz Ahmad
是的,Heptio的Ark可以提供集群备份,但这需要进行设计更改,而我们现在并不寻求任何设计更改。此外,我现在需要的信息仅用于手动分析,这可能会发展成为我们的新应用程序。因此,我正在考虑一个程序级别的解决方案,特别是使用Kubernetes库。 - Bharath

0

1
谢谢确认。我现在已经编写了一个自定义类,它与此类似。这肯定会帮助我将其改进为更清晰的解决方案。 - Bharath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接