Chef là một công cụ quản lý cấu hình dựa trên Ruby được sử dụng để định nghĩa cơ sở hạ tầng dưới dạng mã. Điều này cho phép người dùng tự động hóa việc quản lý nhiều nút và duy trì tính nhất quán trên các nút đó. Các công thức khai báo trạng thái mong muốn cho các nút được quản lý và được tạo trên máy trạm của người dùng bằng gói Chef Workstation . Các công thức của bạn được phân phối trên các nút thông qua máy chủ Chef . Một máy khách Chef , được cài đặt trên mỗi nút, chịu trách nhiệm áp dụng công thức cho nút tương ứng của nó.

chef_graph-small.png

Hướng dẫn này sẽ chỉ cho bạn cách tạo và cấu hình máy chủ và máy trạm Chef. Bạn cũng sẽ khởi động một nút để quản lý bằng Chef. Công việc này sẽ yêu cầu ba Linode riêng lẻ.

Xem Hướng dẫn dành cho người mới bắt đầu về nghề đầu bếp để biết phần giới thiệu về các khái niệm của nghề đầu bếp.

Ghi chú: Hướng dẫn này được viết cho người dùng không phải root. Các lệnh yêu cầu quyền nâng cao được thêm tiền tố sudo. Nếu bạn không quen với sudolệnh này, bạn có thể xem hướng dẫn Người dùng và Nhóm của chúng tôi .

Điều kiện tiên quyết

  • Một Linode 8GB chạy Ubuntu 18.04. Linode này sẽ lưu trữ máy chủ Chef.
  • Gán một Miền cho máy chủ Chef. Đảm bảo miền của bạn có vùng miền, bản ghi NS và bản ghi A/AAA tương ứng. Xem Tạo Miền để biết chi tiết.
  • Đảm bảo tên máy chủ của máy chủ Chef giống với tên miền của nó. Máy chủ Chef của bạn sẽ tự động tạo chứng chỉ SSL dựa trên tên máy chủ của Linode.
  • Hai Linode 2 GB, mỗi Linode chạy Ubuntu 18.04. Một Linode sẽ lưu trữ một máy trạm và Linode còn lại sẽ lưu trữ một nút do Chef quản lý.
  • Máy trạm và máy chủ Chef phải được cấu hình theo hướng dẫn Thiết lập và bảo mật phiên bản tính toán . Sau khi nút của bạn được khởi động , bạn có thể sử dụng sổ tay hướng dẫn Chef để bảo mật nút của mình. Cân nhắc sử dụng sổ tay hướng dẫn Users và sổ tay hướng dẫn Firewall cho công việc này.
  • Đảm bảo tất cả máy chủ đều được cập nhật: sudo apt update && sudo apt upgrade

The Chef Server

Máy chủ Chef là trung tâm tương tác giữa tất cả các máy trạm và nút dưới sự quản lý của Chef. Các thay đổi được thực hiện đối với mã cấu hình trên máy trạm được đẩy đến máy chủ Chef, sau đó được kéo bởi một nút chef-clientđể áp dụng các cấu hình.

Cài đặt máy chủ Chef

1.Tải xuống lõi máy chủ Chef mới nhất :

wget https://packages.chef.io/files/stable/chef-server/13.1.13/ubuntu/18.04/chef-server-core_13.1.13-1_amd64.deb

2.Cài đặt máy chủ:

sudo dpkg -i chef-server-core_*.deb

3.Xóa tệp đã tải xuống:

rm chef-server-core_*.deb

4.Máy chủ Chef bao gồm một tiện ích dòng lệnh có tên là chef-server-ctl. Chạy chef-server-ctlđể khởi động các dịch vụ máy chủ Chef:

sudo chef-server-ctl reconfigure

Tạo Người dùng và Tổ chức Chef

Để liên kết các máy trạm và nút với máy chủ Chef, hãy tạo một quản trị viên và tổ chức có khóa riêng RSA liên quan.

1.Từ thư mục chính, tạo một .chefthư mục để lưu trữ khóa:

mkdir .chef

2.Sử dụng chef-server-ctlđể tạo người dùng. Trong ví dụ này, hãy thay đổi những mục sau để phù hợp với nhu cầu của bạn: USER_NAMEFIRST_NAMELAST_NAMEEMAIL, và PASSWORD. Điều chỉnh USER_NAME.pemvà để nguyên .pemphần mở rộng:

sudo chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD' --filename ~/.chef/USER_NAME.pem

Để xem danh sách tất cả người dùng trên máy chủ Chef của bạn, hãy đưa ra lệnh sau:

sudo chef-server-ctl user-list

3.Tạo một tổ chức và thêm người dùng được tạo ở bước trước vào nhóm bảo mật quản trị viên và quản trị viên thanh toán. Thay thế ORG_NAMEbằng một mã định danh ngắn cho tổ chức, ORG_FULL_NAMEbằng tên đầy đủ của tổ chức, USER_NAMEbằng tên người dùng được tạo ở bước trên và ORG_NAME.pembằng mã định danh ngắn của tổ chức theo sau là .pem:

sudo chef-server-ctl org-create ORG_NAME "ORG_FULL_NAME" --association_user USER_NAME --filename ~/.chef/ORG_NAME.pem

Để xem danh sách tất cả các tổ chức trên máy chủ Chef của bạn, hãy sử dụng lệnh sau:

sudo chef-server-ctl org-list

Sau khi cài đặt máy chủ Chef và tạo khóa RSA, bạn có thể bắt đầu cấu hình máy trạm của mình. Máy trạm là nơi tất cả các cấu hình chính sẽ được tạo cho các nút của bạn.

Chef Workstations

Trạm làm việc Chef là nơi bạn tạo và cấu hình bất kỳ công thức nấu ăn, sách hướng dẫn nấu ăn, thuộc tính và các thay đổi khác cần thiết để quản lý các nút của bạn. Mặc dù đây có thể là máy cục bộ chạy bất kỳ hệ điều hành nào, nhưng vẫn có một số lợi ích khi giữ máy chủ từ xa làm trạm làm việc của bạn để bạn có thể truy cập từ bất kỳ đâu.

Trong phần này, bạn sẽ tải xuống và cài đặt gói Chef Workstation, cung cấp tất cả các công cụ có trong ChefDK , bộ công cụ phát triển của Chef.

Thiết lập một máy trạm

1.Tải xuống Chef Workstation mới nhất :

wget  https://packages.chef.io/files/stable/chef-workstation/0.2.43/ubuntu/18.04/chef-workstation_0.2.43-1_amd64.deb

2.Cài đặt Chef Workstation:

sudo dpkg -i chef-workstation_*.deb

3.Xóa tệp cài đặt:

rm chef-workstation_*.deb

4.Tạo kho lưu trữ Chef của bạn. chef-repoThư mục này sẽ lưu trữ sách dạy nấu ăn Chef và các tệp liên quan khác.

chef generate repo chef-repo

5.Đảm bảo rằng tệp của máy trạm của bạn /etc/hostsánh xạ địa chỉ IP của nó tới tên miền đủ điều kiện của máy chủ Chef và tên máy chủ máy trạm. Ví dụ:

127.0.0.1 localhost
192.0.1.0 example.com
192.0.2.0 workstation
...

6.Tạo một .chefthư mục con. .chefThư mục con sẽ lưu trữ tệp cấu hình Knife và .pemcác tệp được sử dụng để xác thực cặp khóa RSA với máy chủ Chef. Di chuyển vào thư chef-repomục:

 mkdir ~/chef-repo/.chef
 cd chef-repo

Thêm khóa riêng RSA

Xác thực giữa máy chủ Chef và máy trạm và/hoặc các nút được hoàn tất bằng mã hóa khóa công khai. Điều này đảm bảo rằng máy chủ Chef chỉ giao tiếp với các máy đáng tin cậy. Trong phần này, khóa riêng RSA được tạo khi thiết lập máy chủ Chef sẽ được sao chép vào máy trạm để cho phép giao tiếp giữa máy chủ Chef và máy trạm.

1.Nếu bạn chưa có cặp khóa RSA trên máy trạm của mình, hãy tạo một cặp. Cặp khóa này sẽ được sử dụng để truy cập vào máy chủ Chef và sau đó chuyển .pemcác tệp của họ:

ssh-keygen -b 4096

Nhấn Enter để sử dụng tên mặc định id_rsavà id_rsa.pubnhập /home/your_username/.sshtrước khi nhập mật khẩu.

Ghi chú: Nếu bạn đã tắt xác thực mật khẩu SSH trên Linode của máy chủ Chef, theo khuyến nghị của hướng dẫn Cách bảo mật máy chủ , hãy bật lại xác thực mật khẩu SSH trước khi thực hiện các bước này. Hãy đảm bảo tắt lại sau khi bạn đã thêm khóa ssh công khai của máy trạm vào Linode của máy chủ Chef.

Tải khóa công khai của máy trạm của bạn lên Linode lưu trữ máy chủ Chef. Đảm bảo bạn thay thế example_userbằng tài khoản người dùng của máy chủ Chef và 192.0.2.0bằng địa chỉ IP của nó:

ssh-copy-id example_user@192.0.2.0

2.Sao chép .pemcác tập tin từ máy chủ Chef của bạn đến máy trạm của bạn bằng scplệnh. Thay thế userbằng tên người dùng thích hợp và 192.0.2.0bằng IP của máy chủ Chef của bạn:

scp example_user@192.0.2.0:~/.chef/*.pem ~/chef-repo/.chef/

3.Xác nhận các tập tin đã được sao chép thành công bằng cách liệt kê nội dung của .chefthư mục:

ls ~/chef-repo/.chef

Các tập tin của bạn .pemsẽ được liệt kê.

Thêm Kiểm soát Phiên bản

Máy trạm được sử dụng để tạo, tải xuống và chỉnh sửa sách dạy nấu ăn và các tệp liên quan khác. Bạn nên theo dõi mọi thay đổi được thực hiện đối với các tệp này bằng phần mềm kiểm soát phiên bản, như Git. Máy trạm Chef thêm thành phần Git vào máy trạm của bạn và khởi tạo kho lưu trữ Git trong thư mục nơi tệp chef-repođược tạo. Cấu hình Git bằng cách thêm tên người dùng và email của bạn, sau đó thêm và cam kết mọi tệp mới được tạo trong các bước trên.

1.Cấu hình Git bằng cách thêm tên người dùng và email của bạn, thay thế các giá trị cần thiết:

git config --global user.name yourname
git config --global user.email user@email.com

2.Thêm .chefthư mục vào .gitignoretập tin:

echo ".chef" > ~/chef-repo/.gitignore

3.Di chuyển vào ~/chef-repothư mục nếu bạn chưa vào đó và thêm và cam kết tất cả các tệp hiện có:

cd ~/chef-repo
git add .
git commit -m "initial commit"

4.Đảm bảo thư mục sạch:

git status

Nó sẽ cho ra kết quả:

On branch master
nothing to commit, working directory clean

Tạo First Cookbook của bạn

Tạo một sách dạy nấu ăn mới của Chef:

chef generate cookbook my_cookbook

Cấu hình Knife

1.Tạo tệp cấu hình dao bằng cách điều hướng đến ~/chef-repo/.chefthư mục của bạn và tạo tệp có tên config.rbbằng trình soạn thảo văn bản bạn thích.

2.Sao chép cấu hình sau vào config.rbtệp:

current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                'node_name'
client_key               "USER.pem"
validation_client_name   'ORG_NAME-validator'
validation_key           "ORGANIZATION-validator.pem"
chef_server_url          'https://example.com/organizations/ORG_NAME'
cache_type               'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path            ["#{current_dir}/../cookbooks"]

3.Thay đổi những mục sau:

  • Giá trị node_namephải là tên người dùng được tạo trên máy chủ Chef.
  • Thay đổi USER.pembên dưới client_keyđể phản ánh .pemtệp của bạn cho người dùng.
  • Nên validation_client_namelà tổ chức của bạn ORG_NAMEtheo sau là -validator.
  • ORGANIZATION-validator.pemtrong validation_keyđường dẫn phải được đặt theo ORG_NAMEsau bởi -validator.pem.
  • Cuối cùng chef_server_urlphải là tên miền của máy chủ Chef được /organizations/ORG_NAMEthêm vào. Hãy nhớ thay thế ORG_NAMEbằng tên tổ chức của bạn.

4.Di chuyển đến chef-repothư mục và sao chép các chứng chỉ SSL cần thiết từ máy chủ:

cd ..
knife ssl fetch

Ghi chú: Chứng chỉ SSL được tạo trong quá trình cài đặt máy chủ Chef. Các chứng chỉ này được tự ký, nghĩa là không có cơ quan cấp chứng chỉ ký (CA) nào để xác minh. Tên máy chủ và FQDN của máy chủ Chef phải giống nhau để máy trạm có thể lấy và xác minh chứng chỉ SSL. Bạn có thể xác minh tên máy chủ và FQDN của máy chủ Chef bằng cách chạy hostname và hostname -f, tương ứng. Tham khảo tài liệu của Chef để biết chi tiết về cách tạo lại chứng chỉ SSL.

5.Xác nhận config.rbthiết lập đã đúng chưa bằng cách chạy danh sách máy khách:

knife client list

Lệnh này sẽ xuất ra tên trình xác thực.

Bây giờ máy chủ và máy trạm Chef của bạn đã được cấu hình, bạn có thể khởi động nút đầu tiên.

Khởi động một node

Khởi động một nút sẽ cài đặt Chef client trên nút và xác thực nút. Điều này cho phép nút đọc từ máy chủ Chef và kéo xuống và áp dụng bất kỳ bản cập nhật cấu hình cần thiết nào được chef-client phát hiện.

Ghi chú: Nếu bạn gặp bất kỳ 401 Unauthorized lỗi nào, hãy đảm bảo rằng ORGANIZATION.pemtệp của bạn có 700quyền. Xem hướng dẫn khắc phục sự cố của Chef để biết thêm thông tin về chẩn đoán lỗi xác thực.

1.Cập nhật /etc/hoststệp trên nút để xác định nút, tên miền của máy chủ Chef và máy trạm.

127.0.0.1 localhost
198.51.100.0 node-hostname
192.0.2.0 workstation
192.0.1.0 example.com
...

2.Từ máy trạm của bạn , hãy điều hướng đến ~/chef-repo/.chefthư mục:

cd ~/chef-repo/.chef

3.Khởi động nút máy khách bằng cách sử dụng người dùng gốc của nút máy khách hoặc người dùng có quyền cao hơn:

  • Với tư cách là người dùng gốc của nút , hãy đổi passwordmật khẩu gốc và nodenametên mong muốn cho nút máy khách của bạn. Bạn có thể bỏ qua mục này nếu bạn muốn tên mặc định là tên máy chủ của nút: knife bootstrap 192.0.2.0 -x root -P password --node-name nodename
  • Với tư cách là người dùng có quyền sudo , hãy đổi usernamethành người dùng nút, passwordmật khẩu người dùng và nodenametên mong muốn cho nút máy khách. Bạn có thể bỏ qua mục này nếu bạn muốn tên mặc định là tên máy chủ của nút: knife bootstrap 192.0.2.0 -x username -P password --use-sudo-password --node-name nodename
  • Với tư cách là người dùng có xác thực cặp khóa , hãy thay đổi usernamethành người dùng nút và nodenametên mong muốn cho nút máy khách. Bạn có thể bỏ mục này nếu bạn muốn tên mặc định là tên máy chủ của nút máy khách: knife bootstrap 192.0.2.0 --ssh-user username --sudo --identity-file ~/.ssh/id_

4.Xác nhận rằng nút đã được khởi động bằng cách liệt kê các nút máy khách:

knife client list

Nút máy khách mới của bạn sẽ được đưa vào danh sách.

5.Thêm nút khởi động vào /etc/hoststệp máy trạm của bạn. Thay thế node-hostnamebằng tên máy chủ mà bạn vừa gán cho nút khi nó được khởi động:

127.0.0.1 localhost
192.0.1.0 example.com
192.0.2.0 workstation
198.51.100.0 node-hostname
...

Tải xuống Cookbook (Tùy chọn)

Khi sử dụng Chef, Chef client sẽ chạy định kỳ trên các nút của bạn và kéo xuống bất kỳ thay đổi nào được đẩy lên máy chủ Chef từ máy trạm của bạn. Bạn cũng sẽ muốn tệp validation.pemđược tải lên nút của mình khi khởi động được xóa vì mục đích bảo mật. Mặc dù các bước này có thể được thực hiện thủ công, nhưng thường dễ dàng và hiệu quả hơn khi thiết lập chúng dưới dạng sổ tay hướng dẫn.

Phần này là tùy chọn nhưng cung cấp hướng dẫn về cách tải sách dạy nấu ăn xuống máy trạm của bạn và đẩy lên máy chủ, đồng thời bao gồm phần cốt lõi của sách dạy nấu ăn cơ bản để mở rộng và thử nghiệm.

1.Từ máy trạm của bạn , hãy điều hướng đến ~/chef-repo/.chefthư mục:

cd ~/chef-repo/.chef

2.Tải xuống sách hướng dẫn nấu ăn và các phụ thuộc:

knife cookbook site install cron-delvalidate

3.Mở default.rbtệp để kiểm tra công thức nấu ăn mặc định:

#
# Cookbook Name:: cron-delvalidate
# Recipe:: Chef-Client Cron & Delete Validation.pem
#
#

cron "clientrun" do
  minute '0'
  hour '*/1'
  command "/usr/bin/chef-client"
  action :create
end

file "/etc/chef/validation.pem" do
  action :delete
end

Tài cron "clientrun" donguyên định nghĩa hành động cron. Nó được thiết lập để chạy hành chef-clientđộng ( /usr/bin/chef-client) mỗi giờ ( */1với */định nghĩa là mỗi giờ chứ không phải 1 giờ sáng hàng ngày). actionMã biểu thị rằng Chef đang tạo một cronjob mới.

file "/etc/chef/validation.pem" dogọi đến validation.pemtệp. Xác actionđịnh rằng tệp sẽ bị xóa ( :delete).

Đây là hai bộ mã rất cơ bản được viết bằng Ruby cung cấp ví dụ về cấu trúc mã sẽ được sử dụng khi tạo sách dạy nấu ăn Chef. Những ví dụ này có thể được chỉnh sửa và mở rộng khi cần.

4.Thêm công thức vào danh sách chạy của nút, thay thế nodenamebằng tên nút của bạn:

knife node run_list add nodename 'recipe[cron-delvalidate::default]'

5.Đẩy sách dạy nấu ăn lên máy chủ Chef:

knife cookbook upload cron-delvalidate

Lệnh này cũng được sử dụng khi cập nhật sách dạy nấu ăn.

6.Sử dụng knife-sshđể chạy chef-clientlệnh trên nút của bạn. Thay thế nodenamebằng tên nút của bạn. Nếu bạn đã thiết lập nút của mình bằng tài khoản người dùng giới hạn, hãy thay thế -x rootbằng tên người dùng chính xác, ví dụ -x username: .

knife ssh 'name:nodename' 'sudo chef-client' -x root

Các công thức trong danh sách chạy sẽ được kéo từ máy chủ và chạy trên nút. Trong trường hợp này, đó sẽ là công cron-delvalidatethức. Công thức này đảm bảo rằng bất kỳ sổ tay nấu ăn nào được đẩy lên Chef Server và được thêm vào danh sách chạy của nút sẽ được kéo xuống các nút khởi động một lần một giờ. Bước tự động này loại bỏ việc kết nối với nút trong tương lai để kéo xuống các thay đổi.

Bây giờ bạn đã biết cách tải xuống sổ tay hướng dẫn của Chef, thêm sổ tay hướng dẫn vào danh sách chạy của một nút và áp dụng cấu hình trên một nút, hãy cân nhắc bảo mật nút do Chef quản lý của bạn bằng các sổ tay hướng dẫn sau: Người dùng và Tường lửa .

Nguồn: https://www.linode.com/docs/guides/install-a-chef-server-workstation-on-ubuntu-18-04/