添加现有 PVC 后,Grafana Pod 处于 Init Error 状态
Posted
技术标签:
【中文标题】添加现有 PVC 后,Grafana Pod 处于 Init Error 状态【英文标题】:Grafana Pod is in Init Error state after adding an existing PVC 【发布时间】:2021-08-11 14:56:25 【问题描述】:使用helm charts安装grafana,部署顺利,grafana ui已经启动,需要添加一个存在持久化卷,运行如下cmd:
helm install grafana grafana/grafana -n prometheus --set persistence.enabled=true --set persistence.existingClaim=grafana-pvc
init 容器崩溃,日志如下:
kubectl logs grafana-847b88556f-gjr8b -n prometheus -c init-chown-data
chown: /var/lib/grafana: Operation not permitted
chown: /var/lib/grafana: Operation not permitted
在检查部署 yaml 时发现此部分:
initContainers:
- command:
- chown
- -R
- 472:472
- /var/lib/grafana
image: busybox:1.31.1
imagePullPolicy: IfNotPresent
name: init-chown-data
resources:
securityContext:
runAsNonRoot: false
runAsUser: 0
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/lib/grafana
name: storage
restartPolicy: Always
schedulerName: default-scheduler
securityContext:
fsGroup: 472
runAsGroup: 472
runAsUser: 472
serviceAccount: grafana
serviceAccountName: grafana
为什么操作在运行 runAsUser: 0
时会失败?而且 pvc 有access:ReadWriteMany
,有什么解决方法吗?还是我错过了什么
谢谢!!
【问题讨论】:
底层 PVC/PV 是什么样的?某些提供程序不支持更改挂载根文件夹的所有权。 @coderanger 我已经在 prem 上托管的虚拟机上设置了 k8s,PV 分配在 NFS 服务器上,它是主 k8s 节点本身。 【参考方案1】:实际上,有时您可能希望避免更改存储提供程序设置,或者根本不可能。
就我而言,问题中描述的错误是在部署 kube-prometheus-stack helm chart 时发生的。我无法访问存储提供程序设置,因此我阅读了图表的示例值,我注意到以下部分:
initChownData:
## If false, data ownership will not be reset at startup
## This allows the prometheus-server to be run with an arbitrary user
##
enabled: true
我将 enabled
更改为 false 并且在 helm upgrade ...
pod 成功初始化并且存储按预期工作之后。与更改存储提供商的安全策略相比,这似乎是更安全的解决方案,而且肯定需要更少的努力。
【讨论】:
【参考方案2】:NFS 默认开启root_squash
模式,该模式在功能上禁用作为超级用户的客户端上的 uid 0(将这些请求映射到其他一些 UID/GID,通常为 65534)。你可以在你的挂载选项中禁用它,或者使用 NFS 以外的东西。我推荐后者,NFS 不好。
【讨论】:
是的,将安装选项设置为no_root_squash
有效。谢谢,将计划使用其他一些方法。以上是关于添加现有 PVC 后,Grafana Pod 处于 Init Error 状态的主要内容,如果未能解决你的问题,请参考以下文章
helm install 后 Grafana pod 不断重启
k8s实践17:kubernetes对接nfs存储实现pvc动态按需创建分配绑定pv