Điểm:0

livenessProbe doesn't work as expected

lá cờ in

Within my deployment, the following livenessProbe is defined:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-deployment
  labels:
    name: backend-deployment
    app: fc-test
spec:
  replicas: 1
  selector:
    matchLabels:
      name: fc-backend-pod
      app: fc-test
  template:
    metadata:
      name: fc-backend-pod
      labels:
        name: fc-backend-pod
        app: fc-test
    spec:
      containers:
      - name: fc-backend
        image: localhost:5000/backend:1.3
        ports:
        - containerPort: 4042
        env:
        - name: NODE_ENV
          value: "int"
        livenessProbe:
          exec:
            command:
            - RESULT=$(curl -X GET $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v2/makes | wc | awk '{print $3}');
            - if [[ $RESULT -lt 150 ]]; then exit 1; else exit 0; fi
          initialDelaySeconds: 20
          failureThreshold: 8
          periodSeconds: 10

Since there are some issues with API connection sometimes, I decided to set up an action checking if the whole set of requested data gets fetched from the API. If it does, the whole set is around 400 KB of size. If it doesn't, only a short message gets returned and the size of the response is lower than 120 B. And this is when the second command from the probe gets in: it checks whether the RESULT environment variable is low: if it is, then it means the response didn't contain all desired data and exits with an error code.

Both commands were tested by calling from inside of the running container, so both cases are covered: a) correct data fetched - exit 0, and b) just an error message fetched - exit 1.

The application running without the probe has been working correctly for at least 3-4 hours, then the problems with connection appeared and they were self-solvable in the end, but choked the app a bit, what was pretty undesirable.

After the probe was implemented, first instability issues started to happen minutes after deployment. Every couple of minutes pods were restarted and the restart count increased in a regular manner.

What I found describing the deployment:

Pod Template:
  Labels:  app=fc-test
           name=fc-backend-pod
  Containers:
   nsc-backend:
    Image:      localhost:5000/backend:1.3
    Port:       4042/TCP
    Host Port:  0/TCP
    Liveness:   exec [RESULT=$(curl -X GET $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v2/makes | wc | awk '{print $3}'); if [[ $RESULT -lt 150 ]]; then exit 1; else exit 0; fi] delay=20s timeout=1s period=10s #success=1 #failure=8

It looks reasonable, but when entering the running container with exec command, I found out that echo $RESULT gives no output (just an empty line).

Does it mean that only the first call of the probe was somehow processed successfully and all following ones didn't? How to approach the probe configuration to make it work as intended?

lá cờ au
Tôi đã mong đợi đầu dò liveness là một thuộc tính của vùng chứa, trong khi trong yaml của bạn, nó là anh chị em của vùng chứa. Tôi tự hỏi nếu vết lõm của bạn có thể cần điều chỉnh?
AbreQueVoy avatar
lá cờ in
Đó là định dạng sai trong câu hỏi - chỉ cần chỉnh sửa câu hỏi đó và cảm ơn vì đã chỉ ra điều này.
moonkotte avatar
lá cờ in
Dựa trên tiêu đề câu hỏi `livenessProbe` hoạt động như mong đợi. Tất cả những gì thoát mà không phải `0` nên được khởi động lại. [exec thăm dò](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#probe-check-methods). Tôi đã đề xuất thêm một số ghi nhật ký vào lệnh của bạn để xem chính xác điều gì sẽ xảy ra (mọi lần lặp phải được lưu vào một tệp có kết quả chính xác). Bất kỳ loại bộ nhớ đệm phía máy chủ nào? [Ví dụ](https://stackoverflow.com/a/36043573/15537201)
Điểm:2
lá cờ in

Đã thử nghiệm hai giải pháp cho vấn đề này: giải pháp đầu tiên là thay đổi cách tiếp cận một chút (cảm ơn @moonkotte về gợi ý về ghi nhật ký: nó cho tôi ý tưởng lưu một số bằng chứng trong thư mục ứng dụng). Thay vì sử dụng một biến môi trường, tôi quyết định kết xuất Xoănđầu ra của một tập tin. Sau đó, tôi bắt đầu tìm kiếm một tin nhắn cụ thể dự kiến ​​sẽ được gửi lại khi có sự cố xảy ra với điểm cuối từ xa (Phản hồi trống trong trường hợp này). Nếu có tin nhắn, tiếng kêu phát hiện ra điều đó, nhưng không giống như ở chế độ bình thường, nó trả về mã thoát 1 do có sự hiện diện của -v lập luận (đảo ngược). Nếu không tìm thấy thông báo đã chỉ định, mọi thứ có vẻ ổn với điểm cuối và mã thoát 0 được trả về, khiến nhóm tiếp tục hoạt động bình thường.

Toàn bộ lệnh trông như thế này:

livenessProbe:
  người điều hành:
    chỉ huy:
    - sh
    - -c
    - >-
        curl -X NHẬN $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v2/makes |
        đầu -c 30 > /app/output.log &&
        grep -v 'Phản hồi trống' /app/output.log

Giải pháp thứ hai là đưa Xoăn lệnh thành một tập lệnh bash và gửi nó cùng với toàn bộ hình ảnh. Bản thân kịch bản trông giống như:

#!/bin/bash
msg=$(curl -X GET $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v2/makes | head -c 30)
if [[ $msg == *"Phản hồi trống"* ]]; sau đó
        thoát 1
khác
        thoát 0
fi

Kịch bản được gọi bằng lệnh:

livenessProbe:
  người điều hành:
    chỉ huy:
    - sh
    - ./liveness_check.sh

Kết quả là như nhau. Cách tiếp cận thứ 2 có thể được sử dụng trong trường hợp logic phức tạp hơn hoặc như một giải pháp thay thế.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.