Cartão de referência dos comandos — Serviços Kubernetes

2 min

Projeto projet11-kubernetes-services · todos os comandos para implantar, expor e testar os Services.

Índice


1. Construir a imagem e implantar

A partir da pasta do projeto (projet11-kubernetes-services):

powershell
kubectl config use-context docker-desktop
docker build -t demo-k8s:1.0 ./app          # (se ainda não construída no projeto 10)
kubectl apply -f k8s/                        # deployment + 3 services
kubectl get pods                             # 3 Pods Running

2. Observar os Services

powershell
kubectl get svc                              # TYPE, CLUSTER-IP, EXTERNAL-IP, PORT(S)
kubectl get svc -o wide
kubectl describe svc demo-clusterip          # detalhes + Endpoints

Leitura de kubectl get svc:

ColunaSignificado
TYPEClusterIP / NodePort / LoadBalancer
CLUSTER-IPIP interno (sempre presente)
EXTERNAL-IPIP externo (LoadBalancer) ou <none>
PORT(S)port do Service (e :nodePort para NodePort)

3. ClusterIP: descoberta de serviços (DNS)

Um ClusterIP não é acessível a partir do anfitrião: chama-se a partir de um Pod, pelo nome.

powershell
# Pod cliente descartável (--rm : apaga à saída)
kubectl run client --rm -it --image=curlimages/curl -- sh

Depois, no shell do Pod:

sh
curl http://demo-clusterip           # chamada PELO NOME (resolvido pelo CoreDNS)
curl http://demo-clusterip           # relança : o nome do Pod muda
exit

Testar a resolução DNS:

powershell
kubectl run dnstest --rm -it --image=busybox:1.36 -- sh
# no Pod :
nslookup demo-clusterip
wget -qO- http://demo-clusterip

4. NodePort: acesso externo

powershell
kubectl get svc demo-nodeport
# Abrir no navegador :
start http://localhost:30082
# ou testar em linha de comandos :
curl http://localhost:30082

5. LoadBalancer: IP externo

powershell
kubectl get svc demo-lb                      # EXTERNAL-IP deve passar a "localhost"
start http://localhost:8090
curl http://localhost:8090

Se o EXTERNAL-IP ficar <pending>, espera alguns segundos (o Docker Desktop provisiona o LB). Em cluster kind, o tipo LoadBalancer fica <pending> sem MetalLB: usa kubectl port-forward (ver anexo).


6. Endpoints e seletores

powershell
kubectl get endpoints demo-clusterip         # IP dos Pods atrás do Service
kubectl get pods -o wide --show-labels       # labels dos Pods
kubectl get pods --selector app=demo-back    # os mesmos Pods que o seletor do Service

Ver a repartição (10 pedidos via port-forward):

powershell
kubectl port-forward svc/demo-clusterip 8091:80
# noutro TERMINAL :
1..10 | ForEach-Object { (Invoke-WebRequest -Headers @{Accept="application/json"} http://localhost:8091).Content }

7. Limpeza

powershell
kubectl delete -f k8s/
# ou por objeto :
kubectl delete svc demo-clusterip demo-nodeport demo-lb
kubectl delete deployment demo-back

Anexo — resolução de problemas

SintomaCausa provávelSolução
curl http://demo-clusterip falhaNão a partir de um Pod, ou serviço ausenteChamar a partir de um Pod; verificar kubectl get svc
Endpoints vaziosO seletor não corresponde a nenhum label de PodAlinhar selector (Service) e labels (Pods)
EXTERNAL-IP em <pending>Sem load balancer (kind, cloud não configurada)Docker Desktop: esperar; senão kubectl port-forward
localhost:30082 inacessívelNodePort não criado / porto ocupadokubectl get svc demo-nodeport; alterar nodePort
ImagePullBackOffImagem demo-k8s:1.0 ausente do clusterConstruí-la; em kind: kind load docker-image demo-k8s:1.0
powershell
# Solução universal de acesso temporário a qualquer Service :
kubectl port-forward svc/demo-clusterip 8091:80   # -> http://localhost:8091

Curso criado pelo Dr. Haythem REHOUMA — Desenvolvimento e implantação de soluções de dados