python - `--context` 的 Kubernetes API 等价物是什么?
问题描述
使用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 - 父类 self.__class__.__name__ 打印子类的名称
- javascript - 同一页面上的两个 Off Canvas 侧边栏
- javascript - 使用 laravel 和 vue.js 提交数据后显示消息
- c# - C# 从没有结束字符的网络流中读取
- sql - 左连接计数来自第二个表的三个属性
- r - 使用do.call将数据帧列表转换为具有多列的单个数据帧在R中的循环中不起作用
- javascript - 使javascript ip地址正则表达式拒绝数字0
- hardware - Epyc 2 是否具有与 DDIO 等效的功能?
- php - 如何更改a的顺序
带有 PHP 和 MySQL 的元素
- swiftui - 带有 Overlay 的 SwiftUI UIView 取消触摸