具有 hostPath 的 OpenShift 单节点 PersistentVolume 需要特权 pods,如何设置为默认值?

OpenShift single node PersistentVolume with hostPath requires privileged pods, how to set as default?

我是 OpenShift 的新手,使用 CRC(代码就绪容器)有一段时间了,现在决定使用 https://cloud.redhat.com/blog/deploy-openshift-at-the-edge-with-single-node-openshift and https://console.redhat.com/openshift/assisted-installer/clusters/ 中的辅助安装方法在裸机上安装单服务器 OpenShift .这很有效,我有一个功能单一的服务器。

作为测试环境中的单个服务器(没有可用的 NFS),我 need/want 使用 hostPath(本地主机存储)创建 PersistentVolumes - 这些在 CRC 中完美运行。然而,在完全安装时,我 运行 在将 PVC 安装到 pods 时遇到问题,因为 pods 没有 运行ning 特权。我编辑了部署配置并添加了以下行(在容器哈希中)

        - resources: {}
          ...
          securityContext:
            privileged: true

...但是仍然有错误,因为受限制的 SCC 有 'allowPrivilegedContainer: false'。我做了一个可怕的修改,将其更改为 true,因此将上面的行添加到部署 yaml 中是可行的。然而,必须有一种更简单的方法,因为 none 这些 hacks 似乎存在于 CRC 中。我检查了 CRC pods 运行 限制,受限制的 SCC 已将特权设置为 false,并且持久卷也在使用 hostPath。我也不必像上面那样在 CRC 中编辑部署 yaml - 它就可以工作 (tm)。

这里的指南显示容器必须 运行 特权,但是 CRC 中的容器是 运行ning 限制并且 SCC 仍然有 'allowPrivilegedContainer: false'。 https://docs.openshift.com/container-platform/4.8/storage/persistent_storage/persistent-storage-hostpath.html

下面的示例应用程序创建(来自 RedHat DO280 课程)无需在 CRC 中进行任何特权按摩或部署配置,但在真实的 OS 服务器上需要进行上述按摩。由于我的服务器纯粹是为了测试,我想在不进行上面的 hackjob 和部署更改的情况下使其更容易。

oc new-app --name mysql --docker-image registry.access.redhat.com/rhscl/mysql-57-rhel7:5.7
oc create secret generic mysql --from-literal password=r3dh4t123
oc set env deployment mysql --prefix MYSQL_ROOT_ --from secret/mysql
oc set volumes deployment/mysql --name mysql-storage --add --type pvc --claim-size 2Gi --claim-mode rwo --mount-path /var/lib/mysql/data
oc get pods -l deployment=mysql
oc get pvc

感谢任何帮助。

编辑:我现在通过启用 nfs-server 并向 /etc/exports 添加条目来克服这个问题。但是我仍然有兴趣了解 CRC 在使用 hostPath

时如何处理上述问题

对此的简短回答是:不要使用 hostPath。

您正在使用 hostPath 来利用底层主机卷上可用的任意磁盘 space。 hostPath 也可用于 read/write 任何 底层主机卷上的目录路径——如您所想,应谨慎使用。

看看这个作为替代方案 -- https://docs.openshift.com/container-platform/4.8/storage/persistent_storage/persistent-storage-local.html