Kubernetes API与“上下文”的等价物是什么?

2024-06-06 05:02:50 发布

您现在位置:Python中文网/ 问答频道 /正文

使用kubectl命令行,我可以使用--context标志在给定上下文中运行命令,例如:

kubectl --context <MyContext> get deploy messenger

然而,当我试图使用下面的API列出POD时,似乎没有一种在上下文中传递的方法

 from kubernetes import client
 v1 = client.CoreV1Api()
 pods = v1.list_namespaced_pod("messenger")

上面的命令似乎为我提供了当前上下文中的pod

有没有办法使用Python API在不同的上下文中列出POD?

我查看了以下文档并查找了字符串context,但没有发现任何有启发性的内容

https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/https://github.com/kubernetes-client/python/blob/master/kubernetes/README.md


Tags: 命令行https命令clientapi标志contextmessenger
1条回答
网友
1楼 · 发布于 2024-06-06 05:02:50

您可以从文件中读取上下文并将其传递给CoreV1Api函数,如下所示

# Copyright 2016 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""
Allows you to pick a context and then lists all pods in the chosen context.
Please install the pick library before running this example.
"""

from kubernetes import client, config
from kubernetes.client import configuration
from pick import pick  # install pick using `pip install pick`


def main():
    contexts, active_context = config.list_kube_config_contexts()
    if not contexts:
        print("Cannot find any context in kube-config file.")
        return
    contexts = [context['name'] for context in contexts]
    active_index = contexts.index(active_context['name'])
    cluster1, first_index = pick(contexts, title="Pick the first context",
                                 default_index=active_index)
    cluster2, _ = pick(contexts, title="Pick the second context",
                       default_index=first_index)

    client1 = client.CoreV1Api(
        api_client=config.new_client_from_config(context=cluster1))
    client2 = client.CoreV1Api(
        api_client=config.new_client_from_config(context=cluster2))

    print("\nList of pods on %s:" % cluster1)
    for i in client1.list_pod_for_all_namespaces().items:
        print("%s\t%s\t%s" %
              (i.status.pod_ip, i.metadata.namespace, i.metadata.name))

    print("\n\nList of pods on %s:" % cluster2)
    for i in client2.list_pod_for_all_namespaces().items:
        print("%s\t%s\t%s" %
              (i.status.pod_ip, i.metadata.namespace, i.metadata.name))


if __name__ == '__main__':
    main()

代码也可以在github示例文件夹中找到 https://github.com/kubernetes-client/python/blob/master/examples/multiple_clusters.py

相关问题 更多 >