Knative effectue des vérifications plus fréquentes que Kubernetes standard pour réduire la latence de démarrage à froid des Pods. Configurez les liveness probes et les readiness probes dans un service Knative afin de garantir le bon fonctionnement de votre application et sa capacité à recevoir du trafic.
Fonctionnement
Knative gère les liveness probes et les readiness probes différemment de Kubernetes standard :
Liveness probe : surveille l'état d'un conteneur. Si celui-ci passe à l'état Failed ou si son processus plante, le kubelet redémarre le conteneur.
Readiness probe : contrôle le routage du trafic lors de la mise à l'échelle automatique. Seuls les Pods à l'état Ready reçoivent du trafic, ce qui garantit la stabilité et la réactivité du service.
Le diagramme suivant illustre le fonctionnement des probes dans Knative.
Définissez les champs
readinessProbeoulivenessProbedans une ressource personnalisée (CR) de service Knative.Le kubelet envoie les liveness probes directement aux conteneurs spécifiés.
-
Knative réécrit les readiness probes et les transfère au conteneur
queue-proxy. La vérification démarre depuis le composant Activator ou le conteneurqueue-proxypour s'assurer que l'ensemble de la liaison réseau est configuré et opérationnel.En l'absence de probes définies, Knative crée automatiquement des readiness probes par défaut pour le conteneur principal. Celles-ci vérifient les sockets TCP sur les ports des services Knative.
Le conteneur
queue-proxyagrège les résultats des readiness probes de tous les conteneurs, y compris le conteneur principal et les sidecars. Lorsquequeue-proxyretourne des réponses positives et que la couche réseau Knative est configurée, Knative marque le Pod comme prêt à accepter du trafic.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Knative déployé dans votre cluster ACS. Pour plus d'informations, consultez Deploy Knative.
Configurer les probes
Ajoutez le champ readinessProbe ou livenessProbe à un service Knative pour configurer les readiness probes et les liveness probes. Le format de configuration est identique à celui de Kubernetes standard. Pour plus d'informations, consultez Configure liveness, readiness and startup probes.
L'exemple suivant configure ces deux types de probes pour deux conteneurs. Le port de la readiness probe peut différer de containerPort.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: runtime
namespace: default
spec:
template:
spec:
containers:
- name: first-container
image: <YOUR-IMAGE> # Replace with the actual image name.
ports:
- containerPort: 8080
readinessProbe: # Checks when the container is ready to receive traffic.
httpGet:
port: 8080 # Can differ from containerPort.
path: "/health"
livenessProbe: # Checks whether the container is alive.
tcpSocket:
port: 8080
- name: second-container
image: <YOUR-IMAGE> # Replace with the actual image name.
readinessProbe:
httpGet:
port: 8089
path: "/health"
livenessProbe:
tcpSocket:
port: 8089
Types de probes pris en charge
| Type de probe | Description |
|---|---|
httpGet |
Envoie une requête HTTP GET au conteneur. La réussite dépend du code d'état retourné. |
tcpSocket |
Tente d'ouvrir une connexion TCP vers le conteneur. La probe réussit si la connexion s'établit. |
exec |
Exécute une commande à l'intérieur du conteneur. Le résultat dépend du code de sortie de cette commande. |
grpc |
Appelle une méthode définie par le protocole gRPC Health Checking pour vérifier l'état de santé et la disponibilité des services. |
Limites
Les hooks
PreStoppersonnalisés ne sont pas pris en charge. Knative fournit un hook PreStop intégré pour gérer l'arrêt progressif.