所以我刚刚开始使用 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()
Run Code Online (Sandbox Code Playgroud)
这有效,但它返回了我本地 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
Run Code Online (Sandbox Code Playgroud)
我知道这是针对我设置的本地集群。我想知道如何修改它以向 kubernetes 服务器发出 api 请求http://192.168.237.115:8080
小智 6
我有两个解决方案给你:
[首选] 配置您的 kubectl(即 ~/.kube/config)文件。在 kubectl 与您的集群一起工作后,python 客户端应该自动与load_kube_config. kubectl 的配置请看这里:https ://kubernetes.io/docs/tasks/administer-cluster/share-configuration/
可以直接配置python客户端。有关完整的配置列表,请查看:https : //github.com/kubernetes-client/python-base/blob/8704ce39c241f3f184d01833dcbaf1d1fb14a2dc/configuration.py#L48
您可能需要为您的客户端设置其中一些配置以连接到您的集群。例如,如果您没有启用任何证书或 SSL:
from kubernetes import client, configuration
def main():
configuration.host = "http://192.168.237.115:8080"
configuration.api_key_prefix['authorization'] = "Bearer"
configuration..api_key['authorization'] = "YOUR_TOKEN"
v1 = client.CoreV1Api()
...
Run Code Online (Sandbox Code Playgroud)
您可能需要设置其他配置,例如用户名、api_key 等。这就是为什么我认为如果您遵循第一个解决方案会更容易。
小智 5
您实际上可以创建一个简单的 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)
Run Code Online (Sandbox Code Playgroud)
也是 libcloud 中的另一个简洁参考。https://github.com/apache/libcloud/blob/trunk/libcloud/container/drivers/kubernetes.py。
祝你好运!希望这可以帮助!:)
| 归档时间: |
|
| 查看次数: |
6591 次 |
| 最近记录: |