You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible kubernetes.core.k8s模块kubeconfig路径问题求助

问题描述

执行Ansible playbook的命令:

ansible-playbook -i <ip-address>, oke.yml -vvv

对应的playbook内容:

---
- hosts: localhost
  remote_user: opc
  gather_facts: false
  connection: local
  tasks:
  # - name: Install Python packages for the module "kubernetes.core.k8s"
  #   ansible.builtin.pip:
  #     name: " {{ item }}"
  #   loop:
  #     - kubernetes
  #     - PyYAML
  #     - jsonpatch

  - name: Create k8s Namespace
    # environment:
    #   K8S_AUTH_KUBECONFIG: /home/opc/.kube/config
    #   K8S_AUTH_CONTEXT: context-cyxq7k7hsia
    kubernetes.core.k8s:
      api_version: v1
      kind: Namespace
      name: test

核心问题:kubeconfig文件存放在远程主机的~/.kube/config路径,但Ansible始终在控制主机上查找该文件,导致加载kubeconfig失败,错误输出如下:

TASK [Create k8s Namespace] ****************************************************************************************************************************************************************************************************************
task path: /Users/fnafey/Documents/Scripts/Terraform/TerraformWorkshop/OKE/Ansible/oke_monitoring.yml:16
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: fnafey
<127.0.0.1> EXEC /bin/sh -c 'echo ~fnafey && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /Users/fnafey/.ansible/tmp `"&& mkdir "` echo /Users/fnafey/.ansible/tmp/ansible-tmp-1671313489.196291-9247-116092304879285 `" && echo ansible-tmp-1671313489.196291-9247-116092304879285="` echo /Users/fnafey/.ansible/tmp/ansible-tmp-1671313489.196291-9247-116092304879285 `" ) && sleep 0'
Using module file /Users/fnafey/.ansible/collections/ansible_collections/kubernetes/core/plugins/modules/k8s.py
<127.0.0.1> PUT /Users/fnafey/.ansible/tmp/ansible-local-9236vjnfx02a/tmprc8yyp58 TO /Users/fnafey/.ansible/tmp/ansible-tmp-1671313489.196291-9247-116092304879285/AnsiballZ_k8s.py
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x /Users/fnafey/.ansible/tmp/ansible-tmp-1671313489.196291-9247-116092304879285/ /Users/fnafey/.ansible/tmp/ansible-tmp-1671313489.196291-9247-116092304879285/AnsiballZ_k8s.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '/usr/local/Cellar/ansible/6.6.0/libexec/bin/python3.10 /Users/fnafey/.ansible/tmp/ansible-tmp-1671313489.196291-9247-116092304879285/AnsiballZ_k8s.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /Users/fnafey/.ansible/tmp/ansible-tmp-1671313489.196291-9247-116092304879285/ > /dev/null 2>&1 && sleep 0'
The full traceback is:
  File "/var/folders/4y/wn254gb10ks_xlb5y4tvn3kw0000gn/T/ansible_kubernetes.core.k8s_payload_8nq86hcx/ansible_kubernetes.core.k8s_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/common.py", line 266, in get_api_client
    _load_config()
  File "/var/folders/4y/wn254gb10ks_xlb5y4tvn3kw0000gn/T/ansible_kubernetes.core.k8s_payload_8nq86hcx/ansible_kubernetes.core.k8s_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/common.py", line 233, in _load_config
    kubernetes.config.load_kube_config(config_file=None, **optional_arg)
  File "/usr/local/Cellar/ansible/6.6.0/libexec/lib/python3.10/site-packages/kubernetes/config/kube_config.py", line 813, in load_kube_config
    loader = _get_kube_config_loader(
  File "/usr/local/Cellar/ansible/6.6.0/libexec/lib/python3.10/site-packages/kubernetes/config/kube_config.py", line 770, in _get_kube_config_loader
    raise ConfigException(
fatal: [localhost]: FAILED! => {
    "changed": false,
    "invocation": {
        "module_args": {
            "api_key": null,
            "api_version": "v1",
            "append_hash": false,
            "apply": false,
            "ca_cert": null,
            "client_cert": null,
            "client_key": null,
            "context": null,
            "continue_on_error": false,
            "delete_options": null,
            "force": false,
            "generate_name": null,
            "host": null,
            "impersonate_groups": null,
            "impersonate_user": null,
            "kind": "Namespace",
            "kubeconfig": null,
            "label_selectors": null,
            "merge_type": null,
            "name": "test",
            "namespace": null,
            "no_proxy": null,
            "password": null,
            "persist_config": null,
            "proxy": null,
            "proxy_headers": null,
            "resource_definition": null,
            "server_side_apply": null,
            "src": null,
            "state": "present",
            "template": null,
            "username": null,
            "validate": null,
            "validate_certs": null,
            "wait": false,
            "wait_condition": null,
            "wait_sleep": 5,
            "wait_timeout": 120
        }
    },
    "msg": "Failed to load kubeconfig due to Invalid kube-config file. No configuration found."
}

PLAY RECAP *********************************************************************************************************************************************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
解决方案

问题本质是playbook的连接配置错误:connection: local强制所有任务在控制主机执行,hosts: localhost也将目标限定为控制主机,和你通过-i <ip-address>指定的远程主机完全冲突。

修改步骤如下:

  1. 调整主机与连接配置:将hosts: localhost改为all(匹配你命令里指定的远程主机),移除connection: local,让Ansible默认用SSH连接远程主机
  2. 启用环境变量配置,明确指定远程主机上的kubeconfig路径
  3. 启用依赖安装任务,确保远程主机具备kubernetes模块所需的Python包

修改后的完整playbook:

---
- hosts: all
  remote_user: opc
  gather_facts: false
  tasks:
  - name: Install Python packages for kubernetes.core.k8s module
    ansible.builtin.pip:
      name: "{{ item }}"
    loop:
      - kubernetes
      - PyYAML
      - jsonpatch

  - name: Create k8s Namespace
    environment:
      K8S_AUTH_KUBECONFIG: /home/opc/.kube/config
      # 如需指定集群context,取消下面注释
      # K8S_AUTH_CONTEXT: context-cyxq7k7hsia
    kubernetes.core.k8s:
      api_version: v1
      kind: Namespace
      name: test

执行命令保持不变:

ansible-playbook -i <ip-address>, oke.yml -vvv

修改后,Ansible会通过SSH连接到目标远程主机,在远程主机上执行kubernetes模块,并读取远程主机上的kubeconfig文件完成K8S集群交互。

内容的提问来源于stack exchange,提问作者MikeKim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:21:00