Metehan Küçükçakır
Fruit Smoothies isimli bir şirkette IT çalışanı olduğunuzu ve yazılımcıların ürünlerin puanlanabileceği bir yazılım geliştirdiğini düşünün. Geliştirilen uygulama birden fazla bileşen içeriyor ve bunların Azure Kubernetes Service üzerinde host edilmesi planlanıyor.
Bu modülde multi-container bir uygulamayı Azure Kubernetes Service(AKS)'e deploy edeceğiz. Sırasıyla uygulayacağımız adımlar aşağıdaki gibidir;
Hedef: MongoDB, web ve api servislerimizi üzerinde çalıştırabileceğimiz bir AKS Cluster'ı oluşturmak.
Geliştirici ekip uygulamalar halihazırda container yapısı kullanıyor. Süreçleri hızlandırmak, yönetmek ve esnek bir şekilde büyüyüp küçülmesini sağlamak için AKS kullanılması isteniyor. Bu bölümde;
REGION_NAME=westeurope
RESOURCE_GROUP=appmo-demo-rg
SUBNET_NAME=aks-subnet
VNET_NAME=aks-vnet
az group create --name $RESOURCE_GROUP --location $REGION_NAME
Kubenet, kubernetes'in default network modelidir. Kubenet network ile AKS nodeları Azure Virtual Network subnetinden bir IP adresi alırlar. Podlar AKS içinde oluşan farklı bir networkten ip alırlar ve AKS dışındaki kaynaklara erişirken NAT ile erişirler.
CNI, AKS clusterının doğrudan Azure Virtual Network'e bağlı olduğu, her podun doğrudan vnetten bir ip aldığı yapıdır. Kubenet'e göre daha gelişmiş, daha yönetilebilir bir network yapısıdır.
az network vnet create
--resource-group $RESOURCE_GROUP
--location $REGION_NAME
--name $VNET_NAME
--address-prefixes 10.0.0.0/8
--subnet-name $SUBNET_NAME
--subnet-prefixes 10.240.0.0/16
SUBNET_ID=$(az network vnet subnet show
--resource-group $RESOURCE_GROUP
--vnet-name $VNET_NAME
--name $SUBNET_NAME
--query id -o tsv)
VERSION=$(az aks get-versions
--location $REGION_NAME
--query 'orchestrators[?!isPreview] | [-1].orchestratorVersion'
--output tsv)
AKS_CLUSTER_NAME=aksworkshop-$RANDOM
echo $AKS_CLUSTER_NAME
az aks create
--resource-group $RESOURCE_GROUP
--name $AKS_CLUSTER_NAME
--vm-set-type VirtualMachineScaleSets
--node-count 2
--load-balancer-sku standard
--location $REGION_NAME
--kubernetes-version $VERSION
--network-plugin azure
--vnet-subnet-id $SUBNET_ID
--service-cidr 10.2.0.0/24
--dns-service-ip 10.2.0.10
--docker-bridge-address 172.17.0.1/16
--generate-ssh-keys
az aks get-credentials
--resource-group $RESOURCE_GROUP
--name $AKS_CLUSTER_NAME
kubectl get nodes
kubectl get namespace
kubectl create namespace ratingsapp
ACR_NAME=acr$RANDOM
az acr create
--resource-group $RESOURCE_GROUP
--location $REGION_NAME
--name $ACR_NAME
--sku Standard
git clone https://github.com/MicrosoftDocs/mslearn-aks-workshop-ratings-api.git
cd mslearn-aks-workshop-ratings-api
az acr build
--resource-group $RESOURCE_GROUP
--registry $ACR_NAME
--image ratings-api:v1 .
cd ~
git clone https://github.com/MicrosoftDocs/mslearn-aks-workshop-ratings-web.git
cd mslearn-aks-workshop-ratings-web
az acr build
--resource-group $RESOURCE_GROUP
--registry $ACR_NAME
--image ratings-web:v1 .
az acr repository list
--name $ACR_NAME
--output table
az aks update
--name $AKS_CLUSTER_NAME
--resource-group $RESOURCE_GROUP
--attach-acr $ACR_NAME
helm repo add bitnami https://charts.bitnami.com/bitnami
helm search repo bitnami
helm install ratings bitnami/mongodb
--namespace ratingsapp
--set auth.username=,auth.password=,auth.database=ratingsdb
kubectl create secret generic mongosecret
--namespace ratingsapp
--from-literal=MONGOCONNECTION="mongodb://:@ratings-mongodb.ratingsapp:27017/ratingsdb"
nano ratings-api-deployment.yaml
kubectl apply
--namespace ratingsapp
-f ratings-api-deployment.yaml