Thứ năm, 21/08/2014 | 00:00 GMT+7

Bắt đầu với mã rối: Manifests và module

Sau khi cài đặt Puppet trong cấu hình tác nhân / chính, bạn có thể cần một số trợ giúp để viết các module và file kê khai Puppet. Để sử dụng Puppet một cách hiệu quả, bạn phải hiểu cách các file kê khai và module được xây dựng. Hướng dẫn này bao gồm các khái niệm cơ bản về mã Puppet và sẽ chỉ cho bạn cách tạo file kê khai và module sẽ giúp bạn bắt đầu sử dụng Puppet để quản lý môi trường server của bạn . Ta sẽ chỉ ra ba cách khác nhau để sử dụng Puppet để cấu hình LAMP trên VPS Ubuntu 14.04.

Yêu cầu

Trước khi bắt đầu hướng dẫn này, bạn phải có một tác nhân / cài đặt Puppet chính đang hoạt động. Nếu bạn chưa có, hãy làm theo hướng dẫn này: Cách Cài đặt Puppet Để Quản lý Cơ sở Hạ tầng Server của Bạn .

Bạn cũng cần có thể tạo ít nhất một VPS mới để đóng role là nút tác nhân Puppet mà người điều khiển Puppet sẽ quản lý.

Tạo một nút đại lý mới

Tạo một VPS Ubuntu 14.04 mới có tên “lamp-1”, thêm nó làm nút tác nhân Puppet và ký certificate request của nó trên Puppet master.

Khái niệm cơ bản về mã rối

Trước khi bắt đầu viết mã Puppet để cấu hình hệ thống của ta , hãy quay lại và xem xét một số thuật ngữ và khái niệm Puppet có liên quan.

Tài nguyên

Mã rối được cấu tạo chủ yếu bởi các khai báo tài nguyên . Tài nguyên mô tả điều gì đó về trạng thái của hệ thống, chẳng hạn như một user hoặc file nhất định phải tồn tại, hoặc một gói phải được cài đặt. Đây là một ví dụ về khai báo tài nguyên user :

user { 'mitchell':   ensure     => present,   uid        => '1000',   gid        => '1000',   shell      => '/bin/bash',   home       => '/home/mitchell' } 

Khai báo tài nguyên được định dạng như sau:

resource_type { 'resource_name'   attribute => value   ... } 

Do đó, khai báo tài nguyên trước đó mô tả tài nguyên user có tên 'mitchell', với các thuộc tính được chỉ định.

Để liệt kê tất cả các loại tài nguyên mặc định có sẵn cho Puppet, hãy nhập lệnh sau:

puppet resource --types 

Ta sẽ đề cập đến một số loại tài nguyên khác trong suốt hướng dẫn này.

Manifests

Các chương trình puppet được gọi là bản kê khai. Các thao tác bao gồm mã rối và tên file của chúng sử dụng phần mở rộng .pp . Tệp kê khai chính mặc định trong Puppet được cài đặt qua apt là /etc/puppet/manifests/site.pp .

Nếu bạn đã làm theo hướng dẫn Puppet tiên quyết, bạn đã viết một file kê khai tạo file và cài đặt Apache. Ta cũng sẽ viết một vài điều nữa trong hướng dẫn này.

Các lớp học

Trong Puppet, các lớp là các khối mã có thể được gọi trong một đoạn mã ở nơi khác. Sử dụng các lớp cho phép bạn sử dụng lại mã Puppet và có thể giúp việc đọc file kê khai dễ dàng hơn.

Định nghĩa lớp

Định nghĩa lớp là nơi mã tạo ra một lớp sống. Việc xác định một lớp làm cho lớp có sẵn để sử dụng trong các file kê khai, nhưng không thực sự đánh giá bất cứ điều gì.

Đây là cách một định nghĩa lớp được định dạng:

class example_class {   ...   code   ... } 

Phần trên định nghĩa một lớp có tên “example_class” và mã Puppet sẽ nằm giữa các dấu ngoặc nhọn.

Khai báo lớp học

Khai báo lớp xảy ra khi một lớp được gọi trong file kê khai. Một khai báo lớp yêu cầu Puppet đánh giá mã trong lớp. Khai báo lớp có hai dạng khác nhau: dạng bình thường và dạng tài nguyên.

Khai báo lớp bình thường xảy ra khi từ khóa include được sử dụng trong mã Puppet, như sau:

include example_class 

Điều này sẽ khiến Puppet đánh giá mã trong example_class .

Khai báo lớp giống như tài nguyên xảy ra khi một lớp được khai báo giống như một tài nguyên, như sau:

class { 'example_class': } 

Sử dụng khai báo lớp giống như tài nguyên cho phép bạn chỉ định các tham số lớp , tham số này overrides các giá trị mặc định của thuộc tính lớp. Nếu bạn đã làm theo hướng dẫn yêu cầu , bạn đã sử dụng khai báo lớp giống như tài nguyên (lớp “apache”) khi bạn sử dụng module PuppetLabs Apache để cài đặt Apache trên host2 :

node 'host2' {   class { 'apache': }             # use apache module   apache::vhost { 'example.com':  # define vhost resource     port    => '80',     docroot => '/var/www/html'   } } 

Đến đây bạn đã biết về tài nguyên, file kê khai và lớp, bạn cần tìm hiểu về các module .

Mô-đun

Mô-đun là một tập hợp các file kê khai và dữ liệu (chẳng hạn như dữ kiện, file và mẫu) và chúng có cấu trúc folder cụ thể. Mô-đun rất hữu ích để tổ chức mã Puppet của bạn, vì chúng cho phép bạn chia mã của bạn thành nhiều file kê khai. Phương pháp hay nhất được coi là sử dụng các module để tổ chức hầu hết tất cả các file kê khai Puppet của bạn.

Để thêm module vào Puppet, hãy đặt module đó vào folder /etc/puppet/modules .

Ta sẽ trình bày các chi tiết cần thiết để viết module cơ bản của bạn . Nếu bạn muốn tìm hiểu thêm chi tiết, hãy xem hướng dẫn tham khảo Nguyên tắc cơ bản về Mô-đun PuppetLabs .

Phát triển một bản kê khai

Để trình bày cách viết file kê khai, lớp và module Puppet, ta sẽ sử dụng Puppet để cài đặt LAMP trên Ubuntu (tương tự như cài đặt trong hướng dẫn này ). Nếu bạn chưa bao giờ cài đặt LAMP trước đây, bạn cần chạy qua hướng dẫn được liên kết để tự làm quen với cách cài đặt nó theo cách thủ công.

Từ hướng dẫn LAMP , ta biết rằng ta muốn có một server Ubuntu 14.04 với các tài nguyên sau:

  • Gói Apache (apache2) đã được cài đặt
  • Dịch vụ Apache (apache2) đang chạy
  • Đã cài đặt gói MySQL Server (mysql-server)
  • Dịch vụ MySQL Server (mysql) đang chạy
  • Gói PHP5 (php5) đã được cài đặt
  • Tệp tập lệnh PHP thử nghiệm (info.php)
  • Cập nhật apt trước khi cài đặt gói

Ba phần sau sẽ chỉ ra các cách khác nhau để sử dụng Puppet để đạt được kết quả tương tự, một server LAMP đang hoạt động. Ví dụ đầu tiên sẽ chỉ ra cách viết một file kê khai cơ bản nằm trong một file . Ví dụ thứ hai sẽ chỉ ra cách xây dựng và sử dụng một lớp và module , xây dựng dựa trên file kê khai được phát triển trong ví dụ đầu tiên. Cuối cùng, ví dụ thứ ba sẽ chỉ ra cách sử dụng các module sẵn có, công khai để nhanh chóng và dễ dàng cài đặt một LAMP tương tự. Nếu bạn muốn thử cả ba ví dụ, vì mục đích học tập, ta khuyên bạn nên bắt đầu với một VPS mới (như được mô tả trong yêu cầu ) mỗi lần.

Ví dụ 1: Cài đặt LAMP với một file kê khai

Nếu bạn chưa từng viết file kê khai Puppet trước đây, thì ví dụ này là một nơi tốt để tham khảo . Tệp kê khai sẽ được phát triển trên nút tác nhân Puppet và được thực thi thông qua puppet apply , vì vậy không cần cài đặt tác nhân / chủ.

Bạn sẽ học cách viết một file kê khai sẽ sử dụng các kiểu khai báo tài nguyên sau:

  • exec: Để thực hiện các lệnh, chẳng hạn như apt-get
  • gói : Để cài đặt các gói qua apt
  • dịch vụ : Để đảm bảo một dịch vụ đang chạy
  • tệp : Để đảm bảo một số file nhất định tồn tại

Tạo file kê khai

Trên VPS mới -1 đèn , hãy tạo một file kê khai mới:

sudo vi /etc/puppet/manifests/lamp.pp 

Thêm các dòng sau để khai báo các tài nguyên mà ta vừa xác định ta muốn. Các comment nội tuyến nêu chi tiết từng khai báo tài nguyên:

# execute 'apt-get update' exec { 'apt-update':                    # exec resource named 'apt-update'   command => '/usr/bin/apt-get update'  # command this resource will run }  # install apache2 package package { 'apache2':   require => Exec['apt-update'],        # require 'apt-update' before installing   ensure => installed, }  # ensure apache2 service is running service { 'apache2':   ensure => running, }  # install mysql-server package package { 'mysql-server':   require => Exec['apt-update'],        # require 'apt-update' before installing   ensure => installed, }  # ensure mysql service is running service { 'mysql':   ensure => running, }  # install php5 package package { 'php5':   require => Exec['apt-update'],        # require 'apt-update' before installing   ensure => installed, }  # ensure info.php file exists file { '/var/www/html/info.php':   ensure => file,   content => '<?php  phpinfo(); ?>',    # phpinfo code   require => Package['apache2'],        # require 'apache2' package before creating }  

Lưu và thoát.

Áp dụng Tệp kê khai

Đến đây bạn sẽ muốn sử puppet apply lệnh puppet apply để thực hiện file kê khai. Trên đèn 1 , chạy cái này:

sudo puppet apply --test 

Bạn sẽ thấy nhiều dòng kết quả hiển thị trạng thái của server đang thay đổi như thế nào, để trùng với khai báo tài nguyên trong file kê khai của bạn. Nếu không có lỗi, bạn có thể truy cập địa chỉ IP công cộng (hoặc domain , nếu bạn đã cài đặt ) và xem trang thông tin PHP cho biết Apache và PHP đang hoạt động. Bạn cũng có thể xác minh MySQL đã được cài đặt trên server của bạn (nó chưa được bảo mật, nhưng ta sẽ không lo lắng về điều đó bây giờ). Chúc mừng! Bạn cài đặt một LAMP với Puppet .

Cài đặt cụ thể này không quá thú vị, bởi vì ta đã không tận dụng cài đặt đại lý / chính của bạn . Tệp kê khai hiện không có sẵn cho các node tác nhân khác và Puppet không liên tục kiểm tra (cứ sau 30 phút) rằng server của ta có ở trạng thái như file kê khai đã mô tả hay không.

Bây giờ ta muốn chuyển đổi file kê khai mà ta vừa phát triển thành một module để nó được dùng bởi các node Puppet khác của bạn.

Ví dụ 2: Cài đặt LAMP bằng cách tạo một module mới

Bây giờ ta hãy tạo một module cơ bản, dựa trên file kê khai LAMP đã được phát triển trong ví dụ 1. Ta sẽ thực hiện việc này trên nút chính Puppet lần này. Để tạo một module , bạn phải tạo một folder (có tên trùng với tên module của bạn) trong folder modules của Puppet và nó phải chứa một folder được gọi là manifests và folder đó phải chứa file init.pp Tệp init.pp chỉ được chứa một lớp Puppet trùng với tên module .

Tạo module

Trên Puppet master , hãy tạo cấu trúc folder cho module có tên là lamp :

cd /etc/puppet/modules sudo mkdir -p lamp/manifests 

Bây giờ, hãy tạo và chỉnh sửa file init.pp của module của bạn:

sudo vi lamp/manifests/init.pp 

Trong file này, thêm một khối cho một lớp được gọi là "đèn", bằng cách thêm các dòng sau:

class lamp {  } 

Sao chép nội dung của file kê khai LAMP mà bạn đã tạo trước đó (hoặc sao chép nó từ ví dụ 1 ở trên) và dán nó vào khối lớp đèn . Trong file này, bạn đã tạo định nghĩa lớp cho lớp “đèn”. Mã trong lớp sẽ không được đánh giá tại thời điểm này, nhưng nó có thể được khai báo. Ngoài ra, bởi vì nó tuân theo các quy ước Puppet để xác định một module , lớp này có thể được truy cập như một module bằng các file kê khai khác.

Lưu và thoát.

Sử dụng Mô-đun trong Tệp kê khai Chính

Bây giờ ta đã cài đặt module đèn cơ bản, hãy cấu hình file kê khai chính của ta để sử dụng nó để cài đặt LAMP trên đèn-1 .

Trên tổng thể Múa rối, chỉnh sửa manifest chính:

sudo vi /etc/puppet/manifests/site.pp 

Giả sử file trống, hãy thêm các khối nút sau (thay thế “lamp-1” bằng tên server của tác nhân Puppet mà bạn muốn cài đặt LAMP):

node default { }  node 'lamp-1' {  } 

Một khối nút cho phép bạn chỉ định mã Rối sẽ chỉ áp dụng cho các node tác nhân nhất định. Nút mặc định áp dụng cho mọi nút tác nhân không có khối nút được chỉ định – ta sẽ để trống. Khối nút đèn-1 sẽ áp dụng cho nút tác nhân Rối đèn-1 của bạn.

Trong khối nút đèn-1 , hãy thêm mã sau để sử dụng module “đèn” mà ta vừa tạo:

  include lamp 

Bây giờ lưu và thoát.

Lần tới khi nút tác nhân puppet đèn-1 của bạn kéo cấu hình của nó từ nút chính, nó sẽ đánh giá file kê khai chính và áp dụng module chỉ định cài đặt LAMP . Nếu bạn muốn dùng thử ngay lập tức, hãy chạy lệnh sau trên nút tác nhân lamp-1 :

sudo puppet agent --test 

Sau khi hoàn tất, bạn sẽ thấy rằng một LAMP cơ bản được cài đặt , giống hệt như ví dụ 1. Để xác minh Apache và PHP đang hoạt động, hãy truy cập địa chỉ IP công cộng của lamp-1 trong trình duyệt web:

http://lamp_1_public_IP/info.php 

Bạn sẽ thấy trang thông tin về cài đặt PHP của bạn .

Lưu ý bạn có thể sử dụng lại module “đèn” mà bạn đã tạo bằng cách khai báo nó trong các khối nút khác. Sử dụng module là cách tốt nhất để thúc đẩy việc tái sử dụng mã Rối và nó hữu ích cho việc tổ chức mã của bạn theo cách hợp lý.

Bây giờ ta sẽ chỉ cho bạn cách sử dụng các module có sẵn để đạt được cài đặt tương tự.

Ví dụ 3: Cài đặt LAMP với các Mô-đun có sẵn

Tại Puppet Forge , có một repository các module công khai, có thể hữu ích khi bạn cố gắng phát triển cơ sở hạ tầng của bạn . Các module Puppet Forge có thể được cài đặt nhanh chóng bằng lệnh puppet module được tích hợp sẵn. Nó chỉ xảy ra khi các module cài đặt và bảo trì Apache và MySQL có sẵn ở đây. Ta sẽ chứng minh cách chúng được dùng để giúp ta cài đặt LAMP của bạn .

Cài đặt các module Apache và MySQL

Trên Puppet master của bạn, hãy cài đặt module puppetlabs-apache :

sudo puppet module install puppetlabs-apache 

Bạn sẽ thấy kết quả sau, cho biết các module được cài đặt đúng:

Notice: Preparing to install into /etc/puppetlabs/puppet/modules ... Notice: Downloading from https://forgeapi.puppetlabs.com ... Notice: Installing -- do not interrupt ... /etc/puppet/modules └─┬ puppetlabs-apache (v1.0.1)   ├── puppetlabs-concat (v1.0.0) [/etc/puppet/modules]   └── puppetlabs-stdlib (v3.2.0) [/etc/puppet/modules] 

Ngoài ra, hãy cài đặt module puppetlabs-mysql :

sudo puppet module install puppetlabs-mysql 

Bây giờ các module apachemysql đã có sẵn để sử dụng!

Chỉnh sửa Tệp kê khai Chính

Bây giờ, hãy chỉnh sửa file kê khai chính của ta để nó sử dụng các module mới để cài đặt LAMP của ta .

Trên tổng thể Múa rối, chỉnh sửa manifest chính:

sudo vi /etc/puppet/manifests/site.pp 

Giả sử file trống, hãy thêm các khối nút sau (nếu bạn đã làm theo ví dụ 2, chỉ cần xóa nội dung của khối nút đèn-1 ):

node default { }  node 'lamp-1' {  } 

Trong khối nút đèn 1 , sử dụng khai báo lớp giống như tài nguyên để sử dụng module apache (các chú thích trong dòng giải thích từng dòng):

  class { 'apache':                # use the "apache" module     default_vhost => false,        # don't use the default vhost     default_mods => false,         # don't load default mods     mpm_module => 'prefork',        # use the "prefork" mpm_module   }    include apache::mod::php        # include mod php    apache::vhost { 'example.com':  # create a vhost called "example.com"     port    => '80',               # use port 80     docroot => '/var/www/html',     # set the docroot to the /var/www/html   } 

Mô-đun apache có thể được truyền các tham số overrides hành vi mặc định của module . Ta đang chuyển một số cài đặt cơ bản vô hiệu hóa server ảo mặc định mà module tạo ra và đảm bảo ta tạo một server ảo có thể sử dụng PHP. Để có tài liệu đầy đủ về module PuppetLabs-Apache, hãy xem readme của nó.

Sử dụng module MySQL tương tự như sử dụng module Apache. Ta sẽ đơn giản hóa vì ta không thực sự sử dụng database tại thời điểm này. Thêm các dòng sau trong khối nút:

  class { 'mysql::server':     root_password => 'password',   } 

Giống như module Apache, module MySQL có thể được cấu hình bằng cách chuyển các tham số ( tài liệu đầy đủ tại đây .

Bây giờ, hãy thêm tài nguyên file đảm bảo rằng info.php được sao chép vào vị trí thích hợp. Lần này, ta sẽ sử dụng tham số nguồn để chỉ định một file để sao chép. Thêm các dòng sau trong khối nút:

  file { 'info.php':                                # file resource name     path => '/var/www/html/info.php',               # destination path     ensure => file,     require => Class['apache'],                     # require apache class be used     source => 'puppet:///modules/apache/info.php',  # specify location of file to be copied   } 

Khai báo tài nguyên file này hơi khác so với trước đây. Sự khác biệt chính là ta đang chỉ định tham số nguồn thay vì tham số nội dung . Nguồn yêu cầu puppet sao chép một file , thay vì chỉ xác định nội dung của file . Nguồn được chỉ định, puppet:///modules/apache/info.php được Puppet thông dịch thành /etc/puppet/modules/apache/files/info.php , vì vậy ta phải tạo file nguồn để khai báo tài nguyên này hoạt động bình thường.

Lưu và thoát khỏi site.pp

Tạo file info.php bằng lệnh sau:

sudo sh -c 'echo "<?php  phpinfo(); ?>" > /etc/puppet/modules/apache/files/info.php' 

Lần tới khi nút tác nhân puppet đèn-1 của bạn kéo cấu hình của nó từ nút chính, nó sẽ đánh giá file kê khai chính và áp dụng module chỉ định cài đặt LAMP . Nếu bạn muốn dùng thử ngay lập tức, hãy chạy lệnh sau trên nút tác nhân lamp-1 :

sudo puppet agent --test 

Sau khi hoàn tất, bạn sẽ thấy rằng một LAMP cơ bản được cài đặt , giống hệt như ví dụ 1. Để xác minh Apache và PHP đang hoạt động, hãy truy cập địa chỉ IP công cộng của lamp-1 trong trình duyệt web:

http://lamp_1_public_IP/info.php 

Bạn sẽ thấy trang thông tin về cài đặt PHP của bạn .

Kết luận

Xin chúc mừng! Bạn đã sử dụng Puppet để cài đặt LAMP Ubuntu 14.04.

Đến đây bạn đã quen với các kiến thức cơ bản về mã Puppet và có thể viết các file kê khai và module cơ bản, bạn nên cố gắng sử dụng Puppet để cấu hình các khía cạnh khác trong môi trường của bạn .

Một nơi tốt để tham khảo là sử dụng Puppet để quản lý user hệ thống và các file cấu hình ứng dụng của bạn. Lưu ý nếu bạn sử dụng Puppet để quản lý tài nguyên, bạn phải áp dụng các thay đổi đối với các tài nguyên cụ thể đó trên server chính của Puppet, nếu không chúng sẽ bị overrides vào lần tiếp theo các node tác nhân của bạn thực hiện yêu cầu kéo danh mục định kỳ của chúng.

Chúc may mắn!


Tags:

Các tin liên quan