Kubernetes:如何使用API获取一个名称空间中的所有pod?

nwlls2ji  于 2022-12-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(299)

我正在使用python访问我的集群,我遇到的唯一一件事,也就是close是list_namespaced_pod,它没有给予我pod的实际名称。

omqzjyyz

omqzjyyz1#

如注解中所述,您可以访问API调用返回的pod项列表中每个pod的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))
dddzy1tm

dddzy1tm2#

你可能已经找到了获取吊舱名称的解决方案,我在这里再贴一个。
下面你可以用特定的正则表达式从命名空间中获取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)

相关问题