Azure CLI Guide - Install, Connect, Deploy Kubernetes and PostgreSQL

   |   3 minute read   |   Using 553 words

Complete guide to Azure CLI installation, cloud connection, Kubernetes cluster deployment, and PostgreSQL setup

1. Installing Azure CLI

Linux (Ubuntu/Debian)

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

macOS

brew install azure-cli

Windows

Download and run the MSI installer from: https://aka.ms/installazurecliwindows

Verify Installation

az --version

2. Connect to Azure Cloud

Login to Azure

az login

Login with Service Principal

az login --service-principal -u <app-id> -p <password> --tenant <tenant-id>

Set Default Subscription

az account list --output table
az account set --subscription <subscription-id>

Verify Connection

az account show

3. Deploy Kubernetes Clusters

Create Resource Group

az group create --name myResourceGroup --location eastus

Create AKS Cluster

az aks create \
  --resource-group myResourceGroup \
  --name myAKSCluster \
  --node-count 3 \
  --enable-addons monitoring \
  --generate-ssh-keys

Get Cluster Credentials

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Verify Cluster Connection

kubectl get nodes
kubectl cluster-info

Scale Cluster Nodes

az aks scale --resource-group myResourceGroup --name myAKSCluster --node-count 5

Upgrade Cluster

az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster
az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version 1.28.0

4. Deploy PostgreSQL

Create PostgreSQL Flexible Server

az postgres flexible-server create \
  --resource-group myResourceGroup \
  --name mypostgresqlserver \
  --location eastus \
  --admin-user myadmin \
  --admin-password <password> \
  --sku-name Standard_B1ms \
  --tier Burstable \
  --storage-size 32

Create Database

az postgres flexible-server db create \
  --resource-group myResourceGroup \
  --server-name mypostgresqlserver \
  --database-name mydatabase

Configure Firewall Rules

# Allow Azure services
az postgres flexible-server firewall-rule create \
  --resource-group myResourceGroup \
  --name mypostgresqlserver \
  --rule-name AllowAzureServices \
  --start-ip-address 0.0.0.0 \
  --end-ip-address 0.0.0.0

# Allow specific IP
az postgres flexible-server firewall-rule create \
  --resource-group myResourceGroup \
  --name mypostgresqlserver \
  --rule-name AllowMyIP \
  --start-ip-address <your-ip> \
  --end-ip-address <your-ip>

Connect to PostgreSQL

# Get connection string
az postgres flexible-server show-connection-string \
  --server-name mypostgresqlserver \
  --database-name mydatabase \
  --admin-user myadmin \
  --admin-password <password>

# Connect using psql
psql "host=mypostgresqlserver.postgres.database.azure.com port=5432 dbname=mydatabase user=myadmin password=<password> sslmode=require"

5. Deploy PostgreSQL on Kubernetes

Create Kubernetes Secret for PostgreSQL

kubectl create secret generic postgres-secret \
  --from-literal=username=postgres \
  --from-literal=password=mypassword

Deploy PostgreSQL on AKS

# postgres-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:15
        env:
        - name: POSTGRES_USER
          valueFrom:
            secretKeyRef:
              name: postgres-secret
              key: username
        - name: POSTGRES_PASSWORD
          valueFrom:
            secretKeyRef:
              name: postgres-secret
              key: password
        - name: POSTGRES_DB
          value: myapp
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: postgres-storage
          mountPath: /var/lib/postgresql/data
      volumes:
      - name: postgres-storage
        persistentVolumeClaim:
          claimName: postgres-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: postgres-service
spec:
  selector:
    app: postgres
  ports:
  - port: 5432
    targetPort: 5432
  type: ClusterIP
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

Apply PostgreSQL Configuration

kubectl apply -f postgres-deployment.yaml

Verify PostgreSQL Deployment

kubectl get pods -l app=postgres
kubectl get svc postgres-service
kubectl logs deployment/postgres

6. Useful Management Commands

Monitor Cluster

az aks browse --resource-group myResourceGroup --name myAKSCluster

Check PostgreSQL Status

az postgres flexible-server show --resource-group myResourceGroup --name mypostgresqlserver

Clean Up Resources

# Delete AKS cluster
az aks delete --resource-group myResourceGroup --name myAKSCluster

# Delete PostgreSQL server
az postgres flexible-server delete --resource-group myResourceGroup --name mypostgresqlserver

# Delete resource group (removes all resources)
az group delete --name myResourceGroup

Cost Management

# Check resource costs
az consumption usage list --start-date 2025-09-01 --end-date 2025-09-30

# Stop AKS cluster to save costs
az aks stop --resource-group myResourceGroup --name myAKSCluster

# Start AKS cluster
az aks start --resource-group myResourceGroup --name myAKSCluster


denis256 at denis256.dev