一、 写作背景
K8S 基础系统搭建完毕后(包括 rook-ceph、dashboard、harbor、prometheus、ingress等),对kubeadm、kubelet
等应用进行了升级,服务重启后发现 Harbor 不能正常启动,排查结果为 pod harbor-database-0 没有正常启动故有此解决方案。
本文以 dashboard 为管理端进行可视化管理,相应命令行操作会提及,但不会太详细。
二、排查过程
经对各 pod 的日志进行查看发现 harbor-database-0
这个 pod 对pvc
上已经存在的数据没有了读写权限
# kubectl logs -n harbor gxsk-harbor-database-0 database
FATAL: data directory "/var/lib/postgresql/data" has group or world access
DETAIL: Permissions should be u=rwx (0700).
三、harbor-database解决方法
网上介绍需要修改 pod
试了一下,直接修改 pod
的配置文件,容易出错,在这里使用修改 Stateful Sets
相关配置的方法修改 pod
。
# kubectl -n harbor edit statefulsets.apps gxsk-harbor-database
# 大约在230行左右,修改 initContainers 的参数如下,其中 chmod -R 700 /var/lib/postgresql/data 是新增内容
initContainers:
- args:
- -c
- chown -R 999:999 /var/lib/postgresql/data && chmod -R 700 /var/lib/postgresql/data
修改后保存文件,系统会自动重新部署该服务,如果没有部署,则将其部署个数先改为0,然后再改为1,强制重新部署一下。
# 先改为0,删除已有但启动不成功的 pod
kubectl scale -n harbor statefulset gxsk-harbor-database --replicas=0
# 然后再改为1,添加一个 pod
kubectl scale -n harbor statefulset gxsk-harbor-database --replicas=1
# 静待成功部署
四、
Unable to attach or mount volumes: unmounted volumes=[job-logs], unattached volumes=[job-logs default-token-bpdnw jobservice-config]: timed out waiting for the condition
四、举一反三
其它业务也多为类似权限问题,均在相应位置给指定目录赋权即可解决。
五、 文章引用
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 long@longger.xin