`kubectl cp` 到 pod 失败

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

当我尝试将小文件复制到 Kubernetes pod 时,失败并出现以下错误:

:~ $kubectl cp /tmp/a default/resolver-proxy-69dc786fcf-5rplg:/usr/local/bin/ --no-preserve=true
    tar: a: Cannot open: Permission denied
    tar: Exiting with failure status due to previous errors
    command terminated with exit code 2

有人可以帮我解决这个问题吗?我在 minikube 上运行 Kubernetes。

我还看到另一个 Postgres Pod 由于类似的错误而处于错误状态:

:~ $kubectl logs postgres-7676967946-7lp9g postgres
tar: /var/lib/postgresql/data: Cannot open: Permission denied
tar: Error is not recoverable: exiting now
kubernetes google-kubernetes-engine copy-paste kubectl minikube
3个回答
34
投票

对于 kubectl cp,请尝试先复制到

/tmp
文件夹,然后将文件 mv 到转移到
root
用户

所需的路径

kubectl cp /tmp/a default/resolver-proxy-69dc786fcf-5rplg:/tmp/

然后执行到pod中并更改为root并复制到所需的路径。

对于第二个问题,执行到 pod 中并通过运行以下命令修复权限。 Postgres 需要能够读取和写入 Postgres 路径。

chown -R postgres:postgres /var/lib/postgresql/


1
投票

如果开发环境需要,可以通过 pod 安全约束来完成。

spec:
  template: 
    spec:
      containers:
        ...
        securityContext:
          runAsUser: 0

结果

kubectl
root

的形式连接到 pod

0
投票

我来这里寻找OP描述的问题的解决方案。 @Tummala Dhanvi 提供的答案似乎是大多数情况下的通用答案,并得到多个其他网站的证实,但对我来说这不是正确的解决方案。

我们运行数百个容器(有些以 root 身份运行,有些则不以 root 身份运行)。对于我的具体情况,我尝试将文件 kubectl cp 到一个不以 root 身份运行的容器中,但尝试将文件复制到根目录 (/) 的容器中。

我对此的修复只是将容器中的目标路径更改为运行用户确实具有权限的较低目录:

kubectl cp myfile.tar -c [container] [namespace]/[pod]:/opt/userwritabledirectory
© www.soinside.com 2019 - 2024. All rights reserved.