Provisionamento & Tainting (Fase 3)
Na Fase 3, o agente cria o nó dedicado de banco (rke-db-00) e o isola
para que nada além de PostgreSQL seja agendado nele. São dois passos: provisionar
(Terraform) e marcar (Ansible/RKE).
Passo 1 — Terraform provisiona o nó na OVH
Seção intitulada “Passo 1 — Terraform provisiona o nó na OVH”O agente dispara o Terraform, que cria a instância e anexa o volume NVMe de alta performance (detalhes em Armazenamento).
# Exemplo ilustrativo — valores reais vêm das variáveis do agenteresource "openstack_compute_instance_v2" "rke_db_00" { name = "rke-db-00" flavor_name = var.db_flavor # instância com perfil de banco image_name = var.hardened_image # imagem base com CIS aplicado key_pair = var.ssh_key
network { name = var.private_network }}
# Volume NVMe dedicado, anexado ao nó de bancoresource "openstack_blockstorage_volume_v3" "rke_db_00_nvme" { name = "rke-db-00-nvme" size = var.db_volume_size_gb volume_type = "high-speed-nvme"}
resource "openstack_compute_volume_attach_v2" "rke_db_00_attach" { instance_id = openstack_compute_instance_v2.rke_db_00.id volume_id = openstack_blockstorage_volume_v3.rke_db_00_nvme.id}Passo 2 — Ansible/RKE injeta label e taint
Seção intitulada “Passo 2 — Ansible/RKE injeta label e taint”Ao aplicar o cluster.yml, o agente marca especificamente o rke-db-00:
# cluster.yml (trecho) — somente o nó de banco recebe estas marcaçõesnodes: - address: rke-db-00 user: ubuntu role: [worker] labels: node-role.kubernetes.io/database: "true" # atrai os bancos taints: - key: dedicated value: database effect: NoSchedule # repele todo o resto| Marcação | Tipo | Efeito |
|---|---|---|
node-role.kubernetes.io/database=true | Label | Atrai pods de banco (via nodeAffinity) |
dedicated=database:NoSchedule | Taint | Repele qualquer pod sem a toleration |
Resultado
Seção intitulada “Resultado”flowchart LR
TF["Terraform"] -->|cria nó + NVMe| Node["rke-db-00"]
AN["Ansible / RKE"] -->|label + taint| Node
Node --> Iso["🔒 Isolado:<br/>só PostgreSQL roda aqui"]
Com isso, nada além dos pods autorizados (que declaram affinity + toleration) pode ser agendado no nó de banco. O par label/taint é a base de toda a estratégia de scheduling.