Ćwiczenie — wdrażanie aplikacji w klastrze usługi Azure Kubernetes Service
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 dokładniej zapoznać się z kodem źródłowym. 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 i może zostać naliczona opłata. 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.
Zaloguj się do usługi Azure Cloud Shell.
W usłudze Cloud Shell utwórz plik manifestu dla wdrożenia platformy Kubernetes o nazwie
deployment.yamlprzy użyciu zintegrowanego edytora.touch deployment.yamlOtwórz edytor zintegrowany w usłudze Cloud Shell, wprowadzając polecenie
code .Otwórz plik
deployment.yamli 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 deploymentW tym kodzie dodano dwa pierwsze klucze, aby poinformować platformę Kubernetes o elementach
apiVersionikindtworzonego manifestu.nameto nazwa wdrożenia. Służy do identyfikowania i wykonywania zapytań dotyczących informacji dotyczących wdrożenia podczas korzystania z programukubectl.Napiwek
Więcej informacji na temat klucza
apiVersioni 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.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-websiteZasobniki 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ć kluczlabels, aby umożliwić wdrożeniom znajdowanie i grupowanie zasobników.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-websiteKlucz
containersjest tablicą specyfikacji kontenera, ponieważ zasobnik może zawierać jeden lub więcej kontenerów. Specyfikacja definiujeimage, ,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.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: 256MiZwróć uwagę, jak sekcja zasobu pozwala określić minimalną ilość zasobów jako żądanie oraz maksymalną ilość zasobów jako limit.
Ostatnim krokiem jest zdefiniowanie portów, które ten kontener uwidacznia zewnętrznie za pośrednictwem
portsklucza. Kluczportsjest 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 laterZwróć 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.Na koniec dodaj sekcję selektora, aby zdefiniować obciążenia, którymi zarządza wdrożenie. Klucz
selectorznajduje się w sekcji specyfikacji wdrożenia w pliku manifestu. Użyj kluczamatchLabels, 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: httpUwaga
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.
Zapisz plik manifestu i zamknij edytor.
Stosowanie manifestu
W usłudze Cloud Shell uruchom polecenie
kubectl applyw celu przesłania manifestu wdrożenia do klastra.kubectl apply -f ./deployment.yamlPolecenie powinno wyprowadzić wynik podobny do poniższego przykładu.
deployment.apps/contoso-website createdUruchom polecenie
kubectl get deploy, aby sprawdzić, czy wdrożenie zakończyło się pomyślnie.kubectl get deploy contoso-websitePolecenie powinno wyprowadzić tabelę podobną do poniższego przykładu.
NAME READY UP-TO-DATE AVAILABLE AGE contoso-website 0/1 1 0 16sUruchom polecenie
kubectl get pods, aby sprawdzić, czy zasobnik jest uruchomiony.kubectl get podsPolecenie powinno wyprowadzić tabelę podobną do poniższego przykładu.
NAME READY STATUS RESTARTS AGE contoso-website-7c58c5f699-r79mv 1/1 Running 0 63s