VM
Creazione
Dal portale azure andare a cercare la risorsa del set di macchine virtuali, da quello andare a verificare i seguenti parametri
La modalita di orchestrazione deve essere Uniforme, in questo modo che tutti gli elementi siano uguali
Per il nome della risorsa inserire anche il nome dell’ambiente in modo che sia facilmente identificabile
Immagine
L’immagine di partenza selezionata è quella di FlatCar, i motivi principali sono 2:
- docker già presente
- aggiornamento automatico con verifica verso il server principale Kinkvolt (al momento è un pro)
Da qua selezionare la versione stable con architettura adatta al sistema attuale
Dimensione
Le dimensioni della macchina virtuale dipendono dagli scopi per cui abbiamo quasi sempre 2 esigenze diverse, una per le manager e una per le worker
Per le manager l’opzione consigliata è un 2 core con 2 GB di ram, al momento il tier che si avvicina di più e che rispetta questo limite è un 2 * 4; per i manager il carico è pressoché bassissimo quindi si può optare per la versione burstable (Serie B)
Per le worker è necessario capire l’utilizzo della macchina, per ambienti con poco carico o con un utilizzo saltuario si può optare anche qua per la serie B con un tier più elevato 4 * 8 o 8 * 16 (non andrei oltre); per quelle di produzione utilizzare la Serie D per avere maggior performance, anche qua i tier sono 4 * 8 è 8 * 16, più il tier è piccolo ma comunque sufficiente a mantenere un minimo di carico, più possiamo essere flessibili nel gestire lo scaling
Utilizzare per i worker cpu AMD in quanto alcuni componenti lo necessitano (keycloak)
Dimensione del disco
Il dimensionamento del disco deve tener conto di base di 2 parametri: il sistema operativo e docker; questi sono sempre presenti e secondo le specifiche necessitano rispettivamente di 30 + 20 GB di spazio; a questo spazio c’è da andare ad aggiungere eventuale lavoro locale fatto su disco locale da parte delle immagini utilizzate, al momento non ci sono situazioni di questo tipo quindi si è optato per un disco da 64 GB
Rete e Load Balancer
Selezionare la rete del gruppo di risorse e inserire un load balancer, nel caso in cui non sia presente un load balancer andare alla sezione specifica
NB: quanto viene aggiunto un gruppo di VM ad una rete, se sono presenti delle regole queste vengono tolte; ricordarsi di andare a reinserirle in seguito
ScalabilitÃ
Al momento lo scaling è manuale, per quanto riguarda il numero di macchine, questo è modificabile anche in seguito, principalmente se ne usano 3 per i manager e 1/2 per i worker dipendentemente da quanto carico devono sopportare
Altro
Il resto delle impostazioni rimane invariato
Post Creazione
Dopo aver creato la risorsa è necessario andare a sistemare la parte di rete aprendo le varie porte necessarie che sono:
- ssh 22
- http 80
- https 443
- sftp 2022 (decisa da noi)
- portainer 9000 (decisa da noi)
Usando poi un terminale collegarsi alla macchina virtuale utilizzando la chiave ssh privata, di seguito un esempio del comando
ssh -p {porta} -i C:\\{percorso}\\{nomeFile} {utente}@{ip}porta è la porta nat dedicata alla macchina a cui ci si vuole connettere, tipicamente è plausibile un numero da 50000 a 53999
percorso e nomeFile compongono il percorso alla chiave privata di connessione (tipicamente un file .pem)
utente è l’utente con cui loggarsi sulla macchina, azureuser è quello che impostiamo in creazione
ip è l’ip pubblico con cui raggiungere il load balancer che reindirizzerà verso la macchina di pertinenza
A questo punto è necessario eseguire una serie di comandi
Aggiornamento dei permessi utente
Per evitare problemi con l’esecuzione dei comandi docker, è necessario andare a modificare i permessi dell’utente azureuser in modo che possa andare a sfruttare tutte le funzionalità di docker tramite il seguente comando
sudo usermod -aG docker azureuserDopo averlo eseguito è necessario escollagarsi dalla connessione ssh e ricollegarsi
Collegamento al disco comune
Il collegamento al disco comune contiene tutti i file ed elementi che devono essere condivisi con le macchine virtuali
sudo mkdir /mnt/dockerstorage
if [ ! -d "/etc/smbcredentials" ]; then sudo mkdir /etc/smbcredentials ; fi
if [ ! -f "/etc/smbcredentials/storage.cred" ]; then sudo bash -c 'echo "username=***" >> /etc/smbcredentials/storage.cred' && sudo bash -c 'echo "password=***" >> /etc/smbcredentials/storage.cred' ; fi
sudo chmod 600 /etc/smbcredentials/storage.cred
sudo bash -c 'echo "//***.file.core.windows.net/dockerstorage /mnt/dockerstorage cifs nofail,vers=3.0,credentials=/etc/smbcredentials/storage.cred,dir_mode=0777,file_mode=0777,serverino,nobrl" >> /etc/fstab'
sudo mount -t cifs //***.file.core.windows.net/dockerstorage /mnt/dockerstorage -o vers=3.0,credentials=/etc/smbcredentials/storagefstaging.cred,dir_mode=0777,file_mode=0777,serverino,nobrlNB: il comando è stato mascherato, inserire le proprietà corrette
Per verificare che sia stato montato correttamente usare il comando
df -ThCon questo vengono elencati tutti i dischi collegati
Collegamento a docker storage
Il collegamento al docker storage serve per verificare che la macchina riesca a collegarsi correttamente al repository delle immagini docker
sudo -u azureuser docker login {repository} --username {username} --password {password}repository è l’url del docker registry dove sono immagazzinate le varie immagini dei container
username è l’utente di accesso al repository
password è la sua password
Nel caso in cui questo non riesca a collegarsi, il problema molto probabilmente è dato dalla non possibilità di collegarsi alal’esterno dovuto alla mancanza di una regole per permettere il traffico in uscita
Creazione dello swarm
La creazione dello swarm è necessaria solo quando si ha un ambiente nuovo e si è sulla prima macchina creata dei manager, in tutti gli altri casi è necessario collegare le restanti macchine allo swarm di pertinenza
docker swarm initCollegamento allo swarm
Per collegare una VM allo swarm è necessario prima generare, da uno dei manager dello swarm, il tocken di collegamento; per farlo è sufficiente usare il seguente comando che varia da manager a worker (è possibile variare anche in seguito con il comando demote o promote il ruolo della VM)
docker swarm join-token manager
docker swarm join-token workerla stringa generata è il comando da lanciare sulla macchina da collegare