Kubernetes Ansible Error:“;[Errno 2]没有这样的文件或目录";

Kubernetes Ansible Error:“;[Errno 2]没有这样的文件或目录";,kubernetes,ansible,Kubernetes,Ansible,我无法在ansible命令模块中执行kubectl(v1.16.3)命令 command: "/the/path/kubectl create -f {{item}}.yml .........." 例如,使用ansible创建名称空间 tasks: - name: "Creating Directory" file: path: ~/ansible_ns/demo_namespaces state: director

我无法在ansible命令模块中执行kubectl(v1.16.3)命令

command: "/the/path/kubectl create -f {{item}}.yml .........."
例如,使用ansible创建名称空间

tasks: - name: "Creating Directory" file: path: ~/ansible_ns/demo_namespaces state: directory - name: "Creating Namespaces(1/2)" copy: content: "apiVersion: v1 \nkind: Namespace \nmetadata: \n name: {{item}} " dest: "~/ansible_ns/demo_namespaces/{{item}}.yml" with_items: - "{{ namespace }}" - name: "Creating Namespaces(2/2)" command: "kubectl create -f {{item}}.yml --kubeconfig=/var/lib/kubernetes/kubeconfig.yaml" args: chdir: ~/ansible_ns/demo_namespaces/ ignore_errors: true with_items: - "{{ namespace }}" 仅供参考,我也尝试了Ansible-2.4.2。但是没有运气

我的系统操作系统:CentOS 7

我的问题是:

  • 这个错误在我的上下文中是什么意思“[Errno 2]没有这样的文件或目录”

  • 我知道Ansible介绍了kubectl和k8s模块:社区中是否有人使用这些。。如果是,请告诉我如何使用它们。如果他们有任何先决条件,请分享 对于kubectl模块:了解到先决条件是kubectl go library。我可以知道我在哪里吗 去图书馆

  • 当kubectl版本为1.8,ansible版本为2.4.2时,我可以使用命令模块获得使用“kubectl create-f…”创建的K8s资源。但是,当我将集群从v1.8升级到v1.16.3时,我无法使用命令模块使用“kubectl create-f…”创建资源。如果我错过了做事情,就让我来


  • 提前感谢社区

    好吧,有两种方法可以让这个过程更好、更实用

    您可以尝试这样使用模块

    - name: Create k8s catota namespace
      k8s:
        name: catota
        api_version: v1
        kind: Namespace
        state: present
    
    或者您也可以使用该模块:

    - name: Create k8s catota namespace
      shell: "kubectl create namespace catota"
      args:
        executable: /bin/bash
    

    如果您使用ansible 2.9.2,则它具有可用的模块。它提供了完全声明性的方法(而不是发出命令),这与kubernetes本身更相似

    例如,如果要创建新名称空间,只需使用:

    - name: Create a k8s namespace
      k8s:
        name: testing
        api_version: v1
        kind: Namespace
        state: present
    

    您必须承认它看起来更简单。

    您必须在命令模块中添加kubectl的路径

    command: "/the/path/kubectl create -f {{item}}.yml .........."
    

    这是因为$PATH没有用kubectl的路径更新。您也可以将路径添加到$path,而不是在命令模块中提供路径。

    在命令之前为kubectl提供路径,或者尝试使用shell命令,或者尝试提供BENG:true1。如果我使用shell模块。我得到“/bin/sh:kubectl:command not found”。2.我已经用过下面的东西了:true-been\u方法:sudo-been\u用户:root 3。“在命令之前为kubectl提供路径”-如-有什么例子吗?我指的是kubectl的路径。命令:“/the/path/kubectl create-f{{item}}.yml.kubectl所在的路径exists@smily-正在工作..非常感谢..但是为什么我应该在命令中放置kubectl的路径。是否有解决方法?如果我使用shell模块。我在使用k8s模块时得到“/bin/sh:kubectl:command not found”:我得到此错误无法在abc059.xyz.local的(我的虚拟机的主机名)Python/usr/bin/Python上导入所需的Python库(openshift)。请阅读模块文档并安装在适当的位置。如果安装了所需的库,但Ansible使用了错误的Python解释器,请参阅Ansible_Python_解释器的文档“.openshift是否需要明确地安装在/usr/bin/python路径上?-我对这一点不熟悉。似乎很多人都面临着与您相同的错误。在GitHub上查找一些问题时,我遇到了一个可能对您有所帮助的问题:。关于shell模块,看起来您的kubectl不是为了使用/bin/sh而添加到$PATH上的。能否在要运行这些ansible命令的主机上手动执行
    kubectl create ns namespace name
    ?shell模块默认使用/bin/sh来运行命令。尝试改为设置bashshell。我编辑了我的答案,请查看。在使用k8s模块时:我遇到了以下错误“未能在abc059.xyz.local(我的虚拟机的主机名)上导入所需的Python库(openshift)”Python/usr/bin/Python。请阅读模块文档并安装在适当的位置。如果安装了所需的库,但Ansible使用了错误的Python解释器,请参阅Ansible_Python_解释器的文档”。openshift是否需要明确地安装在/usr/bin/python路径上?-我是新手。您的
    python解释器
    需要额外的库
    openshift
    ()才能处理
    k8s
    模块所需的操作。安装它的最简单方法是使用python包管理器
    pip
    。您只需运行以下命令:
    pip install openshift
    。我从smily获得了一个解决方案。我将使用该解决方案,因为我必须对源代码进行最小的更改。改天我也会尝试使用k8s模块,并会让你知道。。也非常感谢您的帮助。我完全理解您可能更喜欢使用当前的解决方案,因为它的准备需要相当多的时间和精力,而且实际上已经准备好了。但是,请记住,这不是一个非常灵活的解决方案。请注意,Ansible中存在
    shell
    command
    模块,这是一种解决现有模块无法正确完成的问题的方法。在剧本中运行命令命令与,Ansible中的核心概念之一。My Kubectl位于路径/usr/local/bin
    echo$path/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    FYI,$path中已经存在的kubectl路径可能是特定用户的path变量,但未使用该变量设置$path。尝试从Ansible回显$PATH,以验证通过Ansible:
    “stdout_行”:[“/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:……”]
    的shell:“回显$PATH”回显$PATH的输出。它有/usr/local/bin。哦,很抱歉,这是我的理解,但我希望给出路径将解决您的问题
    command: "/the/path/kubectl create -f {{item}}.yml .........."