K8S Liveness Probe TCP Socket jest częścią Kubernetes, dzięki której możesz kontrolować stan portów. Port można uznać za zdrowy, jeśli jest możliwe otwarcie go w kontenerze. W przeciwnym razie otrzymasz informację o niepowodzeniu akcji.
W tym artykule pokażę Ci przykład wykorzystania Kubernetes Liveness Probe TCP Socket i dostępne opcje.
Liveness Probe ponownie uruchamia kontener, gdy polecenie zwróci kod błędu. Ta funkcja ma również kilka przydatnych ustawień, takich jak:
Opcje TCP socket:
Aby pokazać, jak to działa, użyję dwóch ścieżek: ścieżki pozytywnej i negatywnej (zwraca niepowodzenie).
# YAML example # liveness-pod-example.yaml # apiVersion: v1 kind: Pod metadata: name: liveness-tcpsocket spec: containers: - name: liveness image: nginx ports: - containerPort: 80 livenessProbe: tcpSocket: port: 80 initialDelaySeconds: 2 #Default 0 periodSeconds: 2 #Default 10 timeoutSeconds: 1 #Default 1 successThreshold: 1 #Default 1 failureThreshold: 3 #Default 3
Tworzenie poda:
kubectl create -f liveness-pod-example.yaml
Opisywanie poda:
kubectl describe pod liveness-tcpsocket
Restart Count: 0 . . . Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled <unknown> default-scheduler Successfully assigned jenkins/liveness-tcpsocket to dcpoz-d-sou-k8swor2 Normal Pulling 3s kubelet, dcpoz-d-sou-k8swor2 Pulling image "nginx" Normal Pulled 1s kubelet, dcpoz-d-sou-k8swor2 Successfully pulled image "nginx" Normal Created 1s kubelet, dcpoz-d-sou-k8swor2 Created container liveness Normal Started 0s kubelet, dcpoz-d-sou-k8swor2 Started container liveness
Pod działa poprawnie, ponieważ nginx domyślnie wystawia port 80 (otwórz port).
Usuwanie poda:
kubectl delete -f liveness-pod-example.yaml
# YAML example # liveness-pod-example2.yaml # apiVersion: v1 kind: Pod metadata: name: liveness-tcpsocket spec: containers: - name: liveness image: nginx ports: - containerPort: 80 livenessProbe: tcpSocket: port: 8888 initialDelaySeconds: 2 #Default 0 periodSeconds: 2 #Default 10 timeoutSeconds: 1 #Default 1 successThreshold: 1 #Default 1 failureThreshold: 3 #Default 3
Utwórz pod:
kubectl create -f liveness-pod-example2.yaml
Opisz pod:
kubectl describe pod liveness-tcpsocket
Restart Count: 1 # It will keep growing! . . . Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled <unknown> default-scheduler Successfully assigned jenkins/liveness-tcpsocket to dcpoz-d-sou-k8swor2 Normal Pulling 7s kubelet, dcpoz-d-sou-k8swor2 Pulling image "nginx" Normal Pulled 5s kubelet, dcpoz-d-sou-k8swor2 Successfully pulled image "nginx" Normal Created 4s kubelet, dcpoz-d-sou-k8swor2 Created container liveness Normal Started 4s kubelet, dcpoz-d-sou-k8swor2 Started container liveness Warning Unhealthy 0s (x2 over 2s) kubelet, dcpoz-d-sou-k8swor2 Liveness probe failed: dial tcp 10.32.0.11:8888: connect: connection refused
Pod ciągle się restartuje, ponieważ nginx ujawnia domyślny port, a liveness probe na żywo próbuje monitorować port 8888, który jest zamknięty.