L'API Kubernetes est une interface HTTP RESTful basée sur les ressources, qui prend en charge les méthodes GET, POST, PUT, PATCH et DELETE. Elle permet d'interroger et de gérer les ressources du cluster par programmation, sans recourir à kubectl. Authentifiez-vous à l'aide de certificats clients et appelez l'API avec cURL pour gérer les pods et les Deployments.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster ACK
Des autorisations d'accès à la console ACK
cURL installé sur votre machine locale
Extraire les identifiants depuis le fichier kubeconfig
Connectez-vous à la console ACK.
Cliquez sur Go to RAM consoleGo to RAM console pour accéder à la page Resource Access Management Quick Authorization, puis cliquez sur Confirm Authorization PolicyConfirm Authorization Policy. Une fois l'autorisation accordée, actualisez la console ACK.
Dans le volet de navigation de gauche, cliquez sur ClustersClusters.
Sur la page ClustersClusters, cliquez sur le nom du cluster ou sur DetailsDetails dans la colonne ActionsActions.
Sélectionnez l'onglet Connection InformationConnection Information. Copiez le contenu de kubeconfigkubeconfig et enregistrez-le localement sous le nom
./kubeconfig.-
Extrayez le certificat client, la clé privée et l'adresse du serveur API à partir du fichier kubeconfig :
cat ./kubeconfig | grep client-certificate-data | awk -F ' ' '{print $2}' | base64 -d > ./client-cert.pem cat ./kubeconfig | grep client-key-data | awk -F ' ' '{print $2}' | base64 -d > ./client-key.pem APISERVER=`cat ./kubeconfig | grep server | awk -F ' ' '{print $2}'`Ces commandes décodent les données du certificat et stockent l'URL du serveur API dans la variable
$APISERVER. Toutes les commandes cURL suivantes utilisent ces identifiants ainsi que la variable$APISERVER.
L'option-kignore la vérification TLS du serveur. En production, remplacez-kpar--cacert <path-to-ca.pem>afin de vérifier l'identité du serveur et de prévenir les attaques de type « man-in-the-middle ».
Gérer les pods
Tous les appels d'API relatifs aux pods utilisent le chemin $APISERVER/api/v1/namespaces/<namespace>/pods.
| Opération | Méthode HTTP | Chemin |
|---|---|---|
| Répertorier tous les namespaces | GET | /api/v1/namespaces |
| Répertorier tous les pods | GET | /api/v1/namespaces/default/pods |
| Créer un pod | POST | /api/v1/namespaces/default/pods |
| Obtenir le statut d'un pod | GET | /api/v1/namespaces/default/pods/nginx |
| Obtenir les journaux d'un pod | GET | /api/v1/namespaces/default/pods/nginx/log |
| Obtenir les métriques d'un pod | GET | /apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx |
| Supprimer un pod | DELETE | /api/v1/namespaces/default/pods/nginx |
Répertorier tous les namespaces du cluster :
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces
Répertorier tous les pods du namespace default :
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods
Créer un pod à partir d'un manifeste JSON :
cat nginx-pod.json
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "nginx",
"namespace": "default"
},
"spec": {
"containers": [
{
"name": "nginx",
"image": "nginx:alpine",
"ports": [
{
"containerPort": 80
}
]
}
]
}
}
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods \
-X POST --header 'content-type: application/json' -d@nginx-pod.json
Créer un pod à partir d'un manifeste YAML :
cat nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: default
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods \
-X POST --header 'content-type: application/yaml' --data-binary @nginx-pod.yaml
Obtenir le statut d'un pod :
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx
Obtenir les journaux d'un pod :
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx/log
Obtenir les métriques d'un pod via l'API Metrics Server :
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx
Supprimer un pod :
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx -X DELETE
Gérer les Deployments
Tous les appels d'API relatifs aux Deployments utilisent le chemin $APISERVER/apis/apps/v1/namespaces/<namespace>/deployments.
Créer un Deployment :
cat nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
resources:
requests:
cpu: "2"
memory: "4Gi"
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments \
-X POST --header 'content-type: application/yaml' --data-binary @nginx-deploy.yaml
Répertorier tous les Deployments du namespace default :
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments
Mettre à l'échelle un Deployment :
curl --cert ./client-cert.pem --key ./client-key.pem -k \
$APISERVER/apis/apps/v1/namespaces/default/deployments/nginx-deploy \
-X PATCH -H 'Content-Type: application/strategic-merge-patch+json' \
-d '{"spec": {"replicas": 4}}'
Mettre à jour l'image du conteneur :
curl --cert ./client-cert.pem --key ./client-key.pem -k \
$APISERVER/apis/apps/v1/namespaces/default/deployments/nginx-deploy \
-X PATCH -H 'Content-Type: application/strategic-merge-patch+json' \
-d '{"spec": {"template": {"spec": {"containers": [{"name": "nginx","image": "nginx:1.7.9"}]}}}}'
Étapes suivantes
Pour un accès programmatique au-delà de cURL, utilisez une bibliothèque cliente Kubernetes officielle :
| Langage | Bibliothèque cliente | Exemples |
|---|---|---|
| Go | client-go | Parcourir |
| Python | client-python | Parcourir |
| Java | client-java | Parcourir |
Consultez la documentation Kubernetes client libraries pour obtenir la liste complète des langages pris en charge.
Découvrez d'autres méthodes d'accès dans la rubrique Access clusters using the Kubernetes API.