Hızlı Başlangıç: Bicep Kubernetes uzantısını (önizleme) kullanarak Azure Kubernetes Service (AKS) kümesi dağıtma
Azure Kubernetes Service (AKS), kümeleri hızla dağıtmanızı ve yönetmenizi sağlayan yönetilen bir Kubernetes hizmetidir. Bu hızlı başlangıçta:
- Bicep Kubernetes uzantısını (önizleme) kullanarak AKS kümesi dağıtma.
- Bir grup mikro hizmet ve web ön ucuyla perakende senaryosu simülasyonu yaparak örnek bir çok kapsayıcılı uygulama çalıştırın.
Önemli
Bicep Kubernetes uzantısı şu anda önizleme aşamasındadır. Bicep yapılandırma dosyasından aşağıdakileri ekleyerek özelliği etkinleştirebilirsiniz:
{
"experimentalFeaturesEnabled": {
"extensibility": true,
}
}
Not
Aks kümesini hızlı bir şekilde sağlamaya başlamak için, bu makale yalnızca değerlendirme amacıyla varsayılan ayarlarla küme dağıtma adımlarını içerir. Üretime hazır bir kümeyi dağıtmadan önce, iş gereksinimlerinizle nasıl uyumlu olduğunu göz önünde bulundurmak için temel başvuru mimarimizi tanımanızı öneririz.
Başlamadan önce
Bu hızlı başlangıç, Kubernetes kavramlarının temel olarak bilindiğini varsayar. Daha fazla bilgi için bkz . Azure Kubernetes Service (AKS) için Kubernetes temel kavramları.
- Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.
- Kümenizi oluşturmak için kullandığınız kimliğin uygun minimum izinlere sahip olduğundan emin olun. AKS erişimi ve kimliği hakkında daha fazla bilgi için bkz . Azure Kubernetes Service (AKS) için erişim ve kimlik seçenekleri.
Bicep, Azure kaynaklarını dağıtmak için bildirim temelli söz dizimi kullanan, etki alanına özgü bir dildir (DSL). Kısa sözdizimi, güvenilir tür güvenliği ve kod yeniden kullanımı için destek sağlar. Bicep, Azure'daki kod olarak altyapı çözümleriniz için en iyi yazma deneyimini sunar.
- Ortamınızı Bicep geliştirme için ayarlamak için bkz . Bicep araçlarını yükleme. Adımları tamamladıktan sonra Visual Studio Code ve Bicep uzantısına sahipsinizdir. Ayrıca en son Azure CLI sürümüne veya en son Azure PowerShell modülüne de sahipsiniz.
- Bicep dosyası kullanarak AKS kümesi oluşturmak için bir SSH ortak anahtarı sağlarsınız. Bu kaynağa ihtiyacınız varsa aşağıdaki bölüme bakın. Aksi takdirde Bicep dosyasını gözden geçirme bölümüne atlayın.
- Bicep dosyasını dağıtmak için dağıttığınız kaynaklara yazma erişiminiz ve kaynak türündeki
Microsoft.Resources/deployments
tüm işlemlere erişmeniz gerekir. Örneğin, bir sanal makine dağıtmak için veMicrosoft.Resources/deployments/*
izinlerine ihtiyacınız vardırMicrosoft.Compute/virtualMachines/write
. Rol ve izinlerin listesi için bkz. Azure yerleşik rolleri.
SSH anahtar çifti oluşturma
Cloud Shell'i https://shell.azure.com tarayıcınızda açmak için adresine gidin.
az sshkey create Azure CLI komutunu veya komutunu kullanarak bir SSH anahtar çifti
ssh-keygen
oluşturun.# Create an SSH key pair using Azure CLI az sshkey create --name "mySSHKey" --resource-group "myResourceGroup" # Create an SSH key pair using ssh-keygen ssh-keygen -t rsa -b 4096
SSH anahtarları oluşturma hakkında daha fazla bilgi için bkz . Azure'da kimlik doğrulaması için SSH anahtarları oluşturma ve yönetme.
Bicep dosyasını gözden geçirme
AKS kümesi oluşturmak için kullanılan Bicep dosyası Azure Hızlı Başlangıç Şablonları'ndan alınmıştı. Daha fazla AKS örneği için bkz . AKS hızlı başlangıç şablonları.
@description('The name of the Managed Cluster resource.')
param clusterName string = 'aks101cluster'
@description('The location of the Managed Cluster resource.')
param location string = resourceGroup().location
@description('Optional DNS prefix to use with hosted Kubernetes API server FQDN.')
param dnsPrefix string
@description('Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize.')
@minValue(0)
@maxValue(1023)
param osDiskSizeGB int = 0
@description('The number of nodes for the cluster.')
@minValue(1)
@maxValue(50)
param agentCount int = 3
@description('The size of the Virtual Machine.')
param agentVMSize string = 'standard_d2s_v3'
@description('User name for the Linux Virtual Machines.')
param linuxAdminUsername string
@description('Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example \'ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm\'')
param sshRSAPublicKey string
resource aks 'Microsoft.ContainerService/managedClusters@2024-02-01' = {
name: clusterName
location: location
identity: {
type: 'SystemAssigned'
}
properties: {
dnsPrefix: dnsPrefix
agentPoolProfiles: [
{
name: 'agentpool'
osDiskSizeGB: osDiskSizeGB
count: agentCount
vmSize: agentVMSize
osType: 'Linux'
mode: 'System'
}
]
linuxProfile: {
adminUsername: linuxAdminUsername
ssh: {
publicKeys: [
{
keyData: sshRSAPublicKey
}
]
}
}
}
}
output controlPlaneFQDN string = aks.properties.fqdn
Bicep dosyasında tanımlanan kaynak Microsoft.ContainerService/managedClusters'tır.
Dosyanın bir kopyasını yerel bilgisayarınıza olarak main.bicep
kaydedin.
Uygulama tanımını ekleme
Uygulamayı dağıtmak için, AKS Store uygulamasını çalıştırmak için gereken tüm nesneleri oluşturmak için bir bildirim dosyası kullanırsınız. Kubernetes bildirim dosyası, hangi kapsayıcı görüntülerinin çalıştırıldığı gibi kümenin istenen durumunu tanımlar. Bildirim aşağıdaki Kubernetes dağıtımlarını ve hizmetlerini içerir:
- Mağaza ön: Müşterilerin ürünleri görüntülemesi ve sipariş vermesi için web uygulaması.
- Ürün hizmeti: Ürün bilgilerini gösterir.
- Sipariş hizmeti: Sipariş verir.
- Rabbit MQ: Sipariş kuyruğu için ileti kuyruğu.
Not
Üretim için kalıcı depolama olmadan Rabbit MQ gibi durum bilgisi olan kapsayıcıları çalıştırmanızı önermiyoruz. Bunlar burada kolaylık sağlamak için kullanılır, ancak Azure CosmosDB veya Azure Service Bus gibi yönetilen hizmetleri kullanmanızı öneririz.
Aynı klasörde
main.bicep
adlıaks-store-quickstart.yaml
bir dosya oluşturun ve aşağıdaki bildirimde kopyalayın:apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq spec: replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: nodeSelector: "kubernetes.io/os": linux containers: - name: rabbitmq image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine ports: - containerPort: 5672 name: rabbitmq-amqp - containerPort: 15672 name: rabbitmq-http env: - name: RABBITMQ_DEFAULT_USER value: "username" - name: RABBITMQ_DEFAULT_PASS value: "password" resources: requests: cpu: 10m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: rabbitmq-enabled-plugins mountPath: /etc/rabbitmq/enabled_plugins subPath: enabled_plugins volumes: - name: rabbitmq-enabled-plugins configMap: name: rabbitmq-enabled-plugins items: - key: rabbitmq_enabled_plugins path: enabled_plugins --- apiVersion: v1 data: rabbitmq_enabled_plugins: | [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. kind: ConfigMap metadata: name: rabbitmq-enabled-plugins --- apiVersion: v1 kind: Service metadata: name: rabbitmq spec: selector: app: rabbitmq ports: - name: rabbitmq-amqp port: 5672 targetPort: 5672 - name: rabbitmq-http port: 15672 targetPort: 15672 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: order-service image: ghcr.io/azure-samples/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "rabbitmq" - name: ORDER_QUEUE_PORT value: "5672" - name: ORDER_QUEUE_USERNAME value: "username" - name: ORDER_QUEUE_PASSWORD value: "password" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi initContainers: - name: wait-for-rabbitmq image: busybox command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;'] resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: order-service spec: type: ClusterIP ports: - name: http port: 3000 targetPort: 3000 selector: app: order-service --- apiVersion: apps/v1 kind: Deployment metadata: name: product-service spec: replicas: 1 selector: matchLabels: app: product-service template: metadata: labels: app: product-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: product-service image: ghcr.io/azure-samples/aks-store-demo/product-service:latest ports: - containerPort: 3002 resources: requests: cpu: 1m memory: 1Mi limits: cpu: 1m memory: 7Mi --- apiVersion: v1 kind: Service metadata: name: product-service spec: type: ClusterIP ports: - name: http port: 3002 targetPort: 3002 selector: app: product-service --- apiVersion: apps/v1 kind: Deployment metadata: name: store-front spec: replicas: 1 selector: matchLabels: app: store-front template: metadata: labels: app: store-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: store-front image: ghcr.io/azure-samples/aks-store-demo/store-front:latest ports: - containerPort: 8080 name: store-front env: - name: VUE_APP_ORDER_SERVICE_URL value: "http://order-service:3000/" - name: VUE_APP_PRODUCT_SERVICE_URL value: "http://product-service:3002/" resources: requests: cpu: 1m memory: 200Mi limits: cpu: 1000m memory: 512Mi --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancer
YAML bildirim dosyalarının dökümü için bkz . Dağıtımlar ve YAML bildirimleri.
YAML dosyasını yerel olarak oluşturur ve kaydederseniz, Dosyaları Karşıya Yükle/İndir düğmesini seçip yerel dosya sisteminizden dosyayı seçerek bildirim dosyasını CloudShell'deki varsayılan dizininize yükleyebilirsiniz.
main.bicep
dosyasını Visual Studio Code’da açın.Komut Paleti'ne açmak için Ctrl+Shift+P tuşlarına basın.
bicep araması yapın ve ardından Bicep: Kubernetes Bildirimini İçeri Aktar'ı seçin.
İstem arasından seçim yapın
aks-store-quickstart.yaml
. Bu işlem aynı klasörde biraks-store-quickstart.bicep
dosya oluşturur.Yeni oluşturulan
aks-store-quickstart.bicep
modüle başvurmak için dosyanın sonuna aşağıdaki Bicep'i açınmain.bicep
ve ekleyin:module kubernetes './aks-store-quickstart.bicep' = { name: 'buildbicep-deploy' params: { kubeConfig: aks.listClusterAdminCredential().kubeconfigs[0].value } }
hem
aks-store-quickstart.bicep
hem demain.bicep
'yi kaydedin.
Bicep dosyasını dağıtma
az group create komutunu kullanarak bir Azure kaynak grubu oluşturun .
az group create --name myResourceGroup --location eastus
az deployment group create komutunu kullanarak Bicep dosyasını dağıtın.
az deployment group create --resource-group myResourceGroup --template-file main.bicep --parameters clusterName=<cluster-name> dnsPrefix=<dns-previs> linuxAdminUsername=<linux-admin-username> sshRSAPublicKey='<ssh-key>'
Komutlarda aşağıdaki değerleri sağlayın:
- Küme adı: AKS kümesi için myAKSCluster gibi benzersiz bir ad girin.
- DNS ön eki: Kümeniz için myakscluster gibi benzersiz bir DNS ön eki girin.
- Linux Yöneticisi Kullanıcı Adı: SSH kullanarak bağlanmak için azureuser gibi bir kullanıcı adı girin.
- SSH RSA Ortak Anahtarı: SSH anahtar çiftinizin ortak bölümünü kopyalayıp yapıştırın (varsayılan olarak~ /.ssh/id_rsa.pub içindekiler).
AKS kümesinin oluşturulması birkaç dakika sürer. Sonraki adıma geçmeden önce kümenin başarıyla dağıtılması için bekleyin.
Bicep dağıtımını doğrulama
Azure Portal’ında oturum açın.
Azure portalı menüsünde veya Giriş sayfasında AKS kümenize gidin.
Kubernetes kaynakları'nın altında Hizmetler ve girişler'i seçin.
Depo ön hizmetini bulun ve Dış IP değerini kopyalayın.
Azure Store uygulamasının çalıştığını görmek için hizmetinizin dış IP adresine bir web tarayıcısı açın.
Küme silme
AKS öğreticisini incelemeyi planlamıyorsanız, Azure ücretlerinden kaçınmak için gereksiz kaynakları temizleyin.
az group delete komutunu kullanarak kaynak grubunu, kapsayıcı hizmetini ve tüm ilgili kaynakları kaldırın.
az group delete --name myResourceGroup --yes --no-wait
Not
AKS kümesi, bu hızlı başlangıçta kullanılan varsayılan kimlik seçeneği olan sistem tarafından atanan yönetilen kimlikle oluşturulmuştur. Platform bu kimliği yönetir, böylece bu kimliği el ile kaldırmanız gerekmez.
Sonraki adımlar
Bu hızlı başlangıçta bir Kubernetes kümesi dağıttınız ve ardından basit bir çok kapsayıcılı uygulama dağıttınız. Bu örnek uygulama yalnızca tanıtım amaçlıdır ve Kubernetes uygulamaları için en iyi yöntemlerin tümünü temsil etmez. Üretim için AKS ile tam çözüm oluşturma yönergeleri için bkz . AKS çözümü kılavuzu.
AKS hakkında daha fazla bilgi edinmek ve eksiksiz bir koddan dağıtım örneğine gitmek için Kubernetes kümesi öğreticisine geçin.
Azure Kubernetes Service