AKS Creation Guide
Create a simple AKS cluster optimized for CKAD practice

👋 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



