In this blog post, I will create an AKS cluster. Then, apply a deployment to that cluster to include replicas, a pod template that uses an NGINX container image, and resource limits. Then, I will add a `LoadBalancer` service to provide an external IP, so we can reach our application.
Design Overview

The audience should be familiar with the following to use this hands-on lab:
- Docker and Containers
- Kubernetes Deployments, Pods and Services
- YAML
- Azure Kubernetes Service
- Azure Cloud Shell
- Azure Command Line Interface
To complete this lab you will need to use manifest files when creating the deployment and the service. Once you have accessed the lab environment add the deployment.yaml and service.yaml to your Azure Cloud Shell environment.
If you will be using the Azure Cloud Shell you will need to configure the storage.
- Open up the Azure Cloud Shell.
- In the welcome screen, select either Bash or PowerShell.
- Select “Show advanced settings”.
- Set the Cloud Shell region to the same location as the existing resource group
- Under “Storage account” make sure “Create new” is selected.
- Manually provide a unique name for the Storage account.
- Under “File share” make sure “Create new” is selected.
- Manually provide a unique name for the File share.
- Select “Create storage”.
Create AKS Cluster
Create just the cluster, without any integrations with Azure Monitor, or Azure Policy.
You can use either the provided Service principal or a System-assigned managed identity.
The cluster can be created with the Azure Portal, CLI, PowerShell, or ARM template.
az aks create --resource-group $RG --name ABCluster001 --node-count 3 --generate-ssh-keys --node-vm-size Standard_B2s --enable-managed-identity
link Azure CLI to kubectl command line
az aks get-crrdentials –name ABCluster001 –resource-group $RG
Verification cluster Information
Kubectl get nodes
Kubectl cluster-info
Deploy the Application
Create a deployment to include two replicas of the application. The deployment can be applied in the Azure Portal or with the Azure Cloud Shell.
The application should use the NGINX public Docker Hub image.
Include resource minimum and maximum limits.
touch deployment.yaml
apiVersion: apps/v1
# The type of workload we are creating
kind: Deployment
metadata:
# Name of deployment - Required
name: aks-web-app-deployment
spec:
replicas: 2
selector:
matchLabels:
app: aks-web-app
# Pod template which decribes the pod you want to deploy
template:
metadata:
# Used to logically group pods together
labels:
app: aks-web-app
# Specific details about the containers in the Pod
spec:
containers:
- name: aks-web-app-container
# Docker Hub image to use
image: nginx
# Define ports to expose
ports:
- containerPort: 80
# Reference name of port
name: http
resources:
# Minimum amount of resources we want
requests:
cpu: 100m
memory: 128Mi
# Maximum amount of resources we want
limits:
cpu: 250m
memory: 256Mi
Deploy the application with kubectl
kubectl apply -f ./deployment.yaml

Creating a LocaBalanacer Service by using YAML file
touch service.yaml
apiVersion: v1
# The type of workload we are creating
kind: Service
metadata:
# Name of Service - Required
name: aks-web-app-service
# Specific details about the Service
spec:
# Type of Service to be deployed
type: LoadBalancer
ports:
- port: 80
# Used to tell the Service which Pods to associate with
selector:
app: aks-web-app

Verification deployment
Kubectl get pods -o wide
Kubectl get deploy aks-web-app-deployment
Deploy service.yaml by using kubectl
Once service deployment is completed, we can access nginx web server with the service external IP address
How to get a newly created service public ip address via Azure portal?

View service information with CLI
Kubectl get service
