我从kubernetes开始,需要迁移一些现有的docker应用。 我们正在使用内部NAS。
当前场景
我有一个以svc-appuser身份运行的docker app,NAS驱动器已导出到svc-appuser的/ nas / data / appname上的docker主机。因此,该应用程序可以在启动期间访问nas文件夹,而不会出现任何问题。 Docker-compose如下所示。
version: '2'
services:
App-server:
image: ln03:9000/App:1.0.0
restart: on-failure
cap_add:
- SYS_ADMIN
- DAC_READ_SEARCH
environment:
SSL_KEYSTORE_PASSWORD: ${ssl_keystore_password}
SSL_KEY_ALIAS: ${ssl_key_alias}
volumes:
- /nas/data/appname:/opt/appdata
现在使用kubernetes ,我读到我们必须在部署应用程序之前创建持久卷声明(pvc),然后在yaml文件中使用此pvc进行应用程序部署。
docker守护程序以svc-dockeradmin用户身份运行。我假设用于构建映像的Dockerfile仍然相同,即
FROM ubuntu:latest
ARG PROXY_HOST
ARG PROXY_PORT
.
.
.
USER svc-appuser
CMD [ "sh", "-c", "/entrypoint.sh; bash"]
我的问题是如何在我的情况下使其正常工作。
直到,除非我将pvc创建为svc-appuser,否则应用程序无法在启动后使用它。我怎么做。
我推荐了Kubernetes-NFS-example,但那里没有任何信息。
PS: NAS共享已安装在svc-appuser的所有主机上
答案 0 :(得分:0)
由于Go存档/ tar软件包对稀疏文件的处理中存在未解决的错误,因此尝试在Docker容器内创建具有非常大的UID的用户可能会导致磁盘耗尽,因为容器层中的/ var / log / faillog用NULL(\ 0)字符填充。一种解决方法是将--no-log-init标志传递给useradd。 Debian / Ubuntu adduser包装器不支持此标志。
更多示例如何manage with defined users inside Dockerfile
RUN useradd -r -u 1001 -g appuser appuser
USER appuser
注意:
USER指令设置运行映像时使用的用户名(或UID)以及可选的用户组(或GID),以及Dockerfile中跟随该映像的所有RUN,CMD和ENTRYPOINT指令。 警告:如果用户没有主要组,则该映像(或后续说明)将与根组一起运行。
请注意,CAP_SYS_ADMIN
赋予了其他特权:
AllowPrivilegeEscalation:控制一个进程是否比其父进程可以获得更多的特权。该布尔值直接控制在容器进程上是否设置了no_new_privs标志。在以下情况下,AllowPrivilegeEscalation始终为true:1)以特权OR运行; 2)具有CAP_SYS_ADMIN。
另一方面,您请阅读有关Configure a Security Context for a Pod or Container和Access control的信息
希望这在其他情况下有所帮助-请将您的文件转换为适当的k8s yaml,以便社区成员能够对您的案例进行更深入的阐述。