Kubernetes 不能';t解决模块/操作';k8s#U执行官';关于Ansible剧本

Kubernetes 不能';t解决模块/操作';k8s#U执行官';关于Ansible剧本,kubernetes,ansible,cloud,rancher,Kubernetes,Ansible,Cloud,Rancher,我试图通过Ansible重新启动Rancher群集上的pod,但出现以下错误: ERROR! couldn't resolve module/action 'k8s_exec'. This often indicates a misspelling, missing collection, o

我试图通过Ansible重新启动Rancher群集上的pod,但出现以下错误:

ERROR! couldn't resolve module/action 'k8s_exec'. This often indicates a misspelling,                                                                                                        missing collection, or incorrect module path.

The error appears to be in '/home/ansible/ansible/GetKubectlPods': line 27, column 7,                                                                                                        but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

    -
      name: Reboot Machine
      ^ here
我不知道为什么我会出错,因为我也在使用k8s_信息,他工作得很好

这是我正在运行的剧本:

--- 

- hosts: localhost
  connection: local
  remote_user: root

  vars:
    ansible_python_interpreter: '{{ ansible_playbook_python }}'

  tasks:
    -
      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: Reboot Machine
      k8s_exec:
        kubeconfig: '/etc/ansible/RCCloudConfig'
        namespace: redmine
        pod: redmine_quick-testing-6c57cc5d65-lwkww #pod name
        command: reboot
可翻译版本:

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)]
如果我编辑剧本并添加
community.kubernetes集合
,则会出现以下错误:

fatal: [localhost]: FAILED! => {"changed": false, "module_stderr": "/usr/local/lib/python3.6/site-packages/kubernetes/client/apis/__init__.py:12: DeprecationWarning: The package kubernetes.client.apis is renamed and deprecated, use kubernetes.client.api instead (please note that the trailing s was removed).\n  DeprecationWarning\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.6/site-packages/kubernetes/stream/ws_client.py\", line 296, in websocket_call\n    client = WSClient(configuration, get_websocket_url(url), headers, capture_all)\n  File \"/usr/local/lib/python3.6/site-packages/kubernetes/stream/ws_client.py\", line 94, in __init__\n    self.sock.connect(url, header=header)\n  File \"/usr/local/lib/python3.6/site-packages/websocket/_core.py\", line 226, in connect\n    self.handshake_response = handshake(self.sock, *addrs, **options)\n  File \"/usr/local/lib/python3.6/site-packages/websocket/_handshake.py\", line 80, in handshake\n    status, resp = _get_resp_headers(sock)\n  File \"/usr/local/lib/python3.6/site-packages/websocket/_handshake.py\", line 165, in _get_resp_headers\n    raise WebSocketBadStatusException(\"Handshake status %d %s\", status, status_message, resp_headers)\nwebsocket._exceptions.WebSocketBadStatusException: Handshake status 404 Not Found\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/home/ansible/.ansible/tmp/ansible-tmp-1592530746.4685414-46123-84159696554463/AnsiballZ_k8s_exec.py\", line 102, in <module>\n    _ansiballz_main()\n  File \"/home/ansible/.ansible/tmp/ansible-tmp-1592530746.4685414-46123-84159696554463/AnsiballZ_k8s_exec.py\", line 94, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \"/home/ansible/.ansible/tmp/ansible-tmp-1592530746.4685414-46123-84159696554463/AnsiballZ_k8s_exec.py\", line 40, in invoke_module\n    runpy.run_module(mod_name='ansible_collections.community.kubernetes.plugins.modules.k8s_exec', init_globals=None, run_name='__main__', alter_sys=True)\n  File \"/usr/lib64/python3.6/runpy.py\", line 205, in run_module\n    return _run_module_code(code, init_globals, run_name, mod_spec)\n  File \"/usr/lib64/python3.6/runpy.py\", line 96, in _run_module_code\n    mod_name, mod_spec, pkg_name, script_name)\n  File \"/usr/lib64/python3.6/runpy.py\", line 85, in _run_code\n    exec(code, run_globals)\n  File \"/tmp/ansible_k8s_exec_payload_q6oom26c/ansible_k8s_exec_payload.zip/ansible_collections/community/kubernetes/plugins/modules/k8s_exec.py\", line 148, in <module>\n  File \"/tmp/ansible_k8s_exec_payload_q6oom26c/ansible_k8s_exec_payload.zip/ansible_collections/community/kubernetes/plugins/modules/k8s_exec.py\", line 135, in main\n  File \"/usr/local/lib/python3.6/site-packages/kubernetes/stream/stream.py\", line 35, in stream\n    return func(*args, **kwargs)\n  File \"/usr/local/lib/python3.6/site-packages/kubernetes/client/api/core_v1_api.py\", line 841, in connect_get_namespaced_pod_exec\n    (data) = self.connect_get_namespaced_pod_exec_with_http_info(name, namespace, **kwargs)  # noqa: E501\n  File \"/usr/local/lib/python3.6/site-packages/kubernetes/client/api/core_v1_api.py\", line 941, in connect_get_namespaced_pod_exec_with_http_info\n    collection_formats=collection_formats)\n  File \"/usr/local/lib/python3.6/site-packages/kubernetes/client/api_client.py\", line 345, in call_api\n    _preload_content, _request_timeout)\n  File \"/usr/local/lib/python3.6/site-packages/kubernetes/client/api_client.py\", line 176, in __call_api\n    _request_timeout=_request_timeout)\n  File \"/usr/local/lib/python3.6/site-packages/kubernetes/stream/stream.py\", line 30, in _intercept_request_call\n    return ws_client.websocket_call(config, *args, **kwargs)\n  File \"/usr/local/lib/python3.6/site-packages/kubernetes/stream/ws_client.py\", line 302, in websocket_call\n    raise ApiException(status=0, reason=str(e))\nkubernetes.client.rest.ApiException: (0)\nReason: Handshake status 404 Not Found\n\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
fatal:[localhost]:失败!=>{“changed”:false,“module_stderr”:“/usr/local/lib/python3.6/site packages/kubernetes/client/api/__init__;.py:12:DeprecationWarning:包kubernetes.client.api被重命名和弃用,请改用kubernetes.client.api(请注意尾部的s已删除)。\n弃用警告\n回退(最近一次调用):\n File\”/usr/local/lib/python3.6/site packages/kubernetes/stream/ws_client.py\”,第296行,在websocket\u call\n client=WSClient(配置,获取websocket\u url(url),头,捕获所有)\n文件\“/usr/local/lib/python3.6/site packages/kubernetes/stream/ws_client.py\”,第94行,在\uu init\uuu self.sock.connect(url,头=头文件\”/usr/local/lib/python3.6/site packages/websocket/_core.py\”,第226行,处于连接状态\n self.handshake\u response=handshake(self.sock,*addrs,**选项)\n文件\“/usr/local/lib/python3.6/site packages/websocket/_handshake.py\”,第80行,处于握手状态,resp=\n获取响应头(sock)\n文件\”/usr/local/lib/python3.6/site packages/websocket/\u handshake.py\”,第165行,在“获取响应标头”中\n引发WebSocketBadStatusException(\“握手状态%d%s\”,状态,状态消息,响应标头)\nwebsocket.\u exceptions.WebSocketBadStatusException:未找到握手状态404\n\n在处理上述异常时,发生了另一个异常:\n\n回溯(上次调用):\n File\“/home/ansible/.ansible/tmp/ansible-tmp-1592530746.4685414-46123-84159696554463/AnsiballZ_k8s(exec.py\”,第102行,在\n\u AnsiballZ)main()\n文件\“/home/ansible/.ansible/tmp/ansible-tmp-1592530746.4685414-46123-84159696554463/AnsiballZ_k8s_exec.py\”,第94行,位于AnsiballZ_main\n invoke_模块中(压缩模式、临时路径、AnsiballZ参数)\n文件\“/home/ansible/ansible/tmp/ansible-tmp/ansible-tmp-1592530744-46123-8415965z-AnsiballZ.py\,第40行,在invoke\u module\n runpy.run\u module(mod\u name='ansible\u collections.community.kubernetes.plugins.modules.k8s\u exec',init\u globals=None,run\u name=''un main\uuuuuuu',alter\u sys=True)\n File\“/usr/lib64/python3.6/runpy\”,第205行,在run模块\n中返回运行模块代码(代码,init\u globals,run name,mod spec)\n\“/usr/lib64/python3.6/runpy.py\”,第96行,在“运行”模块\u代码\n模块名称、模块规范、软件包名称、脚本名称\n文件\“/usr/lib64/python3.6/runpy.py\”,第85行,在“运行”代码\n exec(代码、运行全局\n文件\”/tmp/ansible_k8s_exec_payload_q6oom26c/ansible_k8s_exec_payload.zip/ansible_collections/community/kubernetes/plugins/modules/k8s_exec.py\”,第148行,在\n文件\/tmp/ansible_k8s_exec_payload___Q6; m26c/ansible_k8s_exec_payload.zip/ansible___k8s_exec_____载荷。zip/ansible_collections/kubernetes/plugins/modules/k8s/k8s/k8s//usr/local/lib/python3.6/site packages/kubernetes/stream/stream.py\”,第35行,in-stream\n return func(*args,**kwargs)\n File\“/usr/local/lib/python3.6/site packages/kubernetes/client/api/core\u v1\u api.py\”,第841行,在connect\u-get\u-namespaced\u-pod\u-exec\u-exec\n(数据)=**-self.connect\u-get\u-get\u-namespaced\u-ped\u-pod\u-exec\u-exec\u-ex#noqa:E501\n文件“/usr/local/lib/python3.6/site packages/kubernetes/client/api/core\u v1\u api.py\”,第941行,在connect\u get\u namespaced\u pod\u exec\u with_http\u info\n collection\n formats=collection\u formats\n\n File\”/usr/local/lib/python3.6/site-packages/kubernetes/client/api\u client.py中\“,第345行,调用api\n预加载\u内容,请求超时\n文件\”/usr/local/lib/python3.6/site packages/kubernetes/client/api\u client.py\”,第176行,调用api\n请求超时=\u请求超时)\n文件\“/usr/local/lib/python3.6/site packages/kubernetes/stream/stream.py\”,第30行,在websocket调用中返回ws\u client.websocket\u调用(config,*args,**kwargs)\n文件\“/usr/local/lib/python3.6/site packages/kubernetes/stream/ws\u client.py\”,第302行,在websocket调用中引发ApiException(状态=0,原因=str(e))\nkubernetes.client.rest.ApiException:(0)\n原因:未找到握手状态404\n\n“模块\标准输出“:”消息“:“模块故障\n有关确切错误,请参阅标准输出/标准输出“,”rc“:1}”
解决方案:

找到您的
k8s_exec.py
文件,并从
Kubernetes.api
Kubernetes.api


提前感谢!

如果没有更多细节,我们无法帮助您排除404故障。
kubectl--kubeconfig/etc/ansible/RCCloudConfig-n redmine exec redmine\u quick-testing-6c57cc5d65-lwkw--ls-l
成功与否。
exec
日志
动词使用完全不同的协议我已经通过修改k8s_exec.py文件和更改API名称解决了上述问题。我现在最大的问题是,我无法使用k8s_exec命令对POD运行扩展命令。如果我给他一个“ls/opt”例如,由于命令的工作方式,我无法检索任何内容。有什么可能的解决方案吗?你能把你的解决方案贴在问题的答案上吗?回答的第二部分是另一个主题,因此应该作为单独的问题提问。如果没有更多细节,我们无法帮助您排除404故障,首先是
kubectl--kubeconfig/etc/ansible/RCCloudConfig-n redmine exec redmine\u quick-testing-6c57cc5d65-lwkww--ls-l
是否成功。
exec
logs
动词使用entirel