Pular para o conteúdo

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).

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 agente
resource "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 banco
resource "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
}

Ao aplicar o cluster.yml, o agente marca especificamente o rke-db-00:

# cluster.yml (trecho) — somente o nó de banco recebe estas marcações
nodes:
- 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çãoTipoEfeito
node-role.kubernetes.io/database=trueLabelAtrai pods de banco (via nodeAffinity)
dedicated=database:NoScheduleTaintRepele qualquer pod sem a toleration
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.