# Enterprise Overrides O sistema de overrides permite adaptar a stack do Yby para qualquer ambiente corporativo sem modificar templates ou forkar o projeto. --- ## Como Funciona O Yby gera infraestrutura a partir de uma stack opinativa com defaults para PMEs. O arquivo de overrides substitui valores hardcoded por configuracoes da sua organizacao. ``` Sem overrides (PME): Traefik + Let's Encrypt + local-path + Docker Hub Com overrides (Enterprise): Nginx + CA interna + gp3 + ECR privado ``` ### Precedencia de Carregamento 1. `--config ` (flag explicita) 2. `.yby/overrides.yaml` (diretorio do projeto) 3. `~/.yby/overrides.yaml` (global do usuario) 4. Defaults vazios (comportamento padrao) ```bash # Uso explicito yby init --config .yby/overrides.yaml --topology standard # Auto-detect (se .yby/overrides.yaml existir) yby init --topology standard ``` --- ## Referencia Completa ```yaml # .yby/overrides.yaml # ============================================================ # REGISTRY DE IMAGENS # Redireciona todas as imagens para um registry privado. # ============================================================ registry: url: "012345678.dkr.ecr.sa-east-1.amazonaws.com" # Prefixo aplicado a todas as imagens pullSecret: "regcred" # Nome do imagePullSecret no cluster # ============================================================ # CLOUD PROVIDER # Ajusta storage class e provider para o ambiente cloud. # ============================================================ cloud: provider: "aws" # aws, gcp, azure, "" (on-prem) storageClass: "gp3" # Storage class do cluster (default: local-path) # ============================================================ # INGRESS # Define o ingress controller do cluster. # ============================================================ ingress: className: "nginx" # nginx, traefik, alb (default: traefik) # ============================================================ # TLS E CERTIFICADOS # Configura emissao de certificados TLS. # ============================================================ tls: issuer: "custom" # custom | letsencrypt-staging | letsencrypt-prod caSecretName: "corp-ca-tls" # Secret com CA corporativa (quando issuer=custom) acmeSolver: "dns01" # http01 | dns01 (quando issuer=letsencrypt-*) # ============================================================ # NAMESPACES # Adiciona prefixo e labels a todos os namespaces gerados. # ============================================================ namespaces: prefix: "fintech" # Resultado: fintech-argocd, fintech-monitoring, etc. labels: # Labels injetadas em todos os namespaces cost-center: "platform" team: "devops" compliance: "pci-dss" # ============================================================ # HELM CHARTS # Configura mirror de repositorios e versoes de charts. # ============================================================ helm: repoBaseURL: "https://charts.internal.corp" # Mirror interno (substitui repos publicos) versions: # Versoes especificas de charts argocd: "6.7.0" keda: "2.16.0" kepler: "0.5.14" # ============================================================ # IMAGENS (OVERRIDES EXPLICITOS) # Substitui imagens especificas por versoes customizadas. # Tem precedencia sobre registry.url. # ============================================================ images: overrides: "ubuntu:22.04": "registry.corp/hardened/ubuntu:22.04-cis" "bitnami/kubectl:1.31": "registry.corp/bitnami/kubectl:1.31" # ============================================================ # GIT PROVIDER # Define o provider Git para discovery de repositorios. # ============================================================ git: provider: "gitlab" # github | gitlab | bitbucket (default: github) # ============================================================ # OBSERVABILIDADE # Define o backend de monitoramento. # ============================================================ observability: mode: "thanos" # prometheus | thanos | loki (default: prometheus) # ============================================================ # RESOURCE PROFILES # Define o perfil de recursos para componentes do cluster. # ============================================================ profiles: resources: "large" # small | medium | large (default: medium) # small: 128Mi/100m (dev local) # medium: 256Mi/250m (staging) # large: 512Mi/500m (producao) ``` --- ## Capabilities vs Produtos O Yby usa nomes de produtos como defaults (MinIO, Kepler, KEDA), mas eles representam **capabilities** da plataforma: | Flag do CLI | Capability | Default | Como Trocar | | :--- | :--- | :--- | :--- | | `--enable-minio` | Object Storage | MinIO | Desabilite e adicione seu provider via charts/ | | `--enable-kepler` | Energy Metrics | Kepler | Desabilite e adicione exporters customizados | | `--enable-keda` | Event Autoscaling | KEDA | Desabilite e use HPA nativo | | `--enable-metrics-server` | Observability | Prometheus | Use `observability.mode` no overrides | A estrutura gerada pelo `yby init` e sempre a mesma — GitOps com App of Apps. Trocar um componente significa: 1. Desabilitar a flag do default (`--enable-minio=false`) 2. Adicionar seu chart customizado em `charts/` 3. Criar uma Application no `manifests/argocd/` --- ## Cenarios de Uso ### Banco Digital (AWS) ```yaml registry: url: "012345678.dkr.ecr.sa-east-1.amazonaws.com" pullSecret: "ecr-regcred" cloud: provider: "aws" storageClass: "gp3" ingress: className: "alb" tls: issuer: "custom" caSecretName: "bank-internal-ca" namespaces: prefix: "bank" labels: compliance: "pci-dss" cost-center: "infrastructure" ``` ### Startup (GCP, defaults rapidos) ```yaml cloud: provider: "gcp" storageClass: "standard-rwo" ingress: className: "nginx" tls: issuer: "letsencrypt-prod" acmeSolver: "dns01" ``` ### On-Prem (Air-gapped) ```yaml registry: url: "harbor.internal:5000" pullSecret: "harbor-cred" helm: repoBaseURL: "https://chartmuseum.internal" tls: issuer: "custom" caSecretName: "corp-root-ca" namespaces: prefix: "prod" ``` --- ## Configuração Cloud em Environments O arquivo `.yby/environments.yaml` suporta configuração de clusters cloud gerenciados via `cloud`: ### Campos por Provider | Campo | AWS | Azure | GCP | Descrição | | :--- | :---: | :---: | :---: | :--- | | `provider` | x | x | x | Provider cloud (`aws`, `azure`, `gcp`) | | `region` | x | | | Região AWS (ex: `sa-east-1`) | | `cluster` | x | x | x | Nome do cluster K8s gerenciado | | `profile` | x | | | AWS profile (~/.aws/credentials) | | `role_arn` | x | | | ARN do IAM Role para AssumeRole | | `resource_group` | | x | | Resource Group do AKS | | `subscription` | | x | | ID da Subscription Azure | | `tenant_id` | | x | | ID do Tenant Azure AD | | `login_mode` | | x | | Modo de login (`cli`, `sp`, `msi`) | | `project_id` | | | x | ID do projeto GCP | | `zone` | | | x | Zona GCP (ex: `us-east1-b`) | ### Exemplo AWS (ECR + EKS) ```yaml # .yby/environments.yaml environments: prod-aws: type: remote cloud: provider: aws region: sa-east-1 cluster: prod-eks profile: production role_arn: "arn:aws:iam::123456789:role/eks-admin" ``` Combinado com overrides para ECR: ```yaml # .yby/overrides.yaml registry: url: "012345678.dkr.ecr.sa-east-1.amazonaws.com" pullSecret: "ecr-regcred" cloud: provider: "aws" storageClass: "gp3" ``` ### Exemplo Azure (ACR + AKS) ```yaml # .yby/environments.yaml environments: prod-azure: type: remote cloud: provider: azure cluster: prod-aks resource_group: rg-platform subscription: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" tenant_id: "ffffffff-gggg-hhhh-iiii-jjjjjjjjjjjj" login_mode: cli ``` Combinado com overrides para ACR: ```yaml # .yby/overrides.yaml registry: url: "meurepo.azurecr.io" pullSecret: "acr-regcred" cloud: provider: "azure" storageClass: "managed-premium" ``` ### Exemplo GCP (GCR + GKE) ```yaml # .yby/environments.yaml environments: prod-gcp: type: remote cloud: provider: gcp cluster: prod-gke project_id: meu-projeto-id zone: us-east1-b ``` Combinado com overrides para GCR: ```yaml # .yby/overrides.yaml registry: url: "gcr.io/meu-projeto-id" pullSecret: "gcr-regcred" cloud: provider: "gcp" storageClass: "standard-rwo" ``` --- ## Integracao com Bootstrap O `yby bootstrap cluster` não lê o arquivo de overrides nem aceita `--config` (a flag só existe no `yby init`). Os overrides chegam ao cluster pelo que o `yby init --config` gerou: os `values.yaml` dos charts `bootstrap` e `cluster-config` saem com eles aplicados. - **Namespaces**: Nomes com o prefixo configurado - **Registry**: Imagens apontando para o registry privado - **Chart versions**: Versões de `keda` e `kepler` em `helm.versions` - **Ingress e TLS**: Ingress class e issuer configurados ```bash # Os overrides entram na geração; o bootstrap instala o que foi gerado yby init --config .yby/overrides.yaml yby bootstrap cluster ```