如何从运行的Pod到本地执行Kubectl cp,没有这样的文件或目录
我在Ubuntu容器中有如下内容
vagrant@ubuntu-xenial:~/k8s/pods$ kubectl exec command-demo-67m2b -c
ubuntu
-- sh -c "ls /tmp"
docker-sock
现在我只想使用下面的kubectl cp命令复制/ tmp内容以上的内容
kubectl cp command-demo-67m2b/ubuntu:/tmp /home
我的命令输出如下
vagrant@ubuntu-xenial:~/k8s/pods$ kubectl cp command-demo-67m2b/ubuntu:/tmp
/home
error: tmp no such file or directory
现在我要做的就是将/ tmp文件夹上方的内容复制到本地主机,不幸的是kubectl说没有这样的文件或目录。 当/ tmp文件夹存在于Ubuntu容器中时,我感到困惑,为什么kubectl cp说找不到文件夹
我的容器是command-demo-67m2b,容器名称是ubuntu
但是吊舱已启动并正在运行,如下图所示
vagrant@ubuntu-xenial:~/k8s/pods$ kubectl describe pods command-demo-67m2b
Name: command-demo-67m2b
Namespace: default
Node: ip-172-31-8-145/172.31.8.145
Start Time: Wed, 16 Jan 2019 00:57:05 +0000
Labels: controller-uid=a4ac12c1-1929-11e9-b787-02d8b37d95a0
job-name=command-demo
Annotations: kubernetes.io/limit-ranger: LimitRanger plugin set: memory
request for container ubuntu; memory limit for container ubuntu
Status: Running
IP: 10.1.40.75
Controlled By: Job/command-demo
Containers:
command-demo-container:
Container ID:
docker://c680fb336242f456d90433a9aa89cf3e1cb1d45d73447769fcf86ce329176437
Image: tarunkumard/fromscratch6.0
Image ID: docker- ullable://tarunkumard/fromscratch6.0@sha256:709b588aa4edcc9bc2b39bee60f248bb02347a605da09fb389c448e41e2f543a
Port: <none>
Host Port: <none>
State: Terminated
Reason: Completed
Exit Code: 0
Started: Wed, 16 Jan 2019 00:57:07 +0000
Finished: Wed, 16 Jan 2019 00:58:36 +0000
Ready: False
Restart Count: 0
Limits:
memory: 1Gi
Requests:
memory: 900Mi
Environment: <none>
Mounts:
/opt/gatling-fundamentals/build/reports/gatling/ from docker-sock (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-w6jt6
(ro)
ubuntu:
Container ID:
docker://7da9d43816253048fb4137fadc6c2994aac93fd272391b73f2fab3b02487941a
Image: ubuntu:16.04
Image ID: docker-
Port: <none>
Host Port: <none>
Command:
/bin/bash
-c
--
Args:
while true; do sleep 10; done;
State: Running
Started: Wed, 16 Jan 2019 00:57:07 +0000
Ready: True
Restart Count: 0
Limits:
memory: 1Gi
Requests:
memory: 1Gi
Environment:
JVM_OPTS: -Xms900M -Xmx1G
Mounts:
/docker-sock from docker-sock (rw)
/var/run/secrets/kubernetes.io/serviceaccount from default-token-w6jt6
(ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
docker-sock:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
default-token-w6jt6:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-w6jt6
Optional: false
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
事件:
如果您需要参考,这是我的yaml文件:-
apiVersion: batch/v1
kind: Job
metadata:
name: command-demo
spec:
ttlSecondsAfterFinished: 100
template:
spec:
volumes:
- name: docker-sock # Name of the AWS EBS Volume
emptyDir: {}
restartPolicy: Never
containers:
- name: command-demo-container
image: tarunkumard/fromscratch6.0
volumeMounts:
- mountPath: /opt/gatling-fundamentals/build/reports/gatling/
#
Mount path within the container
name: docker-sock # Name must match the
AWS
EBS volume name defined in spec.Volumes
imagePullPolicy: Never
resources:
requests:
memory: "900Mi"
limits:
memory: "1Gi"
- name: ubuntu
image: ubuntu:16.04
command: [ "/bin/bash", "-c", "--" ]
args: [ "while true; do sleep 10; done;" ]
volumeMounts:
- mountPath: /docker-sock # Mount path within the container
name: docker-sock # Name must match the
AWS
EBS volume name defined in spec.Volumes
imagePullPolicy: Never
env:
- name: JVM_OPTS
value: "-Xms900M -Xmx1G"
我希望kubectl cp命令将内容从pod容器复制到本地
答案 0 :(得分:1)
在执行到容器中的原始命令中,传递了-c ubuntu
命令,这意味着您要从pod中选择Ubuntu容器:
kubectl exec command-demo-67m2b -c
ubuntu
-- sh -c "ls /tmp"
但是,在您的kubectl cp
命令中,您没有指定相同的容器:
kubectl cp command-demo-67m2b/ubuntu:/tmp /home
尝试一下:
kubectl cp command-demo-67m2b:/tmp /home -c ubuntu