Ćwiczenie — wdrażanie aplikacji w klastrze usługi Azure Kubernetes Service

Ukończone

W tym ćwiczeniu wdróż witrynę internetową firmy jako aplikację testową w usłudze Azure Kubernetes Service (AKS). Witryna to statyczna witryna internetowa z podstawowym stosem technologii HTML, CSS i JavaScript. Nie otrzymuje ona tylu żądań co inne usługi i umożliwia bezpieczne testowanie opcji wdrażania.

Uwaga

Kod aplikacji internetowej jest dostępny w tym repozytorium GitHub, jeśli chcesz go dodatkowo eksplorować. Ponadto ta przykładowa aplikacja zostanie wdrożona tylko w puli węzłów systemu Linux.

Ważne

Do wykonania tego ćwiczenia potrzebna jest własna subskrypcja platformy Azure. Ponadto mogą zostać naliczone opłaty. Jeśli nie masz jeszcze subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Tworzenie manifestu wdrożenia

Tworzysz plik manifestu wdrożenia w celu wdrożenia aplikacji. Plik manifestu umożliwia określenie typu zasobu, który ma zostać wdrożony, oraz wszystkich szczegółów skojarzonych z obciążeniem.

Platforma Kubernetes grupuje kontenery w strukturach logicznych nazywanych zasobnikami, które nie mają funkcji inteligentnych. Wdrożenia dodają brakujące funkcje inteligentne, aby utworzyć aplikację. Utwórzmy plik wdrożenia.

  1. Zaloguj się do usługi Azure Cloud Shell.

  2. W usłudze Cloud Shell utwórz plik manifestu dla wdrożenia platformy Kubernetes o nazwie deployment.yaml przy użyciu zintegrowanego edytora.

    touch deployment.yaml
    
  3. Otwórz edytor zintegrowany w usłudze Cloud Shell, wprowadzając polecenie code .

  4. Otwórz plik deployment.yaml i dodaj następującą sekcję kodu 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
    

    W tym kodzie dodano dwa pierwsze klucze, aby poinformować platformę Kubernetes o elementach apiVersion i kind tworzonego manifestu. name to nazwa wdrożenia. Służy do identyfikowania i wykonywania zapytań dotyczących informacji dotyczących wdrożenia podczas korzystania z programu kubectl.

    Napiwek

    Więcej informacji na temat klucza apiVersion i tego, jakie wartości należy w nim umieścić, można znaleźć w oficjalnej dokumentacji platformy Kubernetes. Odpowiedni link znajduje się na końcu tego modułu.

  5. Wdrożenie opakowuje zasobnik. Definicja szablonu służy do określania informacji o zasobniku w pliku manifestu. Szablon znajduje się w pliku manifestu poniżej sekcji specyfikacji wdrożenia.

    Zaktualizuj plik deployment.yaml, aby był zgodny z poniższym kodem 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
    

    Zasobniki nie używają tych samych nazw co wdrożenia. Nazwa zasobnika jest kombinacją nazwy wdrożenia z losowym identyfikatorem dodanym na końcu.

    Zwróć uwagę na użycie klucza labels. Należy dodać klucz labels, aby umożliwić wdrożeniom znajdowanie i grupowanie zasobników.

  6. Zasobnik opakowuje jeden lub więcej kontenerów. Wszystkie zasobniki mają sekcję specyfikacji, w której można zdefiniować kontenery wewnątrz tego zasobnika.

    Zaktualizuj plik deployment.yaml, aby był zgodny z poniższym kodem 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
    

    Klucz containers jest tablicą specyfikacji kontenera, ponieważ zasobnik może zawierać jeden lub więcej kontenerów. Specyfikacja definiuje image, , name, resources, portsi inne ważne informacje o kontenerze.

    Wszystkie uruchomione zasobniki mają nazwę contoso-website-<UUID>, gdzie UUID jest wygenerowanym identyfikatorem w celu unikatowego zidentyfikowania wszystkich zasobów.

  7. Dobrym rozwiązaniem jest zdefiniowanie minimalnej i maksymalnej ilości zasobów, z których aplikacja może korzystać z klastra. Aby określić te informacje, należy użyć klucza resources.

    Zaktualizuj plik deployment.yaml, aby był zgodny z poniższym kodem 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
    

    Zwróć uwagę, jak sekcja zasobu pozwala określić minimalną ilość zasobów jako żądanie oraz maksymalną ilość zasobów jako limit.

  8. Ostatnim krokiem jest zdefiniowanie portów, które ten kontener uwidacznia zewnętrznie za pośrednictwem ports klucza. Klucz ports jest tablicą obiektów, co oznacza, że kontener w zasobniku może uwidaczniać wiele portów z wieloma nazwami.

    Zaktualizuj plik deployment.yaml, aby był zgodny z poniższym kodem 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
    

    Zwróć uwagę, jaką nazwę nadajesz portowi przy użyciu klucza name. Nazwy portów umożliwiają zmianę uwidocznionego portu bez zmiany plików, które odwołują się do tego portu.

  9. Na koniec dodaj sekcję selektora, aby zdefiniować obciążenia, którymi zarządza wdrożenie. Klucz selector znajduje się w sekcji specyfikacji wdrożenia w pliku manifestu. Użyj klucza matchLabels, aby wyświetlić listę etykiet wszystkich zasobników zarządzanych przez wdrożenie.

    Zaktualizuj plik deployment.yaml, aby był zgodny z poniższym kodem 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
    

    Uwaga

    W klastrze usługi AKS, który ma wiele pul węzłów (Linux i Windows), wcześniej wymieniony plik manifestu wdrożenia definiuje również polecenie nodeSelector , aby poinformować klaster usługi AKS o uruchamianiu zasobnika przykładowej aplikacji w węźle, który może uruchamiać kontenery systemu Linux.

    Węzły systemu Linux nie mogą uruchamiać kontenerów systemu Windows i na odwrót.

  10. Zapisz plik manifestu i zamknij edytor.

Stosowanie manifestu

  1. W usłudze Cloud Shell uruchom polecenie kubectl apply w celu przesłania manifestu wdrożenia do klastra.

    kubectl apply -f ./deployment.yaml
    

    Polecenie powinno wyprowadzić wynik podobny do poniższego przykładu.

    deployment.apps/contoso-website created
    
  2. Uruchom polecenie kubectl get deploy, aby sprawdzić, czy wdrożenie zakończyło się pomyślnie.

    kubectl get deploy contoso-website
    

    Polecenie powinno wyprowadzić tabelę podobną do poniższego przykładu.

    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    contoso-website   0/1     1            0           16s
    
  3. Uruchom polecenie kubectl get pods, aby sprawdzić, czy zasobnik jest uruchomiony.

    kubectl get pods
    

    Polecenie powinno wyprowadzić tabelę podobną do poniższego przykładu.

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