Tại sao nên sử dụng Chef / Puppet over shell script?


81

Mới sử dụng công cụ Puppet và Chef. Có vẻ như công việc mà họ đang làm có thể được thực hiện với shell scripting. Có lẽ nó đã được thực hiện trong các kịch bản shell cho đến khi chúng xuất hiện.

Tôi đồng ý họ dễ đọc hơn. Nhưng, có bất kỳ lợi thế nào khác so với các kịch bản shell ngoài việc có thể đọc được không?

Câu trả lời:


56

Một ngôn ngữ dành riêng cho tên miền tạo ra sự khác biệt lớn về số lượng mã bạn viết. Ví dụ: bạn có thể lập luận rằng không có nhiều khác biệt giữa:

chmod 640 /my/file

file { "/my/file":
    mode => 640,
}

nhưng có rất nhiều sự khác biệt giữa những điều này:

FILE=/my/file
chmod 640 $FILE
chown foo $FILE
chgrp bar $FILE
wget -O $FILE "http://my.puppet.server/dist/$FILE"
     # where the URL contains "Hello world"

file { "/my/file":
    mode => 640,
    owner => foo,
    group => bar,
    content => "Hello world",
}

Điều gì xảy ra nếu wget thất bại? Kịch bản của bạn sẽ xử lý như thế nào? Và điều gì xảy ra nếu có gì đó sau đó trong tập lệnh của bạn yêu cầu $ FILE ở đó với nội dung chính xác?

Bạn có thể lập luận rằng người ta chỉ có thể đưa echo "Hello world" > $FILEvào tập lệnh, ngoại trừ trong ví dụ đầu tiên, tập lệnh phải được chạy trên máy khách, trong khi con rối biên dịch tất cả điều này trên máy chủ. Vì vậy, nếu bạn thay đổi nội dung, bạn chỉ phải thay đổi nội dung trên máy chủ và nó sẽ thay đổi nội dung cho nhiều hệ thống mà bạn muốn đưa vào. Và con rối xử lý các phụ thuộc và chuyển vấn đề cho bạn tự động.

Không có so sánh - các công cụ quản lý cấu hình phù hợp giúp bạn tiết kiệm thời gian và độ phức tạp. Bạn càng cố gắng thực hiện, các kịch bản shell càng có vẻ không đủ, và bạn sẽ tiết kiệm được nhiều nỗ lực hơn bằng cách thực hiện với con rối.


9
@Paul Gear, thật đơn giản để nói rằng các công cụ quản lý cấu hình là con đường để đi về lâu dài. Ví dụ: sử dụng AWS, tập lệnh shell có thể xây dựng máy chủ từ đầu, chạy một số thử nghiệm và một khi bạn chắc chắn rằng bản năng AWS vẫn ổn, hãy tạo một hình ảnh. Sau đó, bạn có thể triển khai hình ảnh này lên môi trường xem trước hoặc dàn dựng để thử nghiệm thêm, một khi bạn xác nhận hình ảnh là tốt cho mục đích của bạn, sau đó bạn đẩy sang sản xuất. Các công cụ quản lý cấu hình không giúp ích gì trong kịch bản này.
Derek Litz

Bây giờ nếu bạn muốn quản lý 100 máy chủ chuyên dụng mà mọi người đang sử dụng hàng ngày (và bạn có ít quyền kiểm soát đối với những gì họ làm, nhầm lẫn hoặc không) đó là nơi nên sử dụng các công cụ quản lý cấu hình.
Derek Litz

6
Đây không phải là một ví dụ rất thuyết phục. Tôi có thể bắt đầu với wget và sau đó tôi sẽ không rơi vào trạng thái kỳ lạ. Tập tin có giống như một giao dịch sẽ được khôi phục nếu bất kỳ bước nào không thành công?
PSkocik

33

Đây sẽ là một ý kiến ​​không phổ biến, nhưng hệ thống quản lý cấu hình không nhất thiết phải tốt hơn. Đôi khi đơn giản thực sự là tốt nhất.

Có một đường cong học tập nhất định và chi phí quản trị liên quan đến hệ thống cấu hình bạn chọn. Bạn sau khi tất cả giới thiệu một phụ thuộc. Như với bất kỳ tự động hóa nào, bạn cũng phải cẩn thận rằng bảo mật được duy trì trong các cấu hình được triển khai.

Tôi chỉ có một vài trường hợp chúng tôi đã triển khai quản lý cấu hình và nó bị kẹt. Luôn luôn là khi có một số lượng lớn các hệ thống có cấu hình lặp đi lặp lại và cần phải thực hiện các triển khai cắt cookie có thể định cấu hình.


10
Khi chi phí quản lý môi trường lớn đến mức việc quản lý tự động hóa thực sự rẻ hơn. Nếu đơn giản hơn với các thay đổi tập lệnh được quản lý trong Git hoặc thiết lập mọi thứ trong bộ ghép kênh ssh, chúng tôi sẽ làm điều đó. Điều quan trọng nhất đối với tôi là tôi giám sát các hệ thống và xác minh mọi thứ đang hoạt động như mong đợi. Miễn là tôi được cảnh báo khi một cái gì đó được cấu hình sai, nó không quan trọng như thế nào nó được cấu hình.
kenchilada

10
@ewwhite "khi nào bạn quyết định tự động hóa chứ không phải" xkcd.com/1205
MikeyB

3
Các công cụ hiện đại hơn như Ansible có chi phí quản lý / triển khai ít hơn đáng kể so với Chef hoặc Puppet, đòi hỏi ít hoặc không phụ thuộc (đặc biệt là Ansible là không có tác nhân). Điều này thực sự làm giảm thanh cho việc áp dụng.
GomoX

2
@ewwhite Bạn tự động hóa khi bạn muốn cho năng suất cá nhân. Bạn học bằng cách tự động hóa, bạn không học bằng cách thực hiện các nhiệm vụ trần tục. Học tập = tăng năng suất và cải tiến lặp đi lặp lại. Việc tự động hóa kết hợp với điều này để tạo ra nhiều tích cực hơn. Đó là một quả cầu tuyết tích cực thay vì một quả bóng âm. Tiến bộ kỹ thuật so với nợ kỹ thuật.
Derek Litz

2
@ABB Không, điều đó không ngụ ý. Tôi thậm chí không đề cập đến các kịch bản shell, tôi đề cập đến tự động hóa như là một thực tiễn chung. Bạn có thể tự động hóa mọi thứ với các kịch bản shell và tìm hiểu sự trừu tượng hóa kịch bản thay vì thực hiện thủ công, điều này không chỉ giúp bạn tiết kiệm thời gian thực hiện lại nhiệm vụ đó, nó sẽ ngăn ngừa các lỗi. Ngoài ra, bạn sẽ có thể viết kịch bản tiếp theo của bạn tốt hơn một chút sau đó là kịch bản cuối cùng. Một quả bóng tuyết tích cực ... Tuy nhiên, nếu bạn là một chuyên gia viết kịch bản và bạn không viết kịch bản gì đó bạn sẽ chạy lại, nó không giúp bạn học hoặc tiết kiệm thời gian theo bất kỳ cách nào.
Derek Litz

23

Bạn đã trả lời câu hỏi của riêng bạn ...

Tự động hóa đang trở nên có khả năng mở rộng và chính thức hơn . Puppet và Chef được coi là tiêu chuẩn trong những ngày này (kiểm tra quảng cáo việc làm ).

Các kịch bản shell kết hợp với nhau có vị trí của chúng, nhưng chúng không thể mở rộng được trong bối cảnh của phong trào DevOps. Khả năng đọc là một phần của điều đó.


7
Là kịch bản shell bằng cách nào đó ít chính thức? Có trích dẫn quảng cáo việc làm làm cho một lập luận thuyết phục? Và một tín đồ là một điều khá xấu hổ, vì anh ta không được yêu cầu làm nhà phát triển. Các liên kết nói không có gì thực sự về khả năng mở rộng. Là tuyên bố rằng shell script không thể mở rộng? Tôi nghĩ rằng Puppet rất thú vị, nhưng không nhất thiết phải có lý do trong câu trả lời.
Acumenus

Quảng cáo việc làm phản ánh thị trường thực sự cho các kỹ năng cụ thể. Có, sử dụng quản lý cấu hình cho mục đích dự định của nó có khả năng mở rộng hơn, mạnh mẽ hơn và dễ dàng hơn tài liệu so với các tập lệnh shell. Tôi đã ở trong nhiều môi trường và hầu hết các tập lệnh mà tôi thấy không được xây dựng theo cách mà người ta cho là "chất lượng sản xuất" và được tổ chức để xử lý các trường hợp ngoại lệ. Xem câu trả lời được chấp nhận để hiểu lý do tại sao.
ewwhite

1
"Và một tín đồ là một điều khá xấu hổ, vì anh ta không được yêu cầu làm nhà phát triển." Điều này chỉ đơn giản là không đúng sự thật. DevOps là một chuyên ngành phát triển, giống như Phát triển Web. Các mô hình và thực tiễn phát triển phần mềm vẫn được áp dụng. Bạn nên đọc về DevOps.
Chaim Eliyah

13

Chef giúp quản lý và phiên bản thiết lập cơ sở hạ tầng phức tạp dễ dàng hơn , đặc biệt là trong bất kỳ loại môi trường đám mây nào so với việc phải tự tay ftp hoặc scp một loạt các kịch bản shell được tổ chức theo kiểu không chuẩn. Tùy thuộc vào số lượng phụ thuộc bạn cần quản lý, quy mô của chiến thắng này có thể khác nhau rất nhiều, khiến cho quyết định chuyển sang giải pháp CM trở nên không rõ ràng đối với nhiều người.

Lợi ích thực sự (thường không được tiết lộ) của Chef là sự bình tĩnh . Có thể chắc chắn về trạng thái của tài nguyên bất kể sự kết hợp của các công thức nấu ăn chạy với các lợi ích chồng chéo là một lợi ích rất lớn so với cấu hình tập lệnh shell. Nếu bạn có các kịch bản shell cho cấu hình bây giờ, hãy tự hỏi có bao nhiêu trong số chúng có thể được chạy nhiều lần mà không có hậu quả không mong muốn / không mong muốn?

Một giải pháp CM thích hợp giúp đảm bảo thành công ở quy mô bằng cách đơn giản hóa tự động hóa đa nền tảng và hợp tác nhóm. Mặc dù có thể thực hiện tất cả điều này với một nhóm các kịch bản shell được tổ chức tốt, được duy trì đúng cách; bạn phải tự hỏi mình "tại sao". Chef / Puppet và các công nghệ tương tự ra đời vì một nhóm SysOps tài năng đã mệt mỏi vì phải giải quyết những vấn đề tương tự hết lần này đến lần khác và đặt ra cho chúng ta một lựa chọn tốt hơn.

Chìa khóa:

  • Vô tư
  • Quản lý phụ thuộc dễ dàng (phiên bản)
  • Tổ chức tiêu chuẩn hóa (được chấp nhận ở cấp độ ngành)
  • Trừu tượng để tách các tác vụ cấu hình máy chủ khỏi các chi tiết cấp hệ thống
  • Khả năng tận dụng kiến ​​thức cộng đồng (được đảm bảo tuân thủ tất cả các nguyên tắc trên)

3
Idempotence là khó có thể với ss. Sự phụ thuộc được quản lý tốt bởi yum / apt, v.v. Chấp nhận là không liên quan. Kiến thức cộng đồng tồn tại cho ss. Tuy nhiên, tôi chấp nhận rằng việc không phải sao chép một loạt các tập lệnh và cả cấu hình hệ thống tập trung, đều hữu ích. Tôi nghe nói con rối đòi hỏi một đại lý phía khách hàng.
Acumenus

10

Các công cụ quản lý cấu hình hiện đại như Puppet và Chef cho phép bạn xác định trạng thái của hệ thống thay vì lo lắng về các hoạt động cần thiết để đạt được một máy chủ được cấu hình.

Ví dụ: lệnh chmod của bạn giả định rằng tệp tồn tại, người dùng sở hữu tệp tồn tại, các thư mục đã được tạo, v.v. Kịch bản của bạn do đó phải xem xét tất cả các điều kiện tiên quyết.

Các công cụ quản lý cấu hình dựa trên trạng thái đơn giản hơn: bạn chỉ cần quan tâm rằng tệp có quyền chính xác. Làm thế nào đạt được là vấn đề của công cụ.


1
Trên thực tế, tôi chmodkhông cho rằng tệp tồn tại bởi vì tệp được tạo bởi hoặc được kiểm tra để tồn tại bởi tập lệnh.
Acumenus

9

Nếu các máy chủ chỉ dùng một lần cho bạn hoặc bạn có thể đứng lên nhiều hơn một vài lần, một hệ thống CM đầy đủ sẽ đáp ứng tốt hơn nhu cầu của bạn so với một loạt các kịch bản shell.

Nếu nhu cầu xây dựng của bạn khiêm tốn, (hoặc thích các máy chủ thương mại công bằng tự do phạm vi tự do thủ công thủ công), thì hãy giữ cho nó đơn giản.

Cá nhân, đã sử dụng Chef một cách rộng rãi ở một buổi biểu diễn trước đây, tôi đã cố gắng 'giữ cho nó đơn giản' tại buổi biểu diễn này, nhưng tôi thực sự đã bỏ lỡ những nguyên thủy, trừu tượng và sức mạnh mà Chef cung cấp. Ngay cả khi bạn gặp tình huống bạn có thể nhận được những gì bạn cần từ một vài lệnh shell, bạn chỉ cần chạy những lệnh có khối 'lệnh', nhập chính xác các lệnh shell của bạn như bạn sẽ viết chúng vào shell.

Như đã nói, bạn có thể chạy Chef mà không cần máy chủ (Chef-solo) và tôi khá chắc chắn rằng Puppet có một sự tương tự, nơi bạn vẫn có thể tận dụng sách dạy nấu ăn và công thức nấu ăn của người khác mà không cần chạy máy chủ trung tâm.

Một lợi ích khác là cộng đồng: có rất nhiều người (nhiều người trong số họ sẽ thông minh hơn và / hoặc có nhiều kinh nghiệm hơn bạn). Cá nhân tôi thích nó khi người khác đã làm công việc của tôi cho tôi, thường là rộng rãi hơn tôi sẽ có.


1

Tôi đã tạo khung công tác tự động hóa máy chủ dựa trên tập lệnh shell: https://github.com/myplaceonline/poseixcube

Tôi chắc chắn tôi không phải là người đầu tiên thực hiện loại dự án này nhưng tôi không thể tìm thấy thứ gì đó phù hợp với nhu cầu của mình, vì vậy tôi nghĩ những người khác có thể thấy nó hữu ích. Tôi chỉ có kinh nghiệm với Chef, nhưng khi tôi bắt đầu nhìn quanh Ansible và những người khác, tôi muốn đưa ra các kịch bản shell, và tôi thích kết quả cho đến nay.

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.