Information in this document may be out of date

This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: The Kubernetes API

L'API Kubernetes

L'API Kubernetes vous permet d'interroger et de manipuler l'Ă©tat des objets dans Kubernetes. Le cƓur du plan de contrĂŽle de Kubernetes est le serveur API et l'API HTTP qu'il expose. Les utilisateurs, les diffĂ©rentes parties de votre cluster et les composants externes communiquent tous entre eux via le serveur API.

Le cƓur du plan de contrĂŽle de Kubernetes est le serveur API. Le serveur API expose une API HTTP qui permet aux utilisateurs finaux, aux diffĂ©rentes parties de votre cluster et aux composants externes de communiquer entre eux.

L'API Kubernetes vous permet d'interroger et de manipuler l'état des objets API dans Kubernetes (par exemple : Pods, Namespaces, ConfigMaps et Events).

La plupart des opĂ©rations peuvent ĂȘtre effectuĂ©es via l'interface de ligne de commande kubectl ou d'autres outils en ligne de commande, tels que kubeadm, qui utilisent Ă  leur tour l'API. Cependant, vous pouvez Ă©galement accĂ©der Ă  l'API directement en utilisant des appels REST. Kubernetes fournit un ensemble de bibliothĂšques clientes pour ceux qui souhaitent Ă©crire des applications utilisant l'API Kubernetes.

Chaque cluster Kubernetes publie la spécification des API qu'il sert. Il existe deux mécanismes que Kubernetes utilise pour publier ces spécifications d'API ; les deux sont utiles pour permettre une interopérabilité automatique. Par exemple, l'outil kubectl récupÚre et met en cache l'API spécification pour activer l'auto-complétion en ligne de commande et d'autres fonctionnalités. Les deux mécanismes pris en charge sont les suivants :

  • L'API Discovery fournit des informations sur les API Kubernetes : noms des API, ressources, versions et opĂ©rations prises en charge. Il s'agit d'un terme spĂ©cifique Ă  Kubernetes car il s'agit d'une API distincte de l'API OpenAPI de Kubernetes. Il est destinĂ© Ă  ĂȘtre un bref rĂ©sumĂ© des ressources disponibles et il ne dĂ©taille pas le schĂ©ma spĂ©cifique des ressources. Pour des rĂ©fĂ©rences sur les schĂ©mas de ressources, veuillez vous rĂ©fĂ©rer au document OpenAPI.

  • Le document OpenAPI de Kubernetes fournit des schĂ©mas (complets) OpenAPI v2.0 et 3.0 pour tous les points d'extrĂ©mitĂ© de l'API Kubernetes. L'OpenAPI v3 est la mĂ©thode prĂ©fĂ©rĂ©e pour accĂ©der Ă  l'OpenAPI car il offre une vue plus complĂšte et prĂ©cise de l'API. Il inclut tous les chemins d'API disponibles, ainsi que toutes les ressources consommĂ©es et produites pour chaque opĂ©ration sur chaque point d'extrĂ©mitĂ©. Il inclut Ă©galement les composants d'extensibilitĂ© pris en charge par un cluster. Les donnĂ©es sont une spĂ©cification complĂšte et sont significativement plus grandes que celles de l'API Discovery.

API Discovery

Kubernetes publie une liste de toutes les versions de groupe et de toutes les ressources prises en charge via l'API Discovery. Cela inclut les éléments suivants pour chaque ressource :

  • Nom
  • PortĂ©e du cluster ou du namespace
  • URL de l'endpoint et verbes pris en charge
  • Noms alternatifs
  • Groupe, version, type

L'API est disponible sous forme agrégée et non agrégée. La découverte agrégée propose deux endpoints tandis que la découverte non agrégée propose un endpoint distinct pour chaque version de groupe.

Découverte agrégée

FEATURE STATE: Kubernetes v1.30 [stable] (enabled by default: true)

Kubernetes propose une prise en charge stable de la dĂ©couverte agrĂ©gĂ©e, publiant toutes les ressources prises en charge par un cluster via deux endpoints (/api et /apis). En demandant cela, l'endpoint rĂ©duit considĂ©rablement le nombre de requĂȘtes envoyĂ©es pour rĂ©cupĂ©rer les donnĂ©es de dĂ©couverte du cluster. Vous pouvez accĂ©der aux donnĂ©es en demandant les endpoints respectifs avec un en-tĂȘte Accept indiquant la ressource de dĂ©couverte agrĂ©gĂ©e : Accept: application/json;v=v2;g=apidiscovery.k8s.io;as=APIGroupDiscoveryList.

Sans indiquer le type de ressource Ă  l'aide de l'en-tĂȘte Accept, la rĂ©ponse par dĂ©faut pour les endpoints /api et /apis est un document de dĂ©couverte non agrĂ©gĂ©.

Le document de dĂ©couverte pour les ressources intĂ©grĂ©es peut ĂȘtre trouvĂ© dans le rĂ©fĂ©rentiel GitHub de Kubernetes. Ce document GitHub peut ĂȘtre utilisĂ© comme rĂ©fĂ©rence pour l'ensemble de base des ressources disponibles si un cluster Kubernetes n'est pas disponible pour la requĂȘte.

L'endpoint prend également en charge l'ETag et l'encodage protobuf.

Découverte non agrégée

Sans agrégation de découverte, la découverte est publiée par niveaux, avec les endpoints racine publiant les informations de découverte pour les documents en aval.

Une liste de toutes les versions de groupe prises en charge par un cluster est publiée à les endpoints /api et /apis. Exemple :

{
  "kind": "APIGroupList",
  "apiVersion": "v1",
  "groups": [
    {
      "name": "apiregistration.k8s.io",
      "versions": [
        {
          "groupVersion": "apiregistration.k8s.io/v1",
          "version": "v1"
        }
      ],
      "preferredVersion": {
        "groupVersion": "apiregistration.k8s.io/v1",
        "version": "v1"
      }
    },
    {
      "name": "apps",
      "versions": [
        {
          "groupVersion": "apps/v1",
          "version": "v1"
        }
      ],
      "preferredVersion": {
        "groupVersion": "apps/v1",
        "version": "v1"
      }
    },
    ...
}

Des requĂȘtes supplĂ©mentaires sont nĂ©cessaires pour obtenir le document de dĂ©couverte pour chaque version de groupe Ă  /apis/<group>/<version> (par exemple : /apis/rbac.authorization.k8s.io/v1alpha1), qui annonce la liste des ressources servies sous une version de groupe particuliĂšre. Ces endpoints sont utilisĂ©s par kubectl pour rĂ©cupĂ©rer la liste des ressources prises en charge par un cluster.

Définition de l'interface OpenAPI

Pour plus de détails sur les spécifications OpenAPI, consultez la documentation OpenAPI.

Kubernetes prend en charge à la fois OpenAPI v2.0 et OpenAPI v3.0. OpenAPI v3 est la méthode préférée pour accéder à l'OpenAPI car elle offre une représentation plus complÚte (sans perte) des ressources Kubernetes. En raison des limitations de la version 2 d'OpenAPI, certains champs sont supprimés de l'OpenAPI publié, y compris mais sans s'y limiter default, nullable, oneOf.

OpenAPI V2

Le serveur API Kubernetes sert une spĂ©cification OpenAPI v2 agrĂ©gĂ©e via l'endpoint /openapi/v2. Vous pouvez demander le format de rĂ©ponse en utilisant les en-tĂȘtes de requĂȘte comme suit :

Valeurs valides des en-tĂȘtes de requĂȘte pour les requĂȘtes OpenAPI v2
En-tĂȘteValeurs possiblesNotes
Accept-Encodinggzipne pas fournir cet en-tĂȘte est Ă©galement acceptable
Acceptapplication/com.github.proto-openapi.spec.v2@v1.0+protobufprincipalement pour une utilisation intra-cluster
application/jsonpar défaut
*sert application/json

OpenAPI V3

FEATURE STATE: Kubernetes v1.27 [stable] (enabled by default: true)

Kubernetes prend en charge la publication d'une description de ses API en tant qu'OpenAPI v3.

Un endpoint de découverte /openapi/v3 est fourni pour voir une liste de tous les groupes/versions disponibles. Cet endpoint ne renvoie que du JSON. Ces groupes/versions sont fournis dans le format suivant :

{
    "paths": {
        ...,
        "api/v1": {
            "serverRelativeURL": "/openapi/v3/api/v1?hash=CC0E9BFD992D8C59AEC98A1E2336F899E8318D3CF4C68944C3DEC640AF5AB52D864AC50DAA8D145B3494F75FA3CFF939FCBDDA431DAD3CA79738B297795818CF"
        },
        "apis/admissionregistration.k8s.io/v1": {
            "serverRelativeURL": "/openapi/v3/apis/admissionregistration.k8s.io/v1?hash=E19CC93A116982CE5422FC42B590A8AFAD92CDE9AE4D59B5CAAD568F083AD07946E6CB5817531680BCE6E215C16973CD39003B0425F3477CFD854E89A9DB6597"
        },
        ....
    }
}

Les URLs relatives pointent vers des descriptions OpenAPI immuables, afin d'amĂ©liorer la mise en cache cĂŽtĂ© client. Les en-tĂȘtes de mise en cache HTTP appropriĂ©s sont Ă©galement dĂ©finis par le serveur API Ă  cette fin (Expires Ă  1 an dans le futur, et Cache-Control Ă  immutable). Lorsqu'une URL obsolĂšte est utilisĂ©e, le serveur API renvoie une redirection vers la nouvelle URL.

Le serveur API Kubernetes publie une spécification OpenAPI v3 par version de groupe Kubernetes à l'endpoint /openapi/v3/apis/<group>/<version>?hash=<hash>.

Reportez-vous au tableau ci-dessous pour les en-tĂȘtes de requĂȘte acceptĂ©s.

Valeurs valides des en-tĂȘtes de requĂȘte pour les requĂȘtes OpenAPI v3
En-tĂȘteValeurs possiblesNotes
Accept-Encodinggzipne pas fournir cet en-tĂȘte est Ă©galement acceptable
Acceptapplication/com.github.proto-openapi.spec.v3@v1.0+protobufprincipalement pour une utilisation intra-cluster
application/jsonpar défaut
*sert application/json

Une implémentation en Golang pour récupérer l'OpenAPI V3 est fournie dans le package k8s.io/client-go/openapi3.

Kubernetes 1.34 publie OpenAPI v2.0 et v3.0 ; il n'y a pas de plans pour prendre en charge la version 3.1 dans un avenir proche.

Sérialisation Protobuf

Kubernetes implémente un format de sérialisation alternatif basé sur Protobuf qui est principalement destiné à la communication intra-cluster. Pour plus d'informations sur ce format, consultez la proposition de conception Kubernetes Protobuf serialization et les fichiers de langage de définition d'interface (IDL) pour chaque schéma situés dans les packages Go qui définissent les objets de l'API.

Persistance

Kubernetes stocke l'état sérialisé des objets en les écrivant dans etcd.

Groupes d'API et versioning

Pour faciliter l'élimination de champs ou la restructuration des représentations de ressources, Kubernetes prend en charge plusieurs versions d'API, chacune à un chemin d'API différent, tel que /api/v1 ou /apis/rbac.authorization.k8s.io/v1alpha1.

Le versioning est effectué au niveau de l'API plutÎt qu'au niveau de la ressource ou du champ pour garantir que l'API présente une vue claire et cohérente des ressources et du comportement du systÚme, et pour permettre de contrÎler l'accÚs aux API en fin de vie et/ou expérimentales.

Pour faciliter l'Ă©volution et l'extension de son API, Kubernetes implĂ©mente des groupes d'API qui peuvent ĂȘtre activĂ©s ou dĂ©sactivĂ©s.

Les ressources de l'API sont distinguĂ©es par leur groupe d'API, leur type de ressource, leur namepaces (pour les ressources avec namespace) et leur nom. Le serveur API gĂšre la conversion entre les versions d'API de maniĂšre transparente : toutes les diffĂ©rentes versions sont en rĂ©alitĂ© des reprĂ©sentations des mĂȘmes donnĂ©es persistĂ©es. Le serveur API peut servir les mĂȘmes donnĂ©es sous plusieurs versions d'API.

Par exemple, supposons qu'il existe deux versions d'API, v1 et v1beta1, pour la mĂȘme ressource. Si vous avez initialement créé un objet en utilisant la version v1beta1 de son API, vous pouvez ensuite lire, mettre Ă  jour ou supprimer cet objet en utilisant soit la version v1beta1 soit la version v1 de l'API, jusqu'Ă  ce que la version v1beta1 soit dĂ©prĂ©ciĂ©e et supprimĂ©e. À ce moment-lĂ , vous pouvez continuer Ă  accĂ©der et Ă  modifier l'objet en utilisant l'API v1.

Changements d'API

Tout systÚme qui réussit doit évoluer et changer à mesure que de nouveaux cas d'utilisation émergent ou que les cas d'utilisation existants changent. Par conséquent, Kubernetes a conçu l'API Kubernetes pour changer et évoluer en permanence. Le projet Kubernetes vise à ne pas rompre la compatibilité avec les clients existants et à maintenir cette compatibilité pendant une certaine période afin que d'autres projets aient l'opportunité de s'adapter.

En gĂ©nĂ©ral, de nouvelles ressources d'API et de nouveaux champs de ressources peuvent ĂȘtre ajoutĂ©s souvent et frĂ©quemment. L'Ă©limination de ressources ou de champs nĂ©cessite de suivre la politique de dĂ©prĂ©ciation de l'API.

Kubernetes s'engage fermement Ă  maintenir la compatibilitĂ© avec les API Kubernetes officielles une fois qu'elles atteignent la disponibilitĂ© gĂ©nĂ©rale (GA), gĂ©nĂ©ralement Ă  la version d'API v1. De plus, Kubernetes maintient la compatibilitĂ© avec les donnĂ©es persistĂ©es via les versions d'API beta des API Kubernetes officielles, et garantit que les donnĂ©es peuvent ĂȘtre converties et accessibles via les versions d'API GA lorsque la fonctionnalitĂ© devient stable.

Si vous adoptez une version d'API beta, vous devrez passer Ă  une version d'API beta ou stable ultĂ©rieure une fois que l'API aura Ă©tĂ© promue. Le meilleur moment pour le faire est pendant la pĂ©riode de dĂ©prĂ©ciation de l'API beta, car les objets sont accessibles simultanĂ©ment via les deux versions d'API. Une fois que l'API beta a terminĂ© sa The Kubernetes project aims to not break compatibility with existing clients, and to maintain that La compatibilitĂ© est un Ă©lĂ©ment essentiel dans l'Ă©volution de l'API Kubernetes. De nouvelles ressources et de nouveaux champs peuvent ĂȘtre ajoutĂ©s frĂ©quemment, tandis que la suppression de ressources ou de champs nĂ©cessite de suivre la politique de dĂ©prĂ©ciation de l'API.

Consultez la référence des versions d'API pour plus de détails sur les définitions de niveau de version d'API.

Extension d'API

L'API Kubernetes peut ĂȘtre Ă©tendue de deux maniĂšres :

  1. Les ressources personnalisées vous permettent de définir de maniÚre déclarative comment le serveur API doit fournir votre API de ressource choisie.
  2. Vous pouvez également étendre l'API Kubernetes en implémentant une couche d'agrégation.

A suivre

DerniĂšre modification December 30, 2024 at 10:11 AM PST: [fr] update discovery document link (f15368fabf)