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 nominamespace
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
-
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 notenella 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
-
-
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
-
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
-
Applicare il manifesto del servizio al cluster.
kubectl apply -f eks-sample-service.yaml
Rivedi le risorse create
-
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 Podnella 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. Nota
Kubernetes mantiene il numero di repliche specificate nel manifesto. Se si tratta di un'implementazione di produzione e desideri che Kubernetes scalasse orizzontalmente il numero di repliche o verticalmente le risorse di elaborazione per i Pod, utilizza le implementazioni dei pod Scale con Horizontal Pod Autoscaler e le risorse del pod Adjust con Vertical Pod Autoscaler a tale scopo.
-
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 perEndpoints
sono gli indirizzi IP assegnati dall'interno del tuo VPC ai Pod che fanno parte del servizio. -
Visualizza i dettagli di uno dei pod elencati nell'output al momento della visualizzazione dello spazio dei nomi in un passaggio precedente.
776d8f8fd8-78w66
Sostituiscilo 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 sulNode
con l'indirizzo IP192.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
-
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
-
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 >
-
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. -
Disconnettersi dal pod digitando
exit
. -
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: