Kubernetes:如何使用python API在命名空间中获取所有pod?

时间:2018-09-14 09:31:00

标签: python kubernetes namespaces

我正在使用python访问我的集群。我碰到的唯一一件接近的事是list_namespaced_pod,它没有给我豆荚的实际名称。

2 个答案:

答案 0 :(得分:2)

如注释中所述,您可以访问API调用返回的容器项列表中每个容器的metadata中的所有信息。

这里是一个示例:

def get_pods():  

    v1 = client.CoreV1Api()
    pod_list = v1.list_namespaced_pod("example")
    for pod in pod_list.items:
        print("%s\t%s\t%s" % (pod.metadata.name,
                              pod.status.phase,
                              pod.status.pod_ip))

答案 1 :(得分:0)

你应该已经找到了溶胶。为了获得 pod 名称,我在这里再发一张。

在下面,您可以使用特定的正则表达式从命名空间中获取 pod(正则表达式 = 如果您想使用某种模式搜索特定的 pod)。 您也可以使用下面的 fn 来检查特定的 pod 是否存在。

from kubernetes import config , client
from kubernetes.client import Configuration
from kubernetes.client.api import core_v1_api
from kubernetes.client.rest import ApiException
from kubernetes.stream import stream
import re 

  pod_namespace = "dev_staging"
  pod_regex = "log_depl"
try:
    config.load_kube_config()
    c = Configuration().get_default_copy()
except AttributeError:
    c = Configuration()
    c.assert_hostname = False
Configuration.set_default(c)
core_v1 = core_v1_api.CoreV1Api()

    def get_pod_name(core_v1,pod_namespace,pod_regex):    
    ret = core_v1.list_namespaced_pod(pod_namespace)
    for i in ret.items:
        #print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))
        pod_name=i.metadata.name
        if re.match(pod_regex, pod_name):
            return pod_name
    def check_pod_existance(api_instance,pod_namespace,pod_name):
    resp = None
    try:
        resp = api_instance.read_namespaced_pod(name=pod_name,namespace=pod_namespace)
    except ApiException as e:
        if e.status != 404:
            print("Unknown error: %s" % e)
            exit(1)
    if not resp:
        print("Pod %s does not exist. Create it..." % pod_name)

您可以将函数调用为:

pod_name=get_pod_name(core_v1,pod_namespace,pod_regex)
    check_pod_existance(core_v1,pod_namespace,pod_name)