Những lợi ích của việc chạy đầu bếp-máy chủ thay vì đầu bếp-solo là gì?


33

Tôi đang xem xét các giải pháp triển khai tự động cho nhóm của mình và đã chơi với Chef trong vài ngày qua. Tôi đã có thể tải ứng dụng web đơn giản chạy từ máy ảo Red Hat cơ bản bằng cách sử dụng đầu bếp-solo.

Mục tiêu cuối cùng của chúng tôi là sử dụng Chef (hoặc một hệ thống khác) để tự động triển khai các cấu trúc liên kết ứng dụng lên đám mây khi chúng tôi chạy các bản dựng. Quá trình của chúng tôi về cơ bản sẽ chạy như thế này:

  1. Mã ứng dụng web, phụ thuộc và sách dạy nấu ăn của chúng tôi được lưu trữ trong SCM
  2. Bản dựng được thực thi và tạo một gói duy nhất để hình ảnh thu được và kiểm tra lại
  3. Công cụ xây dựng sau đó triển khai các hình ảnh đám mây mới chạy ứng dụng khách đầu bếp để cài đặt các gói.
  4. Các hình ảnh có được các sách dạy nấu ăn từ SCM hoặc máy chủ Chef và cài đặt mọi thứ để bắt đầu và chạy

Những lợi ích và / hoặc trường hợp sử dụng để chạy Chef Server là gì?

Có bất kỳ lợi ích lớn nào để có một Máy chủ đầu bếp nắm giữ và có được các sách dạy nấu ăn từ SCM so với sử dụng đầu bếp-solo và có một kịch bản sẽ kéo các sách nấu ăn từ SCM không?

Câu trả lời:


67

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.


Làm thế nào bạn sẽ lưu trữ / phân phối dữ liệu nhạy cảm (ví dụ: khóa riêng / mật khẩu) với đầu bếp-solo? Làm cách nào để theo dõi nó với kiểm soát sửa đổi mà không lưu trữ dưới dạng bản rõ?
Limbo Peng

@LimboPeng Bạn có thể lưu trữ túi dữ liệu được mã hóa trong repo Chef. Bạn phải lưu trữ khóa mã hóa bên ngoài mặc dù.
Willie Wheeler

27

Tiết lộ: Tôi làm việc cho Opscode.

Lợi ích chính của Chef Server so với Solo là khả năng sử dụng tìm kiếm với cơ sở hạ tầng của bạn. Ví dụ cổ điển là một bộ cân bằng tải với các máy chủ web. Bộ cân bằng tải có thể tự động cập nhật cấu hình của nó khi các máy chủ web được thêm và xóa vào cơ sở hạ tầng, chỉ bằng cách tìm kiếm chúng. Solo chỉ là vậy, các máy đơn lẻ, trong khi Chef Server mang đến khả năng truy vấn những thứ như "tất cả các máy có hơn 4 hợp đồng RAM" hoặc "chủ cơ sở dữ liệu".

Chef Server cũng cung cấp cho bạn khả năng quản lý cơ sở hạ tầng của bạn mà không cần sao chép tarball xung quanh, để trực quan hóa cơ sở hạ tầng của bạn với bảng điều khiển quản lý và quản lý các máy nào đang chạy phiên bản sách nấu ăn nào với Môi trường. Có những lợi ích khác, nhưng đó là những lợi ích ngoài đầu tôi. Nếu bạn muốn dùng thử Chef Server mà không cần cài đặt nó, chỉ cần đăng ký tài khoản Opscode Hosted Chef, 5 nút đầu tiên là miễn phí.


1
Cảm ơn mray, thông tin đó giúp TON. Bạn có biết người ta sẽ nắm lấy triết lý của DevOps như thế nào khi sử dụng máy chủ Chef không? Ý tôi là điều này là có tất cả các sách dạy nấu ăn của chúng tôi sống trong SCM. Có cách nào dễ dàng để máy chủ Chef nhận được cập nhật sách nấu ăn khi chúng tôi cung cấp mã mới không?
linusthe3

2
@ strife25 Bạn chắc chắn nên có sách dạy nấu ăn của mình trong một hệ thống kiểm soát phiên bản. Nếu bạn không được biết đến một, Opscode khuyên bạn nên Git vì nó dễ dàng làm việc với các nhánh và đá cho các nhóm phân phối. Bạn có thể viết một cái móc sau cam kết tải sách dạy nấu ăn lên máy chủ Chef. Bạn không chỉ sao chép sách dạy nấu ăn trên máy chủ Chef vì bạn tải chúng qua API và điều này rất có chủ đích theo thiết kế.
jtimberman

1

Chef-server quản lý sách dạy nấu ăn và dữ liệu cấu hình cho các nút của bạn.

Bạn thêm sách dạy nấu ăn vào máy chủ đầu bếp bằng công cụ dao và sau đó cung cấp cho mỗi nút một danh sách các công thức nấu ăn để họ lấy các sách nấu ăn họ cần khi nút tự thiết lập bằng cách sử dụng đầu bếp-khách hàng. Vì đầu bếp-khách hàng chạy trong nền, các nút của bạn sẽ kiểm tra định kỳ nếu có sách nấu ăn được cập nhật trong máy chủ đầu bếp của bạn.

Chef-server cũng giữ dữ liệu và biến cấu hình của bạn để bạn có thể thay đổi cài đặt cho các nút của mình để tự động nhận. Điều này tốt cho các cài đặt động hơn mà không nên hoặc không thể mã hóa trong công thức nấu ăn của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.