Hızlı Başlangıç: Azure PowerShell 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:
- Azure PowerShell 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.
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 makalede Kubernetes kavramlarını temel olarak anlayan bir kavram olduğu varsayılır. 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.
Kullanım kolaylığı için Azure Cloud Shell'de PowerShell ortamını deneyin. Daha fazla bilgi için bkz . Azure Cloud Shell için hızlı başlangıç.
PowerShell'i yerel olarak kullanmak istiyorsanız Az PowerShell modülünü yükleyin ve Connect-AzAccount cmdlet'ini kullanarak Azure hesabınıza bağlanın. Komutları yönetim ayrıcalıklarıyla çalıştırdığınızdan emin olun. Daha fazla bilgi için bkz . Azure PowerShell'i yükleme.
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.
Birden fazla Azure aboneliğiniz varsa Set-AzContext cmdlet'ini çağırarak hızlı başlangıç için kullanmak istediğiniz aboneliği ayarlayın. Daha fazla bilgi için bkz . Azure PowerShell ile Azure aboneliklerini yönetme.
Kaynak grubu oluşturma
Azure kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği mantıksal bir grupdur. Bir kaynak grubu oluşturduğunuzda, bir konum belirtmeniz istenir. Bu konum, kaynak grubu meta verilerinizin depolama konumudur ve kaynak oluşturma sırasında başka bir bölge belirtmezseniz kaynaklarınızın Azure'da çalıştırıldığı konumdur.
Aşağıdaki örnek eastus konumunda myResourceGroup adlı bir kaynak grubu oluşturur.
New-AzResourceGroup cmdlet'ini kullanarak bir kaynak grubu oluşturun.
New-AzResourceGroup -Name myResourceGroup -Location eastus
Aşağıdaki örnek çıktı, kaynak grubunun başarıyla oluşturulmasına benzer:
ResourceGroupName : myResourceGroup Location : eastus ProvisioningState : Succeeded Tags : ResourceId : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup
AKS kümesi oluşturma
AKS kümesi oluşturmak için New-AzAksCluster cmdlet'ini kullanın. Aşağıdaki örnek, tek düğümlü myAKSCluster adlı bir küme oluşturur ve sistem tarafından atanan yönetilen kimliği etkinleştirir.
New-AzAksCluster -ResourceGroupName myResourceGroup `
-Name myAKSCluster `
-NodeCount 1 `
-EnableManagedIdentity `
-GenerateSshKey
Birkaç dakika sonra komut tamamlanıp küme hakkındaki bilgileri döndürür.
Not
AKS kümesi oluşturduğunuzda, AKS kaynaklarını depolamak için otomatik olarak ikinci bir kaynak grubu oluşturulur. Daha fazla bilgi için bkz. AKS ile neden iki kaynak grubu oluşturulur?
Kümeye bağlanma
Kubernetes kümesini yönetmek için kubectl adlı Kubernetes komut satırı istemcisini kullanın. kubectl
Azure Cloud Shell kullanıyorsanız zaten yüklüdür. Yerel olarak yüklemek kubectl
için cmdlet'ini çağırın Install-AzAksCliTool
.
Import-AzAksCredential cmdlet'ini kullanarak Kubernetes kümenize bağlanacak şekilde yapılandırın
kubectl
. Bu komut kimlik bilgilerini indirir ve Kubernetes CLI'yi bunları kullanacak şekilde yapılandırmaktadır.Import-AzAksCredential -ResourceGroupName myResourceGroup -Name myAKSCluster
kubectl get komutunu kullanarak kümenize bağlantıyı doğrulayın. Bu komut, küme düğümlerinin listesini döndürür.
kubectl get nodes
Aşağıdaki örnekte önceki adımlarda oluşturulan tek düğüm gösterilmiştir. Düğüm durumunun Hazır olduğundan emin olun.
NAME STATUS ROLES AGE VERSION aks-nodepool1-11853318-vmss000000 Ready agent 2m26s v1.27.7
Uygulamayı dağıtma
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.
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.
kubectl apply komutunu kullanarak uygulamayı dağıtın ve YAML bildiriminizin adını belirtin.
kubectl apply -f aks-store-quickstart.yaml
Aşağıdaki örnek çıktı dağıtımları ve hizmetleri gösterir:
deployment.apps/rabbitmq created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created
Uygulamayı test etme
Uygulama çalıştırıldığında Kubernetes hizmeti, uygulamanın ön ucunu İnternet'te kullanıma sunar. Bu işlemin tamamlanması birkaç dakika sürebilir.
kubectl get pods komutunu kullanarak dağıtılan podların durumunu denetleyin. Devam etmeden önce tüm podların olmasını
Running
sağlayın.kubectl get pods
Mağaza ön uygulaması için genel IP adresi olup olmadığını denetleyin. bağımsız değişkeniyle kubectl get service komutunu kullanarak ilerleme durumunu
--watch
izleyin.kubectl get service store-front --watch
Hizmetin EXTERNAL-IP çıkışı
store-front
başlangıçta beklemede olarak gösterilir:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4m
EXTERNAL-IP adresi bekleme durumundan gerçek bir genel IP adresine geçtikten
kubectl
sonra izleme işlemini durdurmak için kullanınCTRL-C
.Aşağıdaki örnek çıktıda hizmete atanmış geçerli bir genel IP adresi gösterilmektedir:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5m
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. Remove-AzResourceGroup cmdlet'ini çağırarak kaynak grubunu, kapsayıcı hizmetini ve tüm ilgili kaynakları kaldırın.
Remove-AzResourceGroup -Name myResourceGroup
Not
AKS kümesi, sistem tarafından atanan yönetilen kimlikle oluşturulmuştur (bu hızlı başlangıçta kullanılan varsayılan kimlik seçeneği), kimlik platform tarafından yönetilir ve kaldırılması 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