Menu

Region US

Grandmetric LLC
Brookfield Place Office
200 Vesey Street
New York, NY 10281
EIN: 98-1615498
+1 302 691 94 10
info@grandmetric.com

Region EMEA

GRANDMETRIC Sp. z o.o.
ul. Metalowa 5, 60-118 Poznań, Poland
NIP 7792433527
+48 61 271 04 43
info@grandmetric.com

UK

Grandmetric LTD
Office 584b
182-184 High Street North
London
E6 2JA
+44 20 3321 5276
info@grandmetric.com

  • en
  • pl
  • K8S Liveness Probe TCP Socket

    Projektowanie i konfigurowanie

    K8S Liveness Probe TCP Socket

    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.

     

    Ustawienia TCP

    Liveness Probe ponownie uruchamia kontener, gdy polecenie zwróci kod błędu. Ta funkcja ma również kilka przydatnych ustawień, takich jak:

    1. initialDelaySeconds – czas, po jakim Liveness Probe powinien rozpocząć odpytywanie punktu końcowego
    2. periodSeconds — częstotliwość odpytywania punktu końcowego
    3. timeoutSeconds – czas, po którym upłynie limit czasu.
    4. successThreshold – minimalna liczba udanych prób, po której sonda stwierdzi poprawność działania kontenera
    5. failThreshold – liczba nieudanych prób, po których kontener uruchomi się ponownie

     

    Opcje TCP socket:

    1. port – port, który liveness probe na żywo próbuje otworzyć

     

    Aby pokazać, jak to działa, użyję dwóch ścieżek: ścieżki pozytywnej i negatywnej (zwraca niepowodzenie).

     

    Liveness Probe – przykłady

    Ścieżka pozytywna:

    # 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

     

    Ścieżka negatywna:

    # 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.

     

    Autor: Wojciech Tokarski
     
    Grandmetric: Network & Security