我在这里看到了太多关于Helm和默认命名空间的问题,所以再发布一个是很尴尬的。我相信我检查了我看到的那些,但没有找到解决我的问题的方法。
Helm版本为3.9.3 Kubernetes:OpenShift 4.9
我只需执行以下操作即可创建ngix图表:
helm create disco
当我在默认项目/命名空间中部署此应用程序时,它工作得很好。然而,当我在非默认工作空间中部署它时,它失败了。
我在非默认工作空间中部署的命令:
oc new-project helm-sandbox
helm install disco . --namespace helm-sandbox
CLI似乎表明部署成功。但吊舱一直有CrashLoopBackoff。
Pod日志显示以下错误消息:
nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:2
2022/09/08 02:00:19 [emerg] 1#1: mkdir() "/var/cache/nginx/client_temp" failed (13: Permission denied)
nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (13: Permission denied)
你知道为什么我失败了吗?
1条答案
按热度按时间yshpjwxd1#
默认情况下,每个Pod在OpenShift上使用
default
服务帐户,该服务帐户附加restricted
SCC。此外,Pod中的UID是从定义Pod的命名空间的
openshift.io/sa.scc.uid-range
注解中定义的范围中随机选择的。因此,
random
UID可能没有写入/var/cache/nginx/
目录的权限。但是,将具有任何uid或非根SCC的UID更改为Pod使用的服务帐户并不是个好主意,除非Pod需要强大的权限才能工作。
如果希望缓存目录是临时目录,挂载EmptyDir或临时卷更好。
如果希望持久化,请将持久化卷装载为
/var/cache/nginx
。如果您需要更改UID,请将anyuid或非超级用户SCC赋予服务帐户。但是,将SCC赋予预定义的SCC并不是一件好事。因此,如果您需要使用
restricted
以外的SCC,您应该创建一个服务帐户并使用它启动您的Pod。希望这些都有助于解决这个问题。