La API de Kubernetes es una interfaz HTTP RESTful basada en recursos que admite los métodos GET, POST, PUT, PATCH y DELETE. Utilícela para consultar y gestionar los recursos del clúster mediante programación, sin necesidad de usar kubectl. Puede autenticarse con certificados de cliente e invocar la API mediante cURL para administrar pods y Deployments.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Un clúster de ACK
Permiso para acceder a la consola de ACK
cURL instalado en su computadora local
Extracción de credenciales desde kubeconfig
Inicie sesión en la consola de ACK.
Haga clic en Go to RAM console para ir a la página de Autorización rápida de Resource Access Management y, a continuación, haga clic en Confirm Authorization Policy. Una vez completada la autorización, actualice la consola de ACK.
En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster o en Details dentro de la columna Actions.
Haga clic en la pestaña Connection Information. Copie el contenido de kubeconfig y guárdelo localmente como
./kubeconfig.-
Extraiga el certificado de cliente, la clave privada y la dirección del servidor de API desde el archivo 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}'`Estos comandos decodifican los datos del certificado y almacenan la URL del servidor de API en la variable
$APISERVER. Todos los comandos de cURL posteriores utilizan estas credenciales junto con la variable$APISERVER.
La bandera-komite la verificación TLS del servidor. En entornos de producción, sustituya-kpor--cacert <path-to-ca.pem>para verificar la identidad del servidor y evitar ataques de intermediario (man-in-the-middle).
Gestión de pods
Todas las llamadas a la API de pods utilizan la ruta $APISERVER/api/v1/namespaces/<namespace>/pods.
|
Operación |
Método HTTP |
Ruta |
|
Listar todos los namespaces |
GET |
|
|
Listar todos los pods |
GET |
|
|
Crear un pod |
POST |
|
|
Obtener el estado de un pod |
GET |
|
|
Obtener registros de un pod |
GET |
|
|
Obtener métricas de un pod |
GET |
|
|
Eliminar un pod |
DELETE |
|
Listar todos los namespaces del clúster:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces
Listar todos los pods en el namespace predeterminado:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods
Crear un pod a partir de un manifiesto 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
Crear un pod a partir de un manifiesto 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
Obtener el estado de un pod:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx
Obtener los registros de un pod:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx/log
Obtener métricas del pod mediante la API de Metrics Server:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx
Eliminar un pod:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx -X DELETE
Gestión de Deployments
Todas las llamadas a la API de Deployments utilizan la ruta $APISERVER/apis/apps/v1/namespaces/<namespace>/deployments.
Crear 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
Listar todos los Deployments en el namespace predeterminado:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments
Escalar 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}}'
Actualizar la imagen del contenedor:
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"}]}}}}'
Siguientes pasos
Para acceder mediante programación más allá de cURL, utilice una biblioteca de cliente oficial de Kubernetes:
|
Lenguaje |
Biblioteca de cliente |
Ejemplos |
|
Go |
||
|
Python |
||
|
Java |
Consulte Bibliotecas de cliente de Kubernetes para obtener la lista completa de lenguajes compatibles.
Explore otros métodos de acceso en Acceso a clústeres mediante la API de Kubernetes.