Cvičení – nasazení aplikace v clusteru Azure Kubernetes Service
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í.
Přihlaste se ke službě Azure Cloud Shell.
Pomocí integrovaného editoru vytvořte v Cloud Shellu soubor manifestu pro nasazení Kubernetes s názvem
deployment.yaml
.touch deployment.yaml
V Cloud Shellu otevřete integrovaný editor zadáním
code .
.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
akind
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.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.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 ,image
aname
,resources
ports
, 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ů.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í.
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í.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íčematchLabels
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.
Soubor manifestu uložte a zavřete editor.
Použití manifestu
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
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
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