kubernetes mysql chown操作不允许

时间:2016-01-19 13:51:04

标签: 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"

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

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

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

我用其他方法解决了这个问题。对于系统管理员,我有一个关于允许root访问NFS客户端计算机上导出的NFS目录的争论。他有充分的安全理由不设置reason onereason two-阅读 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)。 cat /etc/passwd | tail -nid mysql。可以在Dockerfile

中指定的第二条指令中找到 mysql 用户名

步骤3

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

# PerisistentVolume
...
nfs:
    path: /path/to/app/mysql/directory
    server: nfs-server

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

步骤4

最后,在完成所有设置之后,部署您的MySQL Pod(部署,副本集或您正在使用的任何东西)。

答案 2 :(得分:0)

这也可以通过使用 Kubernetes 的 securityContext 定义使用拥有 nfs 卷的相同 uid 运行 mysql 容器来解决。

containers:
- name: mysql
  image: ...
  securityContext:
    runAsUser: 2015
    allowPrivilegeEscalation: false

此处 2015 应替换为 nfs 路径上的任何所有权。