问题描述:
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 是否正常启动。