#python #kubernetes
#python #kubernetes
Вопрос:
С kubectl
помощью командной строки я могу запускать команды в заданном контексте, используя --context
флаг, например:
kubectl --context <MyContext> get deploy messenger
Однако, когда я пытаюсь перечислить модули, используя следующий API, похоже, нет способа передать контекст.
from kubernetes import client
v1 = client.CoreV1Api()
pods = v1.list_namespaced_pod("messenger")
Приведенная выше команда, похоже, дает мне модули в текущем контексте.
Есть ли способ перечислить модули в другом контексте, используя Python API?
Я просмотрел следующие документы и искал строку context
, но не нашел ничего проясняющего.
https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/
https://github.com/kubernetes-client/python/blob/master/kubernetes/README.md
Комментарии:
1. этот контекст сохраняется в файле .kubeconfig?
Ответ №1:
вы можете прочитать контексты из файла и передать его 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("%st%st%s" %
(i.status.pod_ip, i.metadata.namespace, i.metadata.name))
print("nnList of pods on %s:" % cluster2)
for i in client2.list_pod_for_all_namespaces().items:
print("%st%st%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