我使用
helm install
部署了一个 Helm Chart,之后我想查看与此部署相关的 pod/services/cms 是否已启动或失败。有办法看到吗?
使用
kubectl get pods
并 grep 查找名称可以工作,但它不会显示部署此 Helm Chart 时部署的服务和其他资源。
helm get manifest RELEASE_NAME
helm get all RELEASE_NAME
如果您使用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'
更新:
标签键可能会随着时间的推移而变化,请按照官方文档获取最新标签。
我找不到任何地方可以给我我想要的东西,所以我用
yq
写了这句话。它以 Kind/name
格式打印出所有对象。如果任何清单只是评论,您可能会得到一些空白。
helm get manifest $RELEASE_NAME | yq -N eval '[.kind, .metadata.name] | join("/")' - | sort
发布在这里:https://gist.github.com/bioshazard/e478d118fba9e26314bffebb88df1e33
通过发出:
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
<- releaseVALUE
<- 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
参数来修改输出。
其他资源:
$ helm get manifest RELEASE-NAME
kubectl get all -n <namespace> | grep <helm chart keyword, ex: kibana, elasticsearch>
应列出由 Helm Chart 在特定命名空间中创建的所有资源
首先获取您的 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 列表