kubernetes.core.k8s_cp 模块 – 将文件和目录复制到 Pod 以及从 Pod 复制文件和目录。

注意

此模块是 kubernetes.core 集合(版本 5.0.0)的一部分。

如果您正在使用 ansible 包,您可能已经安装了这个集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install kubernetes.core。您需要进一步的要求才能使用此模块,请参阅 要求 了解详细信息。

要在 playbook 中使用它,请指定:kubernetes.core.k8s_cp

kubernetes.core 2.2.0 中的新增功能

概要

  • 使用 Kubernetes Python 客户端将文件和目录复制到 Pod 内的容器以及从 Pod 内的容器复制文件和目录。

注意

此模块具有相应的 action 插件

要求

以下要求需要在执行此模块的主机上满足。

  • python >= 3.9

  • kubernetes >= 24.2.0

参数

参数

注释

api_key

字符串

用于向 API 验证身份的令牌。也可以通过 K8S_AUTH_API_KEY 环境变量指定。

ca_cert

别名:ssl_ca_cert

路径

用于向 API 验证身份的 CA 证书的路径。必须提供完整的证书链,以避免证书验证错误。也可以通过 K8S_AUTH_SSL_CA_CERT 环境变量指定。

client_cert

别名:cert_file

路径

用于向 API 验证身份的证书的路径。也可以通过 K8S_AUTH_CERT_FILE 环境变量指定。

client_key

别名:key_file

路径

用于向 API 验证身份的密钥文件的路径。也可以通过 K8S_AUTH_KEY_FILE 环境变量指定。

container

字符串

Pod 中要从中/向其复制文件/目录的容器的名称。

如果 Pod 中只有一个容器,则默认为该唯一容器。

content

字符串

当代替 local_path 使用时,将本地文件的内容直接设置为指定的值。

仅当 remote_path 为文件时才有效。如果文件不存在,则创建该文件。

对于高级格式化或者内容包含变量的情况,请使用 ansible.builtin.template 模块。

local_path 互斥。

context

字符串

在配置文件中找到的上下文的名称。也可以通过 K8S_AUTH_CONTEXT 环境变量指定。

host

字符串

提供用于访问 API 的 URL。也可以通过 K8S_AUTH_HOST 环境变量指定。

impersonate_groups

列表 / 元素=字符串

在 kubernetes.core 2.3.0 中添加

要模拟执行操作的组。

也可以通过 K8S_AUTH_IMPERSONATE_GROUPS 环境指定。示例:Group1,Group2

impersonate_user

字符串

在 kubernetes.core 2.3.0 中添加

要模拟执行操作的用户名。

也可以通过 K8S_AUTH_IMPERSONATE_USER 环境指定。

kubeconfig

任意

现有 Kubernetes 配置文件的路径。如果未提供,且未提供其他连接选项,Kubernetes 客户端将尝试从 ~/.kube/config 加载默认配置文件。也可以通过 K8S_AUTH_KUBECONFIG 环境变量指定。

可以使用分隔符“;”(对于 Windows 平台)或“:”(对于其他平台)提供多个 Kubernetes 配置文件。

Kubernetes 配置可以作为字典提供。此功能需要 Python Kubernetes 客户端版本 >= 17.17.0。在版本 2.2.0 中添加。

local_path

路径

本地文件或目录的路径。

state 设置为 from_pod 时是必需的。

content 互斥。

namespace

字符串 / 必需

Pod 命名空间名称。

no_preserve

布尔值

复制的文件/目录的所有权和权限将不会保留在容器中。

当设置了 content 或当 state 设置为 from_pod 时,将忽略此选项。

选项

  • false ←(默认)

  • true

no_proxy

字符串

在 kubernetes.core 2.3.0 中添加

不应通过代理的以逗号分隔的主机/域/IP/CIDR 列表。也可以通过 K8S_AUTH_NO_PROXY 环境变量指定。

请注意,此模块不会从环境中获取典型的代理设置(例如 NO_PROXY)。

此功能需要 kubernetes>=19.15.0。当 Kubernetes 库低于 19.15.0 时,即使正确设置了 no_proxy 也会失败。

示例值为“localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16”

password

字符串

提供用于向 API 验证身份的密码。也可以通过 K8S_AUTH_PASSWORD 环境变量指定。

有关何时适用此选项的讨论,请阅读 username 选项的说明。

persist_config

布尔值

是否保存 kube 配置刷新令牌。也可以通过 K8S_AUTH_PERSIST_CONFIG 环境变量指定。

当 k8s 上下文使用具有刷新令牌的用户凭据(如 oidc 或 gke/gcloud 身份验证)时,令牌由 k8s Python 客户端库刷新,但默认情况下不保存。因此,旧的刷新令牌可能会过期,并且下次身份验证可能会失败。将此标志设置为 true 将告知 k8s Python 客户端将新的刷新令牌保存到 kube 配置文件。

默认为 false。

请注意,当前版本的 k8s Python 客户端库尚不支持将此标志设置为 True。

此 k8s Python 库的修复程序在此处:https://github.com/kubernetes-client/python-base/pull/169

选项

  • false

  • true

pod

字符串 / 必需

Pod 名称。

proxy

字符串

用于连接的 HTTP 代理的 URL。也可以通过 K8S_AUTH_PROXY 环境变量指定。

请注意,此模块不会从环境中获取典型的代理设置(例如 HTTP_PROXY)。

proxy_headers

字典

在 kubernetes.core 2.0.0 中添加

basic_auth

字符串

用于基本身份验证头的冒号分隔的用户名:密码。

也可以通过 K8S_AUTH_PROXY_HEADERS_BASIC_AUTH 环境变量指定。

proxy_basic_auth

字符串

用于代理基本身份验证头的冒号分隔的用户名:密码。

也可以通过 K8S_AUTH_PROXY_HEADERS_PROXY_BASIC_AUTH 环境变量指定。

user_agent

字符串

表示您想要的 user-agent 的字符串,例如 foo/1.0。

也可以通过 K8S_AUTH_PROXY_HEADERS_USER_AGENT 环境变量指定。

remote_path

路径 / 必需

要复制的文件或目录的路径。

state

字符串

当设置为 to_pod 时,本地 local_path 文件或目录将被复制到 pod 中的 remote_path

当设置为 from_pod 时,来自 pod 的远程文件或目录 remote_path 将被复制到本地的 local_path

选项

  • "to_pod" ← (默认)

  • "from_pod"

username

字符串

提供用于与 API 进行身份验证的用户名。也可以通过 K8S_AUTH_USERNAME 环境变量指定。

请注意,这仅适用于配置为使用 HTTP 基本身份验证的集群。如果您的集群具有不同的身份验证形式(例如 OpenShift 中的 OAuth2),则此选项将无法按预期工作,您应该研究 community.okd.k8s_auth 模块,因为它可能会满足您的需求。

validate_certs

别名: verify_ssl

布尔值

是否验证 API 服务器的 SSL 证书。也可以通过 K8S_AUTH_VERIFY_SSL 环境变量指定。

选项

  • false

  • true

注意事项

注意

  • 当从本地文件系统复制到 pod 时,容器上需要 tar 二进制文件。

  • 为了避免当 validate_certsTrue 时出现 SSL 证书验证错误,必须通过 ca_cert 或在 kubeconfig 文件中提供 API 服务器的完整证书链。

示例

# kubectl cp /tmp/foo some-namespace/some-pod:/tmp/bar
- name: Copy /tmp/foo local file to /tmp/bar in a remote pod
  kubernetes.core.k8s_cp:
    namespace: some-namespace
    pod: some-pod
    remote_path: /tmp/bar
    local_path: /tmp/foo

# kubectl cp /tmp/foo_dir some-namespace/some-pod:/tmp/bar_dir
- name: Copy /tmp/foo_dir local directory to /tmp/bar_dir in a remote pod
  kubernetes.core.k8s_cp:
    namespace: some-namespace
    pod: some-pod
    remote_path: /tmp/bar_dir
    local_path: /tmp/foo_dir

# kubectl cp /tmp/foo some-namespace/some-pod:/tmp/bar -c some-container
- name: Copy /tmp/foo local file to /tmp/bar in a remote pod in a specific container
  kubernetes.core.k8s_cp:
    namespace: some-namespace
    pod: some-pod
    container: some-container
    remote_path: /tmp/bar
    local_path: /tmp/foo
    no_preserve: True
    state: to_pod

# kubectl cp some-namespace/some-pod:/tmp/foo /tmp/bar
- name: Copy /tmp/foo from a remote pod to /tmp/bar locally
  kubernetes.core.k8s_cp:
    namespace: some-namespace
    pod: some-pod
    remote_path: /tmp/foo
    local_path: /tmp/bar
    state: from_pod

# copy content into a file in the remote pod
- name: Copy content into a file in the remote pod
  kubernetes.core.k8s_cp:
    state: to_pod
    namespace: some-namespace
    pod: some-pod
    remote_path: /tmp/foo.txt
    content: "This content will be copied into remote file"

返回值

常见的返回值记录在这里,以下是此模块独有的字段

描述

result

字符串

描述成功完成的复制操作的消息。

返回: 成功

作者

  • Aubin Bikouo (@abikouo)