Kubernetes ApiVersion用于资源类型

时间:2018-11-02 21:23:50

标签: kubernetes

如何使用kubectl为某个ApiVersion获得一个resource kind

示例:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1  ( complete string )

我尝试了kubectl api-resourceskubectl api-versions,但是找不到一些完整的映射。是否有任何方法可以串联这些命令的输出并获取每种资源类型的完整字符串?也许还有其他命令。

2 个答案:

答案 0 :(得分:2)

我不知道有一个kubectl命令可以提供集群中所有资源(内置和自定义,已使用或未使用)及其API组和组之间的映射版本(apiVersion: $GROUP_NAME/$VERSION)。

如果可以选择使用curljq,则下面的单行代码将提供这种映射:

for v in `curl -ks https://<k8s-master>:<port>/apis | jq -r .groups[].versions[].groupVersion`; do for r in `curl -ks "https://<k8s-master>:<port>/apis/${v}" | jq -r '.resources[]?.kind' | sort -u`; do echo ${r} - ${v}; done ; done

很少有解释:

  • 用Kubernetes API的名称/ IP和端口替换<k8s-master>:<port> 服务器主机。
  • 将其分成多行以提高可读性。
  • -k命令中的
  • curl是信任任何证书。
  • -s命令中的
  • curl用于静默输出。例如。没有进度输出。
  • -r命令中的
  • jq用于原始输出。例如。不会为字符串输出双引号。
  • 更改echo ${r} - ${v}以便根据需要输出映射。

请注意,以上内容无法处理api/v1。这是一个旧版API组,其资源现在也位于命名组下-请参见https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-groups

Kubernetes集群的部分输出:

APIService - apiregistration.k8s.io/v1
APIService - apiregistration.k8s.io/v1beta1
DaemonSet - extensions/v1beta1
Deployment - extensions/v1beta1
DeploymentRollback - extensions/v1beta1
...
Role - rbac.authorization.k8s.io/v1
RoleBinding - rbac.authorization.k8s.io/v1
ClusterRole - rbac.authorization.k8s.io/v1beta1
ClusterRoleBinding - rbac.authorization.k8s.io/v1beta1
Role - rbac.authorization.k8s.io/v1beta1
RoleBinding - rbac.authorization.k8s.io/v1beta1
...

答案 1 :(得分:0)

您可以尝试

    while (ss >> token)
        temp_vec.push_back(token);