代码之家  ›  专栏  ›  技术社区  ›  Vijaya Shree

Kubectl命令在从python脚本执行时抛出错误,但手动执行可以正常工作

  •  0
  • Vijaya Shree  · 技术社区  · 2 年前

    我在试着执行 kubectl python中的命令

    process = subprocess.run(["kubectl", "get", "pods", "-n", "argocd"])
    

    这会抛出错误:

    __main__ - INFO - 
    E0328 08:18:04.126243   25976 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
    E0328 08:18:04.126801   25976 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
    E0328 08:18:04.129854   25976 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
    E0328 08:18:04.130344   25976 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
    E0328 08:18:04.131804   25976 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
    The connection to the server localhost:8080 was refused - did you specify the right host or port?
    __main__ - ERROR - Failed to get po.
    NoneType: None
    

    但是,当我从主节点手动执行相同的命令时,我看到的输出没有任何问题。

    有人能帮我找出这里的问题吗?

    0 回复  |  直到 2 年前
        1
  •  0
  •   smadi0x86    2 年前

    这个问题似乎与KubeAPI服务器的身份验证有关。要排除故障并解决此问题,请执行以下步骤:

    检查Kubernetes API服务器配置:

    确保您的Python环境可以访问Kubernetes配置文件(默认情况下为~/.kube/config)。此文件包含访问Kubernetes集群所需的凭据和配置详细信息。

    验证上下文是否正确:

    检查Kubernetes配置文件是否指定了具有在argocd命名空间中列出Pod所需权限的正确上下文。

    您可以通过运行以下命令来实现:

    kubectl config current-context
    

    测试API服务器可达性:

    使用以下方法验证Kubernetes API服务器是否可以从您的Python环境访问:

    curl http://localhost:8080/api
    

    更换 localhost:8080 如果实际的API服务器地址不同,您可以通过运行 cat /etc/kubernetes/manifests/kube-apiserver.yaml

    添加身份验证:

    如果您的Kubernetes API服务器需要身份验证,并且没有在Python环境中进行配置,请设置身份验证。这可能涉及使用服务帐户令牌、带有凭据的kubeconfig文件或基于Kubernetes集群设置的其他身份验证方法。

    调试输出:

    在Python脚本中包含更详细的输出,以捕获可能有助于诊断身份验证问题的任何错误消息或详细信息。

    例子:

    import subprocess
    
    try:
        result = subprocess.run(["kubectl", "get", "pods", "-n", "argocd"], capture_output=True, text=True, check=True)
        print("Output:", result.stdout)
    except subprocess.CalledProcessError as e:
        print("Error:", e)
        print("Error Output:", e.stderr)