Skip to main content

Command Palette

Search for a command to run...

AKS Creation Guide

Create a simple AKS cluster optimized for CKAD practice

Updated
3 min read
AKS Creation Guide
D

👋 Hi! I’m Dani, a passionate automation, Ansible, DevOps, and Cloud technologies enthusiast. I currently work as a Middleware Solutions Architect at Atradius, leading middleware automation and optimizing IT infrastructure. 💡 My Story: I started my career specializing in Oracle Middleware, working with technologies such as WebLogic, Oracle Database, Oracle iPlanet Web Server, and Oracle JDK. Over time, my focus shifted towards deployment automation, continuous integration, and process optimization in complex enterprise environments. 🚀 Impact & Achievements: ✅ Direct the automation of Oracle Fusion Middleware (FMW) with Ansible, streamlining the installation, configuration, and patching processes for Oracle WebLogic, SOA Suite, and OSB. ✅ Lead IBM WebSphere Application Server (WAS) automation with Ansible and AWX, including installation, configuration, certificates, and deployments, reducing implementation times by 70%. ✅ Integrated Azure DevOps with AWX, eliminating manual deployment tasks and reducing human intervention to a simple approval step. ✅ Mentor and train teams on Ansible automation, fostering continuous improvement and knowledge transfer. 🏀🥎 In my free time, I enjoy playing padel and basketball, always looking for new challenges and improvements, both in sports and technology. I also love building web applications with Oracle APEX, bringing ideas to life through low-code development. 📥 Let’s connect! 📧 Email: dbenitez.vk@gmail.com 🔗 LinkedIn: https://www.linkedin.com/in/danielbenitezaguila 💻 GitHub: https://github.com/dbeniteza

Intro

In this guide, we’ll create a minimal Azure Kubernetes Service (AKS) cluster specifically designed for CKAD practice.

The goal is to:

  • keep costs low

  • focus on Kubernetes, not Azure features

  • have a real cluster for hands-on learning

Prerequisites

Required tools

  • Azure Subscription

  • Azure CLI installed

  • kubectl

$ az version
{
  "azure-cli": "2.86.0",
  "azure-cli-core": "2.86.0",
  "azure-cli-telemetry": "1.1.0",
  "extensions": {
    "ml": "2.42.0",
    "ssh": "2.0.8"
  }
}
$ kubectl version --client
Client Version: v1.36.0
Kustomize Version: v5.8.1

Create AKS

Go to: Azure Portal → Create a resource → Kubernetes Service

Step 1: Basics

Field

Value

Subscription

<your_subscription>

Resource Group

<your_resource_group>

Cluster preset configuration

Dev/Test

Cluster Name

aks-ckad

Region

(Europe) West Europe

Kubernetes version

Latest stable

Availability zones

None

Pricing tier

Free

Kubernetes version

1.34.8 (default)

Step 2: Node Pools

Keep it cheap/simple

Setting

Value

Node size

Standard_D2Is_v5

Node count

2-5

Scale method

Autoscale

Step 3: Authentication

Just leave default - System assigned managed identity

Step 4: Networking

Keep defaults

Step 5: Monitoring

Disable for cost + simplicity:

  • Disable Container Insights

  • Disable Prometheus metrics

Step 6: Review + Create

Click Create and wait 3-5 minutes

Connect to the cluster

After deployment, go to Cloud Shell

az login --use-device-code
Cloud Shell is automatically authenticated under the initial account signed-in with. Run 'az login' only if you need to use a different account
To sign in, use a web browser to open the page https://login.microsoft.com/device and enter the code XXXX to authenticate.

Retrieving tenants and subscriptions for the selection...
The following tenants don't contain accessible subscriptions. Use `az login --allow-no-subscriptions` to have tenant level access.


az aks get-credentials \
 --resource-group db-app-lab-rg \
 --name aks-ckad \
 --overwrite-existing
Merged "aks-ckad" as current context in /home/dbeniteza/.kube/config

Validate cluster

kubectl get nodes
NAME                                STATUS   ROLES    AGE   VERSION
aks-agentpool-38340810-vmss000000   Ready    <none>   17h   v1.34.8
aks-agentpool-38340810-vmss000001   Ready    <none>   17h   v1.34.8

Test a simple pod

kubectl create deployment nginx --image=nginx
deployment.apps/nginx created

kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed

kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP        17h
nginx        NodePort    10.0.74.32   <none>        80:30319/TCP   14s

kubectl get all
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-66686b6766-5k6j9   1/1     Running   0          5m3s

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP        17h
service/nginx        NodePort    10.0.74.32   <none>        80:30319/TCP   4m45s

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   1/1     1            1           5m3s

NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-66686b6766   1         1         1       5m3s

Cleanup

kubectl delete deployment nginx
deployment.apps "nginx" deleted from default namespace

kubectl delete svc nginx
service "nginx" deleted from default namespace

kubectl get all
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.0.0.1     <none>        443/TCP   17