How can I get started with Kubernetes using Azure Container Service?
I had a university customer in the northwest ask me about how to get quickly started with the newer Kubernetes cluster deployed via Azure Container Service (ACS).
I had not played with it much so I put together a quick walkthrough of how to get a Kubernetes cluster built using Azure Container Service and how it can be paired with Helm.
What is Azure Container Service?
ACS makes it easier to create, configure, and manage a cluster of virtual machines that are preconfigured on containerized applications. It leverages the Docker format to ensure portability. You can scale to thousands or 10s of thousand of containers.
What is an Azure Container Service Kubernetes cluster?
Kubernetes is an open source container cluster manager used to deploy, scale and operate applications across a number of host computers. It has been recently added to Azure Container Service in addition to two other container orchestrators Mesosphere DC/OS and Docker Swarm.
What do I get when I deploy an ACS Kubernetes default cluster?
When you deploy an ACS Kubernetes default cluster it will automatically create one master VM and three node VMs. You can also create a customized ACS Kubernetes cluster via JSON with 1,3 or 5 master nodes, specific HW VM skus, and up to 100 agent nodes. ACS will also automatically configure VNet, a load balancer, NAT, etc. It will horizontally scale your agent nodes as you grow your container footprint so ACS has a nice advantage over installing Kubernetes without ACS in VMs which would take quite a bit longer get this running.
ACS provides the following Kubernetes features:
- Horizontal scaling
- Service discovery and load balancing
- Secrets and configuration management
- API-based automated rollouts and rollbacks
- Self-healing
ACS with Kubernetes Prerequisites
Bash shell (I used Bash on Windows 10 see here)
Azure CLI 2.0 – install from here
To install Azure CLI I ran this from Bash:
curl -L https://aka.ms/InstallAzureCli | bash
Login into Azure via Bash:
az login
Set the right subscription context if needed (optional):
az account set --subscription "ab12c34d-56a7-9876-b4ba-a0b1cd3f1234"
az account show
Creating the Kubernetes Cluster
From Bash I ran (may need to tweak for Command Prompt Azure CLI):
DNS_PREFIX=kub07
CLUSTER_NAME=kubclus07
RESOURCE_GROUP=kub-rg-07 (I pre-created this resource group)
az acs create --orchestrator-type=kubernetes --resource-group $RESOURCE_GROUP --name=$CLUSTER_NAME --dns-prefix=$DNS_PREFIX --generate-ssh-keys
It will take a bit but if it worked you will see a status of succeeded:
If all went well, in Azure portal you will see the Kubernetes cluster master and three nodes deployed as virtual machines. You can change the VM HW profiles if you need more CPU/RAM, etc.
Next you need to install the Kubernetes CLI to manage the cluster:
az acs kubernetes install-cli
Grab the Kubernetes cluster config locally:
az acs kubernetes get-credentials --resource-group=$RESOURCE_GROUP --name=$CLUSTER_NAME
Run kubectl get nodes to see the cluster nodes and master:
See more on ACS CLI commands here.
Install applications to the Kubernetes cluster
I installed NGIX from CLI to see if it worked:
kubectl run nginx --image nginx
You have to publish the service to the world:
kubectl expose deployments nginx --port=80 --type=LoadBalancer
You need to get the public IP for nginx:
watch 'kubectl get svc'
It may take a few minutes to get this external/public IP.
Browse to the External IP and it should show the Nginx start page:
Installing Helm in the Kubernetes cluster
I also wanted to check out what Deis provided with Kubernetes since we just acquired them. They have a great open source solution called Helm. I installed Helm in the cluster. It deploys a Tiller management server within the cluster:
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
chmod 700 get_helm.sh $
./get_helm.sh
Helm Tiller management server deployed in Kubernetes:
Next I went to KubeApps website which is like a registry for Helm charts (application packages) you can deploy to Kubernetes using Helm here:
If you prefer you can view Helm charts using Helm CLI run:
Helm search
I decided to install DokuWiki from the Helm charts library:
You grab the helm command line to install:
helm install stable/dokuwiki
I ran watch ‘kubectl get svc’ to get the External IP to browse to and then browsed to make sure dokuwiki deployed:
Next I installed WordPress:
helm install stable/wordpress
I ran watch ‘kubectl get svc’ to list the external IPs :
Wait a few minutes for the external IP to show up.
Browse to the external IP to test WordPress:
I can see the power of the combination of Kubernetes and Helm together as it makes brand new users like me with Kubernetes able to quickly get popular applications running in Kubernetes without much effort.
More on Helm here.
Manage Kubernetes from the browser management UI
You have to setup a proxy listener to manage via the browser:
To enable the listener from Bash I ran: kubectl proxy
With the listener running, visit this URL to see the Kubernetes interface:
Here you can see all the apps I deployed to the Kubernetes cluster:
Excellent Kubernetes ACS documentation here and a useful Kubernetes user guide here.
Enjoy quickly setting up and using Kubernetes containers via Azure Container Services!