我们如何使用kubernetes api进行kubernetes集群信息转储

时间:2018-10-24 07:27:13

标签: go kubernetes

kubernetes是否在其客户端库中提供API以获取集群信息转储。 我遍历了它的API documentation,可以找到实际上可以做到这一点的任何api。

我现在要做什么: kubectl集群信息转储--output-directory =“ dumpdir”

我想要什么: 使用client-go / kubernetes api库,进行API调用以从golang应用程序获取此转储。有可能吗?

我所知道的: 每个资源都有单独的API,可以提供cluster-info转储提供的所有信息,但是我想通过一个API调用。

例如: golang代码:

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

这将给我一个节点列表。

是否有一个API,该API返回“ kubectl cluster-info dump”将给出的内容。这样我就可以以编程方式获取所有详细信息。

3 个答案:

答案 0 :(得分:0)

备份和还原群集资源:

https://medium.com/@marekbartik/kubernetes-in-production-snapshotting-cluster-state-41bd767ef14

使用方舟进行群集备份和保留:

ark schedule create <SCHEDULE NAME> --schedule "0 7 * * *"

ark restore create --from-backup <BACKUP-NAME>

答案 1 :(得分:0)

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

kubectl cluster-info dump -v 9

例如:

  

curl -k -v -XGET -H“接受:application / json, / ” -H“用户代理:   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

答案 2 :(得分:0)

恐怕这不是这样做的API。 kubectl cluster-info dump也基于k8s sdk实现。

但是您可以参考实现并根据自己的需要进行定制。

https://github.com/kubernetes/kubernetes/blob/6fc89ae92d9d09bd70e74d32c6ba6b3d28e7bec7/pkg/kubectl/cmd/clusterinfo/clusterinfo_dump.go