Puppet là 1 phần mềm quản lý cấu hình dựa trên Ruby, và được phân phối dưới bản quyền 2.0, nó có thể chạy trên 2 chế độ là client- hoặc stand-alone.

Puppet được phát triển bởi Luke Kanies và giờ được phát triển bởi công ty của anh ấy, Puppet Labs. Kanies đã làm việc với Unix và vai trò quản trị hệ thống từ năm 1997 và phát triển Puppet dựa trên kinh nghiệm đó.

Puppet có 2 phiên bản: phiên bản mã nguồn mở (open source) và phiên bản doanh nghiệp (Enterprise). Phiên bản Enterprise bao gồm  1 bộ cài đặt tự động, 1 giao diện quản lý web, và thông tin liên lạc hỗ trợ.

Puppet có thể được dùng để quản lý cấu hình trên các nền tảng Unix (bao gồm cả Mac OS X), .

Mô hình hoạt động của Puppet gồm 3 thành phần:

  • Tầng triển khai (Deployment Layer)
  • Ngôn ngữ cấu hình và tầng trừu tượng tài nguyên. (Configuration language and Resource Abstraction Layer)
  • Tầng giao dịch (Transactional Layer)

puppet_model
1.       Deployment Layer

Puppet thường được triển khai theo mô hình client-server. Trong đó Puppet server được gọi là Puppet Master, còn Puppet client được gọi là Agent, và mỗi host được định nghĩa như là 1node.

puppet_configuration_run

Puppet agent kết nối đến Puppet master qua 1 kết nối được mã hoá và chứng thực sử dụng SSL, để lấy về hoặc “đẩy lên” những cấu hình cần được kiểm tra và áp dụng trên agent.

Nếu Puppet agent không được cấu hình hoặc đã có cấu hình được yêu cầu, Puppet sẽ không thực hiện gì.

Puppet sẽ chỉ thay đổi môi trường của bạn nếu cần thiết. Thuộc tính này được gọi làidempotency và là tính năng then chốt của Puppet. Toàn bộ tiến trình trên được gọi làconfiguration run.

Mặc định, Puppet agent sẽ kiểm tra các cấu hình mới hoặc được thay đổi trên Puppet Mastermỗi 30 phút 1 lần.

puppet_client_server_model

Bên cạnh mô hình triển khai theo client-server, chúng ta có thể triển khai Puppet theo mô hình stand-alone, khi đó không cần đến sự có mặt của Puppet master. Các cấu hình được cài đặt cục bộ trên host và các tập tin nhị phân của puppet sẽ chạy để thực thi và áp dụng các cấu hình này.

2.      Configuration Language and Resource Abstraction Layer

Puppet sử dụng 1 ngôn ngữ đặt tả, gọi là ngôn ngữ Puppet, để định nghĩa các cấu hình, mà Puppet gọi là resource. Đây là 1 sự khác nhau quan trọng giữa Puppet và nhiều công cụ cấu hình khác.

Sự khác biệt nằm ở chỗ là ngôn ngữ đặc tả mô tả về trạng thái của cấu hình – vd: nó mô tả là 1 gói phần mềm sẽ được cài đặt hoặc 1 dịch vụ sẽ được chạy. Phần lớn các công cụ cấu hình, như Shell script hoặc , quan tâm đến qui trình triển khai cấu hình, mà ít quan tâm đến trạng thái của cấu hình trên .

2.1.            Configuration Language

Chuyện gì sẽ xảy ra nếu không có Configuration Language?

Giả sử chúng ta cần cài đặt ứng dụng trên 3 máy tính (host) chạy 3 hệ điều hành khác nhau là Microsoft Windows, Red Hat Enterprise Linux và Ubuntu, thì chúng ta cần phải viết kịch bản (script) cài đặt cho từng hệ điều hành, trong trường hợp này là 3 kịch bản, thực hiện các việc sau:

  • Kết nối đến host tương ứng (bao gồm cả việc xử lý mật khẩu hoặc key).
  • Kiểm tra ứng dụng Vim đã được cài đặt chưa?
  • Nếu chưa, sử dụng các lệnh tương ứng cho từng nền tảng để cài đặt Vim – vd: sử dụng lệnh trong RHEL, apt-get trong Ubuntu …
  • Tiếp nhận các thông báo trả về cho từng nền tảng để đảm bảo ứng dụng đã được cài thành công.

Và khi sử dụng Puppet và Configuration Language?

Chúng ta thực hiện công việc trên bằng việc định nghĩa 1 tài nguyên cấu hình (configuration resource) cho gói phần mềm vim như bên dưới:

package { ‘vim’:

ensure => present,

}

Cú pháp để định nghĩa 1 resource trong Puppet là:

type { title:

attribute => value,

}

Trong đó:

  • type: dạng tài nguyên (resource) sẽ được quản lý như: package, service hoặc cron jobs.
  • title: tên của tài nguyên (trong ví dụ trên là tên package cần cài đặt).
  • Và 1 danh sách các cặp khoá attribute => value của resource đó, với attribute là tên thuộc tính của resource và value là giá trị cần có của thuộc tính đó.

Danh sách đầy đủ các loại resource mà Puppet quản lý (và các thuộc tính của chúng) có thể xem tại:

http://docs.puppetlabs.com/references/stable/type.html

Resource trên sau đó sẽ được triển khai xuống các Puppet agent, chúng ta không cần quan tâm đến sự khác nhau giữa các nền tảng cũng như các kết quả trả về khác nhau, Puppet sẽ giúp chúng ta thực hiện việc này.

2.2.            Resource Abstraction Layer

Mỗi loại resource được định nghĩa trong Puppet có nhiều nhà cung cấp (provider) tương ứng với nó. Ví dụ với loại resourcepackage, tuỳ theo từng nền tảng và hệ điều hành, mà có hơn 20 provider bao hàm nhiều loại công cụ khác nhau, bao gồm yum, aptitude, pkgadd,ports, và emerge.

Khi 1 agent kết nối, Puppet sử dụng 1 công cụ gọi là Facter để trả về thông tin về agent đó, bao gồm cả thông tin về hệ điều hành mà agent đó đang chạy. Puppet sau đó chọn nhà cung cấp gói phần mềm tương ứng cho hệ điều hành đó và sử dụng nhà cung cấp đó để kiểm tra gói vim đã được cài đặt chưa.Vd: trên Red Hat, nó sẽ thực thi yum, trên Ubuntu là aptitude, và trên thì lệnh pkgadd được sử dụng. Nếu gói phần mềm chưa được cài, Puppet sẽ cài nó. Nếu gói phần mềm cài rồi, Puppet không làm gì cả.

Puppet sau đó sẽ báo cáo kết quả thành công hoặc thất bại cho Puppet master.

3.      The Transactional Layer

Tầng giao dịch là đông cơ của Puppet, thực hiện việc hoàn thành tiến trình cấu hình từng máy tính trong hệ thống, bao gồm những bước sau:

  • Phiên dịch và biên dịch cấu hình.
  • Truyền tải cấu hình được biên dịch đến agent.
  • Áp dụng cấu hình trên lên agent.
  • Báo cáo kết quả áp dụng cấu hình đến Puppet master.

Đầu tiên Puppet sẽ phân tích cấu hình của chúng ta và tính toán như  thế nào để áp dụng nó lên agent. Để làm được điều này Puppet tạo 1 biểu đồ thể hiện tất cả resource, với mối quan hệ của chúng với nhau và với từng agent. Điều này cho phép Puppet làm việc theo thứ tự, dựa trên những mối quan hệ đã tạo, để áp dụng từng resource đến máy tính trong hệ thống. Mô hình này là 1 trong những tính năng mạnh nhất của Puppet.

Sau đó Puppet lấy resource và biên dịch chúng vào 1 catalog cho từng agent. Catalog này được gửi đến máy tính và được áp dụng bởi Puppet agent. Kết quả của việc áp dụng này sau đó được gửi về Puppet master.

Tầng giao dịch cho phép các cấu hình được tạo và được áp dụng lặp lại trên 1 máy tính.

Puppet không phải là giao dịch đầy đủ, các giao dịch của chúng ta không được ghi nhận lại, và do đó chúng ta không thể quay ngược lại các giao dịch  (roll back) như chúng ta có thể làm với các hệ cơ sở dữ liệu.

Print Friendly

Comments

comments

Bài viết liên quan