【发布时间】:2019-08-24 10:37:34
【问题描述】:
我正在尝试从 ansible 运行 kubectl 命令。
基本上,该命令会告诉我部署中是否至少有一个 pod 正在运行。
kubectl get deploy sample-v1-deployment -o json -n sample | jq '.status.conditions[] | select(.reason == "MinimumReplicasAvailable") | .status' | tr -d '"'
我试图从剧本中运行它,但我得到了
无法连接到服务器:net/http: TLS 握手超时
这是我的剧本:
- hosts: master
gather_facts: no
become: true
tasks:
- name: test command
shell: kubectl get deploy sample-v1-deployment -o json -n sample | jq '.status.conditions[] | select(.reason == "MinimumReplicasAvailable") | .status' | tr -d '"'
register: result
这是 ansible 的输出:
changed: [k8smaster01.test.com] => {
"changed": true,
"cmd": "kubectl get deploy sample-v1-deployment -o json -n sample | jq '.status.conditions[] | select(.reason == \"MinimumReplicasAvailable\") | .status' | tr -d '\"'",
"delta": "0:00:10.507704",
"end": "2019-04-02 20:59:17.882277",
"invocation": {
"module_args": {
"_raw_params": "kubectl get deploy sample-v1-deployment -o json -n sample | jq '.status.conditions[] | select(.reason == \"MinimumReplicasAvailable\") | .status' | tr -d '\"'",
"_uses_shell": true,
"argv": null,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"warn": true
}
},
"rc": 0,
"start": "2019-04-02 20:59:07.374573",
"stderr": "Unable to connect to the server: net/http: TLS handshake timeout",
"stderr_lines": [
"Unable to connect to the server: net/http: TLS handshake timeout"
],
"stdout": "",
"stdout_lines": []
}
我可以在主服务器上手动运行命令而不会出现问题。我还能够使用 k8s 模块在我的 kubernetes 集群上创建不同的东西。
我知道ansible上有一个kubectl模块,会不会是问题所在?
谢谢
【问题讨论】:
-
您是否在您的环境中设置了
$KUBECONFIG,例如在您的~/.bash_profile中?这将导致交互式版本与 ansible ssh 会话不同。你可以很容易地通过在现有 kubectl 之前运行- shell: kubectl config view来查看配置 - 更重要的是contextkubectl 在 ansible 下使用了什么 -
另外,你没有问这个问题,但你可以通过告诉
jq使用jq -r返回raw value 来消除对最终tr -d的需要 -
我能够从 ansible 和 kubernetes 服务器运行 kubectl 配置视图,并且两者都有相同的信息。
-
我也尝试像 /usr/bin/kubectl --kubeconfig=/root/.kube/config get deploy sample-v1-deployment -n sample 一样运行它,得到了同样的错误。跨度>
标签: kubernetes ansible kubectl