Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här snabbstarten använder du Azure CLI för att skapa ett Azure Kubernetes Service (AKS) kluster som kör Azure Container Linux (ACL) som nodoperativsystem (OS). När du har distribuerat klustret ansluter du till det med hjälp av kubectl och kontrollerar att ACL-noderna körs som förväntat.
Överväganden och begränsningar
Innan du börjar bör du granska följande överväganden och begränsningar för ACL:
- ACL är allmänt tillgängligt från och med AKS v1.34.
- ACL kräver betrodd start med säker start och vTPM. Icke-betrodda startvarianter är inte tillgängliga.
- ACL på Arm64 kräver Cobalt-baserade SKU:er (v6) för kompatibilitet med Trusted Launch.
-
NodeImageochNoneär de enda operativsystemuppgraderingskanalerna som stöds.UnmanagedochSecurityPatchär inte kompatibla med ACL på grund av den oföränderliga/usrkatalogen. - Streaming av artefakter stöds inte.
- Poddsandboxning stöds inte.
- Konfidentiella virtuella datorer stöds inte.
- Virtuella datorer i generation 1 stöds inte.
Förutsättningar
Note
Du kan använda antingen Azure Cloud Shell eller en lokal installation av Azure CLI för att köra kommandona i den här snabbstarten.
- Om du kör Azure CLI lokalt installera Azure CLI. Om du kör på Windows eller macOS, överväg att köra Azure CLI i en Docker-container. För mer information, se Hur man kör Azure CLI i en Docker-container.
- Om du använder en lokal installation loggar du in på Azure CLI med kommandot
az login. För att avsluta autentiseringsprocessen, följ stegen som visas i din terminal. Andra inloggningsalternativ finns i Logga in med Azure CLI. - Om du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
- Använd kommandot
az versionför att hitta Azure CLI version och beroende bibliotek som är installerade. Azure Container Linux kräver Azure CLI version 2.86.0 eller senare. Om du vill uppgradera till den senaste versionen använder duaz upgradekommandot . - Om det behövs registrera Microsoft. ContainerService-resursprovider i din Azure-prenumeration.
Registrera Microsoft. ContainerService-resursprovider
Du kan behöva registrera resursprovidrar i din Azure-prenumeration. Kontrollera registreringsstatusen az provider show med kommandot .
az provider show --namespace Microsoft.ContainerService --query registrationState
Om det behövs registrerar du resursprovidern med kommandot az provider register .
az provider register --namespace Microsoft.ContainerService
Skapa en resursgrupp
En Azure-resursgrupp är en logisk grupp där Azure-resurser distribueras och hanteras. När du skapar en resursgrupp måste du ange en plats. Den här platsen är:
- Lagringsplatsen för dina resursgruppsmetadata.
- Var dina resurser ska köras i Azure om du inte anger någon annan region när du skapar en resurs.
Skapa en resursgrupp med kommandot az group create. I följande exempel anges miljövariabler för resursgruppens namn, region och AKS-klusternamn och skapar sedan en resursgrupp på den angivna platsen. Du kan ersätta miljövariablernas värden med dina egna önskade namn och din region.
export MY_RESOURCE_GROUP_NAME="myACLResourceGroup"
export REGION="westus"
export MY_AKS_CLUSTER_NAME="myACLCluster"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
Exempel på utdata:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myACLResourceGroup",
"location": "westus",
"managedBy": null,
"name": "myACLResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Skapa ett ACL-kluster
Skapa ett AKS-kluster med kommandot az aks create med parametern --os-sku AzureContainerLinux för att etablera AKS-klustret med en ACL-avbildning.
az aks create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_AKS_CLUSTER_NAME \
--os-sku AzureContainerLinux \
--node-count 3 \
--generate-ssh-keys
Efter några minuter slutförs kommandot och returnerar JSON-formaterad information om klustret.
Anslut till klustret
Om du vill hantera ett Kubernetes-kluster använder du Kubernetes kommandoradsklient, kubectl.
kubectl är redan installerat om du använder Azure Cloud Shell. Om du vill installera kubectl lokalt använder du kommandot az aks install-cli.
Konfigurera
kubectlför att ansluta till kubernetes-klustret med hjälp avaz aks get-credentialskommandot . Det här kommandot laddar ned autentiseringsuppgifter och konfigurerar Kubernetes CLI för att använda dem.az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER_NAMEKontrollera anslutningen till klustret med hjälp av
kubectl getkommandot . Det här kommandot returnerar en lista över klusternoderna.kubectl get nodes
Distribuera programmet
För att distribuera programmet använder du en manifestfil för att skapa alla objekt som krävs för att köra AKS Store-programmet. En Kubernetes-manifestfil definierar ett klusters önskade tillstånd, till exempel vilka containeravbildningar som ska köras. Manifestet innehåller följande Kubernetes-distributioner och -tjänster:
- Butiksfront: Webbprogram där kunder kan visa produkter och göra beställningar.
- Produkttjänst: Visar produktinformation.
- Ordertjänst: Gör beställningar.
- Rabbit MQ: Meddelandekö för en beställningskö.
Note
Vi rekommenderar inte att du kör tillståndskänsliga containrar, till exempel RabbitMQ, utan beständig lagring för produktion. Dessa används här för enkelhetens skull, men vi rekommenderar att du använder hanterade tjänster, till exempel Azure Cosmos DB eller Azure Service Bus.
Skapa en fil med namnet
aks-store-quickstart.yamloch kopiera i följande manifest: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 --- 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: LoadBalancerDistribuera programmet med kommandot
kubectl applyoch ange namnet på ditt YAML-manifest.kubectl apply -f aks-store-quickstart.yaml
Testa programmet
Du kan kontrollera att programmet körs genom att besöka den offentliga IP-adressen eller program-URL:en.
Hämta program-URL:en med hjälp av följande kommandon:
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: $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
echo "http://$IP_ADDRESS"
Ta bort klustret
Om du inte planerar att gå igenom självstudierna, rensa bort onödiga resurser för att undvika Azure-kostnader.
Ta bort resursgruppen, containertjänsten och alla relaterade resurser med kommandot az group delete .
az group delete --name $MY_RESOURCE_GROUP_NAME --yes --no-wait
Relaterat innehåll
Mer information om ACL för AKS finns i Vad är Azure Container Linux (ACL) för Azure Kubernetes Service (AKS)?