Nelle organizzazioni in cui OpenStack viene utilizzato in modo aggressivo, quindi in tali organizzazioni i team di applicazioni e database possono richiedere che la loro applicazione e le istanze del database vengano avviate sugli stessi nodi di calcolo (hypervisor) o diversi nodi di calcolo.
Quindi, questo requisito in OpenStack viene soddisfatto tramite gruppi di server con affinità e anti-affinità politiche. Il gruppo di server viene utilizzato per controllare l'affinità e le regole di anti-affinità per la pianificazione delle istanze openstack.
Quando si tenta di eseguire il provisioning di macchine virtuali con un gruppo di server di affinità, tutte le macchine virtuali verranno avviate sullo stesso nodo di calcolo. Quando viene eseguito il provisioning delle macchine virtuali con un gruppo di server ant-affinity, tutte le macchine virtuali verranno avviate in diversi nodi di calcolo. In questo articolo dimostreremo come creare gruppi di server OpenStack con regole di Affinity e Anti-Affinity.
Per prima cosa verifichiamo se la tua configurazione di OpenStack supporta o meno le politiche di affinità e anti-affinità, esegui il seguente comando grep dai tuoi nodi controller,
# grep -i "scheduler_default_filters" /etc/nova/nova.conf
L'output dovrebbe essere qualcosa come di seguito,
Come possiamo vedere i filtri Affinity e Ant-Affinity sono abilitati ma nel caso in cui questi non siano abilitati aggiungi questi filtri in /etc/nova/nova.conf file di nodi controller in "scheduler_default_filters " parametri.
# vi /etc/nova/nova.conf ……………… scheduler_default_filters=xx,xxx,xxx,xxxxx,xxxx,xxx,xxx,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,xx,xxx,xxxx,xx ………………
Salva ed esci dal file
Per apportare le modifiche precedenti all'effetto, riavvia i seguenti servizi
# systemctl restart openstack-nova-scheduler # systemctl restart openstack-nova-conductor
Ora creiamo gruppi di server OpenStack con criteri di affinità e anti-affinità
Gruppo di server con criteri di affinità
Per creare un gruppo di server con il nome "app" per la politica di affinità, eseguire il seguente comando openstack dal nodo controller,
Sintassi:
# gruppo di server openstack create –policy affinity
Oppure
# nova server-group-create affinità
Nota: Prima di iniziare a eseguire il comando openstack, assicurati di avere il file delle credenziali del progetto, nel mio caso il file delle credenziali del progetto è "openrc ”
Esempio:
# source openrc # openstack server group create --policy affinity app
Gruppo di server con criterio anti-affinità
Per creare un gruppo di server con criteri di anti-affinità, esegui il seguente comando openstack dal nodo controller, presumo che il nome del gruppo di server sia "database"
Sintassi:
# gruppo di server openstack crea –policy anti-affinità
Oppure
# nova server-group-create
Esempio:
# source openrc # openstack server group create --policy anti-affinity database
Elenca ID e criteri del gruppo di server
Esegui il comando nova o il comando Openstack per ottenere l'id del gruppo di server e le relative politiche
# nova server-group-list | grep -Ei "Policies|database" Or # openstack server group list --long | grep -Ei "Policies|app|database"
L'output sarebbe qualcosa come di seguito,
Avvia macchine virtuali (VM) con criteri di affinità
Supponiamo di voler avviare 4 macchine virtuali con criteri di affinità, eseguire il seguente "Crea server openstack comando ”
Sintassi:
# server openstack create –image
Esempio:
# openstack server create --image Cirros --flavor m1.small --security-group default --nic net-id=37b9ab9a-f198-4db1-a5d6-5789b05bfb4c --hint group="a9847c7f-b7c2-4751-9c9a-03b117e704ff" --max 4 affinity-test
Output del comando precedente,
Verifichiamo se le VM vengono avviate o meno sullo stesso nodo di calcolo, esegui il comando seguente
# openstack server list --long -c Name -c Status -c Host -c "Power State" | grep -i affinity-test
Ciò conferma che la nostra policy di affinità funziona correttamente poiché tutte le VM vengono avviate sullo stesso nodo di calcolo.
Ora testiamo la politica anti-affinità
Avvia macchine virtuali (VM) con criteri anti-affinità
Per la politica anti-affinità lanceremo 4 VM, nel comando "openstack server create" sopra, dobbiamo sostituire l'ID del gruppo di server anti-affinità. Nel nostro caso utilizzeremo l'ID gruppo del server di database.
Esegui il seguente comando openstack per avviare 4 VM su calcoli diversi con criteri di anti-affinità,
# openstack server create --image Cirros --flavor m1.small --security-group default --nic net-id=37b9ab9a-f198-4db1-a5d6-5789b05bfb4c --hint group="498fd41b-8a8a-497a-afd8-bc361da2d74e" --max 4 anti-affinity-test
Uscita
Usa il comando openstack di seguito per verificare se le macchine virtuali vengono avviate su nodi di calcolo diversi o meno
# openstack server list --long -c Name -c Status -c Host -c "Power State" | grep -i anti-affinity-test
L'output di cui sopra conferma che anche la nostra politica anti-affinità sta funzionando correttamente.
Nota: La quota predefinita per il gruppo di server è 10 per ogni tenant, significa che puoi creare fino a 10 gruppi di server all'interno del progetto, che possono governare più di 10 macchine virtuali.
Utilizzare il comando seguente per visualizzare la quota del gruppo di server per un tenant specifico, sostituire l'ID tenant adatto alla propria configurazione
# openstack quota show f6852d73eaee497a8a640757fe02b785 | grep -i server_group | server_group_members | 10 | | server_groups | 10 | #
Per aggiornare la quota del gruppo di server, eseguire i seguenti comandi
# nova quota-update --server-group-members 15 f6852d73eaee497a8a640757fe02b785 # nova quota-update --server-groups 15 f6852d73eaee497a8a640757fe02b785
Ora riesegui il comando openstack quota per verificare la quota del gruppo di server
# openstack quota show f6852d73eaee497a8a640757fe02b785 | grep -i server_group | server_group_members | 15 | | server_groups | 15 | #
Questo è tutto, abbiamo aggiornato correttamente la quota del gruppo di server per il tenant. Anche questo conclude l'articolo, non esitare a condividerlo tra i tuoi amici tecnici.