
Per fornire il servizio IaaS (Data Center Virtuale) utilizziamo un orchestratore commerciale (FCO). Questa soluzione ha un'architettura abbastanza unica, che la distingue da conosciute soluzioni come Openstack e CloudStack.
Come hypervisor, le nodi compute supportano KVM, VmWare, Xen, Virtuozzo6/7, oltre ai container dello stesso Virtuozzo. Tra i sistemi di storage supportati ci sono: locale, NFS, Ceph e Virtuozzo Storage.
FCO supporta la creazione di più cluster e la loro gestione da un'unica interfaccia. È possibile gestire un cluster Virtuozzo e un cluster KVM + Ceph semplicemente cliccando.
Essenzialmente, FCO è una soluzione completa per i fornitori cloud, che oltre all'orchestrazione include anche il billing, con tutte le configurazioni, i plugin di pagamento, le fatture, le notifiche, i rivenditori, le tariffe e così via. Tuttavia, la parte di billing non può coprire tutte le specificità russe, quindi abbiamo deciso di rinunciare al suo utilizzo a favore di un'altra soluzione.
È molto apprezzata la flessibile distribuzione dei diritti su tutte le risorse del cloud: immagini, dischi, prodotti, server, firewall – tutto ciò può essere 'condiviso' e i diritti possono essere concessi tra gli utenti, anche tra utenti di clienti diversi. Ogni cliente può creare nel proprio cloud diversi data center indipendenti e gestirli da un'unica dashboard.

Architettonicamente, FCO è composto da diverse parti, ognuna delle quali ha il proprio codice indipendente, e alcune anche il proprio database.
Skyline – interfaccia per amministratori e utenti
Jade – logica business, billing, gestione dei task
Tigerlily – coordinatore del servizio, gestisce e coordina lo scambio di informazioni tra la logica business e i cluster.
XVPManager – gestione degli elementi del cluster: nodi, storage, rete e macchine virtuali.
XVPAgent – agente installato sui nodi per interagire con XVPManager

Un racconto dettagliato sull'architettura di ogni componente è previsto in un ciclo di articoli, se, naturalmente, l'argomento susciterà interesse.
Il principale vantaggio di FCO deriva dalla sua "struttura a scatola". Avrete a disposizione semplicità e minimalismo. Per il nodo di gestione viene allocata una macchina virtuale su Ubuntu, in cui vengono installati tutti i pacchetti necessari. Tutte le configurazioni sono estratte in file di configurazione in formato variabile-valore:
# cat /etc/extility/config/vars
…
export LIMIT_MAX_LIST_ADMIN_DEFAULT="30000"
export LIMIT_MAX_LIST_USER_DEFAULT="200"
export LOGDIR="/var/log/extility"
export LOG_FILE="misc.log"
export LOG_FILE_LOG4JHOSTBILLMODULE="hostbillmodule.log"
export LOG_FILE_LOG4JJADE="jade.log"
export LOG_FILE_LOG4JTL="tigerlily.log"
export LOG_FILE_LOG4JXVP="xvpmanager.log"
export LOG_FILE_VARS="misc.log"
…
Tutta la configurazione viene inizialmente modificata nei modelli, poi si avvia il generatore
#build-config который сформирует файл vars и даст команду сервисам перечитать конфиг. Пользовательский интерфейс приятный и может быть легко забрендирован.

Come si può vedere, l'interfaccia è composta da widget, la cui gestione è accessibile all'utente. Può facilmente aggiungere/rimuovere widget dalla pagina, formando così il dashboard desiderato.
Nonostante la sua chiusura, FCO è un sistema altamente personalizzabile. Ha un numero enorme di impostazioni e punti di ingresso per modificare il flusso di lavoro:
- Sono supportati plugin personalizzati, ad esempio, è possibile scrivere il proprio metodo di fatturazione o una risorsa esterna per fornire all'utente
- Sono supportati trigger personalizzati per eventi specifici, ad esempio l'aggiunta della prima macchina virtuale a un cliente al momento della sua creazione
- Sono supportati widget personalizzati nell'interfaccia, per esempio, integrare video da youtube direttamente nell'interfaccia utente.
Tutta la personalizzazione viene scritta in linguaggio FDL, che si basa su Lua. Se conosci Lua, non avrai problemi con FDL.
Ecco un esempio di uno dei trigger più semplici che utilizziamo. Questo trigger non consente agli utenti di condividere le proprie immagini con altri clienti. Lo facciamo per evitare che un utente possa creare un'immagine dannosa per altri.
function register()
return {"pre_user_api_publish"}
end
function pre_user_api_publish(p)
if(p==nil) then
return{
ref = "cancelPublishImage",
name = "Cancel publishing",
description = "Cancel all user’s images publishing",
triggerType = "PRE_USER_API_CALL",
triggerOptions = {"publishResource", "publishImage"},
api = "TRIGGER",
version = 1,
}
end
-- Turn publishing off
return {exitState = "CANCEL"}
end
La funzione register verrà chiamata dal nucleo di FCO. Restituirà il nome della funzione che dovrà essere chiamata. Il parametro “p” di questa funzione conserva il contesto di chiamata, e al primo invio sarà vuoto (nil). Ciò ci permetterà di registrare il nostro trigger. In triggerType indichiamo che il trigger viene attivato PRIMA dell'operazione di pubblicazione, e si applica solo agli utenti. Gli amministratori di sistema, ovviamente, sono autorizzati a pubblicare tutto. In triggerOptions dettagliamo le operazioni per cui il trigger verrà attivato.
E infine – return {exitState = “CANCEL”}, motivo per cui il trigger è stato sviluppato. Restituirà un errore quando l'utente tenterà di condividere la propria immagine nella dashboard.
Nell'architettura FCO, qualsiasi oggetto (disco, server, immagine, rete, adattatore di rete, ecc.) è rappresentato come un'entità Resource, che ha parametri comuni:
- UUID della risorsa
- nome della risorsa
- tipo di risorsa
- UUID del proprietario della risorsa
- stato della risorsa (attivo, inattivo)
- metadati della risorsa
- chiavi della risorsa
- UUID del prodotto a cui appartiene la risorsa
- VDC della risorsa
È molto conveniente lavorare tramite API, poiché con tutte le risorse si opera secondo un principio unico. I prodotti sono configurati dal fornitore e richiesti dal cliente. Poiché la nostra fatturazione si trova a parte, il cliente può richiedere qualsiasi prodotto dal pannello in modo libero e gratuito. Sarà contabilizzato in seguito nella fatturazione. Un prodotto può essere un indirizzo IP all'ora, un ulteriore GB di disco all'ora o semplicemente un server.
Le chiavi possono essere utilizzate per contrassegnare determinate risorse per modificare la logica di lavoro con esse. Ad esempio, possiamo contrassegnare tre nodi fisici con la chiave Weight e contrassegnare alcuni clienti con la stessa chiave, evidenziando così questi nodi per quei clienti specifici. Utilizziamo questo meccanismo per clienti VIP, che non gradiscono avere vicini accanto alle proprie VM. Tuttavia, la funzionalità può essere applicata in modo molto più ampio.
Il modello di licenza prevede il pagamento per ogni core del processore del nodo fisico. Anche il costo dipende dal numero di tipi di cluster. Se si prevede di utilizzare insieme, ad esempio, KVM e VMware, il costo della licenza aumenterà.
FCO è un prodotto completo, con funzionalità molto ricche, pertanto intendiamo preparare diverse articoli con una descrizione dettagliata del funzionamento della parte di rete.
Dopo aver lavorato con questo orchestratore per diversi anni, possiamo dichiararlo come molto valido. Purtroppo, il prodotto non è privo di difetti:
- abbiamo dovuto ottimizzare il database, poiché le richieste hanno cominciato a rallentare con l'aumento della quantità di dati in esso;
- dopo un guasto a causa di un bug, il meccanismo di recupero non ha funzionato e siamo stati costretti a ripristinare le macchine dei poveri clienti con un nostro set di script;
- il meccanismo di rilevamento della nodalità non disponibile è incorporato nel codice e non è personalizzabile. Cioè, non possiamo creare politiche proprie per determinare la non disponibilità di un nodo.
- Il logging non è sempre dettagliato. A volte, quando è necessario scendere a un livello molto basso per analizzare un problema specifico, manca il codice sorgente di alcuni componenti per comprendere le cause;
TOTALE: In generale, le impressioni sul prodotto sono buone. Siamo in continuo contatto con gli sviluppatori dell'orchestratore. I ragazzi sono disponibili per una collaborazione costruttiva.
Nonostante la sua semplicità, FCO offre un'ampia funzionalità. Negli articoli futuri prevediamo di addentrarci nei seguenti argomenti:
- organizzazione della rete in FCO
- fornitura di live-recovery e protocollo FQP
- creazione di plugin e widget personalizzati
- integrazione di servizi aggiuntivi, come Load Balancer e Acronis
- backup
- meccanismo unificato di configurazione e impostazione dei nodi
- gestione dei metadati delle macchine virtuali
P.S. Scrivete nei commenti se siete interessati ad altri aspetti. Rimanete sintonizzati!
Fonte: habr.com
