Skip to main content
 首页 » 编程设计

python之Kubernetes API 服务器

2025年05月04日13JeffreyZhao

所以我刚开始使用 Kubernetes API 服务器,我尝试了这个例子:

from kubernetes import client, config 
def main(): 
    # Configs can be set in Configuration class directly or using helper 
    # utility. If no argument provided, the config will be loaded from 
    # default location. 
    config.load_kube_config() 
 
    v1 = client.CoreV1Api() 
    print("Listing pods with their IPs:") 
    ret = v1.list_pod_for_all_namespaces(watch=False) 
    for i in ret.items: 
        print("%s\t%s\t%s" % 
              (i.status.pod_ip, i.metadata.namespace, i.metadata.name)) 
if __name__ == '__main__': 
    main() 

这行得通,但它返回了我本地 minikube 上的 pod,我想在这里获取 kubernetes 服务器上的 pod: http://192.168.237.115:8080 我该怎么做?

当我执行 kubectl config view 时,我得到了这个:

apiVersion: v1 
clusters: 
- cluster: 
    certificate-authority: /home/piyush/.minikube/ca.crt 
    server: https://192.168.99.100:8443 
  name: minikube 
contexts: 
- context: 
    cluster: minikube 
    user: minikube 
  name: minikube 
current-context: minikube 
kind: Config 
preferences: {} 
users: 
- name: minikube 
  user: 
    client-certificate: /home/piyush/.minikube/apiserver.crt 
    client-key: /home/piyush/.minikube/apiserver.key 

我知道这是我设置的本地集群。我想知道如何修改它以向 http://192.168.237.115:8080

上的 kubernetes 服务器发出 api 请求

请您参考如下方法:

您实际上可以创建一个简单的 api 包装器。这样你就可以通过不同的yaml配置文件,我想可能有不同的主机

import yaml 
 
from kubernetes import client 
from kubernetes.client import Configuration 
from kubernetes.config import kube_config 
 
 
class K8s(object): 
    def __init__(self, configuration_yaml): 
        self.configuration_yaml = configuration_yaml 
        self._configuration_yaml = None 
 
    @property 
    def config(self): 
        with open(self.configuration_yaml, 'r') as f: 
            if self._configuration_yaml is None: 
                self._configuration_yaml = yaml.load(f) 
        return self._configuration_yaml 
 
    @property 
    def client(self): 
        k8_loader = kube_config.KubeConfigLoader(self.config) 
        call_config = type.__call__(Configuration) 
        k8_loader.load_and_set(call_config) 
        Configuration.set_default(call_config) 
        return client.CoreV1Api() 
 
 
# Instantiate your kubernetes class and pass in config 
kube_one = K8s(configuration_yaml='~/.kube/config1') 
kube_one.client.list_pod_for_all_namespaces(watch=False) 
 
kube_two = K8s(configuration_yaml='~/.kube/config2') 
kube_two.client.list_pod_for_all_namespaces(watch=False) 

也是 libcloud 中的另一个简洁引用。 https://github.com/apache/libcloud/blob/trunk/libcloud/container/drivers/kubernetes.py .

祝你好运!希望这可以帮助! :)