Giới thiệu
Trong quá trình làm việc với Chef, mình đã khám phá ra rất nhiều mẹo và thủ thuật hữu ích giúp tối ưu hóa quy trình làm việc. Những kiến thức này không chỉ đến từ những người đi trước mà còn là những gì mình tự đúc kết được. Bài viết này sẽ chia sẻ một số mẹo và thủ thuật mà bạn có thể áp dụng ngay để cải thiện hiệu suất làm việc với Chef.
Mục Lục
- Chạy lệnh và sử dụng đầu ra
- Sao chép cookbook địa phương đến node
- Kiểm tra tài nguyên trước khi đưa vào cookbook
- Xem thuộc tính trên instance
- Chạy systemd trong test kitchen với dokken
- Thực hành tốt nhất
- Những cạm bẫy thường gặp
- Mẹo hiệu suất
- Khắc phục sự cố
Chạy lệnh và sử dụng đầu ra
Nếu bạn cần chạy một lệnh và sử dụng đầu ra của nó để quyết định xem một tài nguyên có nên chạy hay không, bạn có thể sử dụng thư viện mixlib/shellout
. Thư viện này thường đã được cài đặt sẵn trong Chef SDK. Dưới đây là ví dụ:
ruby
require 'mixlib/shellout'
find = Mixlib::ShellOut.new("find . -name '*.rb'")
find.run_command
# Lấy đầu ra cả tốt lẫn xấu
puts find.stdout
puts find.stderr
Sao chép cookbook địa phương đến node
Khi bạn muốn kiểm tra cách mà cookbook của bạn sẽ được áp dụng trên một máy chủ nhưng chưa sẵn sàng để đẩy nó lên máy chủ Chef, bạn có thể nén toàn bộ cookbook và sao chép nó vào một node. Các bước thực hiện như sau:
- Sao chép tarball và đặt nó ở đâu đó.
- Chỉnh sửa
client.rb
để chỉ đến thư mục chứa các cookbook (phải cómetadata.rb
). - Chỉnh sửa
client.rb
để nó lấy từ một đường dẫn địa phương. Đường dẫn cache là một vị trí tốt vì nó đã có các cookbook của bạn.
ruby
cookbook_path /var/cinc/cache/cookbooks
- Chạy
cinc client
trong chế độ solo và chỉ định runlist, quan trọng là bạn phải chạy với -z để thực hiện trong chế độ solo, nghĩa là nó sẽ không kết nối đến máy chủ Chef.
bash
cinc-client -z -r "yourcookbook::recipe"
Cookbook của bạn bây giờ sẽ được áp dụng cho instance.
Kiểm tra tài nguyên trước khi đưa vào cookbook
Trên một node đã cài đặt cinc, bạn có thể nhập vào shell và vào chế độ recipe_mode
để kiểm tra các tài nguyên. Nếu bạn hài lòng với chúng, bạn có thể chạy run_chef
để thực hiện chúng trên một node. Đây là cách tuyệt vời để thử nghiệm và thiết kế cookbook.
bash
cinc-shell -s
cinc (17.9.26)> recipe_mode
cinc:recipe > git '/tmp/dotfiles' do
cinc:recipe > repository 'https://github.com/mvaldes14/dotfiles.git'
cinc:recipe (17.9.26)> end
Khi bạn đã chạy xong, bạn sẽ thấy thông tin về quá trình clone repo.
Xem thuộc tính trên instance
Điều này rất hữu ích để gỡ lỗi nếu một thuộc tính không hoạt động như bạn mong đợi hoặc nếu bạn có nhiều overrides và không biết thuộc tính nào là cuối cùng được giữ lại. Nếu bạn đang làm việc trong một kitchen converge, bạn có thể thực hiện như sau:
bash
cd /tmp/kitchen
cinc-shell -c client.rb -j dna.json
node['attribute']
Nếu đây là một instance đã được bootstrap, bạn có thể làm như sau:
bash
cinc-shell -z
node['attribute']
Chạy systemd trong test kitchen với dokken
Nếu bạn không sử dụng vagrant để thử nghiệm các instance kitchen và thích một cái gì đó nhanh hơn như Docker, bạn có thể gặp khó khăn khi tương tác với systemd để khởi động hoặc kích hoạt dịch vụ mà bạn vừa cài đặt. Đối với những tình huống này, bạn có thể chỉ định hoặc gắn phần của cgroups để systemd chạy bên trong container.
Lưu ý: Điều này chỉ áp dụng nếu bạn đang sử dụng NIX làm máy chủ phát triển cookbook, với các hệ điều hành khác, mình không biết… có thể chỉ cần sử dụng vagrant.
Cấu hình kitchen.yml
của bạn nên giống như sau:
yaml
driver:
name: dokken
transport:
name: dokken
provisioner:
name: dokken
verifier:
name: inspec
platforms:
- name: centos-7
driver:
image: centos:7
privileged: true
pid_one_command: /usr/lib/systemd/systemd
volume:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
Thực hành tốt nhất
- Luôn kiểm tra tài nguyên trước khi đưa vào cookbook: Điều này sẽ giúp bạn tránh những lỗi không mong muốn khi triển khai.
- Sao lưu trước khi thực hiện các thay đổi lớn: Đảm bảo rằng bạn có thể khôi phục lại nếu có sự cố xảy ra.
Những cạm bẫy thường gặp
- Không kiểm soát thuộc tính: Nếu bạn có quá nhiều overrides, bạn có thể không biết thuộc tính nào đang được áp dụng.
- Chạy lệnh không cần thiết: Hãy cẩn thận với các lệnh có thể tốn thời gian hoặc tài nguyên.
Mẹo hiệu suất
- Sử dụng các lệnh không đồng bộ khi có thể: Điều này có thể cải thiện tốc độ thực thi.
- Tối ưu hóa cookbook: Hãy chắc chắn rằng cookbook của bạn được tối ưu hóa để tiết kiệm thời gian và tài nguyên.
Khắc phục sự cố
- Kiểm tra log: Nếu bạn gặp sự cố, hãy kiểm tra log để tìm hiểu vấn đề.
- Sử dụng các công cụ gỡ lỗi: Hãy sử dụng các công cụ gỡ lỗi để giúp bạn xác định vấn đề.
Kết luận
Những mẹo và thủ thuật này hy vọng sẽ giúp bạn làm việc hiệu quả hơn với Chef. Nếu bạn có thêm mẹo nào khác hoặc câu hỏi nào, hãy chia sẻ với mình để mình có thể học hỏi và cập nhật vào blog của mình. Chúc bạn thành công trong việc sử dụng Chef! 👋