Thứ năm, 04/09/2014 | 00:00 GMT+7

Cách cài đặt puppet ở chế độ độc lập trên CentOS 7

Mục tiêu của hướng dẫn này là cài đặt và chạy Puppet ở chế độ độc lập trên CentOS 7 càng nhanh càng tốt.

Nếu bạn muốn tìm hiểu một chút về Puppet và cách nó có thể hữu ích cho bạn, hãy tiếp tục đọc. Nếu bạn đã bị thuyết phục và muốn bắt đầu cài đặt Puppet, hãy chuyển đến phần Các quy ước được sử dụng trong Hướng dẫn này bên dưới.

Tại sao sử dụng Puppet ?

Puppet là gì?

Puppet là một công cụ phần mềm quản lý cấu hình open-souce cho phép các tổ chức kiểm soát cấu hình chính xác của hàng chục nghìn nút từ một server trung tâm. Puppet đã trưởng thành và phổ biến, được các tổ chức lớn trên thế giới sử dụng. Tuy nhiên, việc cài đặt Puppet theo mô hình client / server phân tán này có thể phức tạp, yêu cầu cài đặt server Puppet trung tâm và mối quan hệ của nó với các node client .

Puppet có hình ảnh mạnh mẽ như một công cụ cấu hình cloud hàng loạt, đến nỗi bạn có thể ngạc nhiên khi biết rằng Puppet cũng có thể được chạy ở chế độ “độc lập” trong đó nó được chạy theo cách thủ công để cấu hình một nút duy nhất. Ở chế độ độc lập, Puppet là một công cụ tuyệt vời để cấu hình các node riêng lẻ.

Nếu bạn đã cấu hình các server DigitalOcean của bạn theo cách thủ công (tức là bằng SSHing vào server cloud và nhập một loạt lệnh vào shell lệnh Linux), thì Puppet có thể hỗ trợ bạn nhúng tất cả kiến thức về quy trình cấu hình đó vào một file cấu hình Puppet duy nhất (hoặc cây folder ) có thể được gọi để tạo lại nút từ đầu hoặc cấu hình lại nút nếu nó bị hỏng.

Puppet không chỉ là một trình quản lý lệnh cài đặt được tôn vinh. Khi Puppet chạy, nó sẽ kiểm tra cấu hình của nút, xác định bất kỳ sự khác biệt nào giữa cấu hình của nút và cấu hình được chỉ định trong file cấu hình Puppet, sau đó áp dụng các thay đổi cần thiết để đưa nút về trạng thái được chỉ định. Điều này nghĩa là nó được dùng cả để cấu hình các node và sửa chữa chúng.

Tại sao sử dụng Công cụ quản lý cấu hình?

Ta có thể xác định ba mức độ phức tạp trong việc cài đặt phần mềm: thủ công, tập lệnh và dựa trên quản lý cấu hình.

  • Trong cài đặt thủ công , bạn SSH vào nút và đưa ra một loạt lệnh
    vào shell lệnh để cài đặt phần mềm.

  • Trong cài đặt theo tập lệnh, bạn tạo một tập lệnh (ví dụ: tập lệnh Ruby hoặc tập lệnh BASH)
    để cài đặt phần mềm và thực thi nó.

  • Trong cài đặt dựa trên quản lý cấu hình , bạn tạo một cấu hình
    đặc điểm kỹ thuật của công cụ quản lý về trạng thái mong muốn của nút và công cụ cấu hình so sánh trạng thái của nút với trạng thái mong muốn và đưa nút sang trạng thái mong muốn.

Nên tránh cài đặt thủ công vì đây là giải pháp tiền tự động hóa nhúng tất cả kiến thức cài đặt vào đầu của một hoặc nhiều kỹ sư hơn là vào một file (trừ khi các kỹ sư đã viết ra quy trình cài đặt).

Cài đặt theo tập lệnh tốt hơn nhiều so với cài đặt thủ công, nhưng gặp phải vấn đề là nếu bạn thực hiện cài đặt và sau đó làm hỏng một số phần nhỏ của nó, bạn không thể sử dụng tập lệnh để sửa chữa hư hỏng; bạn phải bắt đầu lại từ đầu và cài đặt lại mọi thứ.

Cài đặt dựa trên quản lý cấu hình là giải pháp tốt nhất. Công cụ quản lý cấu hình sẽ tự động cài đặt (cũng như lệnh cài đặt ), nhưng nó cũng được dùng để sửa chữa phần mềm nếu nó bị hỏng. Nó cũng được dùng để thay đổi cấu hình mong muốn và đưa nút sang trạng thái mong muốn mới.

Tại sao lại sử dụng puppet cụ thể?

Tính đến tháng 8 năm 2014, dường như có hai công cụ cấu hình chính trên thị trường: Puppet và Chef. Một tìm kiếm nhanh cho thấy cả hai dường như đều là những công cụ có vẻ trưởng thành với lượng người theo dõi trung thành. Một điểm khác biệt chính là Puppet mang tính khai báo nhiều hơn và Chef mang tính thủ tục hơn, điều này làm cho Puppet hấp dẫn hơn để sửa chữa thiệt hại. Dưới đây là một số bài báo so sánh.

Hướng dẫn này không tìm cách so sánh toàn diện.

Bông tuyết, Vật nuôi và Gia súc

Một phép ẩn dụ đã nảy sinh trong thế giới cấu hình phần mềm để mô tả ba cấp độ
về sự tinh vi của quản lý cấu hình server . Bạn có thể ở bông tuyết
cấp độ, cấp độ vật nuôi hoặc cấp độ gia súc. Đây là cách nó hoạt động:

  • Nút của bạn là một bông tuyết nếu bạn không biết nó ở trạng thái như thế nào
    nó đang ở trong và / hoặc bạn quá lo lắng để thực hiện bất kỳ thay đổi nào đối với nó, hoặc thậm chí chạm vào
    nó trong trường hợp nó bị vỡ. Nếu nó bị vỡ, bạn thực sự gặp rắc rối. Nút của bạn là
    như một bông tuyết mỏng manh.

  • Nút của bạn là một con vật cưng nếu bạn tự tin rằng bạn có thể sửa nó nếu nó bị hỏng,
    nhưng ý nghĩ về việc cấu hình nó từ đầu khiến bạn sợ hãi. Khi của bạn
    vật nuôi bị bệnh, bạn đưa nó đến bác sĩ thú y để chữa bệnh.

  • Nút của bạn là đầu đàn gia súc nếu việc cấu hình nó đã được tự động hóa đến mức, nếu
    có sự cố với nút, việc cấu hình lại từ đầu sẽ dễ dàng hơn
    sử dụng công cụ cấu hình tự động của bạn hơn là cố gắng sửa chữa nó. Khi nào
    một trong những con gia súc của bạn bị bệnh, bạn không đưa nó đến bác sĩ thú y; bạn bắn nó trong
    đầu và lấy một cái mới.

Mục đích của phép ẩn dụ là truyền đạt quan điểm "trâu bò" về quản lý nút. Hầu hết các administrator hệ thống đã quá quen với việc coi các node như bông tuyết hoặc vật nuôi đến nỗi ý tưởng chỉ giết một nút khi nó bị hỏng có vẻ khá xa lạ. Tuy nhiên, chỉ cần vài giây suy nghĩ để thay đổi quan điểm của một người và nhận ra sức mạnh của mô hình chăn nuôi gia súc.

  • Hệ thống file đã bị hỏng? Không sao, chỉ cần giết nút và tạo lại nó từ đầu bằng Puppet.

  • Một phần mềm khó hiểu đã đột nhiên ngừng hoạt động? Không sao, chỉ cần giết nút và tạo lại nó từ đầu bằng Puppet.

  • Một hacker đã xâm nhập vào hệ thống của bạn và cài đặt một bộ root? Không sao, chỉ cần giết nút và tạo lại nó từ đầu bằng Puppet.

Đối xử với các hạch của bạn như gia súc có thể là một cái nạng. Cuối cùng, tốt nhất là tìm ra nguồn root của bất kỳ thứ gì đang làm hỏng nút của bạn và khắc phục sự cố thực sự, nhưng trong khi chờ đợi, sẽ rất hiệu quả nếu chỉ tự động xây dựng lại.

Trong ba cấp độ cài đặt, cài đặt quản lý cấu hình và tập lệnh đều hỗ trợ mô hình trâu bò.Tuy nhiên, mô hình quản lý cấu hình cũng hỗ trợ mô hình vật nuôi. Theo mô hình kịch bản, nếu bạn muốn cài đặt phần mềm bổ sung, bạn phải bắt đầu từ đầu. Trong mô hình quản lý cấu hình, bạn có thể sửa đổi nút hiện có của bạn .

Puppet cho phép bạn chuyển từ mô hình bông tuyết sang mô hình gia súc, với tùy chọn coi gia súc của bạn như vật nuôi khi thuận tiện.

(Lưu ý: Tác giả không thoải mái khi đối xử với bất kỳ động vật nào như gia súc, nhưng phép ẩn dụ gia súc hoạt động tốt như một phép ẩn dụ cấu hình.)

Puppet

Cách Puppet để cấu hình các node là cấu hình mọi thứ từ bên trong Puppet. Điều này đôi khi có thể hơi khó khăn, nhưng hầu như luôn có thể cấu hình bạn muốn từ trong Puppet.

Nếu bạn commit cấu hình mọi thứ từ bên trong Puppet, thì bạn có thể cấu hình bất kỳ nút nào trong cloud của bạn bằng một lệnh Puppet duy nhất và nếu bạn có thể làm điều đó, bạn có thể bắt đầu coi các node trong cloud của bạn như gia súc. Bạn có thể rời xa tâm lý bông tuyết đến mức bạn có thể áp dụng policy thường xuyên chọn một nút ngẫu nhiên trong cloud của bạn rồi xé nhỏ và xây dựng lại bằng Puppet, chỉ để chứng minh với bản thân rằng bằng cách nào đó nó không trở thành một bông tuyết hoặc một con vật cưng.

Khi bạn đã thể hiện tất cả thông tin cấu hình của bạn vào Puppet, điều duy nhất ngăn bạn coi một nút như một đầu gia súc là nó có chứa database hay không. Bạn phải lưu database trước khi phá bỏ nút và khôi phục nó sau khi bạn đã xây dựng lại nút, nhưng đó là lý do duy nhất.

Puppet không chỉ là một công cụ cấu hình. Đây là một kỷ luật cài đặt để hợp lý hóa việc cài đặt, quản lý và sửa chữa nút và giúp loại bỏ phần lớn sự căng thẳng khi quản lý một cloud các node .

Các quy ước được sử dụng trong hướng dẫn này

Đối với mục đích của hướng dẫn này, một server có tên:

mynode.example.com 

sẽ được sử dụng. Khi nào bạn nhìn thấy từ “mynode” hoặc “example” trong hướng dẫn này, bạn có thể chắc chắn rằng chúng không phải là từ khóa lệnh và bạn phải thay thế tên của chính mình.

Trừ khi được chỉ định khác, khi nào hướng dẫn này yêu cầu chạy lệnh , điều đó nghĩa là chạy lệnh đó trong vỏ lệnh (ví dụ: bash) của Server.

Hướng dẫn này giả định bạn đã đăng nhập bằng quyền root, vì vậy bạn không cần phải đặt tiền tố cho mọi lệnh với sudo . Nếu bạn chưa đăng nhập bằng quyền root, bạn có thể thử đặt tiền tố tất cả các lệnh sau bằng sudo (nhưng điều này chưa được kiểm tra).

Trong suốt hướng dẫn này, ta sử dụng lệnh cat để tạo và sửa đổi file . Bạn có thể sử dụng nano hoặc một editor khác nếu muốn.

Tạo một server

Nếu bạn chưa tạo Server mà bạn muốn áp dụng Puppet, hãy làm như vậy ngay bây giờ. Bạn có thể tạo bất kỳ loại Server nào miễn là nó là CentOS 7 Server.

Khi bạn chỉ định tên server của Server mới của bạn trên biểu mẫu tạo DigitalOcean Server, hãy nhớ chỉ định domain đủ điều kiện (FQDN) trong trường Biểu mẫu tên server .

Hostname = mynode.example.com 

Không chỉ định chỉ “mynode”.

(Bạn không cần phải cấu hình DNS của example.com cho mynode nút mới để có thể chạy Puppet, nhưng bạn nên thực hiện việc này nếu bạn định giữ Server, vì vậy đây là dấu nhắc của bạn!)

SSH vào server của bạn dưới dạng root

SSH vào Server mới với quyền root từ dòng lệnh của máy tính bạn làm việc bằng cách sử dụng lệnh sau.

ssh root@mynode.example.com 

Nếu bạn chưa cấu hình DNS để trỏ domain tới nút, bạn cần sử dụng địa chỉ IP của nút đó.

ssh root@xxx.xxx.xxx.xxx 

Cài đặt puppet

Bước tiếp theo là cài đặt Puppet. Puppet Labs cung cấp Puppet dưới dạng bản phát hành open-souce , miễn phí và riêng biệt dưới dạng bản phát hành dành cho doanh nghiệp. Trong hướng dẫn này, ta sẽ cài đặt bản phát hành open-souce , hoàn toàn miễn phí cho bất kỳ số lượng nút nào.

Phần mềm cài đặt Linux yum giúp cài đặt Puppet dễ dàng. Khó khăn duy nhất là Puppet không nằm trong danh sách repository CentOS yum theo mặc định, vì vậy ta phải cài đặt nó trước trước khi ta có thể gọi yum . (Nếu bạn có CentOS 5 hoặc CentOS 6, hãy thay đổi 7 thành 5 hoặc 6).

rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm 

Bạn có thể xác nhận repository Puppet đã được cài đặt bằng lệnh sau:

yum repolist | grep puppet 

mà sẽ mang lại kết quả trông giống như sau:

puppetlabs-deps/x86_64         Puppet Labs Dependencies El 7 - x86_64        10 puppetlabs-products/x86_64     Puppet Labs Products El 7 - x86_64            70 

Bây giờ cài đặt Puppet bằng yum. Lệnh yes (được đưa vào lệnh yum bằng cách sử dụng |) giúp bạn không cần phải trả lời một loạt câu hỏi từ yum. Lệnh gây ra nhiều hoạt động và sẽ mang lại hơn 180 dòng kết quả của console .

yes | yum -y install puppet 

Kiểm tra xem Puppet đã được cài đặt và hoạt động hay chưa bằng lệnh sau. Đầu ra chỉ nên là một số version đơn giản chẳng hạn như 3.6.2 .

puppet --version 

Đặt tên server và FQDN

Puppet sẽ không chạy đúng nếu cài đặt tên server và Tên domain Đủ điều kiện (FQDN) của nút không được cấu hình đúng. Điều này là do Puppet thường được cấu hình với một file cấu hình chỉ cấu hình của một số nút khác nhau. Puppet cần biết nó đang chạy trên nút nào để chỉ có thể thực thi các phần có liên quan của file cấu hình.

Để xem liệu nút của bạn có được cấu hình chính xác cho Puppet hay không, hãy thực hiện hai lệnh sau:

facter | grep hostname facter | grep fqdn 

facter lệnh facter sẽ hiển thị danh sách các cặp khóa / giá trị với dữ liệu về Server. Chỉ có hai trong số các cặp khóa / giá trị là quan trọng ở đây, vì vậy ta đang sử dụng grep để tìm kiếm kết quả có liên quan, sẽ giống như sau:

hostname=mynode fqdn=mynode.example.com 

Nếu phần mynode của các giá trị không chính xác, bạn có thể sửa lỗi này bằng cách
đưa ra lệnh sau. Điều này sẽ thay đổi phần mynode của
giá trị trong cả hai cặp:

hostname mynode 

Nếu giá trị domain trong fqdn không chính xác, bạn có thể sửa nó bằng cách thêm một
dòng tới file cấu hình hệ thống /etc/resolv.conf . Trước tiên, hãy xem nhanh nó (hữu ích nếu bạn vô tình làm hỏng nó và muốn tạo lại nó mà không cần tạo lại Server):

cat /etc/resolv.conf 

Bây giờ thêm vào nó:

cat >>/etc/resolv.conf domain example.com ^D 

(trong đó ^ D nghĩa là nhập Control-D để kết thúc đầu vào cho lệnh cat .)

Xác nhận các thay đổi đã hoạt động với:

facter | grep hostname facter | grep fqdn 

Đây là dấu nhắc nhở về những gì kết quả phải chứa:

hostname=mynode fqdn=mynode.example.com 

Tạo file cấu hình puppet

Bây giờ Puppet đã được cài đặt và sẵn sàng chạy, đã đến lúc tạo cấu hình Puppet. Quá trình cài đặt CentOS / Puppet lẽ ra đã tạo một folder có tên là /etc/puppet (Nếu chưa, hãy tạo nó bằng mkdir /etc/puppet ). Hãy xem ở đó:

ls -la /etc/puppet 

Nên có một vài file .conf và một folder con modules .

Quy ước đặt tên cây folder cấu hình puppet hướng dẫn ta tạo một folder con manifests để chứa file cấu hình thực mà ta sắp tạo:

mkdir /etc/puppet/manifests 

Bây giờ tạo file cấu hình. Bạn cần thay thế domain của riêng mình cho mynode.example.com . Lệnh cat được sử dụng, nhưng bạn có thể sử dụng editor nano (hoặc bất kỳ editor nào khác) nếu bạn muốn. (Các dòng trống ở đầu và cuối bị bỏ qua).

cat >/etc/puppet/manifests/projectname.pp  node "mynode.example.com" {  file { '/root/example_file.txt':     ensure => "file",     owner  => "root",     group  => "root",     mode   => "700",     content => "Congratulations! Puppet has created this file. ",}  } # End node mynode.example.com ^D 

( ^ D nghĩa là gõ Control-D để kết thúc đầu vào cho lệnh cat .)

Tệp cấu hình chỉ cấu hình của nút mynode.example.com . (Bạn có thể thêm nhiều khối cấu trúc hơn như node "nodename" {...} vào file này và nó sẽ vẫn chạy trên nút mynode.example.com ).

Bên trong cấu trúc node là một chỉ dẫn để cấu hình một file cụ thể được gọi là /root/example_file.txt . Cấu trúc file hướng dẫn Puppet đảm bảo rằng có một file ở tên đó, file là file chứ không phải folder , rằng nó có quyền sở hữu được chỉ định, có chế độ bảo vệ được chỉ định và có nội dung được chỉ định.

Hướng dẫn file không chỉ đơn giản là một lệnh để tạo file nếu nó không tồn tại. Thay vào đó, nó là một đặc tả về cách cấu hình file . Puppet kiểm tra file và đưa file đó vào trạng thái được chỉ định, dù trạng thái đó ở trạng thái nào. Nếu file không tồn tại, Puppet sẽ tạo file đó. Nếu nó tồn tại, nhưng bất kỳ khía cạnh nào được chỉ định của nó không chính xác (bao gồm cả nội dung file ), Puppet sẽ sửa chữa độ lệch và đưa file vào trạng thái được chỉ định. Vì vậy, mặc dù Puppet có vẻ như hoàn thành role của một lệnh cài đặt trong lần chạy đầu tiên, trong cả lần chạy đầu tiên và tiếp theo, nó thực sự so sánh trạng thái hiện có với trạng thái mong muốn và áp dụng các thay đổi để đưa hệ thống file vào trạng thái mong muốn .

Gọi puppet

Đến đây bạn đã cài đặt Puppet và tạo một file cấu hình, bạn có thể gọi Puppet. (Bỏ qua mọi lỗi ipaddress).

puppet apply /etc/puppet/manifests/projectname.pp 

Puppet phải tạo file /root/example_file.txt thuộc sở hữu của root , trong group root và có -rwx------ . Kiểm tra điều này với:

ls -la /root 

Kiểm tra nội dung của file với:

cat /root/example_file.txt 

Bạn sẽ thấy văn bản mà ta đã chỉ định trong file cấu hình.

Gọi lại puppet

Lưu ý Puppet không thực thi file cấu hình của bạn dưới dạng tập lệnh.
Thay vào đó, nó đưa hệ thống của bạn vào trạng thái được chỉ định trong cấu hình
file . Điều đó nghĩa là nếu bạn chạy lại Puppet, nó sẽ không làm gì cả. Thử nó!

puppet apply /etc/puppet/manifests/projectname.pp 

Làm hỏng file và gọi lại puppet

Bây giờ ta hãy làm một số thiệt hại cho file đã cấu hình bằng cách thay đổi các biện pháp bảo vệ của nó
bằng cách sử dụng chmod .

chmod o+r /root/example_file.txt 

Kiểm tra thiệt hại bằng lệnh sau. Bạn sẽ thấy -rwx---r--
bảo vệ cho example_file.txt thay vì -rwx------ bảo vệ:

ls -la /root 

Bây giờ gọi lại Puppet:

puppet apply /etc/puppet/manifests/projectname.pp 

Puppet sẽ sửa chữa khả năng bảo vệ của file . Kiểm tra nó với:

ls -la /root 

Thêm hư hỏng và sửa chữa

Bây giờ hãy làm hỏng file bằng cách thay đổi nội dung của nó:

cat >/root/example_file.txt This is a damaged file! ^D 

Xác nhận thiệt hại bằng cách sử dụng:

cat /root/example_file.txt 

Gọi lại puppet . Nó sẽ sửa chữa file :

puppet apply /etc/puppet/manifests/projectname.pp 

Xác nhận file đã được sửa chữa bằng:

cat /root/example_file.txt 

Tiếp theo là gì?

Đây chỉ là một ví dụ “Hello World” để bạn bắt đầu. Tệp cấu hình ở trên chỉ là một ví dụ nhỏ về những gì Puppet có thể làm. Để biết những gì phía trước, hãy xem nhanh trang này:

Bạn có thể chỉ cấu hình của các file riêng lẻ, toàn bộ cây folder , gói, dịch vụ, cron, user , group và nhiều hơn nữa. Ngoài ra còn có một thư viện lớn do user tạo Puppet chứa các module cấu hình tại:

Kết luận

Hướng dẫn này đã chỉ cho bạn cách cài đặt Puppet ở chế độ độc lập và cách tạo file cấu hình Puppet để cấu hình một file duy nhất trong một nút duy nhất. Tệp cấu hình này có thể hoạt động như một nền tảng để bạn có thể xây dựng một cấu hình phức tạp hơn. Nếu bạn tuân theo kỷ luật thực hiện tất cả các cấu hình của bạn bằng Puppet, bạn có thể chuyển đổi Server của bạn từ bông tuyết (hoặc vật nuôi) thành gia súc, do đó làm cho các việc quản lý cloud của bạn nhanh chóng và có thể lặp lại.

Người giới thiệu

Công ty đứng sau Puppet có tên là Puppet Labs, Inc. và có thể tìm thấy tại đây:

Hướng dẫn cài đặt puppet có thể được tìm thấy tại:

Bạn có thể tìm hiểu về những gì Puppet có khả năng cấu hình bằng cách duyệt qua trang này:

Cộng đồng user Puppet đã tạo hàng nghìn module Puppet , có thể
được sử dụng để cấu hình nhiều loại phần mềm:


Tags:

Các tin liên quan

Cách cài đặt Node.js trên server CentOS 7
2014-08-18
Cách sử dụng Logstash và Kibana để tập trung log trên CentOS 7
2014-07-15
Cách sử dụng Logstash và Kibana để tập trung log trên CentOS 6
2014-07-08
Cách thiết lập DavMail trên CentOS 6
2014-02-13
Cách cài đặt Ruby 2.1.0 trên CentOS 6.5 bằng RVM
2014-01-22
Cách cài đặt ZeroMQ từ nguồn trên VPS CentOS 6 x64
2013-12-23
Cách cài đặt Diễn đàn Máy đơn giản trên CentOS 6
2013-12-05
Cách gửi cảnh báo qua e-mail trên VPS CentOS để giám sát hệ thống
2013-11-27
Cách cài đặt MediaWiki trên Centos 6.4
2013-11-13
Cách cài đặt CouchDB từ Nguồn trên VPS CentOS 6 x64
2013-11-11