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.
The audience should be familiar with the following to use this hands-on lab:
- Docker and Containers
- Kubernetes Deployments, Pods and Services
- 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
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