GitLab Webservice与Sidekiq无法启动问题求助
解决方案
1. 修复Redis StatefulSet缺失问题
升级前手动删除了gitlab-redis-master StatefulSet,回滚Chart时Helm不会自动重建已删除的资源,这是核心问题之一:
# 检查Redis相关资源状态 kubectl get statefulset,pod,service -n gitlab | grep redis # 用旧版本Chart模板重建Redis StatefulSet helm template gitlab gitlab/gitlab -n gitlab --version 6.11.13 --values gitlab-values.yaml --include-crds=false \ | grep -A 60 -B 5 "kind: StatefulSet" | grep -A 60 -B 5 "gitlab-redis-master" \ | kubectl apply -n gitlab -f -
等待Redis Pod启动并进入Running状态后,再检查连接。
2. 验证Pod间DNS与网络连通性
测试DNS解析
# 测试Redis服务DNS解析 kubectl run -n gitlab --rm -it --image busybox:1.36 dns-test -- nslookup gitlab-redis-master.gitlab.svc # 测试PostgreSQL服务DNS解析 kubectl run -n gitlab --rm -it --image busybox:1.36 dns-test -- nslookup gitlab-postgresql.gitlab.svc
如果解析失败,检查K8s集群CoreDNS状态并重启:
kubectl rollout restart deployment coredns -n kube-system
测试端口连通性
进入卡住的Init容器,直接测试Redis和PostgreSQL端口:
# 替换xxx为实际的sidekiq/webservice Pod名称 kubectl exec -n gitlab -c dependencies gitlab-sidekiq-all-in-1-v2-xxx -- telnet gitlab-redis-master.gitlab.svc 6379 kubectl exec -n gitlab -c dependencies gitlab-sidekiq-all-in-1-v2-xxx -- telnet 10.106.237.84 5432
如果连通失败,检查是否有NetworkPolicy阻止Pod间通信:
kubectl get networkpolicy -n gitlab # 临时删除所有NetworkPolicy测试 kubectl delete networkpolicy -n gitlab --all
3. 清理残留配置与强制重建Pod
清理配置缓存PVC
回滚后可能残留了升级时的配置文件,删除webservice/sidekiq的PVC(注意:如果PVC有重要数据请先备份):
kubectl delete pvc -n gitlab -l app=webservice kubectl delete pvc -n gitlab -l app=sidekiq
强制重新部署GitLab
用--force和--recreate-pods参数触发全量重建:
helm upgrade gitlab gitlab/gitlab -n gitlab --version 6.11.13 --values gitlab-values.yaml --force --recreate-pods
4. 排查SMTP配置卡壳问题
如果卡在Copying smtp_settings.rb into /srv/gitlab/config,检查文件权限与模板渲染:
# 进入Init容器检查模板文件与目标目录权限 kubectl exec -n gitlab -c dependencies gitlab-sidekiq-all-in-1-v2-xxx -- ls -l /var/opt/gitlab/templates/smtp_settings.rb kubectl exec -n gitlab -c dependencies gitlab-sidekiq-all-in-1-v2-xxx -- ls -ld /srv/gitlab/config/
如果权限不足,在gitlab-values.yaml中添加/调整securityContext配置:
global: securityContext: runAsUser: 1000 runAsGroup: 1000 fsGroup: 1000
然后重新执行helm升级。
内容的提问来源于stack exchange,提问作者Farad
相关产品推荐
相关产品推荐

