2016-10-06 17 views
8

Tôi có định nghĩa công việc dựa trên ví dụ từ trang web kubernetes.Kubernetes - cách chỉ chạy công việc một lần

apiVersion: batch/v1 
kind: Job 
metadata: 
    name: pi-with-timeout-6 
spec: 
    activeDeadlineSeconds: 30 
    completions: 1 
    paralleism: 1 
    template: 
    metadata: 
     name: pi 
    spec: 
     containers: 
     - name: pi 
     image: perl 
     command: ["exit", "1"] 
     restartPolicy: Never 

Tôi muốn chạy công việc này một lần và không khởi động lại nếu không thành công. Với lệnh comand exit 1 kubernetes cố gắng chạy pod mới để thoát khỏi mã 0 cho đến khi đạt được activeDeadlineThời gian chờ giây. Làm thế nào để tránh điều đó? Tôi muốn chạy lệnh xây dựng trong kubernetes để kiểm tra biên dịch và nếu biên dịch thất bại tôi sẽ nhận được mã thoát khác với 0. Tôi không muốn chạy trình biên dịch một lần nữa.

Có thể không? Làm sao?

Trả lời

10

Nếu bạn muốn dùng lệnh thử một lần, bạn có thể nên tạo nhóm trống, vì công việc sẽ cố thực hiện lệnh cho đến khi thành công hoặc thời hạn hoạt động được đáp ứng.

Chỉ cần tạo các pod từ mẫu của bạn:

apiVersion: v1 
kind: Pod 
metadata: 
    name: pi 
spec: 
    containers: 
    - name: pi 
    image: perl 
    command: ["exit", "1"] 
    restartPolicy: Never 
+0

Nhưng cách dừng/hủy nhóm khi lệnh hoàn tất? Trong trường hợp của Jobs, pod đang chạy dừng lại. –

+1

@ rishabh.bhardwaj nếu bạn đặt 'restartPolicy' thành' Never', như trong câu trả lời của tôi, sau khi kết thúc, nhóm sẽ dừng lại. – Nebril

+1

sự cố khi sử dụng nhóm thay vì công việc là nhóm cũng sẽ không thành công vì các lý do giả mạo như nút bị giết hoặc các vấn đề khác không thuộc quyền kiểm soát của người dùng. – ithkuil

1

Đáng buồn là hiện nay không có cách nào để ngăn chặn sự điều khiển công việc để chỉ respawn vỏ mới khi họ thất bại, nhưng cộng đồng kubernetes đang làm việc trên một giải pháp, xem :

"Chính sách hoàn trả và giới hạn nhóm không thành công" https://github.com/kubernetes/community/pull/583

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