.NET Tutorial - Deploy a microservice to Azure
Intro
Purpose
Learn to deploy microservices, built with .NET and Docker, to Microsoft Azure.
Prerequisites
Required: This tutorial uses the app created in the Your First Microservice tutorial.
Required: Docker Hub account.
Time to Complete
15-20 minutes
Scenario
Take a previously created microservice and deploy it to Azure, using DockerHub and Azure Kubernetes Service (AKS).
Push to Docker Hub
Docker Hub is a central place to upload Docker images. Many products, including Microsoft Azure, can create containers based on images in Docker Hub.
Sign in to Docker Hub
In your command prompt, run the following command:
In your terminal, run the following command:
docker loginUse the username and password created when you downloaded Docker in the previous tutorial. You can visit the Docker Hub website to reset your password if needed.
Upload image to Docker Hub
Re-tag (rename) your Docker image under your username and push it to Docker Hub using the following commands:
docker tag mymicroservice [YOUR DOCKER USERNAME]/mymicroservice
docker push [YOUR DOCKER USERNAME]/mymicroserviceThe push command will upload your image to Docker Hub, which may take some time.
Set up Azure tools
Create an Azure account
If you're new to Azure, you can create a free account. If you have an existing account, you can skip this step.
Create a free Azure accountInstall Azure CLI
The Azure CLI provides tools for managing your Azure account.
Sign in to Azure
Once you've installed, open a new command prompt and sign in to your Azure account by running the following command:
Once you've installed, open a new terminal and sign in to your Azure account by running the following command:
az loginInstall AKS CLI
Kubernetes is a container orchestration platform. An orchestrator is responsible for running, distributing, scaling, and healing apps comprised of a collection of containers. Azure Kubernetes Service (AKS) provides Kubernetes as a managed service.
Run the following command to install the command-line tools for AKS:
az aks install-cliYou may be alerted with recommendations to set system PATH variables. These are not required for this tutorial.
Create Azure resources
Create a resource group
A resource group is used to organize a set of resources related to a single app.
Run the following command to create a resource group on the West US region:
az group create --name MyMicroserviceResources --location westusIf you want to use a different location on the previous command, you can run the following command to see which regions are available on your account and pick one closer to you:
az account list-locations -o tableIf you want to use a different subscription for the session you can get a list of all subscriptions by running the following command:
az account list --allThen you can run the following command to set a specific subscription for the session:
az account set -s NAME_OR_IDCreate an AKS cluster
Run the following command to create an AKS cluster in the resource group:
It's normal for this command to take several minutes to complete.
az aks create --resource-group MyMicroserviceResources --name MyMicroserviceCluster --node-count 1 --enable-addons http_application_routing --generate-ssh-keysRun the following command to download the credentials to deploy to your AKS cluster:
az aks get-credentials --resource-group MyMicroserviceResources --name MyMicroserviceClusterDeploy to Azure
Return to app directory
Since you opened a new command prompt in the previous step, you'll need to return to the directory you created your service in.
Since you opened a new terminal in the previous step, you'll need to return to the directory you created your service in.
cd MyMicroserviceCreate a deployment file
The AKS tools use a .yaml file to define how to deploy your container.
Create a file called deploy.yaml with this command:
touch deploy.yamlfsutil file createnew deploy.yaml 0You can then open it in your favorite text editor.
You can then open it in your favorite text editor manually or with this command:
open deploy.yamlstart deploy.yamlReplace the content of the deploy.yaml to the following in the text editor, making sure to replace [YOUR DOCKER ID] with your actual Docker ID.
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mymicroservice
spec:
replicas: 1
template:
metadata:
labels:
app: mymicroservice
spec:
containers:
- name: mymicroservice
image: [YOUR DOCKER ID]/mymicroservice:latest
ports:
- containerPort: 80
env:
- name: ASPNETCORE_URLS
value: http://*:80
selector:
matchLabels:
app: mymicroservice
---
apiVersion: v1
kind: Service
metadata:
name: mymicroservice
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: mymicroserviceRun deployment
Run the following command to deploy your microservice based on the settings in deploy.yaml:
kubectl apply -f deploy.yamlTest your deployed service
Run the following command to see the details of your deployed service:
kubectl get service mymicroservice --watchAmong other things, the previous command will show the external IP address that your service is available on (EXTERNAL-IP).
Using the external IP address, open a new browser window and navigate to http://[YOUR EXTERNAL IP ADDRESS]/weatherforecast
If the EXTERNAL-IP is marked as <pending>, a new line will automatically appear once the external IP has been allocated.
Press CTRL+C on your command prompt to end the kubectl get service command.
Press CTRL+C on your terminal to end the kubectl get service command
Congratulations! You've deployed a microservice to Azure.
Scale your service
A benefit of using Kubernetes is that you can easily scale up a deployment to multiple instances to handle additional load. Currently, there's only a single instance, so let's scale to two instances.
Run the following command to scale your service up to two instances:
kubectl scale --replicas=2 deployment/mymicroserviceClean up resources
When you're done testing the microservice, you can delete all resources that you created with the following command:
az group delete -n MyMicroserviceResourcesNext steps
The following resources will help you keep exploring microservices with .NET.
Microservices for Beginners
Let Nish take you through microservices concepts and learn how to build your first microservices endpoint in .NET:
You might also be interested in...