Azure Cosmos DB kullanarak yeni bir veritabanı barındırma
Dış durumların temel kavramlarını ve Kubernetes'i kullanarak bunlarla nasıl başa çıkılacağını incelediğimize göre, navlun şirketinizin uygulamasını destekleyecek kaynakları oluşturalım ve ardından uygulamanın kendisini oluşturalım.
Kaynak grubu oluşturma
Önemli
Bu alıştırmayı çalıştırmak için kendi Azure aboneliğinizin olması gerekir ve ücret ödeyebilirsiniz. Mevcut bir Azure aboneliğiniz yoksa başlamadan önce ücretsiz hesap oluşturun.
Kendi aboneliğinizi kullanarak Azure portalında oturum açın.
Cloud Shell'i açın ve Bash'i seçin.
komutunu kullanarak
az group create
bir Azure kaynak grubu oluşturun ve bir bölge belirtin. Bu örnek eastus bölgesinde rg-ship-manager adlı bir kaynak grubu oluşturur:az group create --name rg-ship-manager --location eastus
Oluşturma işlemlerinin tamamlanması birkaç dakika sürebilir.
Durumu oluşturma
Daha önce de açıklandığı gibi, Kubernetes'te durumu işlemek mümkündür ancak önerilmez. Yüksek oranda kullanılabilir bir uygulama durumunu yönetmek, durumu kendiniz yönetmeniz gerektiğinde çok zor olabilir.
Bu sorunu çözmek için durumu dış durumla ilgilenme konusunda uzmanlaşmış bir uygulamayla dışlaştıracağız: Azure Cosmos DB.
Not
Azure Cosmos DB örneğini uygulamayı çalıştırmak için gerekli kaynaklar kapsamında oluşturuyor olsak da Azure Kubernetes Service (AKS) ile Azure Cosmos DB birbiriyle bağlantılı değildir.
Modülün geri kalanında kullanılmak üzere Azure Cosmos DB hesap adını ve kaynak grubu adını depolamak için Bash değişkenleri oluşturun.
export RESOURCE_GROUP=rg-ship-manager export COSMOSDB_ACCOUNT_NAME=contoso-ship-manager-$RANDOM
komutunu kullanarak
az cosmosdb create
yeni bir Azure Cosmos DB hesabı oluşturun.az cosmosdb create --name $COSMOSDB_ACCOUNT_NAME --resource-group $RESOURCE_GROUP --kind MongoDB
Oluşturma işlemlerinin tamamlanması birkaç dakika sürebilir.
komutunu kullanarak
az cosmosdb mongodb database create
yeni bir veritabanı oluşturun. Bu örnekte veritabanı contoso-ship-manager olarak adlandırılmıştır.az cosmosdb mongodb database create --account-name $COSMOSDB_ACCOUNT_NAME --resource-group $RESOURCE_GROUP --name contoso-ship-manager
komutunu kullanarak veritabanının başarıyla oluşturulduğunu
az cosmosdb mongodb database list
doğrulayın.az cosmosdb mongodb database list --account-name $COSMOSDB_ACCOUNT_NAME --resource-group $RESOURCE_GROUP -o table
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
Name ResourceGroup -------------------- --------------- contoso-ship-manager rg-ship-manager
Artık ship manager uygulamasındaki tüm verileri depolamak için bir dış durum oluşturduğunuza göre, uygulamanın kendisini depolamak için AKS kaynağını oluşturalım.
AKS kümesini oluşturma
Modülün geri kalanında kullanılmak üzere küme adını depolamak için bir Bash değişkeni oluşturun.
AKS_CLUSTER_NAME=ship-manager-cluster
komutunu kullanarak
az aks create
bir AKS kümesi oluşturun.az aks create --resource-group $RESOURCE_GROUP \ --name $AKS_CLUSTER_NAME \ --node-count 3 \ --generate-ssh-keys \ --node-vm-size Standard_B2s \ --enable-addons http_application_routing
Oluşturma işlemlerinin tamamlanması birkaç dakika sürebilir.
Not
Tüm Azure hizmetleri, belirli sanal makine (VM) SKU'ları için kullanım kısıtlamaları da dahil olmak üzere kaynaklar ve özellikler için varsayılan sınırları ve kotaları ayarlar. Seçtiğiniz bölgede istediğiniz VM SKU'sunun kullanılabilir olmadığını belirten bir hatayla karşılaşırsanız, büyük olasılıkla bir Azure desteği isteği aracılığıyla bu kotayı artırmanız gerekir (Sorun türü için Kota'yı seçin).
komutunu kullanarak
az aks get-credentials
kubectl yapılandırmasını indirin.az aks get-credentials --name $AKS_CLUSTER_NAME --resource-group $RESOURCE_GROUP
Mevcut kümeler hakkında herhangi bir ileti alırsanız, örneğin:
A different object named ship-manager-cluster already exists in your kubeconfig file. Overwrite? (y/n):
Üzerine yazmak için girin
y
.komutunu kullanarak yapılandırmayı test edin
kubectl get nodes
.kubectl get nodes
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
NAME STATUS ROLES AGE VERSION aks-nodepool1-12345678-vmss000000 Ready agent 3m19s v1.27.7 aks-nodepool1-12345678-vmss000001 Ready agent 3m25s v1.27.7 aks-nodepool1-12345678-vmss000002 Ready agent 3m20s v1.27.7
Uygulamayı dağıtma
Uygulamayı oluşturmak için Kubernetes'e dağıtılacak YAML dosyalarını oluşturmanız gerekir.
Arka uç API'sini dağıtma
komutunu kullanarak
az cosmosdb keys list
Azure Cosmos DB veritabanınızı bağlantı dizesi alın.az cosmosdb keys list --type connection-strings -g $RESOURCE_GROUP -n $COSMOSDB_ACCOUNT_NAME --query "connectionStrings[0].connectionString" -o tsv
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
mongodb://contoso-ship-manager-12345678.documents.azure.com:10255/?ssl=true&replicaSet=globaldb
backend-deploy.yml adlı yeni bir dosya oluşturun ve aşağıdaki dağıtım belirtimini yapıştırın:
apiVersion: apps/v1 kind: Deployment metadata: name: ship-manager-backend spec: replicas: 1 selector: matchLabels: app: ship-manager-backend template: metadata: labels: app: ship-manager-backend spec: containers: - image: mcr.microsoft.com/mslearn/samples/contoso-ship-manager:backend name: ship-manager-backend resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 3000 name: http env: - name: DATABASE_MONGODB_URI value: "{your database connection string}" - name: DATABASE_MONGODB_DBNAME value: contoso-ship-manager
Yer tutucuyu
{your database connection string}
önceki adımda aldığınız veritabanı bağlantı dizesi değiştirin.Not
bağlantı dizesi bazen geçersiz YAML karakterleri sunduğundan, ortam değişkenlerine tırnak eklemeyi
"
unutmayın. GIZLI dizileri, AKS'de bağlantı dizesi depolamak ve almak için güvenli bir yol olarak kullanmayı düşünebilirsiniz.Dosyayı kaydedip kapatın
komutunu kullanarak arka uç API dağıtımını
kubectl apply
uygulayın.kubectl apply -f backend-deploy.yml
Aşağıdaki örnek çıktıya benzer bir ileti görmeniz gerekir:
deployment.apps/ship-manager-backend created
Bu uygulamayı herkesin kullanımına açmak için trafikle ilgilenmek için bir hizmet ve giriş oluşturmanız gerekir.
komutunu kullanarak
az aks show
küme API'nizin sunucu adresini alın.az aks show -g $RESOURCE_GROUP -n $AKS_CLUSTER_NAME -o tsv --query fqdn
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
ship-manag-rg-ship-manager-a1bcd2-efghij56.hcp.eastus.azmk8s.io
backend-network.yml adlı yeni bir dosya oluşturun ve aşağıdaki ağ belirtimine yapıştırın:
apiVersion: v1 kind: Service metadata: name: ship-manager-backend spec: type: ClusterIP ports: - port: 80 targetPort: 3000 selector: app: ship-manager-backend --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ship-manager-backend spec: ingressClassName: webapprouting.kubernetes.azure.com rules: - host: <host-name> http: paths: - backend: service: name: ship-manager-backend port: number: 80 path: / pathType: Prefix
Yer tutucuyu
<host-name>
önceki adımda aldığınız bağlantı dizesi değiştirin.Dosyayı kaydedip kapatın
komutunu kullanarak arka uç ağ dağıtımını
kubectl apply
uygulayın.kubectl apply -f backend-network.yml
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
service/ship-manager-backend created ingress.networking.k8s.io/ship-manager-backend created
API'ye erişmek için giriş kaynağınıza yapıştırdığınız ana bilgisayar adını kullanabilirsiniz. Azure DNS bölgesi kaynağının DNS algılama sürecini tamamlaması beş dakika kadar sürebilir. API'ye şu an erişemiyorsanız birkaç dakika bekledikten sonra yeniden deneyin.
komutunu kullanarak
kubectl get ingress
Kubernetes'i kullanılabilir girişler için sorgulayarak giriş durumunu denetleyin.kubectl get ingress
Çıktıdaki ADRES alanı doldurulduktan sonra, aşağıdaki örnek çıktıda gösterildiği gibi giriş dağıtıldı ve erişime hazır demektir:
NAME CLASS HOSTS ADDRESS PORTS AGE ship-manager-backend webapprouting.kubernetes.azure.com ship-manag-rg-ship-manager-a1bcd2-efghij56.hcp.eastus.azmk8s.io xx.xx.xx.xx 80 2m40s
Ön uç arabirimini dağıtma
frontend-deploy.yml adlı yeni bir dosya oluşturun ve aşağıdaki dağıtım belirtimini yapıştırın:
apiVersion: apps/v1 kind: Deployment metadata: name: ship-manager-frontend spec: replicas: 1 selector: matchLabels: app: ship-manager-frontend template: metadata: labels: app: ship-manager-frontend spec: containers: - image: mcr.microsoft.com/mslearn/samples/contoso-ship-manager:frontend name: ship-manager-frontend imagePullPolicy: Always resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 volumeMounts: - name: config mountPath: /usr/src/app/dist/config.js subPath: config.js volumes: - name: config configMap: name: frontend-config --- apiVersion: v1 kind: ConfigMap metadata: name: frontend-config data: config.js: | const config = (() => { return { 'VUE_APP_BACKEND_BASE_URL': 'http://{YOUR_BACKEND_URL}', } })()
Yer tutucusunu
{YOUR_BACKEND_URL}
, önceki bölümde aldığınız arka uç API'sinin ana bilgisayar adı URL'si ile değiştirin.Dosyayı kaydedip kapatın
komutunu kullanarak ön uç dağıtımını
kubectl apply
uygulayın.kubectl apply -f frontend-deploy.yml
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
deployment.apps/ship-manager-frontend created configmap/frontend-config created
Ardından, bu uygulamanın web'e açık olması için gereken ağ kaynaklarını oluşturabilirsiniz.
frontend-network.yml adlı yeni bir dosya oluşturun ve aşağıdaki ağ belirtimine yapıştırın:
apiVersion: v1 kind: Service metadata: name: ship-manager-frontend spec: type: ClusterIP ports: - port: 80 targetPort: 80 selector: app: ship-manager-frontend --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ship-manager-frontend spec: ingressClassName: webapprouting.kubernetes.azure.com rules: - host: <host-name> http: paths: - backend: service: name: ship-manager-frontend port: number: 80 path: / pathType: Prefix
Yer tutucuyu
<host-name>
önceki bölümde aldığınız bağlantı dizesi ile değiştirin.Dosyayı kaydedip kapatın
komutunu kullanarak ön uç ağ dağıtımını
kubectl apply
uygulayın.kubectl apply -f frontend-network.yml
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
service/ship-manager-frontend created ingress.networking.k8s.io/ship-manager-frontend created
API'ye erişmek için giriş kaynağınıza yapıştırdığınız ana bilgisayar adını kullanabilirsiniz. Azure DNS bölgesi kaynağının DNS algılama sürecini tamamlaması beş dakika kadar sürebilir. API'ye şu an erişemiyorsanız birkaç dakika bekledikten sonra yeniden deneyin.
komutunu kullanarak
kubectl get ingress
Kubernetes'i kullanılabilir girişler için sorgulayarak giriş durumunu denetleyin.kubectl get ingress
Çıktıdaki ADRES alanı doldurulduktan sonra, aşağıdaki örnek çıktıda gösterildiği gibi giriş dağıtıldı ve erişime hazır demektir:
NAME CLASS HOSTS ADDRESS PORTS AGE ship-manager-backend webapprouting.kubernetes.azure.com ship-manag-rg-ship-manager-a1bcd2-efghij56.hcp.eastus.azmk8s.io xx.xx.xx.xx 80 2m40s ship-manager-frontend webapprouting.kubernetes.azure.com ship-manag-rg-ship-manager-a1bcd2-efghij56.hcp.eastus.azmk8s.io xx.xx.xx.xx 80 100s
Artık giriş kaynağı ana bilgisayar adı ile URL'ye erişebilir ve nakliye yönetim uygulamasına giriş yapabilirsiniz.