当我们有多个配置时,使用群集名称或上下文名称获取节点/荚信息

时间:2019-09-05 21:36:03

标签: kubernetes ansible

我正在尝试使用上下文名称通过ansible剧本获取节点列表。但不起作用

我的剧本:

getnodes.yaml

- name: "get nodes"
  hosts: kubernetes
  tasks:
    - name: "nodes"
      command: "kubectl get nodes --context='contextname'"

我在配置文件中确实有多个群集。我需要指定集群名称或上下文名称并获取节点列表,或在特定集群上执行任何活动

1 个答案:

答案 0 :(得分:0)

据我了解,当您直接在主节点上运行命令kubectl get nodes --context='contextname'时,一切正常,对吗?并且仅当您将其作为主节点的ansible剧本的一部分运行时,它才会失败吗?您会遇到什么错误?

  

是的,这是正确的。我能够从命令行执行

     

“与服务器localhost:8080的连接被拒绝-您是否已   指定正确的主机或端口?”

确定运行ansible剧本时,它是否在同一主机上可用?我的意思是您的 Kubernetes主节点,在其上安装了kubectl个二进制文件?我的猜测是,它不是,即使它在同一主机上,也无法使用localhost:8080连接到它。

看。您在这里没有使用任何特定的 Ansible模块来管理诸如this one之类的 Kubernetes 集群,而该集群直接针对API服务器运行,因此您需要提供其有效的网址。而是在这里,您仅使用简单的command模块,只要您提供具有 ssh访问权限安装了Python

在这种情况下,您的 Ansible 只是尝试将ssh切换到您的 Kubernetes主节点,并执行传递给它的shell命令:

hostname

我真的怀疑您的ssh服务器在端口8080上侦听。 如果您在同一主机上运行ansible剧本,则可以运行kubectl get nodes --context='contextname' 命令, Ansible 中针对以下情况的解决方案要简单得多:

您的任务中的

kubectllocal_action语句或更全局的delegate_to: localhost 您可以在Ansible docsthis文章中找到Ansible connection: local中上述所有语句的用法的更多详细信息。 希望对您有帮助。