2016-03-24 46 views
10

Chúng tôi sử dụng Kubernetes Job s cho rất nhiều máy tính theo lô tại đây và tôi muốn thiết kế từng Công việc với một hộp giám sát để cập nhật hệ thống theo dõi tập trung với tiến độ công việc.Thùng chứa bên trong Công việc Kubernetes?

Vấn đề duy nhất là, tôi không thể tìm ra ngữ nghĩa (hoặc được cho là) ​​của nhiều vùng chứa trong công việc.

Tôi đưa cho nó một shot anyways (với một sidecar alpine rằng in "hello" mỗi 1 giây) và sau khi nhiệm vụ chính của tôi hoàn tất, Job s được coi Successfulkubectl get pods trong Kubernetes 1.2.0 chương trình:

NAME           READY  STATUS  RESTARTS AGE 
    job-69541b2b2c0189ba82529830fe6064bd-ddt2b 1/2  Completed 0   4m 
    job-c53e78aee371403fe5d479ef69485a3d-4qtli 1/2  Completed 0   4m 
    job-df9a48b2fc89c75d50b298a43ca2c8d3-9r0te 1/2  Completed 0   4m 
    job-e98fb7df5e78fc3ccd5add85f8825471-eghtw 1/2  Completed 0   4m 

Và nếu tôi mô tả một trong những vỏ

State:    Terminated 
    Reason:   Completed 
    Exit Code:  0 
    Started:   Thu, 24 Mar 2016 11:59:19 -0700 
    Finished:   Thu, 24 Mar 2016 11:59:21 -0700 

Sau đó GET ing các yaml của công việc hiển thị thông tin cho mỗi container:

status: 
    conditions: 
    - lastProbeTime: null 
     lastTransitionTime: 2016-03-24T18:59:29Z 
     message: 'containers with unready status: [pod-template]' 
     reason: ContainersNotReady 
     status: "False" 
     type: Ready 
    containerStatuses: 
    - containerID: docker://333709ca66462b0e41f42f297fa36261aa81fc099741e425b7192fa7ef733937 
     image: luigi-reduce:0.2 
     imageID: docker://sha256:5a5e15390ef8e89a450dac7f85a9821fb86a33b1b7daeab9f116be252424db70 
     lastState: {} 
     name: pod-template 
     ready: false 
     restartCount: 0 
     state: 
     terminated: 
      containerID: docker://333709ca66462b0e41f42f297fa36261aa81fc099741e425b7192fa7ef733937 
      exitCode: 0 
      finishedAt: 2016-03-24T18:59:30Z 
      reason: Completed 
      startedAt: 2016-03-24T18:59:29Z 
    - containerID: docker://3d2b51436e435e0b887af92c420d175fafbeb8441753e378eb77d009a38b7e1e 
     image: alpine 
     imageID: docker://sha256:70c557e50ed630deed07cbb0dc4d28aa0f2a485cf7af124cc48f06bce83f784b 
     lastState: {} 
     name: sidecar 
     ready: true 
     restartCount: 0 
     state: 
     running: 
      startedAt: 2016-03-24T18:59:31Z 
    hostIP: 10.2.113.74 
    phase: Running 

Vì vậy, có vẻ như sidecar của tôi sẽ cần phải xem quy trình chính (như thế nào?) Và thoát ra một cách duyên dáng sau khi phát hiện nó là một mình trong nhóm? Nếu điều này là chính xác, thì có những thực hành tốt nhất/mẫu cho điều này (nên lối ra sidecar với mã trả về của container chính? Nhưng làm thế nào để có được điều đó?)? Sau khi thử nghiệm thêm, tôi cũng đã phát hiện ra những điều sau đây: Nếu có hai thùng chứa trong một nhóm, thì nó không được coi là thành công cho đến khi tất cả các thùng chứa trong nhóm quay trở lại với mã thoát 0.

Ngoài ra, nếu restartPolicy: OnFailure được đặt trên thông số nhóm, thì bất kỳ vùng chứa nào trong nhóm kết thúc bằng mã thoát khác sẽ được khởi động lại trong cùng một nhóm (điều này có thể hữu ích cho thanh chắn giám sát để đếm số lượng thử lại và xóa công việc sau một số lượng nhất định (để giải quyết không có lần thử lại tối đa hiện có trong công việc Kubernetes)).

+0

Điều này không có nghĩa là một giải pháp thanh lịch, nhưng tôi nghĩ bạn có thể thiết lập một đầu dò liveness trên sidecar của bạn mà thực sự thăm dò container chính. Sau đó, khi thùng chứa chính bị hỏng, đầu dò sẽ thất bại và kubelet sẽ giết sidecar. –

Trả lời

3

Bạn có thể sử dụng downward api để tìm ra tên nhóm của riêng bạn từ bên trong thanh bên và sau đó truy xuất nhóm của riêng bạn từ trình cắm thêm để tra cứu trạng thái tồn tại. Hãy cho tôi biết nó đến như thế nào.

+0

@JKnight làm thế nào nó đi? – pkyeck

+0

@PhilippKyeck, chúng tôi đã sử dụng thành công API giảm xuống trong các sidecar của chúng tôi để kiểm tra trạng thái vùng chứa chính. Tôi muốn giới thiệu nó như là một lựa chọn khả thi. – JKnight

+1

@JKnight Theo tôi có thể thấy API hướng xuống không hiển thị trạng thái vùng chứa. Bạn có nhớ chia sẻ thêm chi tiết về cách bạn triển khai giải pháp này không? – Adrian

Các vấn đề liên quan