• 安装部署
  • controller-manager 启动过程中更新 Helm Repo 时,空指针异常无法启动

问题描述:

ks-controller-manager 启动过程中更新 Helm Repo 时,空指针异常无法启动(invalid memory address or nil pointer dereference)。

涉及版本:

3.x(截止发帖日,问题仍可能存在)

相关日志:
panic: runtime error: invalid memory address or nil pointer dereference
...
kubesphere.io/kubesphere/pkg/simple/client/openpitrix/helmrepoindex.MergeRepoIndex
...
/workspace/pkg/simple/client/openpitrix/helmrepoindex/repo_index.go

问题起因:

由于旧的 Helm Repo 存在脏数据(比如由于网络原因或者 Helm Repo 本身较大,未能解析完,e.g. https://charts.bitnami.com/bitnami/index.yaml),在启动过程中更新 Helm Repo 时引发空指针异常。

相关代码:

解决方案:

1.通过以下命令查看 Contoller Manager 日志:

kubectl -n kubesphere-system logs ks-controller-manager-xxxx | grep 'sync repo'

输出如下:

I0808 [helm_repo_controller.go:109] sync repo end: repo-7nxxxxk, elapsed: 262.880098ms
I0808 [helm_repo_controller.go:107] sync repo: repo-9lxxxx4
I0808 [helm_repo_controller.go:109] sync repo end: repo-9lxxxx4, elapsed: 46.922µs
I0808 [helm_repo_controller.go:107] sync repo: repo-mrxxxxp
I0808 [helm_repo_controller.go:109] sync repo end: repo-mrxxxxp, elapsed: 219.371057ms
I0808 [helm_repo_controller.go:107] sync repo: repo-wmxxxx4
I0808 [helm_repo_controller.go:109] sync repo end: repo-wmxxxx4, elapsed: 43.993µs
I0808 [helm_repo_controller.go:107] sync repo: repo-wxxxxx9
I0808 [helm_repo_controller.go:109] sync repo end: repo-wxxxxx9, elapsed: 10.207418415s
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

2.找到耗时最长的 repo,例如上面的 repo-wxxxxx9

3.通过以下命令,备份该 repo 后,删除这个 repo:

kubectl get helmrepos.application.kubesphere.io repo-wxxxxx9 -o yaml >> /tmp/repo.yaml

kubectl delete helmrepos.application.kubesphere.io repo-wxxxxx9

4.观察 Contoller Manager 是否正常启动

备注:

如果删除上面提到的 repo 不能解决,尝试备份后,逐个删除 repo 并观察 Contoller Manager 是否正常启动。