Distribuire un'applicazione senza stato Kubernetes tramite kubectl nel dispositivo AZURE Stack Edge Pro GPU
SI APPLICA A: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
Questo articolo descrive come distribuire un'applicazione senza stato usando i comandi kubectl in un cluster Kubernetes esistente. Questo articolo illustra anche il processo di creazione e configurazione di pod nell'applicazione senza stato.
Prerequisiti
Prima di poter creare un cluster Kubernetes e usare lo kubectl
strumento da riga di comando, è necessario assicurarsi che:
Si dispone di credenziali di accesso a un dispositivo Azure Stack Edge Pro a 1 nodo.
Windows PowerShell 5.0 o versione successiva viene installato in un sistema client Windows per accedere al dispositivo Azure Stack Edge Pro. È possibile avere anche qualsiasi altro client con un Sistema operativo supportato. Questo articolo descrive la procedura quando si usa un client Windows. Per scaricare la versione più recente di Windows PowerShell, passare a Installazione di Windows PowerShell.
Il calcolo è abilitato nel dispositivo Azure Stack Edge Pro. Per abilitare il calcolo, passare alla pagina Calcolo nell'interfaccia utente locale del dispositivo. Selezionare quindi un'interfaccia di rete che si vuole abilitare per il calcolo. Seleziona Abilita. L'abilitazione del calcolo comporta la creazione di un commutatore virtuale nel dispositivo su tale interfaccia di rete. Per altre informazioni, vedere Abilitare la rete di calcolo in Azure Stack Edge Pro.
Il dispositivo Azure Stack Edge Pro dispone di un server del cluster Kubernetes in esecuzione versione 1.9 o successiva. Per altre informazioni, vedere Creare e gestire un cluster Kubernetes nel dispositivo Microsoft Azure Stack Edge Pro.
È stato installato
kubectl
.
Distribuire un'applicazione senza stato
Prima di iniziare, è necessario disporre di:
- Creazione di un cluster Kubernetes.
- Configurare uno spazio dei nomi.
- Associato un utente allo spazio dei nomi .
- Salvataggio della configurazione utente in
C:\Users\<username>\.kube
. - Installato
kubectl
.
È ora possibile iniziare a eseguire e gestire le distribuzioni di applicazioni senza stato in un dispositivo Azure Stack Edge Pro. Prima di iniziare a usare kubectl
, è necessario verificare di avere la versione corretta di kubectl
.
Verificare di avere la versione corretta di kubectl e configurare la configurazione
Per controllare la versione di kubectl
:
Verificare che la versione di
kubectl
sia maggiore o uguale a 1.9:kubectl version
Di seguito è riportato un esempio dell'output:
PS C:\WINDOWS\system32> C:\windows\system32\kubectl.exe version Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.2", GitCommit:"f6278300bebbb750328ac16ee6dd3aa7d3549568", GitTreeState:"clean", BuildDate:"2019-08-05T09:23:26Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"windows/amd64"} Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.1", GitCommit:"4485c6f18cee9a5d3c3b4e523bd27972b1b53892", GitTreeState:"clean", BuildDate:"2019-07-18T09:09:21Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
In questo caso, la versione client di kubectl è v1.15.2 ed è compatibile per continuare.
Ottenere un elenco dei pod in esecuzione nel cluster Kubernetes. Un pod è un contenitore di applicazioni o un processo in esecuzione nel cluster Kubernetes.
kubectl get pods -n <namespace-string>
Di seguito è riportato un esempio di utilizzo dei comandi:
PS C:\WINDOWS\system32> kubectl get pods -n "test1" No resources found. PS C:\WINDOWS\system32>
L'output deve indicare che non vengono trovate risorse (pod) perché non sono in esecuzione applicazioni nel cluster.
Il comando popola la struttura di directory "C:\Users\<username>\.kube" con i file di configurazione. Lo strumento da riga di comando kubectl userà questi file per creare e gestire applicazioni senza stato nel cluster Kubernetes.
Controllare manualmente la struttura di directory "C:\Users\<username>\.kube" per verificare che kubectl lo abbia popolato con le sottocartelle seguenti:
PS C:\Users\username> ls .kube Directory: C:\Users\user\.kube Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2/18/2020 11:05 AM cache d----- 2/18/2020 11:04 AM http-cache -a---- 2/18/2020 10:41 AM 5377 config
Nota
Per visualizzare un elenco di tutti i comandi kubectl, digitare kubectl --help
.
Creare un'applicazione senza stato usando una distribuzione
Dopo aver verificato che la versione della riga di comando kubectl è corretta e si dispone dei file di configurazione necessari, è possibile creare una distribuzione di applicazioni senza stato.
Un pod è l'unità di esecuzione di base di un'applicazione Kubernetes, la più piccola e più semplice unità nel modello a oggetti Kubernetes creato o distribuito. Un pod incapsula anche le risorse di archiviazione, un INDIRIZZO IP di rete univoco e le opzioni che regolano la modalità di esecuzione dei contenitori.
Il tipo di applicazione senza stato creato è una distribuzione di server Web nginx.
Tutti i comandi kubectl usati per creare e gestire distribuzioni di applicazioni senza stato devono specificare lo spazio dei nomi associato alla configurazione. Lo spazio dei nomi è stato creato durante la connessione al cluster nel dispositivo Azure Stack Edge Pro nell'esercitazione Creare e gestire un cluster Kubernetes nel dispositivo Microsoft Azure Stack Edge Pro con New-HcsKubernetesNamespace
.
Per specificare lo spazio dei nomi in un comando kubectl, usare kubectl <command> -n <namespace-string>
.
Per creare una distribuzione nginx, seguire questa procedura:
Applicare un'applicazione senza stato creando un oggetto di distribuzione Kubernetes:
kubectl apply -f <yaml-file> -n <namespace-string>
In questo esempio il percorso del file YAML dell'applicazione è un'origine esterna.
Di seguito è riportato un esempio di uso del comando e del relativo output:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment.yaml -n "test1" deployment.apps/nginx-deployment created
In alternativa, è possibile salvare il markdown seguente nel computer locale e sostituire il percorso e il nome file nel parametro -f . Ad esempio, "C:\Kubernetes\deployment.yaml". La configurazione per la distribuzione dell'applicazione sarà:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 # tells deployment to run 2 pods matching the template template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
Questo comando crea una distribuzione nginx-predefinita con due pod per eseguire l'applicazione.
Ottenere la descrizione della distribuzione nginx-deployment di Kubernetes creata:
kubectl describe deployment nginx-deployment -n <namespace-string>
Di seguito è riportato un esempio di utilizzo del comando con output:
PS C:\Users\user> kubectl describe deployment nginx-deployment -n "test1" Name: nginx-deployment Namespace: test1 CreationTimestamp: Tue, 18 Feb 2020 13:35:29 -0800 Labels: <none> Annotations: deployment.kubernetes.io/revision: 1 kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"nginx-deployment","namespace":"test1"},"spec":{"repl... Selector: app=nginx Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.7.9 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-deployment-5754944d6c (2/2 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 2m22s deployment-controller Scaled up replica set nginx-deployment-5754944d6c to 2
Per l'impostazione delle repliche , verrà visualizzato:
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
L'impostazione delle repliche indica che la specifica di distribuzione richiede due pod e che tali pod sono stati creati e aggiornati e sono pronti per l'uso.
Nota
Un set di repliche sostituisce i pod eliminati o terminati per qualsiasi motivo, ad esempio in caso di errore del nodo del dispositivo o di un aggiornamento anomalo del dispositivo. Per questo motivo, è consigliabile usare un set di repliche anche se l'applicazione richiede solo un singolo pod.
Per elencare i pod nella distribuzione:
kubectl get pods -l app=nginx -n <namespace-string>
Di seguito è riportato un esempio di utilizzo del comando con output:
PS C:\Users\user> kubectl get pods -l app=nginx -n "test1" NAME READY STATUS RESTARTS AGE nginx-deployment-5754944d6c-7wqjd 1/1 Running 0 3m13s nginx-deployment-5754944d6c-nfj2h 1/1 Running 0 3m13s
L'output verifica che siano presenti due pod con nomi univoci a cui è possibile fare riferimento usando kubectl.
Per visualizzare informazioni su un singolo pod nella distribuzione:
kubectl describe pod <podname-string> -n <namespace-string>
Di seguito è riportato un esempio di utilizzo del comando con output:
PS C:\Users\user> kubectl describe pod "nginx-deployment-5754944d6c-7wqjd" -n "test1"
Name: nginx-deployment-5754944d6c-7wqjd
Namespace: test1
Priority: 0
Node: k8s-1d9qhq2cl-n1/10.128.46.184
Start Time: Tue, 18 Feb 2020 13:35:29 -0800
Labels: app=nginx
pod-template-hash=5754944d6c
Annotations: <none>
Status: Running
IP: 172.17.246.200
Controlled By: ReplicaSet/nginx-deployment-5754944d6c
Containers:
nginx:
Container ID: docker://280b0f76bfdc14cde481dc4f2b8180cf5fbfc90a084042f679d499f863c66979
Image: nginx:1.7.9
Image ID: docker-pullable://nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 18 Feb 2020 13:35:35 -0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-8gksw (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-8gksw:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-8gksw
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m58s default-scheduler Successfully assigned test1/nginx-deployment-5754944d6c-7wqjd to k8s-1d9qhq2cl-n1
Normal Pulling 4m57s kubelet, k8s-1d9qhq2cl-n1 Pulling image "nginx:1.7.9"
Normal Pulled 4m52s kubelet, k8s-1d9qhq2cl-n1 Successfully pulled image "nginx:1.7.9"
Normal Created 4m52s kubelet, k8s-1d9qhq2cl-n1 Created container nginx
Normal Started 4m52s kubelet, k8s-1d9qhq2cl-n1 Started container nginx
Ridimensionare la distribuzione dell'applicazione aumentando il numero di repliche
Ogni pod è progettato per eseguire una singola istanza di una determinata applicazione. Se si vuole ridimensionare l'applicazione orizzontalmente per eseguire più istanze, è possibile aumentare il numero di pod a uno per ogni istanza. In Kubernetes questa operazione viene definita replica. È possibile aumentare il numero di pod nella distribuzione dell'applicazione applicando un nuovo file YAML. Il file YAML modifica l'impostazione delle repliche su 4, che aumenta il numero di pod nella distribuzione a quattro pod. Per aumentare il numero di pod da 2 a 4:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml -n "test1"
In alternativa, è possibile salvare il markdown seguente nel computer locale e sostituire il percorso e il nome file per il parametro -f per kubectl apply
. Ad esempio, "C:\Kubernetes\deployment-scale.yaml". La configurazione per la scalabilità di distribuzione dell'applicazione sarà:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 4 # Update the replicas from 2 to 4
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 80
Per verificare che la distribuzione abbia quattro pod:
kubectl get pods -l app=nginx
L'output di esempio per una distribuzione di ridimensionamento da due a quattro pod è illustrato di seguito:
PS C:\WINDOWS\system32> kubectl get pods -l app=nginx
NAME READY STATUS RESTARTS AGE
nginx-deployment-148880595-4zdqq 1/1 Running 0 25s
nginx-deployment-148880595-6zgi1 1/1 Running 0 25s
nginx-deployment-148880595-fxcez 1/1 Running 0 2m
nginx-deployment-148880595-rwovn 1/1 Running 0 2m
Come si può notare dall'output, nella distribuzione sono ora presenti quattro pod che possono eseguire l'applicazione.
Eliminare una distribuzione
Per eliminare la distribuzione, inclusi tutti i pod, è necessario eseguire kubectl delete deployment
specificando il nome della distribuzione nginx-deployment e il nome dello spazio dei nomi. Per eliminare la distribuzione:
kubectl delete deployment nginx-deployment -n <namespace-string>
Di seguito è riportato un esempio di utilizzo dei comandi con output:
PS C:\Users\user> kubectl delete deployment nginx-deployment -n "test1"
deployment.extensions "nginx-deployment" deleted