python - 什么是 `--context` 的 Kubernetes API 等价物?

标签 python kubernetes

使用 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

最佳答案

您可以从文件中读取上下文并将其传递给 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

关于python - 什么是 `--context` 的 Kubernetes API 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65366350/

相关文章:

python - Psychopy:立即重新缩放所有视觉图像对象

python - 如何设置 Pandas DataFrame 左上角单元格的样式

amazon-web-services - Kubeadm 为什么我的节点没有显示,虽然 kubelet 说它加入了?

docker - 为什么我不能使用访问 Pod 资源和 GET 动词的服务帐户执行 `kubectl get pods --as=api-test -n default`?

docker - kubernetes:在pod启动后挂载主机路径卷

python - pd.merge 时处理空值

python - 如何在 Webfaction 上部署 Flask 应用程序?

python - 封装 vs. 继承,帮助做出选择

kubernetes - 为什么在针对EKS托管服务的ALB端点上出现502错误

kubernetes - 删除Windows的docker-for-Windows Kuberentes kubeconfig文件