7
votes

Comment obtenir le journal et décrire les pods dans Kubernetes par le client Python

Je veux obtenir un journal et une description de mon pod dans kubernetes par le client python. Dans le cluster kubernetes, nous pouvons utiliser

kubectl logs <NAME_OF_POD>
kubectl describe pods <NAME_OF_pod>

Mais je veux ces commandes dans le client python de kubernetes, que dois-je faire?


0 commentaires

4 Réponses :


1
votes

Vous devez explorer https://github.com/kubernetes-client/python Officiel Client Python K8s.

Mais je n'ai pas trouvé de documentation spécifique à vos besoins. Je pense que le lien ci-dessous est le point de départ,

https://github.com/kubernetes-client/python/blob/master/kubernetes/README.md

Essayez de faire dir sur le objet et voir les méthodes disponibles. Par exemple, code ci-dessous de README

from kubernetes import client, config

# Configs can be set in Configuration class directly or using helper utility
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)) 

Faites dir (v1) ou dir (ret) et consultez les méthodes / vars , etc. Ou peut-être que les méthodes list * vous donnent les détails que vous voyez dans kubectl describe pod


2 commentaires

ce n'est pas ce que je veux. cela montre la liste de mon pod. Je veux le journal et décrire


Ceci est un exemple d'extrait de code pour trouver les méthodes disponibles pour obtenir "décrire" et "journaux", s'il y en a. Vous devez d'abord vérifier les méthodes de list pour savoir ce que cela donne



12
votes

Vous pouvez lire les logs d'un pod en utilisant le code suivant:

from kubernetes.client.rest import ApiException
from kubernetes import client, config

config.load_kube_config()
pod_name = "counter"
try:
    api_instance = client.CoreV1Api()
    api_response = api_instance.read_namespaced_pod_log(name=pod_name, namespace='default')
    print(api_response)
except ApiException as e:
    print('Found exception in reading the logs')

Le code ci-dessus fonctionne parfaitement pour obtenir les logs du pod.

Pour obtenir le sortie de kubectl describe pod , toutes les informations fournies sont dans la fonction read_namespaced_pod . Il contient toutes les informations dont vous avez besoin et vous pouvez les utiliser de la manière dont vous avez besoin. Vous pouvez modifier le code ci-dessus et utiliser read_namespaced_pod à la place de read_namespaced_pod_log pour obtenir les informations.


2 commentaires

merci pour votre réponse comment puis-je trouver plus d'exemple? GitHub est incomplet.


J'utilise le lien suivant pour identifier diverses utilisations du client en python: github.com/kubernetes-client/python/blob/master/kubernetes/d‌ ocs /… Il existe d'autres liens vers d'autres API comme V1beta1, AppsV1 etc.



2
votes

Comme Kubernetes utilise l'API REST, ce qui vous donne toutes les possibilités que vous pouvez appeler les journaux et la description des objets via python.

Tout d'abord, vous devez connaître votre mécanisme d'autorisation. Vous pouvez le trouver via votre cluster.

I0514 12:31:42.376972  216066 round_trippers.go:383] GET https://cluster-api-url/api/v1/namespaces/default/events?fieldSelector=involvedObject.namespace%3Ddefault%2CinvolvedObject.uid%3D1ad92455-7589-11e9-8dc1-02a3436401b6%2CinvolvedObject.name%3Dnginx-ingress-controller-7bbcbdcf7f-dgr57
I0514 12:31:42.377026  216066 round_trippers.go:390] Request Headers:
I0514 12:31:42.377057  216066 round_trippers.go:393]     Accept: application/json, */*
I0514 12:31:42.377074  216066 round_trippers.go:393]     Authorization: Basic YWRtaW46elRoYUJoZDBUYm1FbGpzbjRtYXZ2N1hqRWlvRkJlQmo=
I0514 12:31:42.377090  216066 round_trippers.go:393]     User-Agent: kubectl/v1.12.0 (linux/amd64) kubernetes/0ed3388

Ensuite, vous pouvez créer un appel api avec cette méthode d'authentification. Dans l'exemple ci-dessous, j'ai utilisé l'authentification de base pour obtenir les journaux de pod par exemple.

kubectl describe pod nginx-ingress-controller-7bbcbdcf7f-dgr57 --v=8

Pour obtenir facilement l'URL, tapez la commande avec l'argument "--v = 8". Par exemple, pour obtenir l'URL pour décrire le pod

import json
import requests
from requests.auth import HTTPBasicAuth
user='admin'
password='password'
url='https://cluster-api-url/api/v1/namespaces/default/pods/nginx-ingress-controller-7bbcbdcf7f-dgr57/log'

requests.packages.urllib3.disable_warnings()
resp = requests.get(url, auth=HTTPBasicAuth(user, password), verify=False, json=False)
print(resp.text)

et vérifier la partie ci-dessus de votre sortie réelle

kubectl config view --raw

Copier l'URL de GET https: // part et changez avec url dans votre script python, puis vous y allez.

J'espère que cela aide


1 commentaires

je ne veux pas utiliser get ou post je veux du code client python



1
votes

Aucune de ces réponses ne renvoie les événements d'un pod à espace de nom, qui est donné par défaut lors de l'exécution de kubectl describe . Pour obtenir les événements d'espacement de noms pour un pod donné, exécutez:

from kubernetes import client, config
config.load_kube_config()
v1 = client.CoreV1Api()
out = kube.core_api.list_namespaced_event(namespace, field_selector=f'involvedObject.name={pod_name}')

namespace est l'espace de noms d'intérêt et pod_name est votre pod de intérêt.

J'en avais besoin lors de la création d'un pod et pour donner à l'utilisateur un rapport d'état raisonnable sur l'état actuel du pod, ainsi que pour déboguer l'état du pod s'il ne parvient pas à progresser au-delà de "En attente" .


0 commentaires