Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure CLI kullanarak bir AKS kümesi dağıtarak AKS için Azure Container Linux (ACL) kullanmaya başlayın.
Bu hızlı başlangıçta şunların nasıl yapılacağını öğreneceksiniz:
- AKS için ACL kullanarak bir AKS kümesi oluşturun.
- Azure CLI kullanarak kümeyi dağıtın.
- Bir perakende senaryosunu simüle eden bir grup mikro hizmet ve web ön ucuyla örnek bir çok kapsayıcılı uygulama çalıştırın.
Note
Bu makale, kümeyi yalnızca değerlendirme amacıyla varsayılan ayarlarla 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.
Important
AKS üzerinde Azure Container Linux (ACL) kullanıyorsanız aşağıdaki önemli noktaları ve sınırlamaları gözden geçirin:
- ACL, AKS v1.34'den itibaren genel olarak kullanılabilir.
- ACL, Güvenli Önyükleme ve vTPM ile Güvenilir Başlatma gerektirir. Güvenilir Olmayan Başlatma değişkenleri kullanılamaz.
- Arm64'te ACL, Güvenilir Başlatma uyumluluğunu etkinleştirmek için Cobalt tabanlı (v6) SKU'lar gerektirir.
-
NodeImageveNonedesteklenen tek işletim sistemi (OS) yükseltme kanallarıdır.UnmanagedveSecurityPatch,/usrdizininin değiştirilemez olması nedeniyle ACL ile uyumsuzdur. - Nesne Akışı desteklenmez.
- Pod Kapsülleme desteklenmez.
- Gizli Sanal Makineler (CVM' ler) desteklenmez.
- 1. nesil VM'ler desteklenmez.
Prerequisites
Bu hızlı başlangıç, Kubernetes kavramlarının temel olarak bilindiğini varsayar. Daha fazla bilgi için Azure Kubernetes Service (AKS) için Kubernetes temel kavramları sayfasına bakınız.
Azure hesabınız yoksa, başlamadan önce ücretsiz hesap oluşturun.
Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz. Azure Cloud Shell'i kullanmaya başlama.
CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI yükleyin. Windows veya macOS üzerinde çalışıyorsanız, Azure CLI'yi bir Docker konteynerinde çalıştırmayı düşünün. Daha fazla bilgi için Azure CLI'nin bir Docker konteynerında nasıl çalıştırılacağını inceleyin.
- Yerel yükleme kullanıyorsanız
az loginkomutunu kullanarak Azure CLI oturum açın. Kimlik doğrulama işlemini tamamlamak için, terminalinizde görüntülenen adımları takip edin. Diğer oturum açma seçenekleri için bkz. Azure CLI kullanarak Azure'da kimlik doğrulaması. - İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma ve yönetme.
- Azure CLI sürüm 2.86.0 veya üzeri gerekir. Yüklü sürümü ve bağımlı kitaplıkları bulmak için
az versionçalıştırın. En son sürüme yükseltmek içinaz upgradeçalıştırın.
- Yerel yükleme kullanıyorsanız
Kümenizi oluşturmak için kullandığınız kimliğin uygun minimum izinlere sahip olduğundan emin olun. AKS için erişim ve kimlik hakkında daha fazla bilgi için Azure Kubernetes Hizmeti (AKS) için erişim ve kimlik seçenekleri başlığını inceleyin.
Birden çok Azure aboneliğiniz varsa,
az account setkomutu kullanılarak kaynakların faturalandırılacağı uygun abonelik kimliğini seçin. Daha fazla bilgi için bkz. Azure aboneliklerini yönetme – Azure CLI .Azure aboneliğinize bağlı olarak, vCPU kota artışı istemeniz gerekebilir. Daha fazla bilgi için bkz. VM ailesi vCPU kotalarını artırma.
Gerekli kaynak sağlayıcılarını kaydetme
Azure aboneliğinize Microsoft.ContainerService gibi gerekli kaynak sağlayıcılarını kaydetmeniz gerekebilir.
Kayıt durumunu denetleme
komutunu kullanarak az provider show kayıt durumunu denetleyin.
az provider show --namespace Microsoft.ContainerService --query registrationState
Kaynak sağlayıcısını kaydetme
Gerekirse, Microsoft.ContainerService komutunu kullanarak az provider register kaynak sağlayıcısını kaydedin.
az provider register --namespace Microsoft.ContainerService
Ortam değişkenlerini tanımlama
Bu hızlı başlangıç boyunca kullanmak üzere aşağıdaki ortam değişkenlerini tanımlayın. İsterseniz değerleri kendi özel adlarınızla değiştirebilirsiniz.
export RESOURCE_GROUP="myAKSResourceGroup"
export REGION="westus"
export CLUSTER_NAME="myAKSCluster"
Bir kaynak grubu oluşturun
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.
az group create komutunu kullanarak bir kaynak grubu oluşturun.
az group create \
--name $RESOURCE_GROUP \
--location $REGION
Örnek çıkış:
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup",
"location": "westus",
"managedBy": null,
"name": "myAKSResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
AKS kümesi oluşturma
az aks create komutunu kullanarak bir AKS kümesi oluşturun. parametresi, --os-sku AzureContainerLinux sistem düğümü havuzunu düğüm işletim sistemi olarak ACL kullanacak şekilde yapılandırıyor. Aşağıdaki örnek, tek düğümlü bir küme oluşturur ve sistem tarafından atanan yönetilen kimliği etkinleştirir:
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--os-sku AzureContainerLinux \
--node-count 1 \
--generate-ssh-keys
Note
Yeni bir küme oluşturduğunuzda AKS, AKS kaynaklarını depolamak için otomatik olarak ikinci bir kaynak grubu oluşturur. Daha fazla bilgi için bkz. AKS ile neden iki kaynak grubu oluşturulur?
Kümeye bağlanma
Bir Kubernetes kümesini yönetmek için, Kubernetes komut satırı istemcisi olan kubectl'i kullanın. Azure Cloud Shell kullanıyorsanız kubectl zaten yüklüdür.
kubectl yerel olarak yüklemek için az aks install-cli komutunu kullanın.
kubectl'yi,az aks get-credentialskomutunu kullanarak Kubernetes kümenize bağlanmak için yapılandırın. Bu komut, kimlik bilgilerini indirir ve Kubernetes CLI'yi bunları kullanacak şekilde yapılandırır.az aks get-credentials \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAMEKümelenize olan bağlantınızı
kubectl getkomutunu kullanarak doğrulayın. Bu komut, küme düğümlerinin bir listesini döndürür.kubectl get nodes
Uygulamayı dağıt
Uygulamayı dağıtmak için bir bildirim dosyası kullanarak AKS Store uygulamasını çalıştırmak için gereken tüm nesneleri oluşturursunuz. 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.
-
RabbitMQ: Bir sipariş kuyruğu için ileti kuyruğu.
Note
Üretim için kalıcı depolama olmadan RabbitMQ gibi durum bilgisi olan kapsayıcıları çalıştırmanızı önermiyoruz. Kolaylık sağlamak için burada kullanırız, ancak Azure Cosmos DB veya Azure Service Bus gibi yönetilen hizmetleri kullanmanızı öneririz.
aks-store-quickstart.yaml adlı bir dosya oluşturun ve aşağıdaki bildirimde kopyalayın:
apiVersion: apps/v1 kind: StatefulSet metadata: name: rabbitmq spec: serviceName: rabbitmq 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 startupProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 20 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 3000 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 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 env: - name: AI_SERVICE_URL value: "http://ai-service:5001/" resources: requests: cpu: 1m memory: 1Mi limits: cpu: 2m memory: 20Mi readinessProbe: httpGet: path: /health port: 3002 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3002 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- 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 startupProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 5 periodSeconds: 5 readinessProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 3 livenessProbe: httpGet: path: /health port: 8080 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerYAML manifest dosyalarının detayları için, Dağıtımlar ve YAML manifestleri sayfasına bakın.
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ı Cloud Shell'deki varsayılan dizininize yükleyebilirsiniz.
komutunu kullanarak uygulamayı dağıtın
kubectl applyve YAML bildiriminizin adını belirtin.kubectl apply -f aks-store-quickstart.yamlAş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 et
Uygulama çalıştığında, bir Kubernetes hizmeti uygulamanın ön yüzünü internete açar. Bu işlemin tamamlanması birkaç dakika sürebilir.
komutunu kullanarak
kubectl get podsdağıtılan podların durumunu denetleyin. Devam etmeden önce tüm podlarınRunningolduğundan emin olun.kubectl get podsUygulamanın genel IP adresini
store-frontdenetleyin.kubectl get servicekomutunu--watchargümanıyla kullanarak ilerleme durumunu izleyin.kubectl get service store-front --watchHizmetin EXTERNAL-IP çıkışı
store-frontbaş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 4h4mEXTERNAL-IP adresi pending'den gerçek bir halka açık IP adresine değiştiğinde,
CTRL-Cizleme işlemini durdurmak içinkubectlkullanın.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 4h5mAzure Store uygulamasının çalıştığını görmek için hizmetinizin dış IP adresine bir web tarayıcısı açın.
Kümeyi sil
AKS öğreticisini incelemeyi planlamıyorsanız, Azure faturalama ücretlerinden kaçınmak için gereksiz kaynakları temizleyin.
komutunu kullanarak az group delete kaynak grubunu, kapsayıcı hizmetini ve tüm ilgili kaynakları kaldırın.
az group delete --name $RESOURCE_GROUP
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.
İlgili içerik
Bu hızlı başlangıçta, Azure CLI kullanarak AKS için ACL ile bir AKS kümesi dağıttınız. AKS için ACL hakkında daha fazla bilgi edinmek için Azure Kubernetes Service (AKS) için Azure Container Linux (ACL) konusuna bakın.