We are going to deploy Kubernetes in Azure using Azure CLI
Make sure you have Azure CLI installed (version 2.0.27 or later) on the machine (Windows/macOS/Linux), here is how to install it.
Start the Command Line, Powershell (in my case) or the terminal (on macOS/Linux) and login into Azure
PS> az login
If the user has multiple subscriptions check by running
PS> az account list --output table
The output will be similar to the one below
To change the active subscription globally, use az account set along with either the subscription ID or subscription name
PS> az account set --subscription xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
To use a specific subscription for a command, just use the –subscription argument. This argument takes either a subscription ID or subscription name
PS> az group create --subscription xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx --location westeurope --name MyK8SRG
For this demo, the default subscription will be set globally
PS> az account set --subscription xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
Then create a new resource group
PS> az group create --location westeurope --name MyK8SRG
Create Kubernetes Cluster with 3 nodes (default VM size is Standard_DS1_v2)
PS> az aks create --resource-group MyK8SRG --name MyK8SCluster --node-count 3 --enable-addons monitoring --generate-ssh-keys
It will take a few minutes …
When it’s done, configure kubectl to connect to your Kubernetes cluster, use the az aks get-credentials command. This step downloads credentials and configures the Kubernetes CLI to use them.
PS> az aks get-credentials --resource-group MyK8SRG --name MyK8SCluster
If not install, install kubectl (Kubernetes command line interface)
PS> az aks install-cli
use kubectl to check the nodes
PS> kubectl get nodes
you should get something like this
The cluster is ready for applications to be deployed
the demo by Kubernetes.io is a stateless app (Guestbook), the deployment will be done using YAML files:
- frontend-deployment.yaml: the guestbook frontend deployment
- frontend-service.yaml: the guestbook frontend service
- redis-master-deployment.yaml: Redis master deployment
- redis-master-service.yaml: Redis master service
- redis-slave-deployment.yaml: Redis workers deployment
- redis-slave-service.yaml: Redis workers service
Apply the Redis Master Deployment from the redis-master-deployment.yaml file:
PS> kubectl apply -f https://k8s.io/examples/application/guestbook/redis-master-deployment.yaml
Apply the Redis Master Service from the following redis-master-service.yaml file:
PS> kubectl apply -f https://k8s.io/examples/application/guestbook/redis-master-service.yaml
Apply the Redis Slave Deployment from the redis-slave-deployment.yaml file:
PS> kubectl apply -f https://k8s.io/examples/application/guestbook/redis-slave-deployment.yaml
Apply the Redis Slave Service from the following redis-slave-service.yaml file:
PS> kubectl apply -f https://k8s.io/examples/application/guestbook/redis-slave-service.yaml
Apply the frontend Deployment from the frontend-deployment.yaml file:
PS> kubectl apply -f https://k8s.io/examples/application/guestbook/frontend-deployment.yaml
Apply the frontend Service from the sj-frontend-service.yaml file (modified version):
The file (https://k8s.io/examples/application/guestbook/frontend-service.yaml) will not be used as it uses NodePort not LoadBalancer, the file (https://raw.githubusercontent.com/Data-Base/sharedwork/master/kubernetes/guestbook/sj-frontend-service.yaml) will be used instead
PS> kubectl apply -f https://raw.githubusercontent.com/Data-Base/sharedwork/master/kubernetes/guestbook/sj-frontend-service.yaml
Check the external IP
PS> kubectl get service frontend
if EXTERNAL-IP is <pending> (wait, it may take few minutes around 5 minutes in my case)
To scale the number of nodes in the cluster
PS> az aks scale --node-count 5 --resource-group MyK8SRG --name MyK8SCluster
To scale the deployments in Kubernetes first get the deployment
PS> kubectl get deployment
Then scale the deployment (in our example: redis-master)
PS> kubectl scale deployment redis-master --replicas=1
PS> kubectl autoscale deployment redis-master --cpu-percent=50 --min=2 --max=10
To reach the Kubernetes’ web-based dashboard
PS> az aks browse --resource-group MyK8SRG --name MyK8SCluster
Update 2019-05-09: In case if an error using the dashboard (… forbidden …)
PS> kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard