Hướng dẫn múa rối cho người mới bắt đầu: Con rối là gì và cách sử dụng?

Trước khi học Puppet, chúng ta hãy hiểu:

Quản lý cấu hình là gì?

Quản lý cấu hình là quá trình duy trì phần mềm và hệ thống máy tính (ví dụ: máy chủ, bộ lưu trữ, mạng) ở trạng thái nhất quán, mong muốn và đã biết. Nó cũng cho phép truy cập vào bản ghi lịch sử chính xác về trạng thái hệ thống cho mục đích kiểm tra và quản lý dự án.

Quản trị viên hệ thống chủ yếu thực hiện các tác vụ lặp đi lặp lại như cài đặt máy chủ, định cấu hình các máy chủ đó, v.v. Những chuyên gia này có thể tự động hóa tác vụ này bằng cách viết tập lệnh.

Tuy nhiên, đó là một công việc khó khăn khi họ đang làm việc trên một cơ sở hạ tầng khổng lồ. Công cụ Quản lý cấu hình giống như một con rối đã được giới thiệu để giải quyết những vấn đề như vậy.

Con rối là gì?

Múa rối là một công cụ quản lý hệ thống để tập trung và tự động hóa quy trình quản lý cấu hình. Puppet cũng được sử dụng như một công cụ triển khai phần mềm. Đây là phần mềm quản lý cấu hình nguồn mở được sử dụng rộng rãi để cấu hình, quản lý, triển khai và điều phối các ứng dụng và dịch vụ khác nhau trên toàn bộ cơ sở hạ tầng của một tổ chức.

Puppet được thiết kế đặc biệt để quản lý cấu hình của Linux và Windows hệ thống. Nó được viết bằng Ruby và sử dụng tính năng độc đáo của nó Dchính Sđặc biệt Lngôn ngữ (DSL) để mô tả cấu hình hệ thống.

Các phiên bản con rối là gì?

Con rối có hai phiên bản:

  • Con rối mã nguồn mở: Đây là phiên bản cơ bản của công cụ quản lý cấu hình Puppet, còn được gọi là Puppet mã nguồn mở. Nó có sẵn trực tiếp từ trang web của Puppet và được cấp phép theo hệ thống Apache 2.0.
  • Doanh nghiệp múa rối: Phiên bản thương mại cung cấp các tính năng như báo cáo tuân thủ, điều phối, kiểm soát truy cập dựa trên vai trò, GUI, API và các công cụ dòng lệnh để quản lý hiệu quả các nút.

Con rối có thể làm gì?

Ví dụ: bạn có cơ sở hạ tầng với khoảng 100 máy chủ. Với tư cách là quản trị viên hệ thống, vai trò của bạn là đảm bảo rằng tất cả các máy chủ này luôn cập nhật và chạy với đầy đủ chức năng.

Quản trị viên hệ thống làm việc thủ công trên máy chủ
Quản trị viên hệ thống làm việc thủ công trên máy chủ

Để làm điều này, bạn có thể sử dụng Puppet, cho phép bạn viết một mã đơn giản có thể được triển khai tự động trên các máy chủ này. Điều này làm giảm nỗ lực của con người và làm cho quá trình phát triển nhanh chóng và hiệu quả.

Puppet tự động hóa việc quản lý máy chủ
Puppet tự động hóa quản lý máy chủ

Puppet thực hiện các chức năng sau:

  • Con rối cho phép bạn xác định cấu hình riêng biệt cho mọi máy chủ.
  • Công cụ này cho phép bạn liên tục giám sát các máy chủ để xác nhận xem cấu hình được yêu cầu có tồn tại hay không và nó không bị thay đổi. Nếu cấu hình bị thay đổi, công cụ Puppet sẽ trở lại cấu hình được xác định trước trên máy chủ.
  • Nó cũng cung cấp khả năng kiểm soát tất cả hệ thống đã được định cấu hình, do đó, một thay đổi tập trung sẽ tự động được thực hiện.
  • Nó cũng được sử dụng như một công cụ triển khai vì nó tự động triển khai phần mềm vào hệ thống. Nó thực hiện các cơ sở hạ tầng dưới dạng mã vì các chính sách và cấu hình được viết dưới dạng mã.

DSL rối và các mô hình lập trình

Trước khi tìm hiểu Puppet DSL, hãy hiểu các mô hình lập trình:

Mô hình lập trình là một phong cách bạn đang sử dụng trong lập trình máy tính.

Bốn loại mô hình là:

  • Mệnh lệnh.
  • Tuyên bố.
  • Chức năng (được coi là tập hợp con của mô hình khai báo đó)
  • Hướng đối tượng.

Chúng ta sẽ tập trung vào Mệnh lệnh và Tuyên bố.

Mô hình bắt buộc

Mô hình lập trình này thể hiện logic của một phép tính (Việc cần làm) và mô tả luồng điều khiển của nó (Cách thực hiện)

Ví dụ:

Giả sử bạn đang đến văn phòng của mình, bạn đặt một chiếc taxi và bắt đầu hướng dẫn từng bước cho tài xế cho đến khi bạn đến văn phòng. Chỉ định những gì cần làm và làm như thế nào là một phong cách bắt buộc.

Mô hình khai báo

Mô hình lập trình này thể hiện logic của một phép tính (Việc cần làm) mà không mô tả luồng điều khiển của nó (Cách thực hiện)

Ví dụ:

Giả sử bạn đang đến văn phòng của mình, bạn đặt taxi Uber và chỉ định điểm đến cuối cùng (Văn phòng). Chỉ định những gì cần làm và làm như thế nào là một phong cách khai báo.

Paradigm Phải làm gì Làm thế nào để làm
Bắt buộc
Khai báo Không

Con rối sử dụng mô hình lập trình khai báo

Con rối sử dụng phương pháp lập trình khai báo.

Ví dụ: Tạo người dùng trên hệ thống:

Nó có thể được thực hiện bằng cách sử dụng mẫu lập trình mệnh lệnh bằng tập lệnh shell: Ở đây chúng tôi chỉ định cách tạo người dùng và những lệnh nào sẽ sử dụng trên hệ điều hành.

Mô hình khai báo

Tuy nhiên, nó có thể được thực hiện bằng cách sử dụng mẫu lập trình khai báo chỉ với một vài dòng mã con rối, ngôn ngữ cụ thể của miền con rối (DSL) mà vẫn đạt được kết quả tương tự.

Mô hình khai báo

Mô hình triển khai các công cụ quản lý cấu hình

Có hai mô hình triển khai cho công cụ quản lý cấu hình :

  • Mô hình triển khai dựa trên đẩy: được khởi tạo bởi nút chính.
  • Mô hình triển khai dựa trên kéo: do các tác nhân khởi xướng.

Mô hình triển khai dựa trên đẩy

Trong mô hình triển khai này, máy chủ chính sẽ đẩy các cấu hình và phần mềm đến từng tác nhân. Sau khi xác minh kết nối an toàn, máy chủ sẽ chạy lệnh từ xa trên các tác nhân. Ví dụ, Có khả năng và đống muối.

Mô hình triển khai dựa trên kéo.

Trong mô hình triển khai này, các máy chủ riêng lẻ sẽ liên hệ với một máy chủ chính, xác minh và thiết lập kết nối an toàn, tải xuống cấu hình và phần mềm của chúng, sau đó tự cấu hình cho phù hợp — ví dụ: Puppet và Chef.

Con rối hoạt động như thế nào?

Con rối dựa trên mô hình triển khai Kéo, trong đó các nút tác nhân kiểm tra thường xuyên sau mỗi lần 1800 giây với nút chính để xem có cần cập nhật gì trong tác nhân không. Nếu có bất cứ điều gì cần được cập nhật, tác nhân sẽ lấy mã rối cần thiết từ máy chủ và thực hiện các hành động được yêu cầu.

Hãy giải thích nó bằng một ví dụ:

Ví dụ: Master – Thiết lập đại lý:

The Master

Một máy dựa trên Linux có cài đặt phần mềm Puppet master trên đó. Nó chịu trách nhiệm duy trì cấu hình dưới dạng mã rối. Nút chính chỉ có thể là Linux.

các đại lý

Các máy mục tiêu được quản lý bởi một con rối có cài đặt phần mềm tác nhân con rối.

Tác nhân có thể được cấu hình trên bất kỳ hệ điều hành được hỗ trợ nào như Linux hoặc Windows or Solaris hoặc hệ điều hành Mac.

Giao tiếp giữa chủ và đại lý được thiết lập thông qua các chứng chỉ an toàn.

Đại lý múa rối truyền thông
Đại lý múa rối truyền thông

Giao tiếp giữa Master và Agent

Bước 1) Sau khi kết nối được thiết lập giữa tác nhân và máy chủ, tác nhân Puppet sẽ gửi dữ liệu về trạng thái của nó đến máy chủ Puppet master. Những dữ liệu này được gọi là Facts: Thông tin này bao gồm tên máy chủ, chi tiết kernel, địa chỉ IP, chi tiết tên tệp, v.v.

Giao tiếp giữa Master và Agent
Đặc vụ gửi sự thật cho Sư phụ

Bước 2) Puppet Master sử dụng dữ liệu này và biên soạn một danh sách có cấu hình để áp dụng cho tác nhân. Danh sách cấu hình được thực hiện trên một tác nhân này được gọi là mục lục. Điều này có thể được thay đổi như cài đặt gói, nâng cấp hoặc xóa, tạo Hệ thống tệp, tạo hoặc xóa người dùng, khởi động lại máy chủ, thay đổi cấu hình IP, v.v.

Giao tiếp giữa Master và Agent
Master gửi danh mục cho Đại lý

Bước 3) Tác nhân sử dụng danh sách cấu hình này để áp dụng mọi thay đổi cấu hình cần thiết trên nút.

Trong trường hợp không có sai sót nào trong cấu hình, Tác nhân sẽ không thực hiện bất kỳ thay đổi cấu hình nào và để nút chạy với cùng cấu hình.

Giao tiếp giữa Master và Agent
Đại lý áp dụng cấu hình

Bước 4) Sau khi hoàn tất, nút sẽ báo cáo lại cho người điều khiển con rối cho biết rằng cấu hình đã được áp dụng và hoàn thành.

Khối rối

Puppet cung cấp tính linh hoạt để tích hợp Báo cáo với các công cụ của bên thứ ba bằng API Puppet.

Bốn loại khối xây dựng con rối là

  1. Thông Tin
  2. Các lớp học
  3. Tệp kê khai
  4. Modules

Tài nguyên con rối

Tài nguyên Con rối là các khối xây dựng của Con rối.

Tài nguyên là chức năng sẵn có chạy ở phía sau để thực hiện các thao tác cần thiết trong con rối.

Lớp múa rối

Sự kết hợp của các tài nguyên khác nhau có thể được nhóm lại thành một đơn vị duy nhất gọi là lớp.

Bản kê khai con rối

Manifest là một thư mục chứa các tập tin DSL con rối. Những tệp đó có phần mở rộng .pp. Phần mở rộng .pp là viết tắt của chương trình con rối. Mã con rối bao gồm các định nghĩa hoặc khai báo của các Lớp con rối.

Mô-đun con rối

Mô-đun là tập hợp các tệp và thư mục như Bản kê khai, Định nghĩa lớp. Chúng là các đơn vị có thể tái sử dụng và chia sẻ trong Puppet.

Ví dụ, các MySQL mô-đun để cài đặt và cấu hình MySQL hoặc mô-đun Jenkins để quản lý Jenkins, v.v.

Mô-đun con rối
Mô-đun con rối

Các loại tài nguyên con rối

Nói chung, một hệ thống bao gồm các tệp, người dùng, dịch vụ, quy trình, gói, v.v. Trong Puppet, những thứ này được gọi là tài nguyên. Nguồn lực là những khối xây dựng cơ bản trong

Con rối. Mọi hoạt động của các điệp viên bù nhìn đều được thực hiện với sự trợ giúp của các nguồn lực bù nhìn.

Tài nguyên Puppet là các công cụ có sẵn được sử dụng để thực hiện nhiều tác vụ và hoạt động khác nhau trên bất kỳ nền tảng nào được hỗ trợ. Chúng ta có thể sử dụng một tài nguyên Puppet duy nhất để thực hiện một tác vụ cụ thể hoặc chúng ta có thể sử dụng nhiều tài nguyên Puppet cùng nhau để thực hiện một số triển khai cấu hình ứng dụng phức tạp.

Tài nguyên có thể có nhiều loại khác nhau. Công dụng của con rối tài nguyêncác loại tài nguyên để mô tả cấu hình của hệ thống.

Có ba loại loại tài nguyên:

  1. Lõi con rối hoặc các loại tài nguyên tích hợp.
  2. Các loại tài nguyên được xác định bằng con rối.
  3. Các loại tài nguyên tùy chỉnh rối.

Lõi con rối hoặc các loại tài nguyên tích hợp

Các loại tài nguyên cốt lõi hoặc tích hợp là các loại tài nguyên con rối được tạo sẵn đi kèm với phần mềm con rối. Tất cả các loại tài nguyên cốt lõi hoặc tích hợp của Puppet đều do nhóm Puppet viết và duy trì.

Các loại tài nguyên được xác định rối

Các loại tài nguyên được xác định là các loại tài nguyên nhẹ được viết bằng ngôn ngữ khai báo Puppet bằng cách sử dụng kết hợp các loại tài nguyên hiện có.

Các loại tài nguyên tùy chỉnh con rối

Các loại tài nguyên tùy chỉnh là các loại tài nguyên được tùy chỉnh hoàn toàn được viết bằng Ruby.

Hãy cùng khám phá về các loại tài nguyên con rối…

Trong terminal, nhập lệnh sau để hiển thị danh sách các lệnh phụ liên quan đến Puppet:

Puppet --help

Các loại tài nguyên tùy chỉnh con rối

Trong trường hợp của chúng tôi, chúng tôi quan tâm đến lệnh phụ “tài nguyên” mà chúng tôi sẽ sử dụng để tìm thông tin về các loại tài nguyên con rối có sẵn.

Trong terminal, nhập bất kỳ lệnh nào sau đây để hiển thị danh sách hành động liên kết với tiểu lệnh con rối “tài nguyên":

Puppet help resource		
Puppet resource --help		

Các loại tài nguyên tùy chỉnh con rối

Trong trường hợp này, chúng tôi có tài nguyên như lệnh phụ và –loại như hành động.

Puppet có sẵn 49 loại tài nguyên cốt lõi.

Trong terminal, nhập lệnh sau để hiển thị danh sách các loại tài nguyên puppet tích hợp sẵn:

puppet resource –types

Các loại tài nguyên tùy chỉnh con rối

Mỗi loại hỗ trợ một danh sách thuộc tính. Các thuộc tính này cung cấp mô tả chi tiết mà Puppet sử dụng để quản lý tài nguyên.

Để tìm hiểu tất cả các thuộc tính liên quan đến loại tài nguyên puppet, hãy sử dụng lệnh sau:

puppet describe <resource type name>	

Các tham số sẽ liệt kê tất cả các thuộc tính có sẵn cho loại tài nguyên đó.

gói mô tả con rối

Các loại tài nguyên tùy chỉnh con rối

Người mới khó có thể hiểu và liên hệ được nhiều file mã rối không được quản lý. Đây là lúc chúng ta cần một số nhóm để liên kết các hoạt động lại với nhau. Mục đích là để giải quyết một vấn đề duy nhất, chẳng hạn như tất cả các thao tác cần thiết để định cấu hình ssh trên máy chủ hoặc dịch vụ ntp hoặc một máy chủ web hoặc máy chủ cơ sở dữ liệu hoàn chỉnh từ đầu.

Lớp múa rối là gì?

Các lớp con rối là tập hợp các tài nguyên con rối được nhóm lại với nhau thành một đơn vị duy nhất.

Puppet giới thiệu các lớp để làm cho cấu trúc có thể tái sử dụng và có tổ chức.

Đầu tiên, chúng ta cần định nghĩa một lớp bằng cú pháp định nghĩa lớp; các lớp phải là duy nhất và chỉ có thể được khai báo một lần với cùng tên:

class <class-name> {
<Resource declarations>
}

Ví dụ:

class ntpconfig {
    file {
        "/etc/ntp.conf": 
     ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}

Cho đến nay chúng ta chỉ định nghĩa lớp này nhưng chưa sử dụng nó ở đâu cả. Có nghĩa là mã mà chúng ta đã viết sẽ không bao giờ được thực thi trừ khi chúng ta khai báo lớp này ở nơi khác.

Khai báo lớp

Để sử dụng một lớp được xác định trong mã, hãy sử dụng bao gồm từ khóa.

class ntpconfig {
    file {
        "/etc/ntp.conf": 
      ensure=> "present", 
      content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}
include ntpconfig

Hãy hiểu điều này với một tình huống thực tế.

Demo cài đặt NTP

Trước tiên, hãy đảm bảo rằng gói NTP chưa có trên máy chủ, lệnh sau sẽ không trả về kết quả gì nếu telnet không có trên máy chủ:

rpm -qa | grep -i ntp

Demo cài đặt NTP

Như chúng ta có thể thấy, gói NTP đã có trên máy chủ. Hãy xóa gói NTP hiện có:

yum remove ntp

Sau khi xóa gói, hãy đảm bảo rằng tệp ntp.conf không tồn tại:

ls -lrt /etc/ntp.conf

Demo cài đặt NTP

Kiểm tra xem dịch vụ ntp có tồn tại không bằng cách chạy lệnh sau:

systemctl status ntp

Demo cài đặt NTP

Tạo một tệp .pp mới để lưu mã. Từ dòng lệnh:

vi demontp.pp

Thay đổi sang chế độ chèn bằng cách nhấn i từ bàn phím.

Nhập mã sau để tạo một tệp mới:

# Class Definition 
class ntpconfig {
    # Installing NTP Package 
  package {"ntp": 
    ensure=> "present",
    }
    # Configuring NTP configuration file 
  file {"/etc/ntp.conf": 
    ensure=> "present", 
    content=> "server 0.centos.pool.ntp.org iburst\n",
    }
    # Starting NTP services 
  service {"ntpd": 
    ensure=> "running",
    }
}

Sau khi chỉnh sửa xong: nhấn esc

Để lưu file nhấn :wq!

Bước tiếp theo là kiểm tra mã có lỗi cú pháp nào không. Thực hiện lệnh sau:

puppet parser validate demontp.pp

Hãy chắc chắn rằng bạn đã chuyển sang nguồn gốc để có thể hoàn thành bài kiểm tra mà không gặp bất kỳ lỗi nào, bằng cách thực hiện lệnh:

su root

Thử nghiệm là bước tiếp theo trong quá trình tạo mã. Thực hiện lệnh sau để thực hiện kiểm tra khói:

Puppet applies demontp.pp --noop

Bước cuối cùng là chạy con rối ở chế độ thực và xác minh đầu ra.

puppet apply demontp.pp

Con rối không biểu diễn gì cả vì lớp demo chỉ xác định nhưng không tuyên bố.

Vì vậy, cho đến khi bạn khai báo lớp con rối, mã sẽ không được áp dụng.

Hãy khai lớp demo bên trong cùng một mã bằng cách sử dụng bao gồm tên lớp ở cuối mã:

# Class Definition 
class ntpconfig {
    # Installing NTP Package 
  package {"ntp": 
    ensure=> "present",
    }
    # Configuring NTP configuration file 
  file {"/etc/ntp.conf": 
    ensure=> "present", 
    content=> "server 0.centos.pool.ntp.org iburst\n",
    }
    # Starting NTP services 
  service {"ntpd": 
    ensure=> "running",
    }
}

# Class Declaration 
include ntpconfig

Một lần nữa kiểm tra mã có lỗi cú pháp nào không. Thực hiện lệnh sau:

puppet parser validate demontp.pp

Hãy chắc chắn rằng bạn đã chuyển sang nguồn gốc để có thể hoàn thành bài kiểm tra mà không gặp bất kỳ lỗi nào, bằng cách thực hiện lệnh:

su root

Kiểm tra là bước tiếp theo trong quá trình tạo mã. Thực hiện lệnh sau để thực hiện kiểm tra khói:

Puppet apply demontp.pp --noop

Bước cuối cùng là chạy con rối ở chế độ thực và xác minh đầu ra.

puppet apply demontp.pp

Lần này mã được áp dụng vì lớp đã được xác định và sau đó được khai báo.

Demo cài đặt NTP

Đảm bảo rằng ntp.conf hiện đã tồn tại:

ls -lrt /etc/ntp.conf

Kiểm tra dịch vụ ntp đã được khởi động bằng cách chạy lệnh sau:

systemctl status ntpd

Demo cài đặt NTP