Tôi sẽ định hướng câu trả lời này như thể câu hỏi là "lợi thế của đầu bếp-solo" là gì vì đó là cách tốt nhất mà tôi biết để bao quát sự khác biệt giữa các cách tiếp cận.
Đề xuất tóm tắt của tôi phù hợp với những người khác: sử dụng máy chủ đầu bếp nếu bạn cần quản lý môi trường ảo, năng động, nơi bạn sẽ thường xuyên thêm và xóa các nút. Một máy chủ đầu bếp cũng là một CMDB tốt , nếu bạn cần. Sử dụng đầu bếp-solo nếu bạn có một môi trường kém năng động hơn, nơi các nút sẽ không thay đổi quá thường xuyên nhưng vai trò và công thức nấu ăn sẽ. Kích thước và độ phức tạp của môi trường của bạn ít nhiều không liên quan. Cả hai cách tiếp cận quy mô rất tốt.
Nếu bạn triển khai đầu bếp-solo, hãy sử dụng cronjob với rsync, 'git pull' hoặc một số cơ chế truyền tệp tạm thời khác để duy trì một bản sao đầy đủ của kho lưu trữ đầu bếp trên mỗi nút. Các cronjob nên dễ dàng cấu hình để (a) không chạy hoàn toàn và (b) chạy, nhưng không đồng bộ hóa kho lưu trữ cục bộ. Thêm một nút / thư mục trong kho lưu trữ đầu bếp của bạn với một tệp json cho mỗi nút. Cronjob của bạn có thể tinh vi như bạn muốn về việc xác định nốt chính xác (mặc dù tôi muốn giới thiệu đơn giản là $ (tên máy chủ -s) .json. Bạn cũng có thể muốn tạo tài khoản opscode và định cấu hình ứng dụng khách với đầu bếp được lưu trữ, nếu không có lý do nào khác ngoài việc có thể sử dụng dao để tải xuống sách dạy nấu ăn cộng đồng và tạo bộ xương.
Có một số lợi thế của phương pháp này, bên cạnh việc "không phải quản trị máy chủ" rõ ràng. Kiểm soát nguồn của bạn sẽ là trọng tài cuối cùng của tất cả các thay đổi cấu hình, kho lưu trữ sẽ bao gồm tất cả các nút và danh sách chạy và mỗi máy chủ hoàn toàn độc lập tạo điều kiện cho một số tình huống kiểm tra thuận tiện.
Chef-server giới thiệu một lỗ hổng trong đó bạn sử dụng "tải lên dao" để cập nhật sách nấu ăn và bạn phải tự vá lỗ hổng này (chẳng hạn như với một móc nối sau cam kết) hoặc rủi ro thay đổi trang web bị ghi đè lên một cách im lặng bởi ai đó "tải lên dao" là một công thức lỗi thời từ kho lưu trữ cục bộ lỗi thời trên máy tính xách tay của mình. Điều này ít có khả năng xảy ra với đầu bếp-solo, vì tất cả các thay đổi sẽ được đồng bộ hóa với các máy chủ trực tiếp từ kho lưu trữ chính. Vấn đề ở đây là kỷ luật và số lượng cộng tác viên. Nếu bạn là nhà phát triển solo hoặc một nhóm rất nhỏ, tải lên sách dạy nấu ăn qua API không phải là rất rủi ro. Trong một nhóm lớn hơn có thể là nếu bạn không áp dụng các biện pháp kiểm soát tốt.
Ngoài ra, với đầu bếp-solo, bạn có thể lưu trữ tất cả các vai trò, thuộc tính tùy chỉnh và danh sách chạy của bạn dưới dạng tệp node.json trong kho lưu trữ đầu bếp chính của bạn. Với đầu bếp-máy chủ, vai trò và danh sách chạy được sửa đổi nhanh chóng bằng API. Với đầu bếp-solo, bạn có thể theo dõi thông tin này trong kiểm soát sửa đổi. Đây là nơi có thể thấy rõ xung đột giữa môi trường tĩnh và động. Nếu danh sách các nút của bạn (cho dù có thể kéo dài bao lâu) không thay đổi thường xuyên, thì việc có dữ liệu này trong kiểm soát sửa đổi là rất hữu ích. Mặt khác, nếu bạn thường xuyên sinh ra các nút mới và phá hủy các nút cũ (không bao giờ gặp lại tên máy chủ hoặc fqdn của chúng) thì việc giữ tất cả trong kiểm soát sửa đổi chỉ là một rắc rối không cần thiết và có API để thay đổi là rất thuận tiện. Chef-server cũng có toàn bộ các tính năng hướng đến việc quản lý môi trường đám mây động, như tùy chọn tên trên "dao bootstrap" cho phép bạn thay thế fqdn như cách mặc định để xác định nút. Nhưng trong một môi trường tĩnh, các tính năng này có giá trị hạn chế, đặc biệt là so với việc có các vai trò và danh sách điều khiển trong kiểm soát sửa đổi với mọi thứ khác.
Cuối cùng, môi trường kiểm tra công thức có thể được thiết lập nhanh chóng mà hầu như không phải làm thêm. Bạn có thể vô hiệu hóa các cronjobs đang chạy trên máy chủ và thực hiện thay đổi trực tiếp với kho lưu trữ cục bộ của nó. Bạn có thể kiểm tra các thay đổi bằng cách chạy Chef-solo và bạn sẽ thấy chính xác cách máy chủ sẽ tự cấu hình trong sản xuất. Khi mọi thứ đã được kiểm tra, bạn có thể đăng ký thay đổi và bật lại các cronjobs cục bộ. Tuy nhiên, khi viết công thức nấu ăn, bạn sẽ không thể sử dụng API "Tìm kiếm", nghĩa là nếu bạn muốn viết công thức động (ví dụ: trình cân bằng tải), bạn sẽ phải hack xung quanh giới hạn này, thu thập dữ liệu từ các tệp json trong các nút / thư mục của bạn, có thể ít thuận tiện hơn và sẽ thiếu một số dữ liệu có sẵn trong CMDB đầy đủ. Một lần nữa, các môi trường năng động hơn sẽ ủng hộ cách tiếp cận dựa trên cơ sở dữ liệu, môi trường ít năng động hơn sẽ ổn với các tệp json trên đĩa cục bộ. Trong môi trường máy chủ nơi đầu bếp chạy phải thực hiện các lệnh gọi API đến cơ sở dữ liệu trung tâm, bạn sẽ phụ thuộc vào việc quản lý tất cả các môi trường thử nghiệm trong cơ sở dữ liệu đó.
Việc cuối cùng cũng có thể được sử dụng trong trường hợp khẩn cấp. Nếu bạn đang khắc phục sự cố nghiêm trọng trên các máy chủ sản xuất và giải quyết vấn đề đó bằng thay đổi cấu hình, bạn có thể thực hiện thay đổi ngay lập tức trên kho lưu trữ của máy chủ, sau đó đẩy nó ngược dòng lên chính.
Đó là những lợi thế chính của đầu bếp-solo. Có một số người khác, như không phải quản trị một máy chủ hoặc trả tiền cho đầu bếp được lưu trữ, nhưng đó là những mối quan tâm tương đối nhỏ.
Tóm lại: Nếu bạn năng động và ảo hóa cao, đầu bếp-máy chủ cung cấp một số tính năng tuyệt vời (được đề cập ở nơi khác) và hầu hết các lợi thế của đầu bếp-solo sẽ ít được chú ý hơn. Tuy nhiên, có một số lợi thế nhất định, thường không được đề cập đến cho đầu bếp-solo đặc biệt là trong các môi trường truyền thống hơn. Lưu ý rằng việc được triển khai trên đám mây không nhất thiết có nghĩa là bạn có môi trường năng động. Nếu bạn không thể, ví dụ, thêm nhiều nút vào hệ thống của bạn mà không phát hành phiên bản mới của phần mềm, có lẽ bạn không năng động. Cuối cùng, từ góc độ cấp cao, CMDB có thể hữu ích cho bất kỳ số lượng nào chỉ liên quan đến quản trị hệ thống và cấu hình như kế toán và chia sẻ thông tin giữa các nhóm. Sử dụng đầu bếp-máy chủ có thể đáng giá cho tính năng đó một mình.