Как сделать Kubectl cp с запуска pod на локальный, говорит, что нет такого файла или каталога - PullRequest
0 голосов
/ 16 января 2019

Как сделать Kubectl cp из запущенного pod в local, говорит, что нет такого файла или каталога

У меня есть содержимое в контейнере Ubuntu, как показано ниже

vagrant@ubuntu-xenial:~/k8s/pods$ kubectl exec command-demo-67m2b -c 
ubuntu 
-- sh -c "ls /tmp"
docker-sock

Теперь я просто хочу скопировать содержимое выше / tmp, используя команду kubectl cp ниже

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 не говорит, что такого файла или каталога нет. Я не понимаю, когда в контейнере Ubuntu существует папка / tmp, почему kubectl cp говорит, что папка не найдена

Мой модуль - команда-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 в локальный

1 Ответ

0 голосов
/ 16 января 2019

В вашей исходной команде exec в контейнер вы передаете команду -c ubuntu, что означает, что вы выбираете контейнер 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
...