Managed Kubernetes clusters
- Cloud providers offer managed kubernetes clusters
- Cloud providers manage the control plane i.e. we need not install k8s and the control plane will be a black box

Azure Kubernetes Services (AKS)
- AKS is managed k8s offered by Azure Refer Here
- Lets setup AKS Cluster
- Pre-reqs:
- Azure CLI is installed and configured
- Refer Here for steps
- Azure cli user data
#!/bin/bash
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release -y
sudo mkdir -p /etc/apt/keyrings
curl -sLS https://packages.microsoft.com/keys/microsoft.asc |
gpg --dearmor | sudo tee /etc/apt/keyrings/microsoft.gpg > /dev/null
sudo chmod go+r /etc/apt/keyrings/microsoft.gpg
AZ_DIST=$(lsb_release -cs)
echo "Types: deb
URIs: https://packages.microsoft.com/repos/azure-cli/
Suites: ${AZ_DIST}
Components: main
Architectures: $(dpkg --print-architecture)
Signed-by: /etc/apt/keyrings/microsoft.gpg" | sudo tee /etc/apt/sources.list.d/azure-cli.sources
sudo apt-get update
sudo apt-get install azure-cli -y
- Commands to create AKS cluster from bash (linux/mac)
# variables
export MY_RESOURCE_GROUP_NAME="myAKSResourceGroup"
export REGION="eastus"
export MY_AKS_CLUSTER_NAME="myAKSCluster"
export MY_DNS_LABEL="mydnslabel"
# Create a resource group
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
az aks create --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER_NAME --node-count 1 --node-vm-size "Standard_B2ms" --generate-ssh-keys
# install kubectl
az aks install-cli
# get kube config
az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER_NAME
- Commands to create AKS cluster from powershell using Azure CLI
$MY_RESOURCE_GROUP_NAME="myAKSResourceGroup"
$REGION="eastus"
$MY_AKS_CLUSTER_NAME="myAKSCluster"
$MY_DNS_LABEL="mydnslabel"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
az aks create --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER_NAME --node-count 1 --node-vm-size "Standard_B2ms" --generate-ssh-keys
az aks install-cli
az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER_NAME
Lets deploy spc using replicaset and a service of type load balancer
- Refer Here for changes


Library Application
-
Architecture
-
Technical stack
- users-service: REST API
- python
- fast api
- user-db:
- postgres
- books-service: REST API
- python
- fast api
- user-db:
- postgres
- library-frontend:
- react js
- users-service: REST API
- To run books database
- image: postgres:15-alpine
- environmental variables:
- POSTGRES_USER: user
- POSTGRES_PASSWORD: password
- POSTGRES_DB: booksdb
- port: 5432
-
To run books service
- image: shaikkhajaibrahim/libbookssvc:1.0
- environmental variables:
- DATABASE_URL: “postgresql://
: @ :5432/ “ - SECRET_KEY: ‘YtDEVWnL35aAIP-5yxeLjAZ49R920-mMNDfwPyWULu63HFsYzo0f-LO2InxC8eu428k’
- DATABASE_URL: “postgresql://
- port: 8000
-
To run user database
- image: postgres:15-alpine
- environmental variables:
- POSTGRES_USER: user
- POSTGRES_PASSWORD: password
- POSTGRES_DB: usersdb
- port: 5432
- To run users servics:
- image: shaikkhajaibrahim/libuserssvc:1.0
- environmental variables:
- DATABASE_URL: “postgresql://
: @ :5432/ “ - SECRET_KEY: ‘YtDEVWnL35aAIP-5yxeLjAZ49R920-mMNDfwPyWULu63HFsYzo0f-LO2InxC8eu428k’
- DATABASE_URL: “postgresql://
- port: 8000
- To run library webstore
- image: shaikkhajaibrahim/libwebstore:1.0
- environmental variables
- REACT_APP_BACKEND_API_URL: http://
:8000/api/v1 - REACT_APP_BOOKS_API_URL: http://
:8000/api/v1/books - REACT_APP_USERS_API_URL: http://
:8000/api/v1/users
- REACT_APP_BACKEND_API_URL: http://
- port: 3000

First Version of Library:
- Lets create a users database replicaset
- Lets create a books database replicaset

- Refer Here for the changes done
- Now lets create rs for users service and books service Refer Here for changes

- Lets add rs and service for library store Refer Here for changes
- To create a admin user run this from any container
curl -X 'POST' \
'http://users-svc:8000/api/v1/users/' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"username": "qtdevops",
"email": "admin@admin.com",
"user_type": "administrator",
"password": "admin@123"
}'
