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 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 şunları yapmayı öğrenirsiniz:
- Azure CLI kullanarak varsayılan ayarlarla bir AKS kümesi dağıtma.
- Örnek bir çok kapsayıcılı uygulamayı, perakende senaryosunu simüle eden bir grup mikro hizmetler ve web ön uçlarıyla dağıtın.
Note
Bu makale, kümeyi yalnızca değerlendirme amacıyla 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.
Yalnızca bir Azure Kubernetes Service kümesi dağıtmak istiyorsanız, Tarayıcınızı Azure portalında açmak için Azure'a Dağıt'ı seçin ve Tüm adımları çalıştır'ı seçin.
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 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 referans komutlarını yerel olarak çalıştırmayı tercih ediyorsanız, Azure CLI'yi 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 bir kurulum kullanıyorsanız, az login komutunu kullanarak Azure CLI'ye giriş yapı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.
Yüklü olan sürümü ve bağımlı kütüphaneleri bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.
- 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 fazla Azure aboneliğiniz varsa, kaynakların faturalandırılacağı abonelik kimliğini belirlemek için az account set komutunu kullanarak uygun aboneliği 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.
Kaynak sağlayıcılarını kaydetme
Kaynak sağlayıcılarını Azure aboneliğinize kaydetmeniz gerekebilir. Örneğin, Microsoft.ContainerService gereklidir.
Kayıt durumunu denetlemek için aşağıdaki komutu çalıştırın.
az provider show --namespace Microsoft.ContainerService --query registrationState
Gerekirse 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.
export RANDOM_STRING=$(printf '%05d%05d' "$RANDOM" "$RANDOM")
export RESOURCE_GROUP="myAKSResourceGroup$RANDOM_STRING"
export CLUSTER_NAME="myAKSCluster$RANDOM_STRING"
export USER_NP='userpool1'
export LOCATION="westus"
RANDOM_STRING değişkeni rastgele 10 basamaklı bir dize depolar.
RESOURCE_GROUP ve CLUSTER_NAME değişken değerleri, benzersiz adlar oluşturmak için RANDOM_STRING değeriyle birleştirilir. kullanıcı USER_NP modu düğüm havuzu için bir ad depolar.
LOCATION değişkeni westus2 değerine sahiptir. Bu değişken değerlerini kullanabilir veya kendi değerlerinizi oluşturabilirsiniz.
echo gibi echo $RANDOM_STRINGdeğişken değerlerini görüntülemek için komutunu kullanın.
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 $LOCATION
Sonuç aşağıdaki örneğe benzer.
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup<randomStringValue>",
"location": "westus",
"managedBy": null,
"name": "myAKSResourceGroup<randomStringValue>",
"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 . 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 \
--node-count 1 \
--generate-ssh-keys
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?
Bu örnekteki küme, zamandan ve kaynaklardan tasarruf etmek için bir düğüm sayısını belirtir. Üretim ortamında öneri üç veya daha fazla düğümden oluşan bir düğüm sayısıdır. Bir az aks create düğüm sayısı belirtmezseniz varsayılan olarak üç düğüm olur.
Kullanıcı modu düğüm havuzu ekleme
Uygulamalar, varsayılan sistem modu düğüm havuzu yerine kullanıcı modu düğüm havuzlarında çalıştırılmalıdır. Kullanıcı düğümü havuzları, uygulama iş yükleri için daha iyi yalıtım ve esneklik sağlar. az aks nodepool add komutunu kullanarak kümenize bir kullanıcı düğümü havuzu ekleyin.
az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name $USER_NP \
--node-count 1 \
--mode User
Kümede olduğu gibi bir düğüm belirttik, ancak bir düğüm sayısı belirtmezseniz varsayılan değer üç düğümdür.
Kullanıcı düğümü havuzu oluşturulduktan sonra az aks nodepool list komutunu kullanarak kümenizin bir sistem düğümü havuzuna ve kullanıcı düğümü havuzuna sahip olduğunu doğrulayabilirsiniz.
az aks nodepool list \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--query "[].{Count:count, Mode:mode, NodePool:name, ResourceGroup:resourceGroup}"
[
{
"Count": 1,
"Mode": "System",
"NodePool": "nodepool1",
"ResourceGroup": "myAKSResourceGroup1234554321"
},
{
"Count": 1,
"Mode": "User",
"NodePool": "userpool1",
"ResourceGroup": "myAKSResourceGroup1234554321"
}
]
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'u, az aks get-credentials komutunu kullanarak Kubernetes kümenize bağlanacak şekilde 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_NAMEkubectl get komutunu kullanarak kümenize bağlantıyı doğrulayın. Bu komut, küme düğümlerinin bir listesini döndürür.
kubectl get nodesNAME STATUS ROLES AGE VERSION aks-nodepool1-123456789-vmss000000 Ready <none> 15m v1.34.4 aks-userpool1-123456789-vmss000000 Ready <none> 5m36s v1.34.4kümeyle oluşturulan sistem düğümü havuzu ve
nodepool1kümeye eklenen kullanıcı düğümü havuzu olmak üzere ikiuserpool1düğüm vardır.
Uygulamayı dağıt
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.
-
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. İki
<defaultPassword>yer tutucuyu kendi parolanızla değiştirin. Bu parola, örneğin varsayılan kullanıcısıRabbitMQiçin kullanılır.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 kubernetes.azure.com/mode: user 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: "<defaultPassword>" 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 kubernetes.azure.com/mode: user 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: "<defaultPassword>" - 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 kubernetes.azure.com/mode: user 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 kubernetes.azure.com/mode: user 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.
kubectl apply komutunu kullanarak uygulamayı dağıtın ve YAML bildiriminizin adını belirtin.
kubectl apply -f aks-store-quickstart.yamlUygulamanın bir kullanıcı düğümü havuzuna dağıtıldığından emin olmak için aşağıdaki komutu çalıştırın.
kubectl get pods -o wideÇıktıda rabbitmq, order-service, product-service ve store-front pod'larının, kullanıcı düğüm havuzundaki bir düğüm üzerinde çalıştığı gösterilecektir.
Uygulamayı test et
Genel IP adresini veya uygulama URL'sini ziyaret ederek uygulamanın çalıştığını doğrulayabilirsiniz.
Uygulama URL'sini görüntülemek için aşağıdaki komutları çalıştırın:
runtime="5 minutes"
endtime=$(date -ud "$runtime" +%s)
while [[ $(date -u +%s) -le $endtime ]]
do
STATUS=$(kubectl get pods -l app=store-front -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}')
echo $STATUS
if [ "$STATUS" == 'True' ]
then
export IP_ADDRESS=$(kubectl get service store-front --output 'jsonpath={..status.loadBalancer.ingress[0].ip}')
echo "service IP address: $IP_ADDRESS"
break
else
sleep 10
fi
done
Çıktı, <applicationIPAddress> yer tutucuda uygulamanın genel IP adresini gösterir. Sonraki adımlarda uygulamayı görüntülemek için bu IP adresini kullanırsınız.
service IP Address: <applicationIPAddress>
Uygulama URL'sine istek göndermek için aşağıdaki komutu çalıştırın.
<applicationIPAddress> değerini hizmet IP Adresi ile değiştirin.
curl <applicationIPAddress>
komutu, uygulamanın isteğe yanıt verdiğini gösteren HTML çıkışını döndürür.
<!doctype html>
<html lang="">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Contoso Pet Store</title>
<script type="module" crossorigin src="/assets/index-CLiaTzSi.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Cv6jORyk.css">
</head>
<body>
<div id="app"></div>
</body>
</html>
Uygulama web sitesini görüntülemek için bir tarayıcı açın ve hizmet IP adresini girin. Sayfa aşağıdaki örneğe benzer.
Kümeyi sil
AKS öğreticisini yapmayı planlamıyorsanız, Azure faturalama ücretlerinden kaçınmak için gereksiz kaynakları temizleyin. az group delete komutunu kullanarak kaynak grubunu, kapsayıcı hizmetini ve tüm ilgili kaynakları kaldırabilirsiniz.
az group delete --name $RESOURCE_GROUP --no-wait --yes
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ümler oluşturma hakkında yönergeler için bkz. AKS çözüm kılavuzu.
AKS ile ilgili daha fazla bilgi edinmek ve tam bir koddan dağıtıma örnek uygulamak için Kubernetes kümesi kılavuzuna geçin.