Onde o state fica
O storage de state da instalação é configurado uma vez, na instalação. O Firstlume sempre cifra cada versão antes de gravar, e a chave do objeto só tem ids (nada de nome de stack ou unit). Os metadados e os locks ficam sempre no Postgres.
Configurações
| Variável | Padrão | |
|---|---|---|
FIRSTLUME_STATE_STORAGE |
postgres |
postgres ou s3 (qualquer S3 compatível, testado com Garage) |
FIRSTLUME_STATE_S3_ENDPOINT |
por exemplo http://garage.garage.svc:3900 |
|
FIRSTLUME_STATE_S3_BUCKET |
||
FIRSTLUME_STATE_S3_REGION |
garage |
|
FIRSTLUME_STATE_S3_PREFIX |
para dividir um bucket | |
FIRSTLUME_STATE_S3_ACCESS_KEY_ID, FIRSTLUME_STATE_S3_SECRET_ACCESS_KEY |
a chave precisa ler, gravar, apagar e listar no bucket | |
FIRSTLUME_STATE_S3_PATH_STYLE |
true |
o Garage precisa de path-style |
FIRSTLUME_STATE_KEEP_VERSIONS |
0 |
versões guardadas por unit; 0 guarda todas |
FIRSTLUME_STATE_MAX_MIB |
64 |
tamanho máximo de uma versão |
No Helm
Use controlPlane.state.storage: s3 e controlPlane.state.s3.*, com a chave num Secret existente:
controlPlane:
state:
storage: s3
keepVersions: 0
maxMiB: 64
s3:
endpoint: http://garage.garage.svc:3900
bucket: firstlume-state
region: garage
pathStyle: true
existingSecret: firstlume-state-s3 # keys access-key-id e secret-access-key
Conferência na subida
Com s3, o server grava, lê e apaga um objeto de teste ao subir. Se falhar, ele não sobe e diz o motivo: endpoint fora do ar, credencial recusada, bucket inexistente ou chave sem permissão.
Trocar de storage não move as versões já gravadas.
Backend s3 direto no Garage
O Garage (testado na v2.4.1) ignora a escrita condicional (If-None-Match), então o use_lockfile do backend s3 do Terraform não trava nada nele: um apply passa por cima da trava de outro. Com o backend do Firstlume, a trava fica no Postgres e funciona com qualquer storage.
Uma organização, um bucket próprio
Por padrão, o state de todas as organizações fica neste storage. Uma organização pode usar um bucket próprio. Veja O bucket da organização.