SQL Server &
Kubernetes
Thanks to
Chi sono
Consulente indipendente, Trainer, Speaker, Autore
Utilizzo SQL Server dalla versione 6.5
Microsoft Certified Trainer dal 2000
Microsoft Data Platform MVP dal 2014
Membro delle principali community italiane
su SQL Server
Co-autore delle guide di migrazione a SQL Server
2012/2014
Autore della serie «Stairway to SQL Server on Linux»
su SQLServerCentral.com
Un po’ di storia
• Container
• Istanza eseguibile di un immagine
• Isolata, ma può comunicare con l’esterno
• Ha accesso a tutte le risorse CPU e memoria dell’host (!!!)
• L’immagine è in sola lettura, ma esiste uno strato in cui il container può
scrivere
• Start e stop non influiscono sullo strato in scrittura
• La rimozione del container si
• Per la persistenza dei dati occorre utilizzare volumi agganciati al container
Containers Container
App
• Sono formate da livelli stratificati,
condivisi tra container differenti
• Ciascuno aggiunge componenti come
un puzzle
• Si parte da uno strato comune a tutte le
immagini che contengono i componenti
per avviare il container (bootfs, rootfs,
etc)
• I livelli sono in sola lettura
• Viene aggiunto un ulteriore livello sul
quale sono consentite le operazioni di
scrittura
Come sono fatte le immagini
Ciclo di vita di un container
Portabilità
Eseguibile dovunque sia supportato Docker
Economicità
Ridotto utilizzo di CPU, memoria, disco
Consistenza
Immagini consistenti di SQL Server, scripts e
tools
Efficienza
Deploy più veloce, patching ridotto e minore
downtime
Perchè usare SQL Server in containers ?
Container Container Container
Container configuration
Database
Persisted storage
Switch for
simple
upgrades
Immagini disponibili attraverso i registri pubblici
Docker Hub (hub.docker.com)
Red Hat Container Catalog (https://access.redhat.com/containers)
Microsoft Container Registry (mcr.microsoft.com)
Include i Docker and Red Hat registries
SQL Server 2017
Ubuntu based images
SQL Server 2019
Ubuntu and RHEL images
Entrambe includono i mssql-tools per l’amministrazione e sql agent
SQL Server e i containers
E’ uno strumento open source di orchestrazione di containers
sviluppato da Google (nome in codice “Borg”)
scritto con il linguaggio Go (https://github.com/kubernetes/kubernetes)
Si occupa di:
Service discovery e load balancing
Gestione automatica delle risorse
Self-healing
Gestione e configurazione delle informazioni sensibili (password, token
OAuth, chiavi ssh, etc)
Che cos’è Kubernetes
• Internamente è composto da:
• Un nodo master che contiene:
• Etcd distributed persistent storage
• API server
• Scheduler
• Controller Manager
• 1-n worker node che contengono:
• Kubelet
• Kubernetes Service Proxy (kube-proxy)
• Container Advisor (docker runtime)
Che cos’è Kubernetes
Orchestrare i container su host multipli
Controllare ed automatizzare i deployment e gli aggiornamenti
Montare e aggiungere storage per la persistenza dei dati
Gestire rapidamente la scalabilità
Controllare lo stato di integrità dei container
Perché usare Kubernetes ?
• Master: la macchina che controlla i nodi Kubernetes. È il punto di origine di tutte le
attività assegnate.
• Nodi: queste macchine eseguono le attività assegnate richieste. Sono controllate dal
nodo master di Kubernetes.
• Pod: un gruppo di uno o più container distribuiti su un singolo nodo. Tutti i container
presenti in un pod condividono indirizzo IP, IPC, nome host ed altre risorse. I pod
astraggono la rete e lo storage dal container sottostante, consentendoti di spostare i
container nei cluster con maggiore facilità.
• Controller di replica: controlla il numero di copie identiche di un pod che devono
essere eseguite in un punto preciso sul cluster.
• Servizio: disaccoppia le definizioni del lavoro dai pod. I proxy di servizio di Kubernetes
ricevono automaticamente le richieste di servizio al pod corretto, indipendentemente
dagli spostamenti nel cluster, anche nel caso in cui esso sia stato riposizionato.
• Kubelet: questo servizio viene eseguito sui nodi, legge i manifest del container e
garantisce che i container definiti vengano avviati ed eseguiti.
• kubectl: lo strumento di configurazione della riga di comando di Kubernetes.
La nomenclatura
• Open source
• Kubeadm
• Minikube
• Cloud providers
• Azure Kubernetes Services (AKS)
• Amazon Elastic Kubernetes Services (EKS)
• Google Kubernetes Engine (GKE)
• RedHat Openshift online
• Azure Openshift
• Managed providers
• RedHat Openshift
• Pivotal Container Service (PKS)
• Azure Stack (AKS Engine)
• Rancher (KaaS)
Disponibilità di Kubernetes
Usare i containers in Azure
Microsoft Container Registry Docker Hub
Kubernetes Service Container Instance
Orchestrare e scalare
containers Linux utilizzando
Kubernetes
Ecosistema
Eseguire containers
esistenti in Azure
Elastically burst from
your Azure Kubernetes
Service (AKS) cluster
Azure Container Instances
• Servizio Azure per l’hosting di contenitori singoli
• I containers possono essere collocati su uno stesso host utilizzando
i container group
• Ideale per scenari quali: semplici applicazioni, automazione, test,
etc
• Necessita di storage persistente per il salvataggio dello stato
Azure Container Instances
https://docs.microsoft.com/en-us/azure/container-instances/
Demo
Login su Azure
az login
Creazione di un gruppo di risorse dedicato a SQL Server
az group create --name mySqlServerRG --location WestEurope
Creazione dell’istanza SQL Server in un container
az container create --image microsoft/mssql-server-linux --name mssql-
container-group –resource-group mySqlServerRG --cpu 2 --memory 4 --
port 1433 --ip-address public -e ACCEPT_EULA=Y
MSSQL_SA_PASSWORD=P@ssw0rd! MSSQL_PID=Developer
MSSQL_COLLATION=Latin1_General_CI_AS MSSQL_ENABLE_HADR=Y --
location WestEurope
Creare un istanza SQL Server in container
Visualizzare il log di SQL Server
az container logs --resource-group mySqlServerRG --name mssql-
container-group
Eliminare un container
az container delete --name mssql-container-group --resource-group
mySqlServerRG
Eliminare il gruppo di risorse che lo conteneva
az group delete –name containerRG
Creare un istanza SQL Server in container
(continua)
Kubernetes
• Servizio specifico per semplificare la creazione e gestione di cluster
Kubernetes in Azure
• I cluster possono essere creati con una riga di codice
(letteralmente)
• Le applicazioni possono essere distribuite tramite un singolo file in
formato YAML
• Gestito attraverso Azure-CLI/powershell e kubectl
Azure Kubernetes Service
HADR senza necessità del servizio cluster
SQL Server 2017 e Kubernetes
Persistent Volume Storage
Kubernetes
User
Node
Pod
SQL Server
Node
Load Balancer
Service
Node
Pod
SQL Server
Pod
SQL Server
SQL Server 2019 AlwaysOn Availability Group
AG
Pod
Operator
Pod
Load balancer
Pod
SQL Server
primary
AG agent
Pod
Load balancer
Pod
SQL Server
secondary
AG agent
Pod
SQL Server
secondary
AG agent
SQL Server
primary
SQL Server
secondary
SQL Server 2019 big-data clusters
Demo
Login su Azure
az login
Creazione di un nuovo Resource Group
az group create --name myAKSClusterRG --location westeurope
{
"id": "/subscriptions/57c409d4-4041-43ac-8379-
444750b13b6c/resourceGroups/myAKSClusterRG”,
"location": "westeurope",
"managedBy": null,
"name": "myAKSClusterRG",
"properties": { "provisioningState": "Succeeded" },
"tags": null
}
Creare un istanza SQL Server in Kubernetes
Creazione di un nuovo cluster AKS
az aks create -g MyAKSClusterRG -n MyAKSCluster --node-count 3 --
enable-addons monitoring --generate-ssh-keys
Installazione del client kubectl per la gestione di Kubernetes
az aks install-cli
Creare un istanza SQL Server in Kubernetes
Download credenziali accesso al cluster Kubernetes e configurazione kubectl
az aks get-credentials --resource-group myAKSClusterRG --name
MyAKSCluster
Creare un istanza SQL Server in Kubernetes
Verifica connessione al cluster AKS
kubectl get nodes
NAME STATUS ROLES AGE VERSION
aks-nodepool1-40277451-0 Ready agent 29m v1.9.9
aks-nodepool1-40277451-1 Ready agent 29m v1.9.9
aks-nodepool1-40277451-2 Ready agent 29m v1.9.9
Creare un istanza SQL Server in Kubernetes
Creazione della password per l'utente 'sa' e memorizzazione in modo sicuro
kubectl create secret generic mssql
--from-literal=SA_PASSWORD="P@ssw0rd!"
Creare un istanza SQL Server in Kubernetes
Creazione del volume persistente dove saranno memorizzati i databases
kubectl apply -f persistentstorage.yml
Controllo che il volume sia stato creato correttamente
kubectl describe pvc mssql-data
Creare un istanza SQL Server in Kubernetes
Creazione del’istanza SQL Server
kubectl create -f sqlserver.yml
Controllo che l’istanza sia stata creata correttamente
kubectl get services
Creare un istanza SQL Server in Kubernetes
• https://aka.ms/sqlcontainers
• https://hub.docker.com/r/microsoft/mssql-server
• https://docs.docker.com/engine/docker-overview
Azure Container Instances
• https://docs.microsoft.com/en-us/azure/container-instances/
• https://docs.microsoft.com/en-us/azure/container-
instances/container-instances-volume-azure-files
Azure Kubernetes Services
• https://docs.microsoft.com/en-us/azure/aks/
Risorse
Thank You!!!
Thanks to

Azure Day Rome 2019 Reloaded - Utilizzare Azure Kubernetes Service per i nostri database Sql Server

  • 1.
  • 2.
  • 3.
    Chi sono Consulente indipendente,Trainer, Speaker, Autore Utilizzo SQL Server dalla versione 6.5 Microsoft Certified Trainer dal 2000 Microsoft Data Platform MVP dal 2014 Membro delle principali community italiane su SQL Server Co-autore delle guide di migrazione a SQL Server 2012/2014 Autore della serie «Stairway to SQL Server on Linux» su SQLServerCentral.com
  • 4.
  • 5.
    • Container • Istanzaeseguibile di un immagine • Isolata, ma può comunicare con l’esterno • Ha accesso a tutte le risorse CPU e memoria dell’host (!!!) • L’immagine è in sola lettura, ma esiste uno strato in cui il container può scrivere • Start e stop non influiscono sullo strato in scrittura • La rimozione del container si • Per la persistenza dei dati occorre utilizzare volumi agganciati al container Containers Container App
  • 6.
    • Sono formateda livelli stratificati, condivisi tra container differenti • Ciascuno aggiunge componenti come un puzzle • Si parte da uno strato comune a tutte le immagini che contengono i componenti per avviare il container (bootfs, rootfs, etc) • I livelli sono in sola lettura • Viene aggiunto un ulteriore livello sul quale sono consentite le operazioni di scrittura Come sono fatte le immagini
  • 7.
    Ciclo di vitadi un container
  • 8.
    Portabilità Eseguibile dovunque siasupportato Docker Economicità Ridotto utilizzo di CPU, memoria, disco Consistenza Immagini consistenti di SQL Server, scripts e tools Efficienza Deploy più veloce, patching ridotto e minore downtime Perchè usare SQL Server in containers ? Container Container Container Container configuration Database Persisted storage Switch for simple upgrades
  • 9.
    Immagini disponibili attraversoi registri pubblici Docker Hub (hub.docker.com) Red Hat Container Catalog (https://access.redhat.com/containers) Microsoft Container Registry (mcr.microsoft.com) Include i Docker and Red Hat registries SQL Server 2017 Ubuntu based images SQL Server 2019 Ubuntu and RHEL images Entrambe includono i mssql-tools per l’amministrazione e sql agent SQL Server e i containers
  • 10.
    E’ uno strumentoopen source di orchestrazione di containers sviluppato da Google (nome in codice “Borg”) scritto con il linguaggio Go (https://github.com/kubernetes/kubernetes) Si occupa di: Service discovery e load balancing Gestione automatica delle risorse Self-healing Gestione e configurazione delle informazioni sensibili (password, token OAuth, chiavi ssh, etc) Che cos’è Kubernetes
  • 11.
    • Internamente ècomposto da: • Un nodo master che contiene: • Etcd distributed persistent storage • API server • Scheduler • Controller Manager • 1-n worker node che contengono: • Kubelet • Kubernetes Service Proxy (kube-proxy) • Container Advisor (docker runtime) Che cos’è Kubernetes
  • 12.
    Orchestrare i containersu host multipli Controllare ed automatizzare i deployment e gli aggiornamenti Montare e aggiungere storage per la persistenza dei dati Gestire rapidamente la scalabilità Controllare lo stato di integrità dei container Perché usare Kubernetes ?
  • 13.
    • Master: lamacchina che controlla i nodi Kubernetes. È il punto di origine di tutte le attività assegnate. • Nodi: queste macchine eseguono le attività assegnate richieste. Sono controllate dal nodo master di Kubernetes. • Pod: un gruppo di uno o più container distribuiti su un singolo nodo. Tutti i container presenti in un pod condividono indirizzo IP, IPC, nome host ed altre risorse. I pod astraggono la rete e lo storage dal container sottostante, consentendoti di spostare i container nei cluster con maggiore facilità. • Controller di replica: controlla il numero di copie identiche di un pod che devono essere eseguite in un punto preciso sul cluster. • Servizio: disaccoppia le definizioni del lavoro dai pod. I proxy di servizio di Kubernetes ricevono automaticamente le richieste di servizio al pod corretto, indipendentemente dagli spostamenti nel cluster, anche nel caso in cui esso sia stato riposizionato. • Kubelet: questo servizio viene eseguito sui nodi, legge i manifest del container e garantisce che i container definiti vengano avviati ed eseguiti. • kubectl: lo strumento di configurazione della riga di comando di Kubernetes. La nomenclatura
  • 14.
    • Open source •Kubeadm • Minikube • Cloud providers • Azure Kubernetes Services (AKS) • Amazon Elastic Kubernetes Services (EKS) • Google Kubernetes Engine (GKE) • RedHat Openshift online • Azure Openshift • Managed providers • RedHat Openshift • Pivotal Container Service (PKS) • Azure Stack (AKS Engine) • Rancher (KaaS) Disponibilità di Kubernetes
  • 15.
    Usare i containersin Azure Microsoft Container Registry Docker Hub Kubernetes Service Container Instance Orchestrare e scalare containers Linux utilizzando Kubernetes Ecosistema Eseguire containers esistenti in Azure Elastically burst from your Azure Kubernetes Service (AKS) cluster
  • 16.
  • 17.
    • Servizio Azureper l’hosting di contenitori singoli • I containers possono essere collocati su uno stesso host utilizzando i container group • Ideale per scenari quali: semplici applicazioni, automazione, test, etc • Necessita di storage persistente per il salvataggio dello stato Azure Container Instances https://docs.microsoft.com/en-us/azure/container-instances/
  • 18.
  • 19.
    Login su Azure azlogin Creazione di un gruppo di risorse dedicato a SQL Server az group create --name mySqlServerRG --location WestEurope Creazione dell’istanza SQL Server in un container az container create --image microsoft/mssql-server-linux --name mssql- container-group –resource-group mySqlServerRG --cpu 2 --memory 4 -- port 1433 --ip-address public -e ACCEPT_EULA=Y MSSQL_SA_PASSWORD=P@ssw0rd! MSSQL_PID=Developer MSSQL_COLLATION=Latin1_General_CI_AS MSSQL_ENABLE_HADR=Y -- location WestEurope Creare un istanza SQL Server in container
  • 20.
    Visualizzare il logdi SQL Server az container logs --resource-group mySqlServerRG --name mssql- container-group Eliminare un container az container delete --name mssql-container-group --resource-group mySqlServerRG Eliminare il gruppo di risorse che lo conteneva az group delete –name containerRG Creare un istanza SQL Server in container (continua)
  • 21.
  • 22.
    • Servizio specificoper semplificare la creazione e gestione di cluster Kubernetes in Azure • I cluster possono essere creati con una riga di codice (letteralmente) • Le applicazioni possono essere distribuite tramite un singolo file in formato YAML • Gestito attraverso Azure-CLI/powershell e kubectl Azure Kubernetes Service
  • 23.
    HADR senza necessitàdel servizio cluster SQL Server 2017 e Kubernetes Persistent Volume Storage Kubernetes User Node Pod SQL Server Node Load Balancer Service Node Pod SQL Server Pod SQL Server
  • 24.
    SQL Server 2019AlwaysOn Availability Group AG Pod Operator Pod Load balancer Pod SQL Server primary AG agent Pod Load balancer Pod SQL Server secondary AG agent Pod SQL Server secondary AG agent SQL Server primary SQL Server secondary
  • 25.
    SQL Server 2019big-data clusters
  • 26.
  • 27.
    Login su Azure azlogin Creazione di un nuovo Resource Group az group create --name myAKSClusterRG --location westeurope { "id": "/subscriptions/57c409d4-4041-43ac-8379- 444750b13b6c/resourceGroups/myAKSClusterRG”, "location": "westeurope", "managedBy": null, "name": "myAKSClusterRG", "properties": { "provisioningState": "Succeeded" }, "tags": null } Creare un istanza SQL Server in Kubernetes
  • 28.
    Creazione di unnuovo cluster AKS az aks create -g MyAKSClusterRG -n MyAKSCluster --node-count 3 -- enable-addons monitoring --generate-ssh-keys Installazione del client kubectl per la gestione di Kubernetes az aks install-cli Creare un istanza SQL Server in Kubernetes
  • 29.
    Download credenziali accessoal cluster Kubernetes e configurazione kubectl az aks get-credentials --resource-group myAKSClusterRG --name MyAKSCluster Creare un istanza SQL Server in Kubernetes
  • 30.
    Verifica connessione alcluster AKS kubectl get nodes NAME STATUS ROLES AGE VERSION aks-nodepool1-40277451-0 Ready agent 29m v1.9.9 aks-nodepool1-40277451-1 Ready agent 29m v1.9.9 aks-nodepool1-40277451-2 Ready agent 29m v1.9.9 Creare un istanza SQL Server in Kubernetes
  • 31.
    Creazione della passwordper l'utente 'sa' e memorizzazione in modo sicuro kubectl create secret generic mssql --from-literal=SA_PASSWORD="P@ssw0rd!" Creare un istanza SQL Server in Kubernetes
  • 32.
    Creazione del volumepersistente dove saranno memorizzati i databases kubectl apply -f persistentstorage.yml Controllo che il volume sia stato creato correttamente kubectl describe pvc mssql-data Creare un istanza SQL Server in Kubernetes
  • 33.
    Creazione del’istanza SQLServer kubectl create -f sqlserver.yml Controllo che l’istanza sia stata creata correttamente kubectl get services Creare un istanza SQL Server in Kubernetes
  • 35.
    • https://aka.ms/sqlcontainers • https://hub.docker.com/r/microsoft/mssql-server •https://docs.docker.com/engine/docker-overview Azure Container Instances • https://docs.microsoft.com/en-us/azure/container-instances/ • https://docs.microsoft.com/en-us/azure/container- instances/container-instances-volume-azure-files Azure Kubernetes Services • https://docs.microsoft.com/en-us/azure/aks/ Risorse
  • 36.
  • 37.