kubernetes mysql chown操作不允许

Ren*_*ies 4 docker kubernetes

我目前正在尝试使用Kubernetes并在本地运行的ESX infra上安装了一个小型集群.我使用Project Atomic和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"
Run Code Online (Sandbox Code Playgroud)

对于我已经尝试过各种解决方案的卷,我尝试使用持久性卷,无论有没有索赔.我尝试使用主机卷和emptyDir,但是当容器启动时我总是遇到这个错误:

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

我必须做一些愚蠢的事情,但不知道该怎么办?

Ren*_*ies 9

好吧,似乎我可以回答我自己的问题,问题在于用作持久卷的NFS共享.我在导出中将它设置为'squash_all'但是它需要有一个'no_root_squash'以允许root用于在nfs绑定卷上装入docker容器的情况.

  • 不幸的是,使用NFS作为dockerhub映像的故事并不是很好,因为许多映像都试图以这种方式显示,并且不建议使用"no_root_squash",因为这意味着NFS客户端在NFS服务器上以root身份运行操作.不幸的是,我目前还没有很好的方法来避免Dockerhub图像. (3认同)

Luk*_*ski 8

我用其他方法解决了这个问题。我与系统管理员就允许 root 访问 NFS 客户端计算机上导出的 NFS 目录发生了争论。他有充分的安全理由不设置它,原因一原因二 -请阅读no_root_squash部分。

最后我不必请求no_root_squash。这就是我为了让 mysql pod 运行而不影响安全性所做的。

步骤1

执行到运行 mysql 镜像的 pod 容器中。kubectl exec -it -n <namespace> <mysql_pod> -- bash

第2步

获取mysql用户的uid(999)和gid(999)。或者。mysql用户名可以在Dockerfile中指定的第二条指令中找到cat /etc/passwd | tail -nid mysql

步骤3

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

# PerisistentVolume
...
nfs:
    path: /path/to/app/mysql/directory
    server: nfs-server
Run Code Online (Sandbox Code Playgroud)

跑步chown 999:999 -r /path/to/app/mysql/directory

步骤4

最后,一切设置完毕后,部署您的 MySQL Pod(部署、副本集或您正在使用的任何内容)。