Ć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 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.
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.yaml
przy użyciu zintegrowanego edytora.touch deployment.yaml
Otwórz edytor zintegrowany w usłudze Cloud Shell, wprowadzając polecenie
code .
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
ikind
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 programukubectl
.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.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ć 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-website
Klucz
containers
jest tablicą specyfikacji kontenera, ponieważ zasobnik może zawierać jeden lub więcej kontenerów. Specyfikacja definiujeimage
, ,name
,resources
,ports
i 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: 256Mi
Zwróć 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
ports
klucza. Kluczports
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.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 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: 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.
Zapisz plik manifestu i zamknij edytor.
Stosowanie manifestu
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
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
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