Docker 不允许kubernetes mysql chown操作

Docker 不允许kubernetes mysql chown操作,docker,kubernetes,Docker,Kubernetes,我目前正在试用Kubernetes,并在本地运行的ESX infra上安装了一个小型集群。我使用ProjectAtomic和Fedora安装了两个从节点和一个主节点。集群安装良好,似乎正在运行。然而,我首先想要启动并运行一个MySQL容器,但无论我做什么尝试,我都无法让它运行 apiVersion: v1 kind: Pod metadata: name: mysql labels: name: mysql spec: containers: - resourc

我目前正在试用Kubernetes,并在本地运行的ESX infra上安装了一个小型集群。我使用ProjectAtomic和Fedora安装了两个从节点和一个主节点。集群安装良好,似乎正在运行。然而,我首先想要启动并运行一个MySQL容器,但无论我做什么尝试,我都无法让它运行

apiVersion: v1
kind: Pod
metadata:
  name: mysql
  labels: 
    name: mysql
spec: 
  containers: 
    - resources:
       limits :
          cpu: 0.5
      image: mysql:5.6
      name: mysql
      env:
        - name: MYSQL_ROOT_PASSWORD
          value: myPassw0rd
      ports: 
        - containerPort: 3306
          name: mysql
      volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
  volumes:
    - name: mysql-persistent-storage
      nfs:
        server: 10.0.0.2
        path: "/export/mysql"
对于卷,我已经尝试了各种解决方案,我尝试了使用带声明和不带声明的持久卷。我尝试使用host volume和emptyDir,但在容器启动时总是出现以下错误:

chown:更改“/var/lib/mysql/”的所有权:不允许操作


我一定在做一些愚蠢的事情,但不知道在这里该做什么?

好吧,我似乎可以回答我自己的问题,问题在于用作持久卷的NFS共享。我在导出中将其设置为“全部挤压”,但它需要有一个“无根挤压”,以便在docker容器在nfs绑定卷上运行时允许根操作。

我用另一种方法解决了这个问题。我与系统管理员就允许根用户访问NFS客户端计算机上导出的NFS目录发生了争执。他有充分的安全理由不将其设置为这样,并阅读-readno\u root\u squash部分

最后,我不必要求不要根南瓜。这就是我在不影响安全性的情况下使mysql pod运行所做的

第一步 执行到运行mysql映像的pod容器中<代码>kubectl exec-it-n--bash

步骤2 获取mysql用户的uid(999)和gid(999)
cat/etc/passwd | tail-n
idmysql
mysql用户名可在中指定的第二条指令中找到

步骤3 更改对保存docker容器的/var/lib/mysql内容的目录的权限。这很可能是在您的PersistentVolume中指定的目录。此命令在主机上执行,而不是在Pod中执行

运行
chown 999:999-r/path/to/app/mysql/directory

步骤4
最后,在一切就绪后,部署您的MySQL Pod(部署、副本集或您正在使用的任何内容)。

不幸的是,将NFS用于dockerhub映像的故事并不精彩,因为许多映像都试图以这种方式运行,并且不推荐使用
no_root_squash
,因为这意味着NFS客户端在NFS服务器上以root用户身份运行操作。更不幸的是,我目前没有一个很好的方法来避免Dockerhub图像出现这种情况。从docker compose设置的角度来看,这是什么样子的?谢谢Renze de Vries!这有帮助!NFS客户端上没有根挤压是危险的读取。您最好对此标志(root访问)有充分的理由,否则sys admin和security expert会活活吃掉您:由于Mac上的卷存在Docker性能问题,PI在尝试使用
nfs
挂载进行Mac上的本地Docker开发时遇到此问题。似乎围绕
no_root_squash
的警告是针对公共服务器而不是开发机器的,对吗?我在Mac上的Minikube上运行Cassandra Docker image时遇到了类似的问题。周999:999。。。拯救了这一天!感谢Lukasz Dynowski最近我部署了更多的服务,mongodb、rabbitmq等。在重新创建我的pod(将我的pod扩展到0,然后恢复到1)后,发生了相同的错误。不知何故,在重新创建pods之后,某些文件的权限将丢失。我必须运行'chown 999:999-r/path/to/app/service/directory',问题得到了解决。因此,此解决方案不仅适用于msql。干杯
# PerisistentVolume
...
nfs:
    path: /path/to/app/mysql/directory
    server: nfs-server