Site officiel
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
Sonde du récipient
ASondeEst un diagnostic effectué périodiquement kubelet Conteneur sur. Pour effectuer le diagnostic ,kubelet Appeler l'implémentation du conteneur Handler.Il existe trois types de gestionnaires:
- ExecAction: Exécuter la commande spécifiée dans le conteneur . Si le Code d'état est 0,Le diagnostic est considéré comme réussi..
- TCPSocketAction: Sur le port spécifié Pod De IP Exécution de l'adresse TCP Vérifiez.Si le port est ouvert,Le diagnostic est considéré comme réussi..
- HTTPGetAction:
GET
Sur le port et le chemin spécifiés pour Pod De IP Exécution de l'adresse HTTPDemande. Si la réponse a une valeur supérieure ou égale à 200 Et moins de 400 Code d'état pour,Le diagnostic est considéré comme réussi..
Chaque sonde a l'un des trois résultats suivants :
Success
:Le conteneur a réussi le diagnostic.Failure
:Le conteneur a échoué au diagnostic.Unknown
:Échec du diagnostic, Aucune mesure ne devrait donc être prise .
kubelet Vous pouvez choisir d'effectuer trois types de sondes et de réagir au conteneur en cours d'exécution :
livenessProbe
: Indique si le conteneur fonctionne . Si la détection active échoue ,kubelet Ça tue le conteneur., Et le conteneur sera soumis à Politique de redémarrageContraintes.Si Container Aucune détection active n'est fournie ,L'état par défaut estSuccess
.readinessProbe
: Indique si le conteneur est prêt à répondre à la demande . Si la sonde ready échoue , Le Contrôleur d'extrémité va passer de Pod Supprimer du paramètre pour tous les services correspondants Pod De IP Adresse. L'état de préparation par défaut avant le délai initial estFailure
.Si Container Pas de sonde prête ,L'état par défaut estSuccess
.startupProbe
: Indique si l'application dans le conteneur est lancée . Si la sonde de démarrage est fournie , Toutes les autres sondes seront désactivées ,Jusqu'à ce que ça marche..Si la sonde de démarrage échoue,kubelet Ça tue le conteneur., Et le conteneur sera soumis à Politique de redémarrageContraintes.Si Container Détecteur de démarrage non disponible ,L'état par défaut estSuccess
.
Comment configurer une activité 、 Pour plus d'informations sur l'état de préparation ou le démarrage de la sonde ,Voir Configurer les activités 、 Préparez - vous et activez la sonde .
Quand utiliser la sonde active?
État fonctionnel: Kubernetes v1.0 [stable]
Si un processus dans votre conteneur peut s'écraser lui - même s'il rencontre des problèmes ou devient malsain , Vous n'avez pas besoin de détection active ;kubelet Sera basé sur Pod DerestartPolicy
.
Si vous voulez que le conteneur soit restartPolicy
Arrêter et redémarrer , Spécifiez une sonde d'activité ,Et préciserAlways Ou OnFailure.
Quand utiliser la sonde prête?
État fonctionnel: Kubernetes v1.0 [stable]
Si vous voulez commencer à Pod Envoyer le trafic, Veuillez préciser la sonde prête .Dans ce cas,, La sonde prête peut être la même que la sonde active , Mais la présence de sondes prêtes dans la spécification signifie Pod Démarrera sans recevoir de trafic , Et ne commence à recevoir le débit qu'après le démarrage réussi de la sonde .
Si vous voulez que votre conteneur se ferme pour l'entretien , Vous pouvez spécifier une sonde prête , Utilisé pour vérifier les paramètres spécifiques à l'état de préparation qui diffèrent des détecteurs d'activité .
Si votre application dépend strictement des services d'arrière - plan , Vous pouvez réaliser à la fois la détection de l'activité et de l'état de préparation . Quand l'application elle - même est saine , La détection active passe par , Mais la sonde ready vérifie en outre si chaque service d'arrière - plan requis est disponible . Cela vous aide à éviter de diriger le trafic vers des messages d'erreur seulement Pod.
Si votre conteneur doit charger de grandes données pendant le démarrage 、 Profil ou migration ,Vous pouvez utiliser Activez la sonde .Mais, Si vous souhaitez détecter les différences entre les applications qui ont échoué et celles qui traitent encore leurs données de démarrage , Vous préférez peut - être une sonde prête .
Attention!:Si vous voulez Pod Peut être supprimé lorsque Drain Demande, Vous n'avez pas besoin de sondes prêtes ;Lors de la suppression, Avec ou sans sonde prête ,Pod Se met automatiquement dans un état non prêt .En attente Pod Lorsque le conteneur s'arrête ,Pod Ne pas être prêt .
Quand utiliser la sonde de démarrage?
État fonctionnel: Kubernetes v1.20 [stable]
Sonde de démarrage pour les récipients qui ont besoin de beaucoup de temps pour être mis en service Pod Très utile. Vous pouvez configurer une configuration séparée pour sonder le conteneur au démarrage , Au lieu de fixer des intervalles d'activité plus longs , Cela permet un intervalle plus long que l'intervalle actif .
Si votre contenant se trouve habituellement à Plusieurs C'est parti. initialDelaySeconds + failureThreshold × periodSeconds
, Vous devez spécifier une sonde de démarrage pour vérifier avec liveness La sonde a le même paramètre .Par défaut periodSeconds
10 Secondes.Et puis, Vous devriez le mettre en place failureThreshold
Assez haut pour permettre au récipient de démarrer , Sans changer la valeur par défaut du détecteur actif . Cela aide à prévenir les blocages .
Mode d'examen médical
Détection active
Bilan de santé de l'état de préparation : Vérifier si le conteneur est capable de fournir des services à l'extérieur
Bilan de santé actif :Vérifier le bon fonctionnement du récipient
Les deux dimensions sont différentes
Les deux sont traités différemment :
Échec du contrôle de la viabilité : Retirer le contenant
Échec de la vérification de l'état de préparation : Supprimer le cluster ( Supprimer l'équilibrage de la charge )
Utilisé pour déterminer si le contenant est vivant,C'est - à - dire:PodOui NonrunningStatut,SiLivenessProbeLa sonde a détecté un contenant malsain,EtkubeletOui.killChute du récipient, Et juger par la stratégie de redémarrage du conteneur de cette façon ,Si un conteneur ne contient pasLivenessProbeSonde,EtKubeletConsidered containerLivenessProbeLa valeur de retour de la sonde est toujours réussie. Il existe trois méthodes supportées par la détection de l'activité de survie :ExecAction,TCPSocketAction,HTTPGetAction.
1.Exec
apiVersion: v1
kind: Pod
metadata:
name: probe-exec
namespace: defualt
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
exec:
command:
- cat
- /tmp/health
initialDelaySeconds: 5
timeoutSeconds: 1
2.TCPSocket
# TcpSocket équivalent à ping
apiVersion: v1
kind: Pod
metadata:
name: probe-tcp
namespace: default
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
initialDelaySeconds: 5
timeoutSeconds: 1
tcpSocket:
port: 80
3.HTTPGet
apiVersion: v1
kind: Pod
metadata:
name: probe-http
namespace: default
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
httpGet:
path: /index
port: 80
scheme: HTTP
initialDelaySeconds: 5
timeoutSeconds: 1
4.Détails des paramètres
# Échec de l'inspection essai minimal ,Par défaut:3
kubectl explain deployment.spec.template.spec.containers.livenessProbe
delay=10s : Délai de détection initialDelaySeconds
timeout=1s : Délai de détection
period=10s : Fréquence de détection
success=1 : Combien de fois le succès compte
failure=1 : Combien de fois l'échec compte l'échec
Détails des paramètres:
failureThreshold: Nombre minimum de défaillances consécutives de la sonde , Ce nombre est considéré comme fail
initialDelaySeconds: Nombre de secondes après le démarrage du récipient pour commencer la détection de l'activité de stockage . Ne remplissez pas immédiatement
periodSeconds:Fréquence de détection(Secondes).Par défaut10Secondes.Min.1.
successThreshold:Après défaillance de la sonde,Combien de fois au moins la détection continue est - elle réussie?, Ce nombre est considéré comme success.(Mais si c'estliveness Ça doit être 1.La valeur minimale est 1.)
timeoutSeconds: Temps d'arrêt par sonde ,Par défaut1Secondes,Minimum1Secondes.
Détection de l'état de préparation
Bilan de santé de l'état de préparation : Vérifier si le conteneur est capable de fournir des services à l'extérieur
Bilan de santé actif :Vérifier le bon fonctionnement du récipient
Utilisé pour déterminer si le conteneur fournit correctement le service ,C'est - à - dire le conteneurReadyOui NonTrue,Si la demande peut être reçue,SiReadinessProbeÉchec de la détection,Du conteneurReady Sera réglé à False,Le Contrôleur vaPodDeEndpointÀ partir deserviceDeEndpointSupprimer de la Liste, Aucune demande ne sera envoyée à partir de maintenant PodAllez.,Jusqu'à ce que la prochaine sonde réussisse.(Supprimer cecipod,Ne pas participer à la réception des demandes ne transmet pas le trafic à cet endroitPod)
1.HTTPGet
En accédant à un URL Pour détecter le courant POD Si le service peut être fourni normalement à l'extérieur
# La détection de l'état de préparation est caractérisée par une défaillance de la détection , Retirer immédiatement l'équilibrage de la charge (endprints ---> NotReadyAddresses)
kind: Pod
apiVersion: v1
metadata:
name: readinessprobe-nginx
namespace: default
labels:
provider: aliyun
business: pms
environmental: dev
spec:
containers:
- name: readinessprobe-nginx
image: nginx
imagePullPolicy: Always
ports:
- containerPort: 80
name: http
protocol: TCP
- containerPort: 443
name: https
protocol: TCP
readinessProbe:
httpGet:
port: 80
path: /demo.html
2.Exec
En exécutant une commande , Détecter si le service peut normalement être fourni à l'extérieur .
kind: Pod
apiVersion: v1
metadata:
name: exec-pod
spec:
containers:
- name: nginx
imagePullPolicy: IfNotPresent
image: nginx
readinessProbe:
exec:
command:
- cat
- /usr/share/nginx/html/index.html
3.TCPSocket
Adoptionping Comment un port , Détecter si le service peut normalement être fourni à l'extérieur .
kind: Pod
apiVersion: v1
metadata:
name: exec-pod
spec:
containers:
- name: nginx
imagePullPolicy: IfNotPresent
image: nginx
readinessProbe:
tcpSocket:
port: 80
Résumé
pod Pour tous les récipients status=RunningHeure,PodDe L'état est RunningStatut.
En cas d'échec du test de viabilité ,kebuletLe conteneur sera supprimé, Redémarrer un nouveau conteneur .Continuez à vérifier.
Détection active:Échec de la détection, Supprimer le conteneur maintenant
Détection de l'état de préparation:Échec de la détection, Retirer immédiatement l'équilibrage de la charge