Cvičení – nasazení aplikace v clusteru Azure Kubernetes Service

Dokončeno

V tomto cvičení nasaďte web vaší společnosti jako testovací aplikaci do služby Azure Kubernetes Service (AKS). Web je statickým webem, který používá základní technologický zásobník HTML, CSS a JavaScriptu. Nepřijímá tolik požadavků jako ostatní služby a poskytuje bezpečný způsob otestování možností nasazení.

Poznámka:

Pokud chcete zdrojový kód prozkoumat podrobněji, je kód webové aplikace k dispozici v tomto úložišti GitHubu. Tato ukázková aplikace se také nasadí jenom ve fondu uzlů s Linuxem.

Důležité

K provedení tohoto cvičení potřebujete vlastní předplatné Azure a mohou se vám účtovat poplatky. Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet, než začnete.

Vytvoření manifestu nasazení

Soubor manifestu nasazení vytváříte za účelem nasazení aplikace. Soubor manifestu vám umožní definovat typ prostředku, který chcete nasadit, a všechny podrobnosti související s touto úlohou.

Kubernetes seskupuje kontejnery do logických struktur nazvaných pody, které nemají žádné inteligentní funkce. Nasazení přidávají chybějící inteligentní funkce pro vytvoření aplikace. Pojďme vytvořit soubor nasazení.

  1. Přihlaste se ke službě Azure Cloud Shell.

  2. Pomocí integrovaného editoru vytvořte v Cloud Shellu soubor manifestu pro nasazení Kubernetes s názvem deployment.yaml.

    touch deployment.yaml
    
  3. V Cloud Shellu otevřete integrovaný editor zadáním code ..

  4. Otevřete soubor deployment.yaml a přidejte následující část kódu YAML.

    # deployment.yaml
    apiVersion: apps/v1 # The API resource where this workload resides
    kind: Deployment # The kind of workload we're creating
    metadata:
      name: contoso-website # This will be the name of the deployment
    

    V tomto kódu jste přidali první dva klíče, které Kubernetes informují o apiVersion a kind manifestu, který vytváříte. name je název nasazení. Použijte ho k identifikaci a dotazování informací o nasazení při použití kubectl.

    Tip

    Další informace o apiVersion a hodnotách, které se mají do tohoto klíče vložit, najdete v oficiální dokumentaci ke Kubernetes. Odkaz najdete na konci tohoto modulu.

  5. Nasazení zabalí pod. Pomocí definice šablony můžete definovat informace podu v souboru manifestu. Šablona je umístěná v souboru manifestu pod oddílem specifikace nasazení.

    Aktualizujte soubor deployment.yaml, aby odpovídal následujícímu souboru YAML.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      template: # This is the template of the pod inside the deployment
        metadata: # Metadata for the pod
          labels:
            app: contoso-website
    

    Pody nepoužívají stejné názvy jako nasazení. Název podu je kombinace názvu nasazení s náhodným ID přidaným na konec.

    Všimněte si použití klíče labels. Klíč labels přidáte, abyste nasazením povolili vyhledat a seskupit pody.

  6. Pod zabalí jeden nebo více kontejnerů. Všechny pody mají oddíl specifikace, který vám umožňuje definovat kontejnery uvnitř daného podu.

    Aktualizujte soubor deployment.yaml, aby odpovídal následujícímu souboru YAML.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      template: # This is the template of the pod inside the deployment
        metadata:
          labels:
            app: contoso-website
        spec:
          containers: # Here we define all containers
            - name: contoso-website
    

    Klíč containers je pole specifikací kontejneru, protože pod může obsahovat jeden nebo více kontejnerů. Specifikace definuje , imagea name, resourcesports, a další důležité informace o kontejneru.

    Všechny spuštěné pody se řídí názvem contoso-website-<UUID>, kde UUID je vygenerované ID k jednoznačné identifikaci všech prostředků.

  7. Je vhodné definovat minimum a maximální množství prostředků, které může aplikace používat z clusteru. K zadání této informace použijte klíč resources.

    Aktualizujte soubor deployment.yaml, aby odpovídal následujícímu souboru YAML.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      template: # This is the template of the pod inside the deployment
        metadata:
          labels:
            app: contoso-website
        spec:
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-website
              name: contoso-website
              resources:
                requests: # Minimum amount of resources requested
                  cpu: 100m
                  memory: 128Mi
                limits: # Maximum amount of resources requested
                  cpu: 250m
                  memory: 256Mi
    

    Všimněte si, že vám oddíl prostředků umožňuje zadat minimální počet prostředků jako požadavek a maximální počet prostředků jako omezení.

  8. Posledním krokem je definování portů, které tento kontejner externě zveřejňuje prostřednictvím ports klíče. Klíč ports je pole objektů, což znamená, že kontejner v podu může zveřejnit několik portů s několika názvy.

    Aktualizujte soubor deployment.yaml, aby odpovídal následujícímu souboru YAML.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      template: # This is the template of the pod inside the deployment
        metadata:
          labels:
            app: contoso-website
        spec:
          nodeSelector:
            kubernetes.io/os: linux
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-website
              name: contoso-website
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
              ports:
                - containerPort: 80 # This container exposes port 80
                  name: http # We named that port "http" so we can refer to it later
    

    Všimněte si, jak pomocí klíče name pojmenujete port. Pojmenování portů vám umožňuje změnit zveřejněný port, aniž byste museli měnit soubory, které na tento port odkazují.

  9. Nakonec přidejte oddíl selektoru, který definuje úlohy, které nasazení spravuje. Klíč selector je umístěný v oddílu specifikace nasazení souboru manifestu. Pomocí klíče matchLabels zobrazte seznam popisků pro všechny pody spravované v nasazení.

    Aktualizujte soubor deployment.yaml, aby odpovídal následujícímu souboru YAML.

    # deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      selector: # Define the wrapping strategy
        matchLabels: # Match all pods with the defined labels
          app: contoso-website # Labels follow the `name: value` template
      template: # This is the template of the pod inside the deployment
        metadata:
          labels:
            app: contoso-website
        spec:
          nodeSelector:
            kubernetes.io/os: linux
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-website
              name: contoso-website
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
              ports:
                - containerPort: 80
                  name: http
    

    Poznámka:

    V clusteru AKS, který má více fondů uzlů (Linux a Windows), soubor manifestu nasazení dříve uvedený také definuje, že nodeSelector cluster AKS má spustit pod ukázkové aplikace na uzlu, který může spouštět kontejnery Linuxu.

    Linuxové uzly nemůžou spouštět kontejnery Windows a naopak.

  10. Soubor manifestu uložte a zavřete editor.

Použití manifestu

  1. Spuštěním příkazu kubectl apply v Cloud Shellu odešlete manifest nasazení do clusteru.

    kubectl apply -f ./deployment.yaml
    

    Výstup tohoto příkazu by měl vypadat zhruba jako v následujícím příkladu.

    deployment.apps/contoso-website created
    
  2. Spusťte příkaz kubectl get deploy a ověřte, jestli bylo nasazení úspěšné.

    kubectl get deploy contoso-website
    

    Výstupem tohoto příkazu by měla být tabulka podobná tabulce v následujícím příkladu.

    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    contoso-website   0/1     1            0           16s
    
  3. Spusťte příkaz kubectl get pods a ověřte, jestli pod běží.

    kubectl get pods
    

    Výstupem tohoto příkazu by měla být tabulka podobná tabulce v následujícím příkladu.

    NAME                               READY   STATUS    RESTARTS   AGE
    contoso-website-7c58c5f699-r79mv   1/1     Running   0          63s