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ó.

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 sudo
lệ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 .chef
thư 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_NAME
, FIRST_NAME
, LAST_NAME
, EMAIL
, và PASSWORD
. Điều chỉnh USER_NAME.pem
và để nguyên .pem
phầ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_NAME
bằng một mã định danh ngắn cho tổ chức, ORG_FULL_NAME
bằng tên đầy đủ của tổ chức, USER_NAME
bằng tên người dùng được tạo ở bước trên và ORG_NAME.pem
bằ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-repo
Thư 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 .chef
thư mục con. .chef
Thư mục con sẽ lưu trữ tệp cấu hình Knife và .pem
cá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-repo
mụ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 .pem
các tệp của họ:
ssh-keygen -b 4096
Nhấn Enter để sử dụng tên mặc định id_rsa
và id_rsa.pub
nhập /home/your_username/.ssh
trướ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_user
bằng tài khoản người dùng của máy chủ Chef và 192.0.2.0
bằng địa chỉ IP của nó:
ssh-copy-id example_user@192.0.2.0
2.Sao chép .pem
các tập tin từ máy chủ Chef của bạn đến máy trạm của bạn bằng scp
lệnh. Thay thế user
bằng tên người dùng thích hợp và 192.0.2.0
bằ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 .chef
thư mục:
ls ~/chef-repo/.chef
Các tập tin của bạn .pem
sẽ đượ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 .chef
thư mục vào .gitignore
tập tin:
echo ".chef" > ~/chef-repo/.gitignore
3.Di chuyển vào ~/chef-repo
thư 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/.chef
thư mục của bạn và tạo tệp có tên config.rb
bằ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.rb
tệ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_name
phải là tên người dùng được tạo trên máy chủ Chef. - Thay đổi
USER.pem
bên dướiclient_key
để phản ánh.pem
tệp của bạn cho người dùng. - Nên
validation_client_name
là tổ chức của bạnORG_NAME
theo sau là-validator
. ORGANIZATION-validator.pem
trongvalidation_key
đường dẫn phải được đặt theoORG_NAME
sau bởi-validator.pem
.- Cuối cùng
chef_server_url
phải là tên miền của máy chủ Chef được/organizations/ORG_NAME
thêm vào. Hãy nhớ thay thếORG_NAME
bằng tên tổ chức của bạn.
4.Di chuyển đến chef-repo
thư 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.rb
thiế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.pem
tệp của bạn có 700
quyề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/hosts
tệ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/.chef
thư 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
password
mật khẩu gốc vànodename
tê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
username
thành người dùng nút,password
mật khẩu người dùng vànodename
tê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
username
thành người dùng nút vànodename
tê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/hosts
tệp máy trạm của bạn. Thay thế node-hostname
bằ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/.chef
thư 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.rb
tệ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" do
nguyê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ờ ( */1
với */
định nghĩa là mỗi giờ chứ không phải 1 giờ sáng hàng ngày). action
Mã biểu thị rằng Chef đang tạo một cronjob mới.
file "/etc/chef/validation.pem" do
gọi đến validation.pem
tệ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ế nodename
bằ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-client
lệnh trên nút của bạn. Thay thế nodename
bằ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 root
bằ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-delvalidate
thứ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/