Kor

Kor - Kubernetes 孤立资源查找器

Kor 是一个发现未使用的 Kubernetes 资源的工具

Posted by Ksd on December 19, 2023

Kor 是一个发现未使用的 Kubernetes 资源的工具。目前,Kor 可以识别并列出未使用的:

  • ConfigMaps
  • Secrets
  • Services
  • ServiceAccounts
  • Deployments
  • StatefulSets
  • Roles
  • HPAs
  • PVCs
  • Ingresses
  • PDBs
  • CRDs
  • PVs
  • Pods
  • Jobs

安装

二进制安装

支持从 release 页面下载二进制文件

Docker

支持从 docker 运行

docker run --rm -i yonahdissen/kor

docker run --rm -i -v "/path/to/.kube/config:/root/.kube/config" yonahdissen/kor all

Helm

在集群中作为 cronjob 运行(带有发送 slack 更新的选项)

helm upgrade -i kor \
    --namespace kor \
    --create-namespace \
    --set cronJob.enabled=true
    ./charts/kor

在集群中作为部署运行,公开 prometheus 指标

helm upgrade -i kor \
    --namespace kor \
    --create-namespace \
    ./charts/kor

用法

Kor 提供了各种子命令来识别和列出未使用的资源。可用的命令有:

  • all- 获取指定命名空间或所有命名空间的所有未使用资源。
  • configmap- 获取指定命名空间或所有命名空间未使用的 ConfigMap。
  • secret- 获取指定命名空间或所有命名空间的未使用的 Secret。
  • services- 获取指定命名空间或所有命名空间的未使用服务。
  • serviceaccount- 获取指定命名空间或所有命名空间的未使用的 ServiceAccount。
  • deployments- 获取指定命名空间或所有命名空间的未使用部署。
  • statefulsets- 获取指定命名空间或所有命名空间未使用的 StatefulSet。
  • role- 获取指定命名空间或所有命名空间的未使用角色。
  • hpa- 获取指定命名空间或所有命名空间的未使用 HPA。
  • pods- 获取指定命名空间或所有命名空间未使用的 Pod。
  • pvc- 获取指定命名空间或所有命名空间的未使用 PVC。
  • pv- 获取集群中未使用的 PV(非命名空间资源)。
  • ingress- 获取指定命名空间或所有命名空间的未使用 Ingress。
  • pdb- 获取指定命名空间或所有命名空间的未使用 PDB。
  • crd- 获取集群中未使用的 CRD(非命名空间资源)。
  • jobs- 获取指定命名空间或所有命名空间的未使用作业。
  • exporter- 导出 prometheus 指标。

支持的 Flags

      --delete                      Delete unused resources
  -l, --exclude-labels string       Selector to filter out, Example: --exclude-labels key1=value1,key2=value2.
  -e, --exclude-namespaces string   Namespaces to be excluded, splited by comma. Example: --exclude-namespace ns1,ns2,ns3. If --include-namespace is set, --exclude-namespaces will be ignored.
  -h, --help                        help for kor
  -n, --include-namespaces string   Namespaces to run on, splited by comma. Example: --include-namespace ns1,ns2,ns3.
  -k, --kubeconfig string           Path to kubeconfig file (optional)
      --newer-than string           The maximum age of the resources to be considered unused. This flag cannot be used together with older-than flag. Example: --newer-than=1h2m
      --no-interactive              Do not prompt for confirmation when deleting resources. Be careful using this flag!
      --older-than string           The minimum age of the resources to be considered unused. This flag cannot be used together with newer-than flag. Example: --older-than=1h2m
  -o, --output string               Output format (table, json or yaml) (default "table")
      --slack-auth-token string     Slack auth token to send notifications to. --slack-auth-token requires --slack-channel to be set.
      --slack-channel string        Slack channel to send notifications to. --slack-channel requires --slack-auth-token to be set.
      --slack-webhook-url string    Slack webhook URL to send notifications to
  -v, --verbose                     Verbose output (print empty namespaces)

删除未使用的资源

如果您想使用 Kor 以交互方式删除资源,您可以运行:

kor configmap --include-namespaces my-namespace --delete

系统将提示您:

Do you want to delete ConfigMap test-configmap in namespace my-namespace? (Y/N):

不提示删除 (⚠️ 谨慎使用):

kor configmap --include-namespaces my-namespace --delete --no-interactive