当前位置:网站首页>Sonde du récipient - bilan de santé

Sonde du récipient - bilan de santé

2021-11-25 17:09:17 La pile technologique de Jeff

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..
  • HTTPGetActionGET 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 est Failure.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 periodSeconds10 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 

版权声明
本文为[La pile technologique de Jeff]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/11/20211125170715086q.html

随机推荐