What is the Kubernetes API equivalent of `--context`?

12/19/2020

With the kubectl command line, I can run commands in a given context using the --context flag, such as:

kubectl --context <MyContext> get deploy messenger

However, when I am trying to list pods using the following API, there does not appear to be a way to pass in the context.

 from kubernetes import client
 v1 = client.CoreV1Api()
 pods = v1.list_namespaced_pod("messenger")

The command above seems to give me the pods in the current context.

Is there a way to list the pods under a different context using the Python API?

I've looked at the following docs and looked for the string context but haven't found anything illuminating.

https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/ https://github.com/kubernetes-client/python/blob/master/kubernetes/README.md

-- merlin2011
kubernetes
python

1 Answer

12/19/2020

you can read the contexts from the file and pass it to the CoreV1Api function like below

# 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()

Code can be found on there github example folder as well https://github.com/kubernetes-client/python/blob/master/examples/multiple_clusters.py

-- Nitin Goyal
Source: StackOverflow