
Vous ne savez pas quel type de ressource utiliser, quelle apiVersion écrire, ou quels champs mettre dans votre manifest YAML ? Les deux commandes kubectl api-resources et kubectl explain répondent à ces questions en interrogeant directement votre cluster. Ce guide vous montre comment les utiliser au quotidien pour explorer l’API, découvrir des CRD et écrire des manifests sans deviner.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »À la fin de ce guide, vous saurez :
- Trouver n’importe quel type de ressource dans l’API Kubernetes (nom, shortname, groupe, kind)
- Déterminer le
kindet l’apiVersioncorrects pour écrire un manifest YAML - Explorer la structure d’un objet et comprendre chaque champ avec
kubectl explain - Découvrir les CRD (Custom Resource Definitions) installées sur votre cluster
- Lister toutes les ressources d’un namespace (au-delà de
kubectl get all) - Filtrer par catégorie, groupe d’API ou portée (namespaced vs cluster-wide)
Les 3 commandes à retenir
Section intitulée « Les 3 commandes à retenir »Avant d’aller plus loin, voici les trois commandes que vous utiliserez le plus souvent :
# 1) Chercher une ressource (type, shortname, apiGroup, namespaced)kubectl api-resources | grep -i ingress
# 2) Explorer les champs d'un objet pour écrire un manifestkubectl explain deployment.spec.template.spec.containers --recursive
# 3) Filtrer par famille (workloads, RBAC, stockage…)kubectl api-resources --api-group=appskubectl api-resources : trouver le bon type de ressource
Section intitulée « kubectl api-resources : trouver le bon type de ressource »kubectl api-resources affiche tous les types de ressources disponibles sur votre cluster, y compris les CRD installées par des opérateurs.
Ce que la sortie vous apprend
Section intitulée « Ce que la sortie vous apprend »kubectl api-resourcesExemple de sortie (extrait) :
NAME SHORTNAMES APIVERSION NAMESPACED KINDdeployments deploy apps/v1 true Deploymentservices svc v1 true Serviceingresses ing networking.k8s.io/v1 true Ingressnodes no v1 false Nodeclusterroles rbac.authorization.k8s.io/v1 false ClusterRoleChaque colonne a un rôle précis :
| Colonne | Ce que ça vous donne | Où vous l’utilisez |
|---|---|---|
| NAME | Le nom au pluriel de la ressource | kubectl get <NAME> |
| SHORTNAMES | L’abréviation utilisable en CLI | kubectl get deploy au lieu de deployments |
| APIVERSION | Le groupe + version de l’API | Champ apiVersion: dans un manifest YAML |
| NAMESPACED | true = vit dans un namespace, false = cluster-wide | Savoir si -n s’applique |
| KIND | Le type exact | Champ kind: dans un manifest YAML |
Recette : trouver le kind et l’apiVersion pour un manifest
Section intitulée « Recette : trouver le kind et l’apiVersion pour un manifest »Vous voulez écrire un manifest mais vous ne connaissez pas le kind exact ni l’apiVersion ? Voici la méthode :
-
Cherchez la ressource par nom
Fenêtre de terminal kubectl api-resources | grep -i ingressSortie :
NAME SHORTNAMES APIVERSION NAMESPACED KINDingresses ing networking.k8s.io/v1 true Ingressingressclasses networking.k8s.io/v1 false IngressClass -
Lisez le kind et l’apiVersion
kind: IngressapiVersion: networking.k8s.io/v1
-
Commencez votre manifest
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: mon-ingressnamespace: productionspec:# → utilisez kubectl explain ingress.spec pour les champs -
Explorez les champs avec explain
Fenêtre de terminal kubectl explain ingress.spec.rules
Filtrer les ressources
Section intitulée « Filtrer les ressources »La liste complète est longue. Voici les filtres les plus utiles :
# Par groupe d'API (workloads)kubectl api-resources --api-group=apps
# Par groupe d'API (RBAC)kubectl api-resources --api-group=rbac.authorization.k8s.io
# Par groupe d'API (réseau)kubectl api-resources --api-group=networking.k8s.io
# Uniquement les ressources cluster-wide (non namespaced)kubectl api-resources --namespaced=false
# Uniquement les ressources namespacedkubectl api-resources --namespaced=true
# Par catégorie (si disponible)kubectl api-resources --categories=allDécouvrir les CRD installées
Section intitulée « Découvrir les CRD installées »Sur un cluster réel, des opérateurs ajoutent souvent des types de ressources personnalisés via des CRD (Custom Resource Definitions). Ces ressources apparaissent dans api-resources comme les ressources natives :
# Lister toutes les CRD installéeskubectl get crd
# Exemple de sortie# NAME CREATED AT# certificates.cert-manager.io 2026-01-15T10:00:00Z# issuers.cert-manager.io 2026-01-15T10:00:00Z# prometheusrules.monitoring.coreos.com 2026-01-20T08:00:00ZPour voir les nouveaux types qu’une CRD ajoute :
# Chercher les ressources cert-managerkubectl api-resources | grep -i cert-manager
# Chercher les ressources d'un opérateur par domainekubectl api-resources | grep monitoring.coreos.comVous pouvez ensuite utiliser kubectl explain sur ces CRD exactement comme sur les ressources natives :
kubectl explain certificate.speckubectl explain : explorer la structure d’un objet
Section intitulée « kubectl explain : explorer la structure d’un objet »kubectl explain affiche la documentation d’un type de ressource ou d’un champ précis. C’est votre documentation intégrée pour écrire des manifests YAML sans quitter le terminal.
# Vue d'ensemble d'un typekubectl explain <type>
# Un champ précis (notation pointée)kubectl explain <type>.<champ>.<sous-champ>
# L'arbre complet (tous les champs, récursif)kubectl explain <type> --recursive
# Avec une version d'API spécifiquekubectl explain <type> --api-version=<version>Recette : trouver comment écrire un readinessProbe
Section intitulée « Recette : trouver comment écrire un readinessProbe »Vous savez qu’un Deployment a des readinessProbe, mais vous ne vous souvenez plus de la syntaxe exacte :
-
Trouvez le chemin dans l’arbre
Fenêtre de terminal kubectl explain deployment.spec.template.spec.containers --recursive | grep -A2 readinessSortie :
readinessProbe <Probe>exec <ExecAction>command <[]string>httpGet <HTTPGetAction>...tcpSocket <TCPSocketAction>...initialDelaySeconds <integer>periodSeconds <integer> -
Affichez le détail du champ
Fenêtre de terminal kubectl explain deployment.spec.template.spec.containers.readinessProbeVous obtenez la description, le type, et si le champ est requis ou optionnel.
-
Explorez un sous-champ
Fenêtre de terminal kubectl explain deployment.spec.template.spec.containers.readinessProbe.httpGetSortie :
FIELD: httpGet <HTTPGetAction>DESCRIPTION:HTTPGet specifies the http request to perform.FIELDS:host <string>httpHeaders <[]HTTPHeader>path <string>port <IntOrString> -required-scheme <string> -
Écrivez votre YAML
readinessProbe:httpGet:path: /healthzport: 8080initialDelaySeconds: 5periodSeconds: 10
Explorer l’arbre complet d’un objet
Section intitulée « Explorer l’arbre complet d’un objet »L’option --recursive affiche tous les champs d’un type, présentés en arbre indenté. C’est utile pour avoir une vue d’ensemble ou pour chercher un champ dont vous avez oublié le chemin :
# Arbre complet d'un Podkubectl explain pod.spec --recursive | less
# Arbre complet d'un Deployment (très long)kubectl explain deployment --recursive | less
# Chercher un champ spécifique dans l'arbrekubectl explain deployment --recursive | grep -i tolerationLe piège kubectl get all
Section intitulée « Le piège kubectl get all »kubectl get all est souvent la première commande qu’on apprend. Mais elle ne montre pas tout — elle n’affiche que les types de la catégorie all (Pods, Services, Deployments, ReplicaSets, Jobs, CronJobs, DaemonSets, StatefulSets).
Lister vraiment toutes les ressources d’un namespace
Section intitulée « Lister vraiment toutes les ressources d’un namespace »Pour obtenir une vue complète, itérez sur tous les types namespaced :
# Liste exhaustive des ressources d'un namespacekubectl api-resources --namespaced=true --verbs=list -o name \ | xargs -I {} kubectl get {} -n <namespace> --no-headers 2>/dev/null \ | grep -v "^$"Cette commande :
- Récupère tous les types de ressources namespaced qui supportent
list - Exécute
kubectl getpour chacun - Supprime les erreurs (certains types sont vides) et les lignes vides
Pour une version plus lisible qui affiche le type de ressource devant chaque ligne :
kubectl api-resources --namespaced=true --verbs=list -o name \ | while read kind; do output=$(kubectl get "$kind" -n <namespace> --no-headers 2>/dev/null) if [ -n "$output" ]; then echo "--- $kind ---" echo "$output" fi doneCheat sheet
Section intitulée « Cheat sheet »| Je veux… | Commande |
|---|---|
| Chercher une ressource par nom | kubectl api-resources | grep -i <nom> |
| Filtrer par groupe d’API | kubectl api-resources --api-group=apps |
| Voir uniquement les ressources cluster-wide | kubectl api-resources --namespaced=false |
| Voir les CRD installées | kubectl get crd |
| Voir la structure d’un type | kubectl explain <type> |
| Explorer un champ précis | kubectl explain <type>.<champ>.<sous-champ> |
| Afficher l’arbre complet | kubectl explain <type> --recursive |
| Chercher un champ dans l’arbre | kubectl explain <type> --recursive | grep <champ> |
| Trouver le kind + apiVersion | kubectl api-resources | grep -i <nom> → colonnes KIND et APIVERSION |
Lister tout dans un namespace (pas juste get all) | Boucle sur api-resources --namespaced=true |
Bonnes pratiques
Section intitulée « Bonnes pratiques »- Utilisez
explainavant d’écrire un manifest — c’est plus fiable qu’une recherche web, car aligné avec votre version du cluster. - Vérifiez l’apiVersion avec
api-resources— les groupes d’API changent entre versions (ex:extensions/v1beta1→networking.k8s.io/v1pour les Ingress). - Ne faites pas confiance à
kubectl get all— utilisez la boucle surapi-resourcespour un audit complet. - Explorez les CRD — sur un cluster entreprise, la moitié des ressources sont souvent des CRD installées par des opérateurs.
- Combinez
--recursiveetgrep— pour naviguer dans les grandes structures sans se perdre. - Passez
--api-versionà explain — si votre cluster propose plusieurs versions d’une même ressource, précisez laquelle vous ciblez.
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
kubectl explain retourne error: couldn't find resource | Nom de la ressource incorrect | Vérifiez avec kubectl api-resources | grep -i <nom> |
explain montre des champs qui n’existent pas dans votre YAML | Vous regardez la mauvaise version de l’API | Ajoutez --api-version=apps/v1 (ou la version correcte) |
api-resources ne montre pas un type attendu | CRD pas installée ou droits insuffisants | Vérifiez kubectl get crd et vos permissions RBAC |
api-resources affiche deux lignes pour le même type | La ressource existe dans plusieurs groupes d’API | Utilisez --api-group= pour cibler le bon groupe |
kubectl get all ne montre pas mes Ingress/Secrets | get all ne couvre pas tous les types | Utilisez la boucle sur api-resources ou ciblez le type directement |
explain --recursive est trop long | Type complexe (Deployment, Pod) | Pipez dans less ou combinez avec grep |
À retenir
Section intitulée « À retenir »kubectl api-resourcesliste tous les types de ressources de votre cluster, y compris les CRD — c’est votre annuaire.kubectl explainaffiche la documentation d’un type ou d’un champ, directement depuis le schéma OpenAPI du serveur — c’est votre dictionnaire.- Pour écrire un manifest, la méthode :
api-resources | greppour trouver le kind et l’apiVersion, puisexplainpour explorer les champs. kubectl get allne montre pas tout — itérez surapi-resources --namespaced=truepour un inventaire complet.- L’option
--recursiveaffiche l’arbre complet d’un objet — combinez avecgreppour naviguer efficacement. - Les informations de
explainsont spécifiques à votre cluster : elles reflètent la version exacte de votre serveur API.