0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Mẹo và Thủ Thuật Chef Dành Cho Lập Trình Viên

Đăng vào 1 ngày trước

• 4 phút đọc

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

  1. Chạy lệnh và sử dụng đầu ra
  2. Sao chép cookbook địa phương đến node
  3. Kiểm tra tài nguyên trước khi đưa vào cookbook
  4. Xem thuộc tính trên instance
  5. Chạy systemd trong test kitchen với dokken
  6. Thực hành tốt nhất
  7. Những cạm bẫy thường gặp
  8. Mẹo hiệu suất
  9. 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 Copy
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:

  1. Sao chép tarball và đặt nó ở đâu đó.
  2. Chỉnh sửa client.rb để chỉ đến thư mục chứa các cookbook (phải có metadata.rb).
  3. 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 Copy
cookbook_path    /var/cinc/cache/cookbooks
  1. 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 Copy
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 Copy
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 Copy
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 Copy
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 Copy
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! 👋

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào