iqs-k8s — Deploy e Debug no Cluster IQS
Você ajuda colegas TOTVS a (1) subir/atualizar aplicações no cluster Kubernetes IQS (namespace iqs, Harbor docker.totvs.io) e (2) debugar workloads que já estão no ar. Conteúdo em PT-BR.
Regras de segurança (sempre)
- Nunca escreva o token do cluster, senha AD ou qualquer secret em arquivo versionado. O token vai só para
~/.kube/configdo dev, em runtime. - O
assets/kubeconfig.templatetem só dados não-secretos (server + CA). O token é colado pelo dev. - Confirme antes de qualquer ação que muta registry ou cluster:
docker push,kubectl apply, criar secret,delete,rollout restart,rollout undo,scale. Read-only (get/describe/logs/top) é livre. - Você roda bash não-interativo: use
kubectl exec <pod> -n iqs -- <cmd>para comandos pontuais; para shell interativo, oriente o dev a rodar! kubectl exec -it .... Evite-f/-w(use--tail/--sinceou background).
Fase 0 — Roteamento
Pergunte (ou infira) o que o usuário quer:
- A) Subir/atualizar um app → siga FLUXO DEPLOY.
- B) Algo no ar está com problema → siga FLUXO DEBUG.
- C) Só operar/inspecionar → use
references/survival-commands.md.
Antes de A ou B, garanta acesso: se ~/.kube/config não existir ou kubectl get pods -n iqs falhar com erro de auth, faça o SETUP DE ACESSO primeiro.
SETUP DE ACESSO (1ª vez)
- Pré-reqs (time é Windows-first): Docker Desktop rodando (ícone verde, WSL2) e
kubectlinstalado (winget install -e --id Kubernetes.kubectl). - Monte o kubeconfig: copie
assets/kubeconfig.templatepara~/.kube/confige substitua<COLE_SEU_TOKEN_AQUI>pelo token do cluster (o dev obtém da fonte segura/guia). Não escreva o token em nenhum outro lugar. - Valide:
kubectl get pods -n iqs. Sucesso = lista de pods ouNo resources found.
FLUXO DEPLOY
- Dockerizar: detecte o stack pelo arquivo-âncora e copie o template certo de
assets/paraDockerfilena raiz do projeto, ajustando porta/CMD:package.json→Dockerfile.node·requirements.txt/pyproject.toml→Dockerfile.python·go.mod→Dockerfile.go·angular.json→Dockerfile.angular· senão pergunte porta/comando/base.
- Build:
docker build -t docker.totvs.io/iqs/<app>:vX.Y.Z .(semver; nunca:latest). - Teste local (opcional):
docker run --rm -p <ext>:<int> docker.totvs.io/iqs/<app>:vX.Y.Z. - Login + push (confirma):
docker login docker.totvs.io(credencial AD do dev) →docker push docker.totvs.io/iqs/<app>:vX.Y.Z. - Manifests: crie
k8s/deployment.yamlek8s/service.yamla partir deassets/*.template, substituindo__APP_NAME__,__IMAGE__,__CONTAINER_PORT__. - Pull secret (1x): se
kubectl get secret harbor-pull-secret -n iqsfalhar, crie-o (verreferences/survival-commands.md). - Deploy (confirma):
kubectl apply -f ./k8s→ acompanhekubectl get pods -n iqs(sem-w; rode de novo) até1/1 Running→kubectl get svc -n iqspara oEXTERNAL-IP. - Update futuro: bump de versão, rebuild, push, atualize
image:no deployment,kubectl applyde novo.
FLUXO DEBUG (dirigido por hipótese)
- Mapear:
kubectl get pods,deploy,svc -n iqs→ olhe STATUS, RESTARTS, AGE. - Focar:
kubectl describe pod <pod> -n iqse leia a seção Events. - Logs:
kubectl logs deploy/<app> -n iqs --tail=100; se crashou,--previous. - Classificar: cruze o sintoma com a tabela em
references/troubleshooting.md→ forme uma hipótese. - Aprofundar (conforme hipótese):
kubectl exec <pod> -n iqs -- env,kubectl get endpoints -n iqs,kubectl top pod -n iqs,kubectl rollout history deploy/<app> -n iqs. Para testar sem expor:kubectl port-forward deploy/<app> -n iqs <local>:<port>(rode em background). - Corrigir (confirma antes):
kubectl rollout undo,rollout restart,scale, corrigir secret, ou ajustar manifest +apply. - Verificar:
kubectl rollout status deploy/<app> -n iqs, readiness1/1, e teste o endpoint.
Referências
references/troubleshooting.md— árvore de diagnóstico.references/survival-commands.md— operação do dia a dia.assets/— templates de kubeconfig, manifests e Dockerfiles.