Gyorsindítás: Azure Kubernetes Service (AKS) fürt telepítése Flatcar Container Linux for AKS használatával (előzetes verzió) az Azure CLI-ben

Üzembe helyezés az Azure-ban

Az Azure Kubernetes Service (AKS) egy felügyelt Kubernetes-szolgáltatás, amely lehetővé teszi a fürtök gyors üzembe helyezését és kezelését. Ezen rövid útmutató segítségével megtanulhatja a következőket:

  • Hozzon létre egy AKS-fürtöt Flatcar Container Linux for AKS használatával (előzetes).
  • AKS-fürt üzembe helyezése az Azure CLI használatával.
  • Futtasson egy többtárolós mintaalkalmazást mikroszolgáltatások és webes kezelőfelületek egy csoportjával, amely egy kiskereskedelmi forgatókönyvet szimulál.

Megjegyzés:

Ez a cikk egy olyan fürt üzembe helyezésének lépéseit tartalmazza, amely csak kiértékelési célokra használja az alapértelmezett beállításokat. Az éles üzemre kész fürtök üzembe helyezése előtt javasoljuk, hogy ismerkedjen meg az alapszintű referenciaarchitektúrával , és gondolja át, hogyan igazodik az üzleti követelményekhez.

Mielőtt hozzákezdene

A rövid útmutató feltételezi, hogy rendelkezik a Kubernetes használatára vonatkozó alapvető ismeretekkel. További információkért tekintse meg az Azure Kubernetes Service (AKS) Kubernetes alapfogalmait.

  • Ha nem rendelkezik Azure-fiókkal, a kezdés előtt hozzon létre egy ingyenes fiókot .
  • Győződjön meg arról, hogy az identitás, amit a klaszter létrehozásához használ, rendelkezik a szükséges minimális jogosultságokkal. Az AKS-hez való hozzáféréssel és identitással kapcsolatos további információkért lásd az Azure Kubernetes Service (AKS) hozzáférési és identitásbeállításait.
  • Ha több Azure-előfizetéssel rendelkezik, válassza ki a megfelelő előfizetés-azonosítót, amelyben az erőforrásokat a az account set paranccsal kell számlázni. További információ: Azure-előfizetések kezelése – Azure CLI.
  • Az Azure-előfizetésétől függően előfordulhat, hogy vCPU-kvótanövelést kell kérnie. További információ: VM-családi vCPU-kvóták növelése.

Erőforrás-szolgáltatók regisztrálása

Előfordulhat, hogy erőforrás-szolgáltatókat kell regisztrálnia az Azure-előfizetésében. Például szükség van a Microsoft.ContainerService-re.

Ellenőrizze a regisztrációs állapotot a az provider show paranccsal.

az provider show --namespace Microsoft.ContainerService --query registrationState

Szükség esetén regisztrálja az erőforrás-szolgáltatót az az provider register paranccsal.

az provider register --namespace Microsoft.ContainerService

Bővítmény telepítése aks-preview

Fontos

Az AKS előzetes verziójú funkciói önkiszolgáló, opt-in alapon érhetők el. Az előzetes verziókat "ahogy van" és "rendelkezésre állóként" biztosítjuk, és a szolgáltatási szerződésekből és a korlátozott jótállásból kizárjuk őket. Az AKS előzetes verzióihoz részleges támogatást nyújt az ügyfélszolgálat a tőle telhető legjobb módon. Ezért ezek a funkciók nem éles használatra vannak szánva. További információkért tekintse meg az alábbi támogatási cikkeket:

  1. Telepítse az aks-preview Azure CLI-bővítményt a az extension add paranccsal.

    az extension add --name aks-preview
    
  2. Frissítsen a bővítmény legújabb verziójára a az extension update paranccsal. A Flatcar Container Linuxhoz legalább 18.0.0b42 szükséges.

    az extension update --name aks-preview
    

Funkciójelző regisztrálása AKSFlatcarPreview

  1. Regisztrálja a AKSFlatcarPreview funkciójelzőt a az feature register paranccsal.

    az feature register --namespace "Microsoft.ContainerService" --name "AKSFlatcarPreview"
    
  2. Ellenőrizze a regisztrációs állapotot a az feature show paranccsal. Néhány percig tart, amíg az állapot megjelenik a Regisztrált állapotban.

    az feature show --namespace Microsoft.ContainerService --name AKSFlatcarPreview
    
  3. Ha az állapot a Regisztrált állapotot tükrözi, frissítse a Microsoft.ContainerService erőforrás-szolgáltató regisztrációját a az provider register paranccsal.

    az provider register --namespace Microsoft.ContainerService
    

Környezeti változók definiálása

  • Adja meg a következő környezeti változókat a rövid útmutatóban való használathoz:
export RANDOM_ID="$(openssl rand -hex 3)"
export MY_RESOURCE_GROUP_NAME="myAKSResourceGroup$RANDOM_ID"
export REGION="westus"
export MY_AKS_CLUSTER_NAME="myAKSCluster$RANDOM_ID"

A RANDOM_ID változó értéke egy hat karakterből álló alfanumerikus érték, amely hozzá van fűzve az erőforráscsoporthoz és a fürt nevéhez, hogy a nevek egyediek legyenek. Az echo parancs használatával megtekintheti a változóértékeket, mint a echo $RANDOM_ID.

Erőforráscsoport létrehozása

Az Azure-erőforráscsoportok olyan logikai csoportok, amelyekben az Azure-erőforrások üzembe helyezése és kezelése történik. Erőforráscsoport létrehozásakor a rendszer kérni fogja, hogy adjon meg egy helyet. Ez a hely az erőforráscsoport metaadatainak tárolási helye, és ahol az erőforrások az Azure-ban futnak, ha nem ad meg egy másik régiót az erőforrás létrehozása során.

az group create \
  --name $MY_RESOURCE_GROUP_NAME \
  --location $REGION

A kimenet példája:

{
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup<randomIDValue>",
  "location": "westus",
  "managedBy": null,
  "name": "myAKSResourceGroup<randomIDValue>",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

AKS-fürt létrehozása

  • Hozzon létre egy AKS-cluster-t a az aks create paranccsal. Az alábbi példa egy egy csomóponttal rendelkező fürtöt hoz létre, és engedélyezi a rendszer által hozzárendelt felügyelt identitást:
az aks create \
  --resource-group $MY_RESOURCE_GROUP_NAME \
  --name $MY_AKS_CLUSTER_NAME \
  --os-sku flatcar \
  --node-count 1 \
  --generate-ssh-keys

Megjegyzés:

Új fürt létrehozásakor az AKS automatikusan létrehoz egy második erőforráscsoportot az AKS-erőforrások tárolásához. További információ: Miért jön létre két erőforráscsoport az AKS-sel?

Csatlakozzon a klaszterhez

A Kubernetes-fürt kezeléséhez használja a Kubernetes parancssori klienst, a kubectl-t. kubectl már telepítve van az Azure Cloud Shell használata esetén. A kubectl helyi telepítéséhez használja a az aks install-cli parancsot.

  1. Konfigurálja a kubectl-t, hogy a az aks get-credentials paranccsal csatlakozhasson a Kubernetes klaszterhez. Ez a parancs letölti a hitelesítő adatokat, és konfigurálja a Kubernetes parancssori felületét a használatukhoz.

    az aks get-credentials \
      --resource-group $MY_RESOURCE_GROUP_NAME \
      --name $MY_AKS_CLUSTER_NAME
    
  2. Ellenőrizze a klaszterhez való kapcsolatot a kubectl get paranccsal. Ez a parancs a fürtcsomópontok listáját adja vissza.

    kubectl get nodes
    

Az alkalmazás üzembe helyezése

Az alkalmazás üzembe helyezéséhez egy jegyzékfájl használatával hozza létre az AKS Store-alkalmazás futtatásához szükséges összes objektumot. Egy Kubernetes-manifeszt fájl meghatározza a fürt elvárt állapotát, például hogy mely konténerképeket kell futtatni. A manifest a következő Kubernetes üzembe helyezéseket és szolgáltatásokat tartalmazza:

Képernyőkép az Azure Store mintaarchitektúrájáról.

  • Áruházi előtér: Webalkalmazás az ügyfelek számára termékek megtekintésére és megrendelések leadására.
  • Termékszolgáltatás: A termékinformációkat jeleníti meg.
  • Rendelési szolgáltatás: Rendeléseket rendel.
  • RabbitMQ: Üzenetsor egy rendelési sorhoz.

Megjegyzés:

Nem javasoljuk, hogy állapotalapú tárolókat futtasson, például RabbitMQállandó tárolás nélkül éles környezetben. Itt az egyszerűség kedvéért használjuk, de azt javasoljuk, hogy felügyelt szolgáltatásokat használjon, például az Azure Cosmos DB-t vagy az Azure Service Bust.

  1. Hozzon létre egy aks-store-quickstart.yaml nevű fájlt, és másolja a következő jegyzékbe.

    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: LoadBalancer
    

    A YAML-jegyzékfájlok lebontásához tekintse meg az üzembe helyezéseket és a YAML-jegyzékeket.

    Ha helyileg hozza létre és menti a YAML-fájlt, akkor feltöltheti a jegyzékfájlt az alapértelmezett könyvtárba a Cloud Shellben a Fájlok feltöltése/letöltése gombra kattintva, majd kiválasztva a fájlt a helyi fájlrendszerből.

  2. Telepítse az alkalmazást a kubectl apply paranccsal, és adja meg a YAML-jegyzék nevét.

    kubectl apply -f aks-store-quickstart.yaml
    

    Az alábbi példakimenet az üzembe helyezéseket és szolgáltatásokat mutatja be.

    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
    

Az alkalmazás tesztelése

Az alkalmazás futtatásakor egy Kubernetes-szolgáltatás elérhetővé teszi az alkalmazás előtérét az interneten. A folyamat eltarthat pár percig.

  1. Ellenőrizze az üzembe helyezett podok állapotát a kubectl get pods paranccsal. Győződjön meg arról, hogy az összes pod Running, mielőtt folytatja.

    kubectl get pods
    
  2. Ellenőrizze, hogy van-e nyilvános IP-cím az store-front alkalmazáshoz. A folyamat figyelése az kubectl get service argumentumot tartalmazó paranccsal --watch .

    kubectl get service store-front --watch
    

    EXTERNAL-IP kimenet a store-front szolgáltatáshoz kezdetben függőben jelenik meg:

    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   <pending>     80:30025/TCP   4h4m
    

    Ha a külső IP-cím függőben lévőrőltényleges nyilvános IP-címre változik, állítsa CTRL-C le a kubectl figyelés folyamatát.

    Az alábbi példakimenet a szolgáltatáshoz rendelt érvényes nyilvános IP-címet jeleníti meg:

    NAME          TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)        AGE
    store-front   LoadBalancer   10.0.100.10   20.62.159.19   80:30025/TCP   4h5m
    
  3. Nyisson meg egy webböngészőt a szolgáltatás külső IP-címére az Azure Store-alkalmazás működés közbeni megtekintéséhez.

    Képernyőkép az AKS Store mintaalkalmazásról.

Fürt törlése

Ha nem tervezi végigvezetni az AKS-oktatóanyagot, törölje a felesleges erőforrásokat az Azure számlázási költségeinek elkerülése érdekében.

  • Távolítsa el az erőforráscsoportot, a tárolószolgáltatást és az összes kapcsolódó erőforrást a az group delete parancs használatával.

    az group delete --name $MY_RESOURCE_GROUP_NAME
    

    Az AKS-fürt egy rendszer által hozzárendelt felügyelt identitással lett létrehozva, amely az ebben a gyorsútmutatóban használt alapértelmezett identitásbeállítás. A platform kezeli ezt az identitást, így önnek nem kell manuálisan eltávolítania.

Következő lépések

Ebben a gyors kezdőlépésben üzembe helyezett egy Kubernetes-fürtöt, majd üzembe helyezett egy egyszerű, többkonténeres alkalmazást. Ez a mintaalkalmazás csak bemutató célokra készült, és nem képviseli a Kubernetes-alkalmazások ajánlott eljárásait. Az AKS teljes körű megoldások éles környezetben való létrehozására vonatkozó útmutatót az AKS megoldási útmutató tartalmaz.

Ha többet szeretne megtudni az AKS-ről, és elvégez egy teljes kód–üzembe helyezési példát, folytassa a Kubernetes-fürt oktatóanyagával.