Kubernetes Ansible Error:“;[Errno 2]没有这样的文件或目录";
我无法在ansible命令模块中执行kubectl(v1.16.3)命令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
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
我的问题是:
提前感谢社区好吧,有两种方法可以让这个过程更好、更实用 您可以尝试这样使用模块
- 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/binecho$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 .........."