12.2. Configuration des contrôles de santé à l'aide de l'interface de ligne de commande
Pour configurer les sondes de disponibilité, de vivacité et de démarrage, ajoutez une ou plusieurs sondes à la spécification du module qui contient le conteneur pour lequel vous souhaitez effectuer des contrôles de santé
Si vous souhaitez ajouter ou modifier des contrôles de santé dans un pod existant, vous devez éditer l'objet pod DeploymentConfig
ou utiliser la perspective Developer dans la console web. Vous ne pouvez pas utiliser l'interface de commande pour ajouter ou modifier les contrôles de santé d'un module existant.
Procédure
Pour ajouter des sondes à un conteneur :
Créez un objet
Pod
pour ajouter une ou plusieurs sondes :apiVersion: v1 kind: Pod metadata: labels: test: health-check name: my-application spec: containers: - name: my-container 1 args: image: registry.k8s.io/goproxy:0.1 2 livenessProbe: 3 tcpSocket: 4 port: 8080 5 initialDelaySeconds: 15 6 periodSeconds: 20 7 timeoutSeconds: 10 8 readinessProbe: 9 httpGet: 10 host: my-host 11 scheme: HTTPS 12 path: /healthz port: 8080 13 startupProbe: 14 exec: 15 command: 16 - cat - /tmp/healthy failureThreshold: 30 17 periodSeconds: 20 18 timeoutSeconds: 10 19
- 1
- Indiquez le nom du conteneur.
- 2
- Spécifiez l'image du conteneur à déployer.
- 3
- Facultatif : Créez une sonde de réactivité.
- 4
- Spécifiez un test à effectuer, ici un test de socket TCP.
- 5
- Indiquez le port sur lequel le conteneur écoute.
- 6
- Indiquez le délai, en secondes, après le démarrage du conteneur avant que la sonde puisse être programmée.
- 7
- Indiquez le nombre de secondes nécessaires à l'exécution de la sonde. La valeur par défaut est
10
. Cette valeur doit être supérieure àtimeoutSeconds
. - 8
- Spécifiez le nombre de secondes d'inactivité après lesquelles la sonde est considérée comme ayant échoué. La valeur par défaut est
1
. Cette valeur doit être inférieure àperiodSeconds
. - 9
- Facultatif : Créez une sonde de préparation.
- 10
- Spécifiez le type de test à effectuer, ici un test HTTP.
- 11
- Spécifiez l'adresse IP de l'hôte. Si
host
n'est pas défini,PodIP
est utilisé. - 12
- Spécifiez
HTTP
ouHTTPS
. Sischeme
n'est pas défini, c'est le schémaHTTP
qui est utilisé. - 13
- Indiquez le port sur lequel le conteneur écoute.
- 14
- Facultatif : Créer une sonde de démarrage.
- 15
- Indiquez le type de test à effectuer, ici une sonde d'exécution de conteneur.
- 16
- Spécifiez les commandes à exécuter sur le conteneur.
- 17
- Spécifiez le nombre de tentatives de la sonde après un échec.
- 18
- Indiquez le nombre de secondes nécessaires à l'exécution de la sonde. La valeur par défaut est
10
. Cette valeur doit être supérieure àtimeoutSeconds
. - 19
- Spécifiez le nombre de secondes d'inactivité après lesquelles la sonde est considérée comme ayant échoué. La valeur par défaut est
1
. Cette valeur doit être inférieure àperiodSeconds
.
NoteSi la valeur de
initialDelaySeconds
est inférieure à celle deperiodSeconds
, la première sonde de préparation se produit à un moment donné entre les deux périodes, en raison d'un problème de temporisation.La valeur
timeoutSeconds
doit être inférieure à la valeurperiodSeconds
.Créer l'objet
Pod
:oc create -f <nom-de-fichier>.yaml
Vérifier l'état du module de contrôle de santé :
$ oc describe pod health-check
Exemple de sortie
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 9s default-scheduler Successfully assigned openshift-logging/liveness-exec to ip-10-0-143-40.ec2.internal Normal Pulling 2s kubelet, ip-10-0-143-40.ec2.internal pulling image "registry.k8s.io/liveness" Normal Pulled 1s kubelet, ip-10-0-143-40.ec2.internal Successfully pulled image "registry.k8s.io/liveness" Normal Created 1s kubelet, ip-10-0-143-40.ec2.internal Created container Normal Started 1s kubelet, ip-10-0-143-40.ec2.internal Started container
Voici le résultat d'une sonde qui a échoué et qui a redémarré un conteneur :
Exemple de résultat de vérification de l'état de conservation d'un conteneur malsain
$ oc describe pod pod1
Exemple de sortie
.... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled <unknown> Successfully assigned aaa/liveness-http to ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Normal AddedInterface 47s multus Add eth0 [10.129.2.11/23] Normal Pulled 46s kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Successfully pulled image "registry.k8s.io/liveness" in 773.406244ms Normal Pulled 28s kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Successfully pulled image "registry.k8s.io/liveness" in 233.328564ms Normal Created 10s (x3 over 46s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Created container liveness Normal Started 10s (x3 over 46s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Started container liveness Warning Unhealthy 10s (x6 over 34s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Liveness probe failed: HTTP probe failed with statuscode: 500 Normal Killing 10s (x2 over 28s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Container liveness failed liveness probe, will be restarted Normal Pulling 10s (x3 over 47s) kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Pulling image "registry.k8s.io/liveness" Normal Pulled 10s kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj Successfully pulled image "registry.k8s.io/liveness" in 244.116568ms