A API do Kubernetes é uma interface HTTP RESTful baseada em recursos que aceita os métodos GET, POST, PUT, PATCH e DELETE. Utilize-a para consultar e gerenciar recursos do cluster programaticamente, sem depender do kubectl. Autentique-se com certificados de cliente e chame a API via curl para gerenciar pods e Deployments.
Pré-requisitos
Antes de começar, verifique se você possui:
Um cluster ACK
Permissão para acessar o console ACK
curl instalado na sua máquina local
Extrair credenciais do kubeconfig
Faça login no console ACK.
Clique em Go to RAM console para acessar a página de Autorização Rápida do Resource Access Management e clique em Confirm Authorization Policy. Após a autorização, atualize a página do console ACK.
No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster ou em Details na coluna Actions.
Selecione a aba Connection Information. Copie o conteúdo de kubeconfig e salve-o localmente como
./kubeconfig.-
Extraia o certificado de cliente, a chave privada e o endereço do servidor de API do arquivo 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}'`Esses comandos decodificam os dados do certificado e armazenam a URL do servidor de API na variável
$APISERVER. Todos os comandos curl subsequentes utilizam essas credenciais e a variável$APISERVER.
A flag-kignora a verificação TLS do servidor. Em ambientes de produção, substitua-kpor--cacert <path-to-ca.pem>para validar a identidade do servidor e evitar ataques man-in-the-middle.
Gerenciar pods
Todas as chamadas de API para pods utilizam o caminho $APISERVER/api/v1/namespaces/<namespace>/pods.
|
Operação |
Método HTTP |
Caminho |
|
Listar todos os namespaces |
GET |
|
|
Listar todos os pods |
GET |
|
|
Criar um pod |
POST |
|
|
Obter status do pod |
GET |
|
|
Obter logs do pod |
GET |
|
|
Obter métricas do pod |
GET |
|
|
Excluir um pod |
DELETE |
|
Listar todos os namespaces do cluster:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces
Listar todos os pods no namespace default:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods
Criar um pod a partir de um manifesto 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
Criar um pod a partir de um manifesto 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
Obter o status do pod:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx
Obter os logs do pod:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx/log
Consultar métricas do pod pela API do Metrics Server:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx
Excluir um pod:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx -X DELETE
Gerenciar Deployments
As chamadas de API para Deployment utilizam o caminho $APISERVER/apis/apps/v1/namespaces/<namespace>/deployments.
Criar um 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 os Deployments no namespace default:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments
Dimensionar um 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}}'
Atualizar a imagem do contêiner:
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"}]}}}}'
Próximos passos
Para acesso programático além do curl, utilize uma biblioteca de cliente oficial do Kubernetes:
|
Linguagem |
Biblioteca de cliente |
Exemplos |
|
Go |
||
|
Python |
||
|
Java |
Consulte a lista completa de linguagens suportadas em Bibliotecas de cliente do Kubernetes.
Explore métodos alternativos de acesso em Acessar clusters usando a API do Kubernetes.