wiki:kubernetes:dry-run
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| wiki:kubernetes:dry-run [2026/01/29 13:39] – Wiki Administrator | wiki:kubernetes:dry-run [2026/01/29 14:14] (current) – [1. Introdução ao ''kubectl --dry-run''] Wiki Administrator | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | ====== |
| - | O comando `kubectl` com a opção | + | Este guia consolida uma série de comandos e exemplos práticos para a geração de manifestos Kubernetes utilizando |
| - | ===== Comandos | + | ===== 1. Introdução ao '' |
| - | ==== 1. ConfigMap ==== | + | A flag '' |
| - | **ConfigMap | + | |
| + | * **'' | ||
| + | |||
| + | ---- | ||
| + | ===== 2. Guia para Iniciantes: Comandos Essenciais ===== | ||
| + | |||
| + | Para quem está começando, os comandos imperativos simplificados são uma ótima maneira de gerar manifestos básicos rapidamente. | ||
| + | |||
| + | ^ Recurso ^ Comando de Exemplo ^ Descrição ^ | ||
| + | | **Deployment** | '' | ||
| + | | **Service** | '' | ||
| + | | **Namespace** | '' | ||
| + | | **Secret** | '' | ||
| + | | **Ingress** | '' | ||
| + | |||
| + | |||
| + | ---- | ||
| + | ===== 3. Geração de Manifestos para Recursos Comuns ===== | ||
| + | |||
| + | À medida que a complexidade aumenta, comandos mais detalhados são necessários para configurar todos os aspectos dos recursos do Kubernetes. | ||
| + | |||
| + | ==== 3.1. Configuração e Armazenamento ==== | ||
| <code bash> | <code bash> | ||
| + | # ConfigMap com múltiplos valores literais | ||
| kubectl create configmap phpipam-config \ | kubectl create configmap phpipam-config \ | ||
| --from-literal=TZ=" | --from-literal=TZ=" | ||
| --from-literal=SCAN_INTERVAL=" | --from-literal=SCAN_INTERVAL=" | ||
| - | | + | -n phpipam-system --dry-run=client -o yaml |
| - | --from-literal=IPAM_DISABLE_INSTALLER=" | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | </ | + | |
| - | **ConfigMap | + | # Secret TLS a partir de arquivos de certificado e chave |
| + | kubectl create secret tls tls-secret-phpipam \ | ||
| + | --cert=path/ | ||
| + | --key=path/ | ||
| + | -n phpipam-system --dry-run=client -o yaml | ||
| - | <code bash> | + | # PersistentVolumeClaim (PVC) para armazenamento persistente |
| - | kubectl create configmap phpipam-config \ | + | |
| - | --from-file=./ | + | |
| - | -n phpipam-system \ | + | |
| - | --dry-run=client \ | + | |
| - | -o yaml > configmap-from-files.yaml | + | |
| - | </ | + | |
| - | + | ||
| - | ==== 2. PersistentVolumeClaim (PVC) ==== | + | |
| - | + | ||
| - | <code bash> | + | |
| kubectl create pvc phpipam-db-pvc \ | kubectl create pvc phpipam-db-pvc \ | ||
| --namespace=phpipam-system \ | --namespace=phpipam-system \ | ||
| --storage-class=default-storageclass \ | --storage-class=default-storageclass \ | ||
| --access-mode=ReadWriteOnce \ | --access-mode=ReadWriteOnce \ | ||
| - | --volume-mode=Filesystem \ | ||
| --requests=storage=15Gi \ | --requests=storage=15Gi \ | ||
| - | --dry-run=client | + | --dry-run=client -o yaml |
| - | | + | |
| </ | </ | ||
| - | ==== 3. Deployment com Mais Opções | + | ==== 3.2. Cargas de Trabalho (Workloads) |
| - | + | ||
| - | **Deployment com réplicas definidas: | + | |
| <code bash> | <code bash> | ||
| + | # Deployment com réplicas e variáveis de ambiente | ||
| kubectl create deployment phpipam-web \ | kubectl create deployment phpipam-web \ | ||
| --image=phpipam/ | --image=phpipam/ | ||
| Line 53: | Line 61: | ||
| --replicas=1 \ | --replicas=1 \ | ||
| --port=80 \ | --port=80 \ | ||
| - | --dry-run=client | + | |
| - | | + | |
| - | </ | + | |
| - | **Deployment | + | # StatefulSet para aplicações |
| + | kubectl create statefulset phpipam-db \ | ||
| + | --image=mariadb:11.8 \ | ||
| + | --namespace=phpipam-system \ | ||
| + | --service=phpipam-db \ | ||
| + | --dry-run=client -o yaml | ||
| - | <code bash> | + | # CronJob para tarefas agendadas, como backups |
| - | kubectl create | + | kubectl create |
| - | --image=phpipam/ | + | --image=mariadb:11.8 \ |
| --namespace=phpipam-system \ | --namespace=phpipam-system \ | ||
| - | --env="TZ=America/ | + | --schedule="0 2 * * *" \ |
| - | --env=" | + | --dry-run=client -o yaml |
| - | --dry-run=client | + | |
| - | | + | |
| </ | </ | ||
| - | ==== 4. Service com Tipo Específico | + | ==== 3.3. Rede (Networking) |
| - | + | ||
| - | **Service ClusterIP (padrão): | + | |
| <code bash> | <code bash> | ||
| + | # Service do tipo ClusterIP (padrão, para comunicação interna) | ||
| kubectl create service clusterip phpipam-web \ | kubectl create service clusterip phpipam-web \ | ||
| --tcp=80:80 \ | --tcp=80:80 \ | ||
| - | --namespace=phpipam-system | + | --namespace=phpipam-system --dry-run=client -o yaml |
| - | | + | |
| - | | + | |
| - | </ | + | |
| - | **Service | + | # Service |
| - | + | ||
| - | <code bash> | + | |
| - | kubectl create service loadbalancer phpipam-web \ | + | |
| - | --tcp=80:80 \ | + | |
| - | --namespace=phpipam-system \ | + | |
| - | --dry-run=client \ | + | |
| - | -o yaml > service-web-lb.yaml | + | |
| - | </ | + | |
| - | + | ||
| - | **Service NodePort: | + | |
| - | + | ||
| - | <code bash> | + | |
| kubectl create service nodeport phpipam-web \ | kubectl create service nodeport phpipam-web \ | ||
| --tcp=80:80 \ | --tcp=80:80 \ | ||
| --node-port=30080 \ | --node-port=30080 \ | ||
| - | --namespace=phpipam-system | + | --namespace=phpipam-system --dry-run=client -o yaml |
| - | | + | |
| - | | + | |
| - | </ | + | |
| - | ==== 5. Service Headless para StatefulSet/ | + | # Service Headless |
| - | + | ||
| - | <code bash> | + | |
| kubectl create service clusterip phpipam-db \ | kubectl create service clusterip phpipam-db \ | ||
| --tcp=3306: | --tcp=3306: | ||
| --clusterip=" | --clusterip=" | ||
| - | --namespace=phpipam-system | + | --namespace=phpipam-system --dry-run=client -o yaml |
| - | | + | |
| - | | + | |
| </ | </ | ||
| - | ==== 6. Resource Quota (para limites | + | ==== 3.4. Políticas e Controle |
| <code bash> | <code bash> | ||
| - | kubectl create | + | # ServiceAccount, |
| - | | + | kubectl create |
| - | | + | kubecl create role phpipam-role --verb=get,list --resource=pods -n phpipam-system --dry-run=client -o yaml |
| - | --dry-run=client | + | kubectl create rolebinding phpipam-rb --role=phpipam-role --serviceaccount=phpipam-system: |
| - | | + | |
| - | </ | + | |
| - | ==== 7. LimitRange (para limites padrão em containers) ==== | + | # NetworkPolicy |
| - | + | kubectl create networkpolicy phpipam-netpol | |
| - | <code bash> | + | |
| - | kubectl create limitrange phpipam-limits \ | + | |
| - | --namespace=phpipam-system \ | + | |
| - | --max-cpu=2 \ | + | |
| - | --max-memory=4Gi \ | + | |
| - | --min-cpu=100m \ | + | |
| - | --min-memory=128Mi \ | + | |
| - | --default-cpu=500m \ | + | |
| - | --default-memory=1Gi \ | + | |
| - | --dry-run=client \ | + | |
| - | -o yaml > limitrange.yaml | + | |
| - | </ | + | |
| - | + | ||
| - | ==== 8. NetworkPolicy (para segurança | + | |
| - | + | ||
| - | <code bash> | + | |
| - | kubectl create networkpolicy phpipam-network-policy \ | + | |
| - | --namespace=phpipam-system | + | |
| --pod-selector=app=phpipam-web \ | --pod-selector=app=phpipam-web \ | ||
| - | --ingress=' | + | --ingress=' |
| - | --dry-run=client | + | |
| - | | + | |
| </ | </ | ||
| - | ==== 9. ServiceAccount | + | ==== 3.5. Gerenciamento de Recursos |
| - | + | ||
| - | **ServiceAccount: | + | |
| <code bash> | <code bash> | ||
| - | kubectl create | + | # ResourceQuota para limitar o consumo de recursos em um Namespace |
| - | --namespace=phpipam-system | + | kubectl create |
| - | --dry-run=client | + | --hard=pods=10, |
| - | | + | |
| - | </ | + | |
| - | **Role:** | + | # HorizontalPodAutoscaler (HPA) para escalar automaticamente os Pods |
| + | kubectl autoscale deployment phpipam-web \ | ||
| + | --min=1 --max=3 --cpu-percent=80 \ | ||
| + | -n phpipam-system --dry-run=client -o yaml | ||
| - | <code bash> | + | # PodDisruptionBudget (PDB) para garantir a disponibilidade durante manutenções |
| - | kubectl create | + | kubectl create |
| - | --namespace=phpipam-system | + | --selector=app=phpipam-web \ |
| - | --verb=get, | + | --max-unavailable=1 \ |
| - | --resource=pods, | + | -n phpipam-system |
| - | | + | |
| - | | + | |
| </ | </ | ||
| - | **RoleBinding: | ||
| - | <code bash> | + | ---- |
| - | kubectl create rolebinding phpipam-rolebinding \ | + | ===== 4. Fluxo de Trabalho Completo para phpIPAM ===== |
| - | | + | |
| - | | + | |
| - | --serviceaccount=phpipam-system: | + | |
| - | --dry-run=client \ | + | |
| - | -o yaml > rolebinding.yaml | + | |
| - | </ | + | |
| - | ==== 10. Secret TLS (alternativa ao generic) ==== | + | Este fluxo demonstra como usar o '' |
| - | <code bash> | + | ==== Passo 1: Geração Automática de Manifestos com Script ==== |
| - | # Secret TLS (precisa dos arquivos .crt e .key) | + | |
| - | kubectl create secret tls tls-secret-phpipam \ | + | |
| - | --cert=path/ | + | |
| - | --key=path/ | + | |
| - | --namespace=phpipam-system \ | + | |
| - | --dry-run=client \ | + | |
| - | -o yaml > tls-secret.yaml | + | |
| - | </ | + | |
| - | ==== 11. StatefulSet (alternativa | + | O script a seguir gera todos os manifestos básicos necessários |
| <code bash> | <code bash> | ||
| - | kubectl create statefulset phpipam-db \ | + | #!/bin/bash |
| - | --image=mariadb: | + | # generate-phpipam-manifests.sh |
| - | --namespace=phpipam-system \ | + | |
| - | --service=phpipam-db \ | + | |
| - | --dry-run=client \ | + | |
| - | -o yaml > statefulset-db.yaml | + | |
| - | </ | + | |
| - | ==== 12. Pod (para testes rápidos) ==== | + | NAMESPACE=" |
| - | <code bash> | + | echo " |
| - | kubectl run phpipam-test \ | + | |
| - | --image=phpipam/ | + | |
| - | --namespace=phpipam-system \ | + | |
| - | --restart=Never \ | + | |
| - | --dry-run=client \ | + | |
| - | -o yaml > test-pod.yaml | + | |
| - | </ | + | |
| - | + | ||
| - | ==== 13. Job/CronJob (para tarefas agendadas) ==== | + | |
| - | + | ||
| - | **CronJob para backup:** | + | |
| - | + | ||
| - | <code bash> | + | |
| - | kubectl create cronjob phpipam-backup \ | + | |
| - | --image=mariadb: | + | |
| - | --namespace=phpipam-system \ | + | |
| - | --schedule=" | + | |
| - | --dry-run=client \ | + | |
| - | -o yaml > cronjob-backup.yaml | + | |
| - | </ | + | |
| - | + | ||
| - | ==== 14. HorizontalPodAutoscaler ==== | + | |
| - | + | ||
| - | <code bash> | + | |
| - | kubectl autoscale deployment phpipam-web \ | + | |
| - | --namespace=phpipam-system \ | + | |
| - | --min=1 \ | + | |
| - | --max=3 \ | + | |
| - | --cpu-percent=80 \ | + | |
| - | --dry-run=client \ | + | |
| - | -o yaml > hpa.yaml | + | |
| - | </ | + | |
| - | + | ||
| - | ==== 15. PodDisruptionBudget ==== | + | |
| - | + | ||
| - | <code bash> | + | |
| - | kubectl create poddisruptionbudget phpipam-pdb \ | + | |
| - | --namespace=phpipam-system \ | + | |
| - | --selector=app=phpipam-web \ | + | |
| - | --max-unavailable=1 \ | + | |
| - | --dry-run=client \ | + | |
| - | -o yaml > pdb.yaml | + | |
| - | </ | + | |
| - | + | ||
| - | ===== Script Completo | + | |
| - | + | ||
| - | <code bash> | + | |
| - | # | + | |
| - | # generate-phpipam-manifests.sh | + | |
| - | echo "=== Gerando todos os manifests | + | mkdir -p phpipam-manifests |
| + | cd phpipam-manifests | ||
| # Namespace | # Namespace | ||
| - | kubectl create namespace | + | kubectl create namespace |
| # ConfigMap | # ConfigMap | ||
| kubectl create configmap phpipam-config \ | kubectl create configmap phpipam-config \ | ||
| --from-literal=TZ=" | --from-literal=TZ=" | ||
| - | --from-literal=SCAN_INTERVAL=" | ||
| --from-literal=IPAM_DATABASE_HOST=" | --from-literal=IPAM_DATABASE_HOST=" | ||
| - | | + | -n $NAMESPACE |
| - | --from-literal=IPAM_TRUST_X_FORWARDED=" | + | |
| - | --from-literal=IPAM_DISABLE_INSTALLER=" | + | |
| - | | + | |
| - | | + | |
| - | # Secret | + | # Secret |
| kubectl create secret generic phpipam-secrets \ | kubectl create secret generic phpipam-secrets \ | ||
| --from-literal=DB_ROOT_PASSWORD=" | --from-literal=DB_ROOT_PASSWORD=" | ||
| --from-literal=DB_PASSWORD=" | --from-literal=DB_PASSWORD=" | ||
| - | -n phpipam-system \ | + | -n $NAMESPACE |
| - | | + | |
| # PVC | # PVC | ||
| kubectl create pvc phpipam-db-pvc \ | kubectl create pvc phpipam-db-pvc \ | ||
| - | --namespace=phpipam-system \ | + | --namespace=$NAMESPACE |
| - | --storage-class=default-storageclass | + | |
| --access-mode=ReadWriteOnce \ | --access-mode=ReadWriteOnce \ | ||
| --requests=storage=15Gi \ | --requests=storage=15Gi \ | ||
| - | --dry-run=client -o yaml > pvc.yaml | + | --dry-run=client -o yaml > 03-pvc-db.yaml |
| - | # Deployment MariaDB | + | # Deployment |
| - | kubectl create deployment phpipam-db | + | kubectl create deployment phpipam-db --image=mariadb: |
| - | | + | kubectl create service clusterip phpipam-db --tcp=3306: |
| - | | + | |
| - | --dry-run=client -o yaml > deployment-db.yaml | + | |
| - | # Service | + | # Deployment e Service |
| - | kubectl create service clusterip phpipam-db \ | + | kubectl create deployment phpipam-web --image=phpipam/ |
| - | --tcp=3306: | + | kubectl create service clusterip phpipam-web --tcp=80:80 -n $NAMESPACE |
| - | --namespace=phpipam-system \ | + | |
| - | --dry-run=client -o yaml > service-db.yaml | + | |
| - | + | ||
| - | # Deployment | + | |
| - | kubectl create deployment phpipam-web | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | + | ||
| - | # Service phpIPAM Web | + | |
| - | kubectl create service clusterip phpipam-web | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | + | ||
| - | # Deployment phpIPAM Cron | + | |
| - | kubectl create deployment phpipam-cron \ | + | |
| - | --image=phpipam/ | + | |
| - | --namespace=phpipam-system \ | + | |
| - | --dry-run=client -o yaml > deployment-cron.yaml | + | |
| # Ingress | # Ingress | ||
| kubectl create ingress phpipam-ingress \ | kubectl create ingress phpipam-ingress \ | ||
| --class=nginx \ | --class=nginx \ | ||
| - | --rule=" | + | --rule=" |
| - | --namespace=phpipam-system \ | + | -n $NAMESPACE |
| - | | + | |
| - | echo "✅ Todos os manifests foram gerados!" | + | echo " |
| - | echo "" | + | Manifests |
| - | echo "=== PRÓXIMOS PASSOS ===" | + | |
| - | echo "1. Edite os arquivos | + | |
| - | echo " | + | |
| - | echo " | + | |
| - | echo " | + | |
| - | echo " | + | |
| - | echo " | + | |
| - | echo "" | + | |
| - | echo "2. Gere senhas seguras e atualize secrets.yaml" | + | |
| - | echo "3. Aplique os manifests: kubectl apply -f ." | + | |
| - | </ | + | |
| - | ===== Dicas Extras de Uso do dry-run ===== | + | echo " |
| - | + | === PRÓXIMOS PASSOS | |
| - | **Visualizar diferenças antes de aplicar: | + | echo "1. Edite os arquivos gerados para adicionar configurações avançadas." |
| - | + | echo "2. Gere senhas seguras e atualize '02-secrets.yaml' (use codificação base64)." | |
| - | <code bash> | + | echo "3. Aplique os manifestos: |
| - | # Ver o que seria criado | + | |
| - | kubectl create deployment test --image=nginx --dry-run=client -o yaml | + | |
| - | + | ||
| - | # Ver diferenças entre o que existe e o que seria criado | + | |
| - | kubectl | + | |
| </ | </ | ||
| - | **Validar manifests gerados:** | + | ==== Passo 2: Edição e Customização Manual ==== |
| - | <code bash> | + | O '' |
| - | # Validar sintaxe YAML | + | |
| - | kubectl create deployment test --image=nginx --dry-run=client -o yaml | yamllint - | + | |
| - | # Validar no servidor (validação mais completa) | + | **Principais edições necessárias para o phpIPAM:** |
| - | kubectl create deployment test --image=nginx --dry-run=server | + | |
| - | </ | + | |
| - | **Gerar com diferentes formatos:** | + | - **Capabilities de Rede**: Adicionar '' |
| + | - **Variáveis de Ambiente Complexas**: | ||
| + | - **Volumes e '' | ||
| + | - **'' | ||
| + | - **'' | ||
| - | <code bash> | + | **Exemplo |
| - | # JSON em vez de YAML | + | |
| - | kubectl create | + | |
| - | # Wide output | + | < |
| - | kubectl create deployment test --image=nginx --dry-run=client -o wide | + | # ... (início do arquivo) |
| - | </code> | + | |
| - | + | ||
| - | ===== Limitações do dry-run ===== | + | |
| - | + | ||
| - | * **Não gera tudo automaticamente: | + | |
| - | * **Não valida referências: | + | |
| - | * **Alguns recursos não suportam:** Certos recursos avançados podem não ter suporte completo. | + | |
| - | + | ||
| - | ===== Para o phpIPAM Específico ===== | + | |
| - | + | ||
| - | Após gerar os manifests básicos com `dry-run`, você precisará editar manualmente para adicionar: | + | |
| - | + | ||
| - | * **Capabilities de rede** | + | |
| - | * **Variáveis de ambiente** complexas (com `valueFrom`) | + | |
| - | * **Volume mounts** para persistência | + | |
| - | * **Resources** limits e requests | + | |
| - | * **Probes** (liveness, readiness) | + | |
| - | * **Anotações** no Ingress | + | |
| - | + | ||
| - | **Exemplo de edição pós-dry-run: | + | |
| - | + | ||
| - | <file yaml> | + | |
| - | # Após gerar deployment-web.yaml com dry-run, adicione: | + | |
| spec: | spec: | ||
| template: | template: | ||
| Line 398: | Line 223: | ||
| containers: | containers: | ||
| - name: phpipam-web | - name: phpipam-web | ||
| - | | + | |
| - | | + | # ADIÇÕES MANUAIS ABAIXO |
| - | add: [" | + | ports: |
| + | - containerPort: 80 | ||
| env: | env: | ||
| - name: IPAM_DATABASE_PASS | - name: IPAM_DATABASE_PASS | ||
| Line 407: | Line 233: | ||
| name: phpipam-secrets | name: phpipam-secrets | ||
| key: DB_PASSWORD | key: DB_PASSWORD | ||
| - | # ... outras variáveis | + | |
| - | </file> | + | requests: |
| + | cpu: " | ||
| + | memory: " | ||
| + | limits: | ||
| + | cpu: " | ||
| + | memory: " | ||
| + | readinessProbe: | ||
| + | httpGet: | ||
| + | path: /login | ||
| + | port: 80 | ||
| + | initialDelaySeconds: | ||
| + | periodSeconds: | ||
| + | securityContext: | ||
| + | capabilities: | ||
| + | add: [" | ||
| + | # ... (resto do arquivo) | ||
| + | </code> | ||
| + | |||
| + | ---- | ||
| + | ===== 5. Dicas e Limitações ===== | ||
| + | |||
| + | ==== Dicas Avançadas ==== | ||
| + | |||
| + | * **Visualizar diferenças**: | ||
| + | * **Validar no servidor**: Para uma validação mais completa, use '' | ||
| + | * **Mudar formato de saída**: Gere a saída em JSON com '' | ||
| + | |||
| + | ==== Limitações do '' | ||
| + | |||
| + | - **Não gera configurações complexas**: | ||
| + | - **Não valida referências**: | ||
| + | - **Suporte limitado**: Alguns recursos mais novos ou Custom Resource Definitions (CRDs) podem não ter suporte completo para geração via comandos imperativos. | ||
| + | |||
| + | ---- | ||
| + | ===== Conclusão ===== | ||
| + | |||
| + | O '' | ||
wiki/kubernetes/dry-run.1769704776.txt.gz · Last modified: by Wiki Administrator
