Vai al contenuto principale
Versione: 3.0.0-alpha (Diátaxis)

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:

PresetCPUMemoria
nano250m128Mi
micro500m256Mi
small1512Mi
medium11Gi
large22Gi
xlarge44Gi
2xlarge88Gi
avviso

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: {}
'
nota

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:

postgresql-scaled.yaml
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:

postgresql-custom-resources.yaml
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
suggerimento

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