Controlar versões de configuração
1) Por que versionalizar configurações
A configuração é uma política executável, que define roteiros, limites, bandeiras de fich, acessíveis, esquemas de dados. O controle de versões torna as alterações repetíveis, visíveis e reversíveis, reduzindo o MTTR e o mudança-failure rate, eliminando a «magia de venda», fornecendo auditoria para segurança e complacência.
2) Taxonomia de configuração
Infraestrutura (IaC): clusters, redes, LB, banco de dados, filas.
Serviço: parâmetros de aplicativos, recursos, limites, temporizações, retais.
Lógica de alimentos/negócios: tarifas, experiências AB, regras de conteúdo.
Dados/£ Ops: contratos de circuito, SLA frescura, transformação.
Segurança: políticas de acesso, papéis, chaves/certificados (os próprios segredos estão fora do repo).
Observabilidade: SLI/SLO, alertas, dashboards.
Regra: Tudo o que afeta o comportamento do sistema é a configuração e deve viver sob versionagem.
3) Princípios de gerenciamento de versões
1. GitOps: A única fonte de verdade é o repositório; alterações via PR e pipas automáticas.
2. Declaração: Descrição do estado de destino, não do cenário de passos.
3. A Imutabilidade dos Artefactos, o Config, → o Snapshot perfeitamente materializado.
4. Esquemas e validação: JSON/YAML-schema, impressão rigorosa de tipos, campos obrigatórios.
5. Ambientes como código: 'eng' - pastas/overleigs (dave/estágio/prod), as diferenças são mínimas e explícitas.
6. Idempotidade e retrocessos: qualquer lançamento de configuração reverso (revert/rollback).
7. Auditoria e rastreabilidade: autor, causa, tíquete/RFC, assinaturas de alterações.
4) Estratégias de versionização
SemVer para pacotes de configs ('MAJOR. MINOR. PATCH`):- MAJOR - mudanças incompatíveis de padrão/política.
- MENOR - novos campos/regras, compatibilidade invertida.
- PATCH - Correções de valores sem alteração de padrão.
- Lançamentos de tag e release de notas: o que foi alterado, como retroceder, os pontos de referência.
- Arquivos pinning/lock: Gravamos versões de dependências (pods, listas).
- Matrix Versões: o artefato X é compatível com o config Y (matriz no catálogo do serviço).
5) Organizar o repositório
config-repo/
policies/ # общие политики (RBAC, SLO, алерты)
services/
checkout/
schema/ # JSON/YAML схемы конфигов base/ # дефолтные значения overlays/
dev/
stage/
prod/
data-contracts/ # схемы данных, SLA свежести releases/ # теги, changelog, артефакты валидации tools/ # линтеры, генераторы, тесты
Ramo: trunk-based (principal) + funções curtas. O Merj é apenas através do PR, com o CI obrigatório.
6) Validação e testes
Esquema: Cada alteração é testada por padrão (required, enum, ranges).
Lentes estáticas: formato, chaves, duplicações, campos não permitidos.
Testes de compatibilidade config + versão de serviço/lista são levantados no banco de areia.
Aplicações de dry-run, «what-if» diff do estado de destino.
Políticas-as-código: regras de tolerância (Rego/CEL) - quem e o que pode mudar.
7) Desenho e reversão de configurações
Progressive delivery: Canário 1%→5%→25% com guardrelas SLO.
Gate deploy: Sem SEV-1 ativo, alertas verdes, assinaturas validadas, reversão pronta.
Retrocesso: 'revert tag vX. Y.Z 'ou mudar para o snapshot anterior; os comandos de retração estão documentados no runbook.
Anotações de lançamento: a versão do config é publicada em métricas/logs para ser rapidamente correlacionada com os incidentes.
8) Configuração dinâmica e remota
Remote config/função flags: altere as opções sem restabelecimento; todas as bandeiras também estão debaixo de GitOps.
Limites: que parâmetros podem ser alterados dinamicamente (lista de listas brancas).
Dinheiro e consistência: TTL, versões, substituição atômica de conjuntos (publicação em duas fases).
Corrimãos seguros: limites e faixas para alterações runtime, auto-rollback ao sair do SLO.
9) Segredos e dados sensíveis
Nunca guardamos segredos no repo. As configurações são apenas links/playsholders.
Criptografia de ficheiros de configs, se necessário: integração com o gerente de segredos/chaves.
Rotação e JIT: Disponíveis durante as operações; o rasto de ação é inalterado.
Camuflagem de campo: validação proíbe PII/segredos em config.
10) Gerenciamento de ambientes
Base + overlays: as diferenças entre dave/estágio/prod são mínimas e transparentes.
Promoção de artefatos: O mesmo que passou pelo estágio avança em prod.
Janelas de tempo: as alterações de configs não acontecem no momento da mudança de serviço; para risk-high - RFC e janela de serviço.
11) Detecção e resolução da deriva
O controlador compara o destino com o real e o diff repórter.
Draft-alert: Página somente para divergências críticas; O resto é o Ticket.
Remunção automática: Ao ser resolvido, volta ao destino.
Auditoria de edição manual: qualquer «kubectl edit/ssh» → incidente de processo e CAPA.
12) Catálogo de configurações e posse
Catálogo do serviço: proprietário, SLO, políticas relacionadas, esquemas, versões, compatibilidade.
RACI: Quem propõe, quem renova, quem aprova; FAB para high-risk.
Transparência: Cada entrada tem um histórico de versões e links para PR/tíquetes/AAR.
13) Métricas de maturidade
Coverage:% serviços/políticas sob GitOps (meta ≥ 95%).
Lead time de alterações configh: mediana de PR a proda.
Mudar failure rate: proporção de lançamentos de config com reversão/incidente.
Draft rate: número de divergências/semana e hora de correção.
Time Rollback: Mediana de recuperação para a versão anterior.
Auditório completeness: proporção de alterações com evidence completa (validadores, dry-run, comentários).
14) Folhas de cheque
Antes de alterar configuração
- Há um tíquete/RFC e o dono da mudança.
- A validação dos circuitos e linters foi superada.
- Há um plano de reversão e comandos no runbook.
- Gate: Testes verdes, assinaturas validadas, sem V-1 ativo.
- Para high-risk - uma janela de manutenção foi atribuída.
Durante a abertura
- O canário e a guarda SLO estão ativos.
- As anotações de versão são publicadas.
- Há mensagens de eco para o canal; o barulho de alert está deprimido de acordo com as regras da MW.
Depois
- Observação window ultrapassado, SLO verde.
- Resultados e evidence (gráficos antes/depois, relatórios dry-run) anexados ao tíquete.
- Os circuitos/documentação foram atualizados, se necessário.
15) Mini-modelos
15. 1 Esquema de configuração (YAML-schema, fatia)
yaml type: object required: [service, timeouts, retries]
properties:
service: { type: string, pattern: "^[a-z0-9-]+$" }
timeouts:
type: object properties:
connect_ms: { type: integer, minimum: 50, maximum: 5000 }
request_ms: { type: integer, minimum: 100, maximum: 20000 }
retries:
type: object properties:
attempts: { type: integer, minimum: 0, maximum: 10 }
backoff_ms: { type: integer, minimum: 0, maximum: 5000 }
15. 2 Config básico + overlay prod
yaml services/checkout/base/config.yaml service: checkout timeouts: { connect_ms: 200, request_ms: 1500 }
retries: { attempts: 2, backoff_ms: 200 }
limits: { rps: 500 }
features:
degrade_search: false psp_a_weight: 80 psp_b_weight: 20
yaml services/checkout/overlays/prod/config.yaml limits: { rps: 1200 }
features:
psp_a_weight: 70 psp_b_weight: 30
15. 3 Política de tolerância (ideia)
yaml allow_change_when:
tests: passed schema_validation: passed active_incidents: none_of [SEV-0, SEV-1]
rollback_plan: present signed_by: ["owner:team-checkout","platform-sre"]
15. 4 Cartão de lançamento do config
Release: checkout-config v2.3.1
Scope: prod EU
Changes: psp_b_weight 20→30, request_ms 1500→1300
Risk: Medium (маршрутизация платежей)
Canary: 1%→5%→25% (30/30/30 мин), guardrails: success_ratio, p95
Rollback: tag v2.3.0
16) Anti-pattern
As edições de venda passam por GitOps («depressa»).
Segredos/PII no repositório de configs.
Não existem esquemas ou verificações estáticas.
Forte discrepância de ambientes (base≠prod).
Bandeiras «ao vivo» sem versões ou história.
Ignorar a deriva e as edições manuais dos servidores.
Marcas de formatação sem release de notas ou plano de reversão.
17) Mapa de trânsito de implementação (4-6 semanas)
1. Ned. 1: inventário de configs; diretórios separados, esquemas para serviços top 10.
2. Ned. 2: incluir lentes/validação e dry-run em CI; a proibição de uma mágica sem cheques verdes.
3. Ned. 3: espaçamento + canários; anotações de versões na telemetria.
4. Ned. 4: Inserir políticas de tolerância (policy-as-código) e modelos rollback; Alertas à deriva.
5. Ned. 5-6 - cobrir 90% dos serviços; reduzir as diferenças de end para overlays; adicionar métricas de maturidade e review semanal de mudanças config.
18) Total
Controlar versões de configuração é um sistema, não apenas um Git. Esquemas e validação, GitOps e políticas de acesso, canários e retrocessos, detecção de deriva e auditoria completa transformam config em artefato controlado. O resultado é uma mudança rápida e segura, previsibilidade do SLO e confiança da equipe em cada lançamento.