2016-05-05 23 views
9

Tôi có di chuyển cơ sở dữ liệu mà tôi muốn chạy trước khi triển khai phiên bản mới của ứng dụng vào cụm Kubernetes. Tôi muốn các lần di chuyển này được chạy tự động như một phần của đường ống Phân phối liên tục. Quá trình di chuyển sẽ được đóng gói dưới dạng hình ảnh vùng chứa. Cơ chế tốt nhất để đạt được điều này là gì?Cách tốt nhất để chạy các nhiệm vụ di chuyển một lần trong cụm kubernetes

Yêu cầu đối với một giải pháp:

  • có thể để xác định xem một sự chuyển đổi thất bại do đó chúng tôi không sau đó cố gắng để triển khai một phiên bản mới của ứng dụng vào cluster.
  • bỏ cuộc nếu di chuyển không thành công - đừng tiếp tục thử lại.
  • có thể truy cập nhật ký để chẩn đoán di chuyển không thành công.

tôi đã giả định rằng các chức năng Công Việc trong Kubernetes sẽ làm cho điều này dễ dàng, nhưng có vẻ như là một vài thách thức:

Sẽ sử dụng "kén trần" là một cách tiếp cận tốt hơn? Nếu vậy, làm thế nào mà có thể làm việc?

+2

Bạn đã làm điều này như thế nào? Có cùng một tình thế tiến thoái lưỡng nan ... –

Trả lời

5

Bạn có thể cố gắng làm cho cả những công việc di cư và ứng dụng độc lập với nhau bằng cách làm như sau:

  • Có công việc trở lại di cư thành công ngay cả khi di cư thất bại. Giữ một bản ghi máy tiêu thụ ở đâu đó về kết quả của quá trình di chuyển. Điều này có thể được thực hiện một cách rõ ràng (bằng cách nói, viết phiên bản lược đồ mới nhất vào một số trường bảng cơ sở dữ liệu) hoặc ngầm (bằng, giả sử rằng một trường cụ thể phải được tạo ra cùng với một công việc di chuyển thành công). Công việc di chuyển sẽ chỉ trả về một mã lỗi nếu nó không thành công vì lý do kỹ thuật (auch là không có cơ sở dữ liệu mà việc di chuyển nên được áp dụng). Bằng cách này, bạn có thể thực hiện việc di chuyển thông qua Kubernetes Jobs và dựa vào khả năng của nó để hoàn thành cuối cùng.
  • Tạo phiên bản ứng dụng mới sao cho nó có thể hoạt động với cơ sở dữ liệu ở cả giai đoạn trước và sau di chuyển. Điều này có nghĩa là tùy thuộc vào yêu cầu kinh doanh của bạn: Ứng dụng có thể không hoạt động cho đến khi quá trình di chuyển hoàn tất thành công hoặc có thể trả về các kết quả khác nhau cho khách hàng tùy thuộc vào giai đoạn hiện tại. Điểm mấu chốt ở đây là ứng dụng xử lý kết quả di chuyển mà các công việc di chuyển được tạo ra trước đó và hoạt động tương ứng mà không chấm dứt sai lầm.

Kết hợp hai phương pháp thiết kế này, bạn sẽ có thể phát triển và thực hiện các công việc di chuyển và ứng dụng độc lập với nhau và không phải giới thiệu bất kỳ khớp nối thời gian nào.

Cho dù ý tưởng này thực sự hợp lý để triển khai phụ thuộc vào chi tiết cụ thể hơn về trường hợp của bạn, chẳng hạn như sự phức tạp của các nỗ lực di chuyển cơ sở dữ liệu của bạn. Cách khác, như bạn đã đề cập, chỉ đơn giản là triển khai các pod không được quản lý vào cụm thực hiện di chuyển. Điều này đòi hỏi một chút dây hơn vì bạn sẽ cần phải thường xuyên kiểm tra kết quả và phân biệt giữa các kết quả thành công và thất bại.

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