Kubernetes中使用Helm部署Artifactory时容器初始化失败
看起来你的Artifactory部署卡在初始化阶段,核心问题集中在PostgreSQL初始化失败、NFS存储卷权限不匹配,进而连锁导致Artifactory初始化容器无法完成、Nginx探针超时。下面是一步步的排查和解决方法:
1. 先搞定PostgreSQL的Init CrashLoopBackOff
从事件日志里能看到Back-off restarting failed container,对应的是PostgreSQL的init-chmod-data初始化容器——这个容器的作用是给数据目录设置正确的权限,失败大概率是NFS挂载的目录权限和容器运行用户不匹配。
先查看初始化容器的具体报错:
kubectl logs artifactory-oss-postgresql-0 -c init-chmod-data你应该会看到类似"无法修改目录权限"的提示。
解决方法:
因为你用的是managed-nfs-storage,NFS服务器上的目录默认权限可能和PostgreSQL容器的运行用户(Bitnami镜像默认是UID 1001)不匹配:- 登录你的NFS服务器,找到对应PostgreSQL的PV目录(比如事件里的
/persistentvolumes/default-data-artifactory-oss-postgresql-0-pvc-xxx),修改权限:chown -R 1001:1001 /path/to/your/nfs/postgresql/directory chmod -R 775 /path/to/your/nfs/postgresql/directory - 或者在Helm的
values.yaml里配置PostgreSQL的安全上下文,强制容器用匹配的UID/GID运行:
然后升级你的Helm Release:postgresql: securityContext: enabled: true runAsUser: 1001 fsGroup: 1001helm upgrade artifactory-oss jfrog/artifactory-oss -f values.yaml
- 登录你的NFS服务器,找到对应PostgreSQL的PV目录(比如事件里的
2. 处理存储卷删除失败的权限问题
事件里的VolumeFailedDelete报错(remove ... join.key: permission denied),是因为Artifactory容器创建的文件权限为特定用户,NFS服务器删除时没有权限。
- 解决步骤:
- 先删除对应的Pod,避免数据冲突:
kubectl delete pod artifactory-oss-artifactory-0 artifactory-oss-postgresql-0 - 登录NFS服务器,手动删除报错的PV目录:
rm -rf /persistentvolumes/default-artifactory-volume-artifactory-oss-artifactory-0-pvc-xxx - 后续部署时,给Artifactory配置安全上下文,让容器运行用户拥有NFS目录的权限:
这样容器创建的文件权限会和NFS目录匹配,后续删除PV时就不会再出现权限问题。artifactory: securityContext: enabled: true runAsUser: 1035 # Artifactory默认运行用户的UID是1035 fsGroup: 1035
- 先删除对应的Pod,避免数据冲突:
3. 让Artifactory初始化容器继续执行
Artifactory的wait-for-db初始化容器一直在等待PostgreSQL就绪,只要PostgreSQL正常启动,这个容器会自动完成,Artifactory主容器就能启动了。
- 验证PostgreSQL是否就绪:
如果返回kubectl exec artifactory-oss-postgresql-0 -- psql -U postgres -c "SELECT 1"1,说明PostgreSQL运行正常,Artifactory的初始化流程会很快走完。
4. 修复Nginx的探针超时问题
Nginx的Readiness/Liveness探针失败是因为Artifactory主服务还没起来,等Artifactory启动完成后,探针会自动恢复。如果后续还是有超时问题,可以调整探针的参数:
在values.yaml里修改:
artifactory: nginx: readinessProbe: timeoutSeconds: 30 periodSeconds: 10 livenessProbe: timeoutSeconds: 30 periodSeconds: 10
内容的提问来源于stack exchange,提问作者Sridhar P

