cp_ 无法统计:没有这样的文件或目录:通过 Ansible 将文件从本地主机复制到 k8s pod 时出错

cp_ cannot stat: no such file or directory: Error copying files from localhost to k8s pod through Ansible

我正在尝试通过 Ansible 将测试文件(例如 HelloWorld.txt)从我的本地机器复制到 Rancher 上的 k8s pod。问题是我得到了一只猫:没有这样的文件或目录。我想我收到此错误是因为我正在使用 k8s_exec 模块来执行 cp 命令。因为我正在使用它,所以我认为他不是在尝试从我的本地机器复制到 pod,而是已经在 pod 中。

这是剧本:

---

- hosts: localhost #group of hosts on host file
  connection: local
  remote_user: root
  vars:
    ansible_python_interpreter: '{{ ansible_playbook_python }}'
  collections:
    - community.kubernetes

  tasks:
    - name: Test Host Connection
      ping:
    - name: Get the pods in the specific namespace
      k8s_info:
        kubeconfig: '/etc/ansible/RCCloudConfig'
        kind: Pod
        namespace: redmine
      register: pod_list
    - name: Print pod names 
      debug:
         msg: "pod_list: {{ pod_list | json_query('resources[*].status.podIP')  }} "
    - set_fact:
        pod_names: "{{pod_list|json_query('resources[*].metadata.name')}}"
    - name: Copy Opatch zipfile to the Target Oracle_home
      k8s_exec:
        kubeconfig: '/etc/ansible/RCCloudConfig'
        namespace: redmine
        pod: "{{ pod_name | mandatory }}" #pod name
        command: cp /home/ansible/ansible/HelloWorld.txt /tmp  # copy from the current location to tmp
    - name: Show HelloWorld
      k8s_exec:
        kubeconfig: '/etc/ansible/RCCloudConfig'
        namespace: redmine
        pod: redminetisl-gitlab-69f7485b5d-52b5s #pod name
        command: cat /tmp/HelloWorld.txt

Ansible 版本:

ansible 2.9.9
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Apr 16 2020, 01:36:27) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]

是的,您的猜测是正确的,当您 exec 进入容器时,您的命令将在 pod“内部”执行。在这种情况下,您只需复制 pod 中不存在的文件。

检查 kubectl cp 命令。这类似于 docker cp 命令,将文件从主机复制到容器。你可以使用ansible command module来执行它。

我通过退出容器解决了这个问题,然后将文件cp到容器中。 问题是我没有权限,所以我需要退出容器,然后输入“sudo docker cp {file url} {containerID}:/opt/video” .