【问题标题】:Unable to mount MySQL data volume to Kubernetes Minikube pod无法将 MySQL 数据卷挂载到 Kubernetes Minikube pod
【发布时间】:2016-08-29 20:26:34
【问题描述】:

我正在尝试通过 Minikube 使用 Kubernetes 设置开发环境。我使用 Docker for Mac 成功地将同一卷安装到同一映像上的同一数据目录,但我在使用 Minikube 时遇到了问题。

相关文件和日志: db-pod.yml

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    name: msyql
  name: db
  namespace: default
spec:
  containers:
    - name: mysqldev
      image: mysql/mysql-server:5.6.32
      ports:
        - containerPort: 3306
          hostPort: 3306
      volumeMounts:
        - mountPath: "/var/lib/mysql"
          name: volumesnew
  volumes:
    - name: volumesnew
      hostPath:
        path: "/Users/eric/Volumes/mysql"

kubectl get pods:

NAME      READY     STATUS    RESTARTS   AGE
db        0/1       Error     1          3s

kubectl logs db:

2016-08-29 20:05:55 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-08-29 20:05:55 0 [Note] mysqld (mysqld 5.6.32) starting as process 1 ...
2016-08-29 20:05:55 1 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive

kubectl describe pods db:

Name:       db
Namespace:      default
Node:       minikubevm/10.0.2.15
Start Time:     Wed, 31 Aug 2016 07:48:39 -0700
Labels:     name=msyql
Status:     Running
IP:         172.17.0.3
Controllers:    <none>
Containers:
  mysqldev:
    Container ID:       docker://af0937edcd9aa00ebc278bc8be00bc37d60cbaa403c69f71bc1b378182569d3d
    Image:          mysql/mysql-server:5.6.32
    Image ID:       docker://sha256:0fb418d5a10c9632b7ace0f6e7f00ec2b8eb58a451ee77377954fedf6344abc5
    Port:           3306/TCP
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:        1
      Started:      Wed, 31 Aug 2016 07:48:42 -0700
      Finished:     Wed, 31 Aug 2016 07:48:43 -0700
    Ready:          False
    Restart Count:      1
    Environment Variables:
      MYSQL_ROOT_PASSWORD:      test
Conditions:
  Type      Status
  Initialized   True
  Ready         False
  PodScheduled  True
Volumes:
  volumesnew:
    Type:       HostPath (bare host directory volume)
    Path:       /Users/eric/Volumes/newmysql
  default-token-il74e:
    Type:       Secret (a volume populated by a Secret)
    SecretName: default-token-il74e
QoS Tier:       BestEffort
Events:
  FirstSeen     LastSeen        Count   From            SubobjectPath           Type        Reason      Message
  ---------     --------        -----   ----            -------------           --------        ------      -------
  7s        7s          1       {default-scheduler }                    Normal      Scheduled       Successfully assigned db to minikubevm
  6s        6s          1       {kubelet minikubevm}    spec.containers{mysqldev}       Normal      Created     Created container with docker id 568f9112dce0
  6s        6s          1       {kubelet minikubevm}    spec.containers{mysqldev}       Normal      Started     Started container with docker id 568f9112dce0
  6s        4s          2       {kubelet minikubevm}    spec.containers{mysqldev}       Normal      Pulled      Container image "mysql/mysql-server:5.6.32" already present on machine
  4s        4s          1       {kubelet minikubevm}    spec.containers{mysqldev}       Normal      Created     Created container with docker id af0937edcd9a
  4s        4s          1       {kubelet minikubevm}    spec.containers{mysqldev}       Normal      Started     Started container with docker id af0937edcd9a
  3s        2s          2       {kubelet minikubevm}    spec.containers{mysqldev}       Warning     BackOff     Back-off restarting failed docker container
  3s        2s          2       {kubelet minikubevm}                    Warning     FailedSync      Error syncing pod, skipping: failed to "StartContainer" for "mysqldev" with CrashLoopBackOff: "Back-off 10s restarting failed container=mysqldev pod=db_default(012d5178-6f8a-11e6-97e8-c2daf2e2520c)"

我能够将主机中的数据目录挂载到测试目录中的容器,但是我无法挂载到 MySQL 数据目录。此外,我尝试使用适当的 MySQL 环境变量集将一个空目录挂载到容器的数据目录,这在 Docker for Mac 中允许我在新目录中执行 SQL 转储,但我在 Minikube 中看到了相同的错误。

关于可能是什么原因的任何想法,或者如果我没有以首选的 Kubernetes/Minikube 方式设置我的开发环境,请分享您的想法。

【问题讨论】:

  • 您使用的是什么虚拟机驱动程序? xhyve?
  • @jimmi-dyson VirtualBox
  • 我本来希望 mysql 日志能够更详细地说明导致它退出的原因。你能以某种方式增加mysql的日志记录吗?没有把握。另外,你能分享一下kubectl describe pod &lt;mysql_pod_name&gt; 的输出,看看里面有没有什么有趣的东西。
  • 好的,更新为kubectl describe pods db 输出。据我所知,那里没什么可看的。有趣的是,卷挂载在其他目录中工作。甚至同一卷在容器中的不同路径中。我会考虑获取更详细的 msyql 日志。
  • 你解决了吗?

标签: docker kubernetes


【解决方案1】:

我能够通过以下方式解决此问题:

echo "/Users -network 192.168.99.0 -mask 255.255.255.0 -alldirs -maproot=root:wheel" | sudo tee -a /etc/exports
sudo nfsd restart
minikube start
minikube ssh -- sudo umount /Users
minikube ssh -- sudo /usr/local/etc/init.d/nfs-client start
minikube ssh -- sudo mount 192.168.99.1:/Users /Users -o rw,async,noatime,rsize=32768,wsize=32768,proto=tcp

我在 VirtualBox 中运行 Minikube。我不知道这是否适用于其他 VM 驱动程序 - xhyve 等。

参考:https://github.com/kubernetes/minikube/issues/2

编辑:我应该提到这适用于 minikube v0.14.0。

【解决方案2】:

1.在 minikube 中挂载您要在主机上共享的文件夹:

minikube mount ./path/to/mySharedData:/mnt1/shared1

不要关闭终端。该进程需要一直运行才能访问该文件夹。

2。将该文件夹与 hostPath 一起使用:

    spec:
      containers:
        - name: mysqldev
          image: mysql/mysql-server:5.6.32
          ports:
            - containerPort: 3306
              hostPort: 3306
          volumeMounts:
            - mountPath: "/var/lib/mysql"
              name: my-volume
      volumes:
        - name: my-volume
          hostPath:
            path: "/mnt1/shared1"

3.写入权限问题?

如果您遇到写入访问问题,您可能希望使用以下方式安装卷:

minikube mount ./path/to/mySharedData:/mnt1/shared1 --uid 10001 --gid 10001

这里,安装在 minikube 中的卷将具有组 ID 和用户 ID 10001。这是容器内 Azure SQL Edge 服务器的用户 ID。

我不知道在你的情况下哪个是 mysql 的用户 ID。如果您想知道,请登录您的容器并输入id,它会告诉您用户 ID。

【讨论】:

    猜你喜欢
    • 2021-11-22
    • 2019-02-16
    • 1970-01-01
    • 2021-12-22
    • 2016-12-24
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    相关资源
    最近更新 更多