Come scalare verticalmente
Questa guida spiega come regolare le risorse CPU e memoria della vostra istanza PostgreSQL su Hikube, sia tramite un preset predefinito, sia con valori espliciti.
Prerequisiti
- kubectl configurato con il vostro kubeconfig Hikube
- Un'istanza PostgreSQL distribuita su Hikube
Preset disponibili
Hikube propone preset di risorse predefiniti per semplificare il dimensionamento:
| Preset | CPU | Memoria |
|---|---|---|
nano | 250m | 128Mi |
micro | 500m | 256Mi |
small | 1 | 512Mi |
medium | 1 | 1Gi |
large | 2 | 2Gi |
xlarge | 4 | 4Gi |
2xlarge | 8 | 8Gi |
Se il campo resources (CPU/memoria espliciti) e definito, il valore di resourcesPreset viene completamente ignorato. Assicuratevi di svuotare il campo resources se desiderate usare un preset.
Passaggi
1. Verificare le risorse attuali
Consultate la configurazione attuale della vostra istanza:
kubectl get postgres my-database -o yaml | grep -A 5 -E "resources:|resourcesPreset"
Esempio di risultato con un preset:
resourcesPreset: micro
resources: {}
Esempio di risultato con risorse esplicite:
resourcesPreset: micro
resources:
cpu: 2000m
memory: 2Gi
2. Opzione A: cambiare il preset di risorse
Per passare da un preset a un altro (ad esempio da micro a large), applicate un patch:
kubectl patch postgres my-database --type='merge' -p='
spec:
resourcesPreset: large
resources: {}
'
E importante reimpostare resources: {} quando si passa a un preset, affinche il preset venga effettivamente preso in considerazione. Se resources contiene valori espliciti, il preset viene ignorato.
Potete anche modificare il manifesto YAML completo:
apiVersion: apps.cozystack.io/v1alpha1
kind: Postgres
metadata:
name: my-database
spec:
replicas: 3
resourcesPreset: large
size: 20Gi
users:
admin:
password: SecureAdminPassword
databases:
myapp:
roles:
admin:
- admin
Poi applicare:
kubectl apply -f postgresql-scaled.yaml
3. Opzione B: definire risorse esplicite
Per un controllo fine, definite direttamente i valori CPU e memoria:
kubectl patch postgres my-database --type='merge' -p='
spec:
resources:
cpu: 4000m
memory: 4Gi
'
O tramite il manifesto completo:
apiVersion: apps.cozystack.io/v1alpha1
kind: Postgres
metadata:
name: my-database
spec:
replicas: 3
resources:
cpu: 4000m
memory: 4Gi
size: 20Gi
users:
admin:
password: SecureAdminPassword
databases:
myapp:
roles:
admin:
- admin
kubectl apply -f postgresql-custom-resources.yaml
Per il dimensionamento PostgreSQL, una buona regola di partenza e allocare shared_buffers a circa il 25% della memoria totale. Regolate i parametri PostgreSQL di conseguenza tramite la sezione postgresql.parameters.
4. Verificare il rolling update
Dopo la modifica delle risorse, l'operatore effettua un rolling update dei pod PostgreSQL. Monitorate l'avanzamento:
kubectl get po -w | grep postgres-my-database
Risultato atteso (durante il rolling update):
postgres-my-database-2 1/1 Terminating 0 45m
postgres-my-database-2 0/1 Pending 0 0s
postgres-my-database-2 1/1 Running 0 30s
Attendete che tutti i pod siano nello stato Running:
kubectl get po | grep postgres-my-database
postgres-my-database-1 1/1 Running 0 2m
postgres-my-database-2 1/1 Running 0 4m
postgres-my-database-3 1/1 Running 0 6m
Verifica
Confermate che le nuove risorse siano applicate:
kubectl get postgres my-database -o yaml | grep -A 5 -E "resources:|resourcesPreset"
Verificate che l'istanza sia funzionante:
kubectl get postgres my-database
Risultato atteso:
NAME READY AGE VERSION
my-database True 1h 0.18.0
Per approfondire
- Riferimento API PostgreSQL: documentazione completa dei parametri
resources,resourcesPresete tabella dei preset