如何在python3 kubernetes客户端中加载2个(或更多)不同的kubeconfig?

ehxuflar  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(3)|浏览(84)

我在2个区域中有2个Kubernetes集群
2个kubeconfig文件为kube1.kubeconfigkube2.kubeconfig
我使用python调用kubernetes集群使用kubernetes-client python
我看到它将从envKUBECONFIG加载配置
但我的程序需要推动API到2个不同的集群
那么有没有办法解决这些问题:
示例代码:

if <condiation a>:
  (load kube1.kubeconfig)
  (process my code)
elif <condition b>:
  (load kube2.kubeconfig)
  (process my code)
bbmckpt7

bbmckpt71#

您可以使用new_client_from_config_dict函数从不同的kubeconfig创建单独的客户端。这为您提供了2个独立的客户端,而无需全局加载配置:

def make_k8s_client(kubeconfig: dict) -> kubernetes.client.CoreV1Api:
    api_client = kubernetes.config.new_client_from_config_dict(kubeconfig)
    return kubernetes.client.CoreV1Api(api_client)
    
with open('kubeconfig.yaml') as f:
    kubeconfig = yaml.safe_load(f)

k8s_1 = make_k8s_client(kubeconfig)

# a different config

with open('kubeconfig2.yaml') as f:
    kubeconfig2 = yaml.load(f)

k8s_2 = make_k8s_client(kubeconfig2)
mo49yndu

mo49yndu2#

对于kubectl,通常的方法是将所有kubeconfig文件合并为一个kubeconfig文件,然后使用上下文API在上下文/集群kubectl config use-context my-context-1kubectl config use-context my-context-2之间切换。看看python kubernetes-client,你可以做同样的事情:

tpgth1q7

tpgth1q73#

python Kubernetes库提供以下功能:https://github.com/kubernetes-client/python-base/blob/09dbbe521e203634154764b903208bb28cd70f9d/config/kube_config.py#L796

config.load_kube_config(config_file=None, context=None, client_configuration=None, persist_config=True)

你可以这样使用它:

from kubernetes import config

config.load_kube_config(config_file='./kubeconfig_file_path1')
# now you can do what you need to do with this cluster

config.load_kube_config(config_file='./kubeconfig_file_path2')
# now you can do what you need to do with this other cluster

您还可以指定在同一个kubeconfig文件中有多个上下文的情况下使用kubeconfig文件中的哪个上下文。
所以如果你想保持kubeconfig文件独立,这是另一种方法。

相关问题