Déployer une application sans état Kubernetes via kubectl sur votre appareil Azure Stack Edge Pro GPU
S’APPLIQUE À : Azure Stack Edge Pro : GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
Cet article explique comment déployer une application sans état à l’aide des commandes kubectl sur un cluster Kubernetes existant. Cet article vous guide également tout au long du processus de création et de configuration de pods dans votre application sans état.
Prérequis
Avant de pouvoir créer un cluster Kubernetes et d’utiliser l’outil de ligne de commande kubectl
, vous devez vous assurer que :
Vous avez les informations d’identification de connexion à un appareil Azure Stack Edge Pro à 1 nœud.
Windows PowerShell 5.0 ou version ultérieure est installé sur un système client Windows pour accéder à l’appareil Azure Stack Edge Pro. Vous pouvez également utiliser un autre client avec un système d’exploitation pris en charge. Cet article décrit la procédure à utiliser avec un client Windows. Pour télécharger la dernière version de Windows PowerShell, accédez à Installation de Windows PowerShell.
Le calcul est activé sur l’appareil Azure Stack Edge Pro. Pour activer le calcul, accédez à la page Calcul de l’interface utilisateur locale de l’appareil. Puis sélectionnez une interface réseau que vous souhaitez activer pour le calcul. Sélectionnez Activer. L’activation du calcul entraîne la création d’un commutateur virtuel sur votre appareil sur cette interface réseau. Pour plus d’informations, consultez Activer le réseau de calcul sur Azure Stack Edge Pro.
Votre appareil Azure Stack Edge Pro a un serveur de cluster Kubernetes version v1.9 ou ultérieure en cours d’exécution. Pour plus d’informations, consultez Créer et gérer un cluster Kubernetes sur un appareil Microsoft Azure Stack Edge Pro.
Vous avez installé
kubectl
.
Déployer une application sans état
Avant de commencer, vous devez disposer des éléments suivants :
- Un cluster Kubernetes créé.
- Un espace de noms configuré.
- Un utilisateur associé à l’espace de noms.
- Une configuration utilisateur enregistrée dans
C:\Users\<username>\.kube
. kubectl
installé.
Vous pouvez maintenant commencer à exécuter et gérer des déploiements d’applications sans état sur un appareil Azure Stack Edge Pro. Avant de commencer à utiliser kubectl
, vous devez vérifier que vous disposez de la version appropriée de kubectl
.
Vérifiez que vous disposez de la version appropriée de kubectl et effectuez la configuration
Pour vérifier la version, utilisez kubectl
:
Vérifiez que la version de
kubectl
est supérieure ou égale à 1.9 :kubectl version
Voici un exemple de sortie :
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"}
Dans ce cas, la version cliente de kubectl est v1.15.2 et est compatible pour la suite.
Obtenez la liste des pods en cours d’exécution sur votre cluster Kubernetes. Un pod est un conteneur d’application, ou processus, s’exécutant sur votre cluster Kubernetes.
kubectl get pods -n <namespace-string>
Voici un exemple d’utilisation de la commande :
PS C:\WINDOWS\system32> kubectl get pods -n "test1" No resources found. PS C:\WINDOWS\system32>
La sortie doit indiquer qu’aucune ressource (pod) n’a été trouvée, car aucune application n’est en cours d’exécution sur votre cluster.
La commande remplit la structure de répertoire « C:\Users\<nom_utilisateur>\.kube » avec des fichiers de configuration. L’outil de ligne de commande kubectl utilise ces fichiers pour créer et gérer des applications sans État sur votre cluster Kubernetes.
Vérifiez manuellement que la structure de répertoire « C:\Users\<nom_utilisateur>\.kube » a été remplie par kubectl des sous-dossiers suivants :
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
Remarque
Pour afficher la liste de toutes les commandes kubectl, saisissez kubectl --help
.
Créer une application sans état à l’aide d’un déploiement
Maintenant que vous avez vérifié que la version de la ligne de commande kubectl était correcte et que vous disposez des fichiers config requis, vous pouvez créer un déploiement d’application sans état.
Un Pod est l’unité d’exécution de base d’une application Kubernetes, l’unité la plus petite et la plus simple dans le modèle objet Kubernetes que vous créez ou déployez. Un pod encapsule également les ressources de stockage, une adresse IP réseau unique et des options qui régissent la façon dont le ou les conteneurs doivent s’exécuter.
Le type d’application sans état que vous créez est un déploiement de serveur web nginx.
Toutes les commandes kubectl que vous utilisez pour créer et gérer des déploiements d’application sans état doivent spécifier l’espace de noms associé à la configuration. Vous avez créé l’espace de noms lors de la connexion au cluster sur l’appareil Azure Stack Edge Pro dans le tutoriel Créer et gérer un cluster Kubernetes sur un appareil Microsoft Azure Stack Edge Pro avec New-HcsKubernetesNamespace
.
Pour spécifier l’espace de noms dans une commande kubectl, utilisez kubectl <command> -n <namespace-string>
.
Pour créer un déploiement nginx, procédez comme suit :
Appliquez une application sans état en créant un objet de déploiement Kubernetes :
kubectl apply -f <yaml-file> -n <namespace-string>
Dans cet exemple, le chemin d’accès au fichier YAML de l’application est une source externe.
Voici un exemple d’utilisation de la commande et de sa sortie :
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment.yaml -n "test1" deployment.apps/nginx-deployment created
Vous pouvez également enregistrer le markdown suivant sur votre ordinateur local et remplacer le chemin d’accès et le nom de fichier dans le paramètre -f. Par exemple, « C:\Kubernetes\deployment.yaml ». La configuration du déploiement de l’application est la suivante :
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
Cette commande crée un déploiement nginx par défaut qui dispose de deux pods pour exécuter votre application.
Obtenez la description du déploiement nginx Kubernetes que vous avez créé :
kubectl describe deployment nginx-deployment -n <namespace-string>
Vous trouverez ci-dessous un exemple d’utilisation de la commande avec la sortie :
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
Pour le paramètre replicas, vous verrez que :
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
Le paramètre replicas indique que votre spécification de déploiement requiert deux pods, que ces pods ont été créés et mis à jour et qu’ils sont prêts à être utilisés.
Remarque
Un jeu de réplicas remplace les pods qui sont supprimés ou arrêtés pour une raison quelconque, comme dans le cas d’une défaillance de nœud d’appareil ou d’une mise à niveau d’appareil perturbatrice. Pour cette raison, nous vous recommandons d’utiliser un jeu de réplicas même si votre application ne requiert qu’un seul pod.
Pour répertorier les pods dans votre déploiement :
kubectl get pods -l app=nginx -n <namespace-string>
Vous trouverez ci-dessous un exemple d’utilisation de la commande avec la sortie :
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
La sortie vérifie que nous avons deux pods avec des noms uniques que nous pouvons référencer à l’aide de kubectl.
Pour afficher des informations sur un pod dans votre déploiement :
kubectl describe pod <podname-string> -n <namespace-string>
Vous trouverez ci-dessous un exemple d’utilisation de la commande avec la sortie :
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
Mettre à l’échelle le déploiement de l’application en augmentant le nombre de réplicas
Chaque pod est conçu pour exécuter une seule instance d’une application donnée. Si vous souhaitez mettre à l’échelle votre application horizontalement pour exécuter plusieurs instances, vous pouvez augmenter le nombre de pods à un pour chaque instance. Dans Kubernetes, on parle de réplication. Vous pouvez augmenter le nombre de pods dans le déploiement de votre application en appliquant un nouveau fichier YAML. Le fichier YAML change le paramètre de réplicas sur 4, ce qui augmente le nombre de pods dans votre déploiement sur quatre pods. Pour augmenter le nombre de pods de 2 à 4 :
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml -n "test1"
Vous pouvez également enregistrer le markdown suivant sur votre ordinateur local et remplacer le chemin d’accès et le nom de fichier pour le paramètre -f pour kubectl apply
. Par exemple, « C:\Kubernetes\deployment-scale.yaml ». La configuration de la mise à l’échelle du déploiement de l’application est la suivante :
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
Pour vérifier que le déploiement comporte quatre pods :
kubectl get pods -l app=nginx
Voici un exemple de sortie pour la remise à l’échelle d’un déploiement de deux à quatre pods :
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
Comme vous pouvez le voir dans la sortie, vous avez maintenant quatre pods dans votre déploiement qui peuvent exécuter votre application.
Supprimer un déploiement
Pour supprimer le déploiement, y compris tous les pods, vous devez exécuter kubectl delete deployment
en spécifiant le nom du déploiement nginx-deployment et le nom de l’espace de noms. Pour supprimer le déploiement :
kubectl delete deployment nginx-deployment -n <namespace-string>
Voici un exemple d’utilisation de la commande avec la sortie :
PS C:\Users\user> kubectl delete deployment nginx-deployment -n "test1"
deployment.extensions "nginx-deployment" deleted