如何更改复制到 Azure Blob 容器的文件的 UNIX 文件所有权和权限?

问题描述 投票:0回答:1

我有一个 MySQL 数据库转储文件,我想将其复制到在 AKS 中运行 MySQL 映像的 Kubernetes pod,以便我可以导入数据库。

我首先创建了一个 Azure Blob 容器,将其配置为持久卷 (PV),从 PV 设置持久卷声明 (PVC),然后将其安装到运行 MySQL 的 pod 中的 /var/lib/mysql图像。

由于MySQL非常严格,当MySQL开始创建新的空数据库时,/var/lib/mysql必须为空,因此我将Blob容器保持为空,并在上传之前让pod启动(这样就创建了一个空数据库)将数据库转储文件复制到 Blob 容器(即转储文件复制到 MySQL pod 的 /var/lib/mysql)。然后我尝试使用以下方式登录 Pod:

kubectl exec -it <pod_name> -- /bin/bash

接下来,我尝试通过运行导入数据库:

cd /var/lib/mysql
mysql -u root -p <db_name> < <database_dump_file_name>

但是我收到了权限被拒绝的错误,因为数据库转储文件具有 root 用户所有权和 640 权限,但 MySQL pod 必须以用户 ID 1000 和组 ID 999 运行,这意味着我无法更改该数据库的所有权和权限数据库转储文件。我该怎么做才能摆脱权限被拒绝的错误?

azure-blob-storage file-permissions file-ownership
1个回答
0
投票

我找到了一个笨拙的解决方案,本质是在没有 MySQL 的情况下以 root 身份运行另一个 pod,并更改那里的数据库转储文件的所有权和权限:

  1. 使用
    kubectl delete
    删除 MySQL pod 和部署。
  2. 创建另一个将由 root 运行的 pod,并将相同的 PVC 挂载到目录,例如 /mnt/temp。该映像可以是一个简单的 Ubuntu 映像,重要的是 pod 应该执行某些操作,因此它不会完成。为此,可以将此无限循环添加到 pod 的 .yaml 文件中:
        command:
          - '/bin/bash'
          - '-c'
          - |
            while true; do echo $(date); sleep 1; done
  1. 使用
    kubectl apply
    涂抹 pod。
  2. 当 Pod 运行时,使用
    kubectl exec -it pod/<pod_name> -- /bin/bash
  3. 登录它
  4. 在 pod 中执行以下命令:
cd /mnt/dir
chmod 644 <dumpfile>
chown 1000:root <dumpfile>
  1. 使用
    kubectl delete
    删除 Pod。
  2. 再次启动 MySQL pod。
  3. 当 MySQL Pod 运行时,登录 Pod。
  4. 在 pod 中执行以下命令导入 DB:
cd /var/lib/mysql
mysql -u root -p <db_name> < <dumpfile>
rm <dumpfile>
© www.soinside.com 2019 - 2024. All rights reserved.