Distribuire un'applicazione di esempio su Windows - Amazon EKS

Aiutaci a migliorare questa pagina

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Per contribuire a questa guida per l'utente, scegli il GitHub link Modifica questa pagina nel riquadro destro di ogni pagina.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Distribuire un'applicazione di esempio su Windows

In questo argomento, si distribuisce un'applicazione di esempio nel cluster su nodi Windows.

Prerequisiti

  • Un cluster Kubernetes esistente con almeno un nodo. Se non disponi di un cluster Amazon EKS esistente, puoi implementarne uno utilizzando una delle guide incluse. Nozioni di base su Amazon EKS È necessario che il supporto Windows sia abilitato per il cluster e almeno un nodo Amazon EC2 Windows.

  • Kubectl installato sul computer. Per ulteriori informazioni, consulta Configurazione kubectl e eksctl.

  • Kubectl configurato per comunicare con il cluster. Per ulteriori informazioni, consulta Connect kubectl a un cluster EKS creando un file kubeconfig.

  • Se si prevede di implementare il carico di lavoro di esempio in Fargate, è necessario disporre di un profilo Fargate che include lo stesso spazio dei nomi creato in questo tutorial, che è eks-sample-app, a meno che non cambi il nome. Se hai creato un cluster con una delle guideNozioni di base su Amazon EKS, dovrai creare un nuovo profilo o aggiungere lo spazio dei nomi al tuo profilo esistente, perché il profilo creato nelle guide introduttive non specifica lo spazio dei nomi utilizzato in questo tutorial. Il VPC deve disporre di almeno una sottorete privata.

Sebbene molte variabili siano modificabili nei passaggi seguenti, si consiglia di modificare solo i valori delle variabili, se specificato. Una volta acquisita una migliore conoscenza di Kubernetes Pods, delle implementazioni e dei servizi, puoi provare a modificare altri valori.

Creare uno spazio dei nomi

Uno spazio dei nomi consente di raggruppare le risorse in Kubernetes. Per ulteriori informazioni, consultare Spazio dei nomi nella documentazione Kubernetes. Se avete intenzione di implementare la vostra applicazione di esempio per semplificare la gestione del calcolo con AWS Fargate, assicuratevi che il valore contenuto namespace nel vostro Definire quali Pod utilizzare AWS Fargate al momento del lancio sia. eks-sample-app

kubectl create namespace eks-sample-app

Crea una distribuzione Kubernetes

Questa implementazione di esempio estrae un'immagine del contenitore da un archivio pubblico e ne distribuisce tre repliche (singoli Pod) nel cluster. Per ulteriori informazioni, consultare la sezione Implementazioni nella documentazione Kubernetes.

  1. Salva i contenuti seguenti in un file denominato eks-sample-deployment.yaml. I contenitori dell'applicazione di esempio non utilizzano lo storage di rete, ma è possibile che esistano applicazioni che lo richiedono. Per ulteriori informazioni, consulta Archivia i dati delle applicazioni per il tuo cluster.

    • kubernetes.io/os: windows nodeSelector significa che se avessi nodi Windows e Linux, ad esempio nel cluster, l'immagine verrebbe implementata solo nei nodi Windows. Per ulteriori informazioni, consulta Etichette, annotazioni e taint note nella documentazione Kubernetes.

      apiVersion: apps/v1 kind: Deployment metadata: name: eks-sample-windows-deployment namespace: eks-sample-app labels: app: eks-sample-windows-app spec: replicas: 3 selector: matchLabels: app: eks-sample-windows-app template: metadata: labels: app: eks-sample-windows-app spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: beta.kubernetes.io/arch operator: In values: - amd64 containers: - name: windows-server-iis image: mcr.microsoft.com/windows/servercore:ltsc2019 ports: - name: http containerPort: 80 imagePullPolicy: IfNotPresent command: - powershell.exe - -command - "Add-WindowsFeature Web-Server; Invoke-WebRequest -UseBasicParsing -Uri 'https://dotnetbinaries.blob.core.windows.net/servicemonitor/2.0.1.6/ServiceMonitor.exe' -OutFile 'C:\\ServiceMonitor.exe'; echo '<html><body><br/><br/><marquee><H1>Hello EKS!!!<H1><marquee></body><html>' > C:\\inetpub\\wwwroot\\default.html; C:\\ServiceMonitor.exe 'w3svc'; " nodeSelector: kubernetes.io/os: windows
  2. Applicare il manifesto di implementazione al cluster.

    kubectl apply -f eks-sample-deployment.yaml

Creazione di un servizio

Un servizio consente di accedere a tutte le repliche tramite un unico indirizzo IP o nome. Per ulteriori informazioni, consultare la sezione Servizio nella documentazione Kubernetes. Sebbene non siano implementati nell'applicazione di esempio, se disponi di applicazioni che devono interagire con altri AWS servizi, ti consigliamo di creare account di servizio Kubernetes per i tuoi Pods e di associarli agli account IAM. AWS Specificando gli account di servizio, è possibile che i pod dispongano delle autorizzazioni minime necessarie per interagire con altri servizi. Per ulteriori informazioni, consulta Ruoli IAM per gli account di servizio.

  1. Salva i contenuti seguenti in un file denominato eks-sample-service.yaml. Kubernetes assegna al servizio il proprio indirizzo IP accessibile solo dall'interno del cluster. Per accedere al servizio dall'esterno del cluster, implementare il controller del load balancer AWS per bilanciare il carico dell'applicazione o del traffico di rete verso il servizio.

    apiVersion: v1 kind: Service metadata: name: eks-sample-windows-service namespace: eks-sample-app labels: app: eks-sample-windows-app spec: selector: app: eks-sample-windows-app ports: - protocol: TCP port: 80 targetPort: 80
  2. Applicare il manifesto del servizio al cluster.

    kubectl apply -f eks-sample-service.yaml

Rivedi le risorse create

  1. Visualizzare tutte le risorse nello spazio dei nomi eks-sample-app.

    kubectl get all -n eks-sample-app

    Di seguito viene riportato un output di esempio:

    NAME READY STATUS RESTARTS AGE pod/eks-sample-windows-deployment-65b7669776-m6qxz 1/1 Running 0 27m pod/eks-sample-windows-deployment-65b7669776-mmxvd 1/1 Running 0 27m pod/eks-sample-windows-deployment-65b7669776-qzn22 1/1 Running 0 27m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/eks-sample-windows-service ClusterIP 10.100.74.8 <none> 80/TCP 32m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/eks-sample-windows-deployment 3/3 3 3 27m NAME DESIRED CURRENT READY AGE replicaset.apps/eks-sample-windows-deployment-776d8f8fd8 3 3 3 27m

    Nell'output, è possibile visualizzare il servizio e l'implementazione specificati nel manifesto di esempio implementato nei passaggi precedenti. Verranno mostrati anche tre pod. Questo perché 3 replicas sono state specificate nel manifesto di esempio. Per ulteriori informazioni sui pod, consulta Pod nella documentazione Kubernetes. Kubernetes crea automaticamente la replicaset risorsa, anche se non è specificata nei manifesti di esempio. Per ulteriori informazioni in meritoReplicaSets, consulta la documentazione di ReplicaSetKubernetes.

  2. Visualizzare i dettagli del servizio implementato.

    kubectl -n eks-sample-app describe service eks-sample-windows-service

    Di seguito viene riportato un output di esempio:

    Name: eks-sample-windows-service Namespace: eks-sample-app Labels: app=eks-sample-windows-app Annotations: <none> Selector: app=eks-sample-windows-app Type: ClusterIP IP Families: <none> IP: 10.100.74.8 IPs: 10.100.74.8 Port: <unset> 80/TCP TargetPort: 80/TCP Endpoints: 192.168.24.212:80,192.168.50.185:80,192.168.63.93:80 Session Affinity: None Events: <none>

    Nell'output precedente, il valore per IP: è un indirizzo IP univoco che può essere raggiunto da qualsiasi nodo o Pod all'interno del cluster, ma non può essere raggiunto dall'esterno del cluster. I valori per Endpoints sono gli indirizzi IP assegnati dall'interno del tuo VPC ai Pod che fanno parte del servizio.

  3. Visualizza i dettagli di uno dei pod elencati nell'output al momento della visualizzazione dello spazio dei nomi in un passaggio precedente. 776d8f8fd8-78w66Sostituiscilo con il valore restituito per uno dei tuoi Pod.

    kubectl -n eks-sample-app describe pod eks-sample-windows-deployment-65b7669776-m6qxz

    Esempio di output abbreviato

    Name: eks-sample-windows-deployment-65b7669776-m6qxz Namespace: eks-sample-app Priority: 0 Node: ip-192-168-45-132.us-west-2.compute.internal/192.168.45.132 [...] IP: 192.168.63.93 IPs: IP: 192.168.63.93 Controlled By: ReplicaSet/eks-sample-windows-deployment-65b7669776 [...] Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m20s default-scheduler Successfully assigned eks-sample-app/eks-sample-windows-deployment-65b7669776-m6qxz to ip-192-168-45-132.us-west-2.compute.internal [...]

    Nell'output precedente, il valore di IP: è un IP univoco assegnato al Pod dal blocco CIDR assegnato alla sottorete in cui si trova il nodo. Se si preferisce che ai pod vengano assegnati indirizzi IP da blocchi CIDR diversi, è possibile modificare il comportamento di default. Per ulteriori informazioni, consulta Distribuisci i pod in sottoreti alternative con reti personalizzate. É anche possibile vedere come il pianificatore Kubernetes abbia pianificato il pod sul Node con l'indirizzo IP 192.168.45.132.

    Suggerimento

    Anziché utilizzare la riga di comando, puoi visualizzare molti dettagli su Pod, servizi, distribuzioni e altre risorse Kubernetes in. AWS Management Console Per ulteriori informazioni, consulta Visualizza le risorse Kubernetes nel AWS Management Console.

Esegui una shell su un Pod

  1. Esegui una shell sul Pod che hai descritto nel passaggio precedente, sostituendola 65b7669776-m6qxz con l'ID di uno dei tuoi Pod.

    kubectl exec -it eks-sample-windows-deployment-65b7669776-m6qxz -n eks-sample-app -- powershell.exe
  2. Dalla shell Pod, visualizza l'output del server Web installato con la distribuzione in un passaggio precedente. È necessario specificare solo il nome del servizio. Viene risolto nell'indirizzo IP del servizio da CoredNS, che viene distribuito con un cluster Amazon EKS, per impostazione predefinita.

    Invoke-WebRequest -uri eks-sample-windows-service/default.html -UseBasicParsing

    Di seguito viene riportato un output di esempio:

    StatusCode : 200 StatusDescription : OK Content : < h t m l > < b o d y > < b r / > < b r / > < m a r q u e e > < H 1 > H e l l o E K S ! ! ! < H 1 > < m a r q u e e > < / b o d y > < h t m l >
  3. Dalla shell del pod, visualizza il server DNS per il pod.

    Get-NetIPConfiguration

    Output abbreviato

    InterfaceAlias : vEthernet [...] IPv4Address : 192.168.63.14 [...] DNSServer : 10.100.0.10

    Nell'output precedente, 10.100.0.10 viene assegnato automaticamente come il server DNS per tutti i pod implementati nel cluster.

  4. Disconnettersi dal pod digitando exit.

  5. Una volta che hai finito con l'applicazione di esempio, puoi rimuovere lo spazio dei nomi, il servizio e la distribuzione di esempio con il seguente comando.

    kubectl delete namespace eks-sample-app

Fasi successive

Dopo aver distribuito l'applicazione di esempio, potresti provare alcuni dei seguenti esercizi: