列出与 Helm 部署或图表相关的所有 Kubernetes 资源

问题描述 投票:0回答:8

我使用

helm install
部署了一个 Helm Chart,之后我想查看与此部署相关的 pod/services/cms 是否已启动或失败。有办法看到吗?

使用

kubectl get pods
并 grep 查找名称可以工作,但它不会显示部署此 Helm Chart 时部署的服务和其他资源。

kubernetes kubernetes-helm kubectl
8个回答
21
投票
helm get manifest RELEASE_NAME
helm get all RELEASE_NAME

https://helm.sh/docs/helm/helm_get_manifest/


16
投票

如果您使用Helm3:

要列出 helm 管理的所有资源,请使用带有标签

app.kubernetes.io/managed-by=Helm
:

的标签选择器
$ kubectl get all --all-namespaces -l='app.kubernetes.io/managed-by=Helm'

列出由 helm 管理的所有资源以及特定版本的一部分:(

edit release-name
)

kubectl get all --all-namespaces -l='app.kubernetes.io/managed-by=Helm,app.kubernetes.io/instance=release-name'

更新:

标签键可能会随着时间的推移而变化,请按照官方文档获取最新标签。


7
投票

我找不到任何地方可以给我我想要的东西,所以我用

yq
写了这句话。它以
Kind/name
格式打印出所有对象。如果任何清单只是评论,您可能会得到一些空白。

helm get manifest $RELEASE_NAME | yq -N eval '[.kind, .metadata.name] | join("/")' - | sort

发布在这里:https://gist.github.com/bioshazard/e478d118fba9e26314bffebb88df1e33


3
投票

通过发出:

kubectl get all -n <namespace> | grep ...

您只会查询以下资源:

  • 豆荚
  • 服务
  • 守护进程
  • 部署
  • 复制集
  • 有状态集
  • 工作
  • 定时作业

我鼓励您关注这篇文章以获取更多解释:

使用上面链接中的示例,您可以通过发出以下命令来查询 API 中的所有资源:

kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind -l LABEL=VALUE --ignore-not-found -o name

此命令将查询集群中所有资源类型的 API,然后通过

label
分别查询每种资源。

您可以使用

labels
在 Helm 图表中创建资源,然后通过指定:
-l LABEL=VALUE
来查询 API。


示例

假设您配置了以下 Helm 图表

  • $ helm install awesome-nginx stable/nginx-ingress

此图表已弃用,但仅用于示例目的。

您可以通过 API 查询所有资源:

kubectl api-resources --verbs=list -o name | xargs -n 1 kubectl get --show-kind -l release=awesome-nginx --ignore-not-found -o name

地点:

  • LABEL
    <- release
  • VALUE
    <- awesome-nginx (release name)

之后你应该能够看到:

endpoints/awesome-nginx-nginx-ingress-controller
endpoints/awesome-nginx-nginx-ingress-default-backend
pod/awesome-nginx-nginx-ingress-controller-86b9c7d9c7-wwr8f
pod/awesome-nginx-nginx-ingress-default-backend-6979c95c78-xn9h2
serviceaccount/awesome-nginx-nginx-ingress
serviceaccount/awesome-nginx-nginx-ingress-backend
service/awesome-nginx-nginx-ingress-controller
service/awesome-nginx-nginx-ingress-default-backend
deployment.apps/awesome-nginx-nginx-ingress-controller
deployment.apps/awesome-nginx-nginx-ingress-default-backend
replicaset.apps/awesome-nginx-nginx-ingress-controller-86b9c7d9c7
replicaset.apps/awesome-nginx-nginx-ingress-default-backend-6979c95c78
podmetrics.metrics.k8s.io/awesome-nginx-nginx-ingress-controller-86b9c7d9c7-wwr8f
podmetrics.metrics.k8s.io/awesome-nginx-nginx-ingress-default-backend-6979c95c78-xn9h2
rolebinding.rbac.authorization.k8s.io/awesome-nginx-nginx-ingress
role.rbac.authorization.k8s.io/awesome-nginx-nginx-ingress

您可以通过更改

-o
参数来修改输出。


其他资源:


2
投票

helm status RELEASE_NAME

此命令显示指定版本的状态。状态包括 的:

  • 上次部署时间
  • 发布所在的 k8s 命名空间
  • 发布的状态(可以是:未知、已部署、已卸载、已取代、失败、正在卸载、待安装、待升级或 待回滚)
  • 此版本包含的资源列表,按种类排序
  • 上次测试套件运行的详细信息(如果适用)
  • 图表提供的附加注释

用法:舵状态RELEASE_NAME [flags]

官方文档

另请注意,helm 在其管理的资源上放置了一些已知的标签/注释,请参阅此处。您可以将其与

kubectl get ... -l ...

一起使用

2
投票

有点晚了,但今天遇到了这个问题,这就是我使用的,

helm status $RELEASE_NAME --show-resources

请参阅 Helm 文档


0
投票
kubectl get all -n <namespace>  | grep <helm chart keyword, ex: kibana, elasticsearch>

应列出由 Helm Chart 在特定命名空间中创建的所有资源


0
投票

首先获取您的 Helm Chart 的名称,然后将其替换为 HELMCHARTNAME,如下所示。

deployment_names=$(kubectl -n eaa get deployments -l='helm.toolkit.fluxcd.io/name=HELMCHARTNAME' -o=jsonpath='{.items[*].metadata.name}')
for name in $deployment_names; do
    kubectl -n eaa get pods -l app=$name --no-headers
done

这里我假设图表是通过 FLUX CD 部署的。无论使用哪种 GitOps 工具,您都可以从部署中获取标签,并使用该标签过滤所有部署,然后使用上面显示的脚本获取 Pod 列表

© www.soinside.com 2019 - 2024. All rights reserved.