我正在尝试使用上下文名称通过ansible剧本获取节点列表。但不起作用
我的剧本:
getnodes.yaml
- name: "get nodes"
hosts: kubernetes
tasks:
- name: "nodes"
command: "kubectl get nodes --context='contextname'"
我在配置文件中确实有多个群集。我需要指定集群名称或上下文名称并获取节点列表,或在特定集群上执行任何活动
答案 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 中针对以下情况的解决方案要简单得多:
kubectl
或local_action
语句或更全局的delegate_to: localhost
您可以在Ansible docs和this文章中找到Ansible connection: local
中上述所有语句的用法的更多详细信息。
希望对您有帮助。