User Tools

Site Tools


wiki:kubernetes:dry-run

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
wiki:kubernetes:dry-run [2026/01/29 13:39] Wiki Administratorwiki:kubernetes:dry-run [2026/01/29 14:14] (current) – [1. Introdução ao ''kubectl --dry-run''] Wiki Administrator
Line 1: Line 1:
-====== Uso do ''--dry-run=client'' para Gerar Manifests Kubernetes ======+====== Guia de Referência: Gerando Manifestos Kubernetes com ''kubectl --dry-run'' ======
  
-O comando `kubectl` com opção ''--dry-run=client'' é extremamente útil para gerar esqueletos de manifestos YAML sem aplicar as alterações no cluster. Esta técnica é ideal para criar templates iniciais que podem ser posteriormente customizados.+Este guia consolida uma série de comandos e exemplos práticos para a geração de manifestos Kubernetes utilizando flag ''--dry-run=client''. O objetivo é fornecer um material de referência estruturado que abrange desde conceitos básicos para iniciantes até um fluxo de trabalho completo para a implantação de uma aplicação como o phpIPAM.
  
-===== Comandos ''dry-run'' Úteis para o Cenário phpIPAM =====+===== 1. Introdução ao ''kubectl --dry-run'' =====
  
-==== 1ConfigMap ====+A flag ''--dry-run'' é uma ferramenta poderosa do ''kubectl'' que permite simular a execução de um comando sem que ele realize qualquer alteração real no cluster. Isso é extremamente útil para gerar, validar e inspecionar os manifestos YAML que serão aplicados.
  
-**ConfigMap com múltiplos valores literais:**+  * **''--dry-run=client''**: O comando é processado inteiramente no lado do cliente. Ele gera o objeto da API em formato YAML ou JSON, mas não o envia para o servidor da API do Kubernetes. É ideal para criar esqueletos de manifestos que serão posteriormente editados. 
 +  * **''--dry-run=server''**: O comando é enviado ao servidor da API, que executa todas as etapas de validação (como autenticação, autorização e verificação de admission controllers), mas não persiste o objeto no etcd. Isso é útil para validar se um manifesto seria aceito pelo cluster. 
 + 
 +---- 
 +===== 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** | ''kubectl create deploy nginx --image=nginx --dry-run=client -o yaml'' | Gera um manifesto para um Deployment simples com a imagem do Nginx. | 
 +| **Service** | ''kubectl expose deploy nginx --port=8080 --target-port=80 --dry-run=client -o yaml'' | Cria um Service do tipo ClusterIP para expor a porta 80 do Deployment ''nginx'' na porta 8080 do Service. | 
 +| **Namespace** | ''kubectl create namespace meu-app --dry-run=client -o yaml'' | Gera o manifesto para a criação de um novo Namespace. | 
 +| **Secret** | ''kubectl create secret generic db-secret --from-literal=USER=admin --from-literal=PASS=1234 --dry-run=client -o yaml'' | Cria um Secret com dados sensíveis passados diretamente como literais. | 
 +**Ingress** | ''kubectl create ingress meu-ingress --class=nginx --rule="app.com/*=meu-servico:80" --dry-run=client -o yaml'' | Gera uma regra de Ingress básica para rotear o tráfego para um Service. | 
 + 
 + 
 +---- 
 +===== 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="America/Sao_Paulo" \   --from-literal=TZ="America/Sao_Paulo" \
   --from-literal=SCAN_INTERVAL="1h" \   --from-literal=SCAN_INTERVAL="1h" \
-  --from-literal=IPAM_DATABASE_HOST="phpipam-db"+  -n phpipam-system --dry-run=client -o yaml
-  --from-literal=IPAM_DISABLE_INSTALLER="0"+
-  -n phpipam-system +
-  --dry-run=client +
-  -o yaml > configmap.yaml +
-</code>+
  
-**ConfigMap a partir de arquivo:**+# Secret TLS a partir de arquivos de certificado e chave 
 +kubectl create secret tls tls-secret-phpipam \ 
 +  --cert=path/to/cert.crt \ 
 +  --key=path/to/cert.key \ 
 +  -n phpipam-system --dry-run=client -o yaml
  
-<code bash> +PersistentVolumeClaim (PVC) para armazenamento persistente
-kubectl create configmap phpipam-config \ +
-  --from-file=./configs/+
-  -n phpipam-system \ +
-  --dry-run=client \ +
-  -o yaml > configmap-from-files.yaml +
-</code> +
- +
-==== 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
-  -o yaml > pvc.yaml+
 </code> </code>
  
-==== 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/phpipam-www:v1.7.4 \   --image=phpipam/phpipam-www:v1.7.4 \
Line 53: Line 61:
   --replicas=1 \   --replicas=1 \
   --port=80 \   --port=80 \
-  --dry-run=client +  --env="TZ=America/Sao_Paulo"
-  -o yaml > deployment-web.yaml +  --dry-run=client -o yaml
-</code>+
  
-**Deployment com variáveis de ambiente:**+# StatefulSet para aplicações com estado, como bancos de dados 
 +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 deployment phpipam-web +kubectl create cronjob phpipam-backup 
-  --image=phpipam/phpipam-www:v1.7.\+  --image=mariadb:11.\
   --namespace=phpipam-system \   --namespace=phpipam-system \
-  --env="TZ=America/Sao_Paulo"+  --schedule="0 2 * * *" \ 
-  --env="IPAM_DATABASE_HOST=phpipam-db" \ +  --dry-run=client -o yaml
-  --dry-run=client +
-  -o yaml > deployment-web-with-env.yaml+
 </code> </code>
  
-==== 4Service 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
-  --dry-run=client +
-  -o yaml > service-web.yaml +
-</code>+
  
-**Service LoadBalancer (se necessário acesso direto):** +Service do tipo NodePort (expõe em uma porta estática em cada nó)
- +
-<code bash> +
-kubectl create service loadbalancer phpipam-web \ +
-  --tcp=80:80 \ +
-  --namespace=phpipam-system \ +
-  --dry-run=client \ +
-  -o yaml > service-web-lb.yaml +
-</code> +
- +
-**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
-  --dry-run=client +
-  -o yaml > service-web-nodeport.yaml +
-</code>+
  
-==== 5. Service Headless para StatefulSet/Deployment de Banco ==== +Service Headless (para descoberta de serviço com StatefulSets)
- +
-<code bash>+
 kubectl create service clusterip phpipam-db \ kubectl create service clusterip phpipam-db \
   --tcp=3306:3306 \   --tcp=3306:3306 \
   --clusterip="None" \   --clusterip="None" \
-  --namespace=phpipam-system +  --namespace=phpipam-system --dry-run=client -o yaml
-  --dry-run=client +
-  -o yaml > service-db-headless.yaml+
 </code> </code>
  
-==== 6Resource Quota (para limites de namespace) ====+==== 3.4. Políticas e Controle de Acesso ====
  
 <code bash> <code bash>
-kubectl create quota phpipam-quota \ +# ServiceAccount, Role e RoleBinding (RBAC) 
-  --namespace=phpipam-system +kubectl create serviceaccount phpipam-sa -phpipam-system --dry-run=client -o yaml 
-  --hard=cpu=2,memory=4Gi,requests.cpu=1,requests.memory=2Gi,pods=10 \ +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:phpipam-sa -n phpipam-system --dry-run=client -o yaml
-  -o yaml > resource-quota.yaml +
-</code>+
  
-==== 7. LimitRange (para limites padrão em containers) ==== +# NetworkPolicy para restringir tráfego de rede 
- +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 \ +
-  -yaml > limitrange.yaml +
-</code> +
- +
-==== 8. NetworkPolicy (para segurança de rede) ==== +
- +
-<code bash> +
-kubectl create networkpolicy phpipam-network-policy \ +
-  --namespace=phpipam-system \+
   --pod-selector=app=phpipam-web \   --pod-selector=app=phpipam-web \
-  --ingress='[{"from":[{"podSelector":{"matchLabels":{"app":"phpipam-web"}}}],"ports":[{"protocol":"TCP","port":80}]}]' \ +  --ingress='[{"from":[{"podSelector":{"matchLabels":{"app":"ingress"}}}]}]'
-  --dry-run=client +  -n phpipam-system --dry-run=client -o yaml
-  -o yaml > networkpolicy.yaml+
 </code> </code>
  
-==== 9ServiceAccount RoleBinding ==== +==== 3.5. Gerenciamento de Recursos Alta Disponibilidade ====
- +
-**ServiceAccount:**+
  
 <code bash> <code bash>
-kubectl create serviceaccount phpipam-sa +# ResourceQuota para limitar o consumo de recursos em um Namespace 
-  --namespace=phpipam-system +kubectl create quota phpipam-quota 
-  --dry-run=client +  --hard=pods=10,cpu=2,memory=4Gi 
-  -o yaml > serviceaccount.yaml +  -n phpipam-system --dry-run=client -o yaml
-</code>+
  
-**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 role phpipam-role +kubectl create poddisruptionbudget phpipam-pdb 
-  --namespace=phpipam-system +  --selector=app=phpipam-web 
-  --verb=get,list,watch +  --max-unavailable=
-  --resource=pods,services \ +  -n phpipam-system --dry-run=client -o yaml
-  --dry-run=client +
-  -o yaml > role.yaml+
 </code> </code>
  
-**RoleBinding:** 
  
-<code bash> +---- 
-kubectl create rolebinding phpipam-rolebinding \ +===== 4Fluxo de Trabalho Completo para phpIPAM =====
-  --namespace=phpipam-system \ +
-  --role=phpipam-role \ +
-  --serviceaccount=phpipam-system:phpipam-sa \ +
-  --dry-run=client \ +
-  -o yaml > rolebinding.yaml +
-</code>+
  
-==== 10Secret TLS (alternativa ao generic) ====+Este fluxo demonstra como usar o ''dry-run'' para gerar a base de uma aplicação completa e, em seguida, customizá-la.
  
-<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/to/cert.crt \ +
-  --key=path/to/cert.key \ +
-  --namespace=phpipam-system \ +
-  --dry-run=client \ +
-  -o yaml > tls-secret.yaml +
-</code>+
  
-==== 11. StatefulSet (alternativa para banco de dados) ====+O script a seguir gera todos os manifestos básicos necessários para a aplicação phpIPAM, incluindo Namespace, ConfigMap, Secret, PVC, Deployments e Services.
  
 <code bash> <code bash>
-kubectl create statefulset phpipam-db \ +#!/bin/bash 
-  --image=mariadb:11.8 \ +# generate-phpipam-manifests.sh
-  --namespace=phpipam-system \ +
-  --service=phpipam-db \ +
-  --dry-run=client \ +
-  -o yaml > statefulset-db.yaml +
-</code>+
  
-==== 12. Pod (para testes rápidos) ====+NAMESPACE="phpipam-system"
  
-<code bash> +echo "=== Gerando todos os manifests para phpIPAM no namespace $NAMESPACE ==="
-kubectl run phpipam-test \ +
-  --image=phpipam/phpipam-www:v1.7.4 \ +
-  --namespace=phpipam-system \ +
-  --restart=Never \ +
-  --dry-run=client \ +
-  -o yaml > test-pod.yaml +
-</code> +
- +
-==== 13. Job/CronJob (para tarefas agendadas) ==== +
- +
-**CronJob para backup:** +
- +
-<code bash> +
-kubectl create cronjob phpipam-backup \ +
-  --image=mariadb:11.8 \ +
-  --namespace=phpipam-system \ +
-  --schedule="0 2 * * *+
-  --dry-run=client \ +
-  -o yaml > cronjob-backup.yaml +
-</code> +
- +
-==== 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 +
-</code> +
- +
-==== 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 +
-</code> +
- +
-===== Script Completo para Gerar Todos os Manifests do phpIPAM ===== +
- +
-<code bash> +
-#!/bin/bash +
-# generate-phpipam-manifests.sh+
  
-echo "=== Gerando todos os manifests para phpIPAM ==="+mkdir -p phpipam-manifests 
 +cd phpipam-manifests
  
 # Namespace # Namespace
-kubectl create namespace phpipam-system --dry-run=client -o yaml > namespace.yaml+kubectl create namespace $NAMESPACE --dry-run=client -o yaml > 00-namespace.yaml
  
 # ConfigMap # ConfigMap
 kubectl create configmap phpipam-config \ kubectl create configmap phpipam-config \
   --from-literal=TZ="America/Sao_Paulo" \   --from-literal=TZ="America/Sao_Paulo" \
-  --from-literal=SCAN_INTERVAL="1h" \ 
   --from-literal=IPAM_DATABASE_HOST="phpipam-db" \   --from-literal=IPAM_DATABASE_HOST="phpipam-db" \
-  --from-literal=IPAM_DATABASE_WEBHOST="%"+  -n $NAMESPACE --dry-run=client -o yaml > 01-configmap.yaml
-  --from-literal=IPAM_TRUST_X_FORWARDED="true"+
-  --from-literal=IPAM_DISABLE_INSTALLER="0"+
-  -n phpipam-system \ +
-  --dry-run=client -o yaml > configmap.yaml+
  
-# Secret+# Secret (com placeholders)
 kubectl create secret generic phpipam-secrets \ kubectl create secret generic phpipam-secrets \
   --from-literal=DB_ROOT_PASSWORD="CHANGE_ME" \   --from-literal=DB_ROOT_PASSWORD="CHANGE_ME" \
   --from-literal=DB_PASSWORD="CHANGE_ME" \   --from-literal=DB_PASSWORD="CHANGE_ME" \
-  -n phpipam-system \ +  -n $NAMESPACE --dry-run=client -o yaml > 02-secrets.yaml
-  --dry-run=client -o yaml > secrets.yaml+
  
 # 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 e Service do Banco de Dados (MariaDB) 
-kubectl create deployment phpipam-db +kubectl create deployment phpipam-db --image=mariadb:11.8 -n $NAMESPACE --dry-run=client -o yaml > 04-deployment-db.yaml 
-  --image=mariadb:11.8 +kubectl create service clusterip phpipam-db --tcp=3306:3306 -n $NAMESPACE --dry-run=client -o yaml > 05-service-db.yaml
-  --namespace=phpipam-system \ +
-  --dry-run=client -o yaml > deployment-db.yaml+
  
-# Service MariaDB +Deployment e Service da Aplicação Web (phpIPAM) 
-kubectl create service clusterip phpipam-db \ +kubectl create deployment phpipam-web --image=phpipam/phpipam-www:v1.7.4 -n $NAMESPACE --dry-run=client -o yaml > 06-deployment-web.yaml 
-  --tcp=3306:3306 \ +kubectl create service clusterip phpipam-web --tcp=80:80 -n $NAMESPACE --dry-run=client -o yaml > 07-service-web.yaml
-  --namespace=phpipam-system \ +
-  --dry-run=client -o yaml > service-db.yaml +
- +
-# Deployment phpIPAM Web +
-kubectl create deployment phpipam-web +
-  --image=phpipam/phpipam-www:v1.7.4 +
-  --namespace=phpipam-system \ +
-  --dry-run=client -o yaml > deployment-web.yaml +
- +
-# Service phpIPAM Web +
-kubectl create service clusterip phpipam-web +
-  --tcp=80:80 +
-  --namespace=phpipam-system \ +
-  --dry-run=client -o yaml > service-web.yaml +
- +
-# Deployment phpIPAM Cron +
-kubectl create deployment phpipam-cron \ +
-  --image=phpipam/phpipam-cron:latest \ +
-  --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="ipam-hml.sefaz.rn.gov.br/*=phpipam-web:80"+  --rule="ipam.example.com/*=phpipam-web:80"
-  --namespace=phpipam-system \ +  -n $NAMESPACE --dry-run=client -o yaml > 08-ingress.yaml
-  --dry-run=client -o yaml > ingress.yaml+
  
-echo "✅ Todos os manifests foram gerados!+echo " 
-echo "" +Manifests gerados em 'phpipam-manifests/'!"
-echo "=== PRÓXIMOS PASSOS ===" +
-echo "1. Edite os arquivos gerados para adicionar:" +
-echo "   Variáveis de ambiente nos deployments" +
-echo "   - SecurityContext com capabilities" +
-echo "   - Resources requests/limits" +
-echo "   - Volumes e volumeMounts" +
-echo "   - Probes (liveness/readiness)" +
-echo "" +
-echo "2. Gere senhas seguras e atualize secrets.yaml" +
-echo "3. Aplique os manifests: kubectl apply -f ." +
-</code>+
  
-===== 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: kubectl apply -f ."
-# 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 diff -f deployment.yaml+
 </code> </code>
  
-**Validar manifests gerados:**+==== Passo 2Edição e Customização Manual ====
  
-<code bash> +O ''dry-run'' gera uma base sólida, mas não cobre todas as configurações. Após a geração, é crucial editar os manifestos para adicionar detalhes específicos da aplicaçã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 +
-</code>+
  
-**Gerar com diferentes formatos:**+  - **Capabilities de Rede**: Adicionar ''NET_ADMIN'' e ''NET_RAW'' ao ''securityContext'' do container para permitir que o phpIPAM execute scans de rede. 
 +  - **Variáveis de Ambiente Complexas**: Configurar variáveis que buscam valores de Secrets ou ConfigMaps (usando ''valueFrom''). 
 +  - **Volumes e ''volumeMounts''**: Montar o ''PersistentVolumeClaim'' no Pod do banco de dados para garantir a persistência dos dados. 
 +  - **''Resources'' (requests/limits)**: Definir requisições e limites de CPU e memória para garantir a estabilidade e o bom uso dos recursos do cluster. 
 +  - **''Probes'' (liveness/readiness)**: Configurar verificações de saúde para que o Kubernetes saiba quando um container está pronto para receber tráfego ou precisa ser reiniciado.
  
-<code bash> +**Exemplo de edição no ''06-deployment-web.yaml'':**
-# JSON em vez de YAML +
-kubectl create deployment test --image=nginx --dry-run=client -o json+
  
-# Wide output +<code yaml
-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:** Para configurações complexas (securityContext, volumes complexos, etc.), você precisa editar manualmente. +
-  * **Não valida referências:** Não verifica se Secrets, ConfigMaps ou Services referenciados existem. +
-  * **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** (`NET_ADMIN`, `NET_RAW`) +
-  * **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
-        securityContext+        imagephpipam/phpipam-www:v1.7.4 
-          capabilities+        # ADIÇÕES MANUAIS ABAIXO 
-            add["NET_ADMIN", "NET_RAW"]+        ports
 +        - containerPort80
         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 +        resources: 
-</file>+          requests: 
 +            cpu: "250m" 
 +            memory: "256Mi" 
 +          limits: 
 +            cpu: "500m" 
 +            memory: "512Mi" 
 +        readinessProbe: 
 +          httpGet: 
 +            path: /login 
 +            port: 80 
 +          initialDelaySeconds: 10 
 +          periodSeconds:
 +        securityContext: 
 +          capabilities: 
 +            add: ["NET_ADMIN", "NET_RAW"
 +# ... (resto do arquivo) 
 +</code> 
 + 
 +---- 
 +===== 5. Dicas e Limitações ===== 
 + 
 +==== Dicas Avançadas ==== 
 + 
 +  * **Visualizar diferenças**: Antes de aplicar uma alteração, veja o que mudará com ''kubectl diff -f seu-arquivo.yaml''
 +  * **Validar no servidor**: Para uma validação mais completa, use ''--dry-run=server''
 +  * **Mudar formato de saída**: Gere a saída em JSON com ''-o json'' ou em um formato mais detalhado com ''-o wide''
 + 
 +==== Limitações do ''dry-run'' ==== 
 + 
 +  - **Não gera configurações complexas**: ''securityContext'', ''probes'', ''volumeMounts'' e outras seções avançadas geralmente precisam ser adicionadas manualmente. 
 +  - **Não valida referências**: O ''dry-run=client'' não verifica se os ''Secrets'' ou ''ConfigMaps'' referenciados realmente existem no cluster. 
 +  - **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 ''kubectl --dry-run'' é uma ferramenta indispensável no fluxo de trabalho de um administrador Kubernetes. Ele acelera a criação de manifestos, reduz erros e serve como um excelente ponto de partida para a configuração de aplicações. A abordagem recomendada é usar o ''dry-run'' para gerar o esqueleto dos manifestos e, em seguida, investir tempo na revisão e customização manual para atender aos requisitos específicos de produção, segurança e resiliência da sua aplicação. 
wiki/kubernetes/dry-run.1769704776.txt.gz · Last modified: by Wiki Administrator