Tăng tốc Ansible

Tăng tốc Ansible
Không có gì bí mật khi với cài đặt mặc định, Ansible không thể thực hiện công việc của mình một cách nhanh chóng. Trong bài viết, tôi sẽ chỉ ra một số lý do cho điều này và đưa ra một số cài đặt tối thiểu hữu ích mà rất có thể sẽ thực sự làm tăng tốc độ dự án của bạn.

Ở đây và bên dưới, chúng tôi thảo luận về Ansible 2.9.x, được cài đặt trong virtualenv mới được tạo theo cách yêu thích của bạn.

Sau khi cài đặt, hãy tạo tệp “ansible.cfg” bên cạnh playbook của bạn - vị trí này sẽ cho phép bạn chuyển các cài đặt này cùng với dự án, ngoài ra chúng sẽ tải khá tự động.

Đường ống

Một số có thể đã nghe nói về nhu cầu sử dụng pipeline, nghĩa là không sao chép các mô-đun vào hệ thống tệp của hệ thống đích mà chuyển trực tiếp kho lưu trữ zip được bọc trong Base64 sang stdin của trình thông dịch Python, nhưng những người khác thì có thể không, nhưng thực tế là vẫn là sự thật: cài đặt này vẫn bị đánh giá thấp. Thật không may, theo mặc định, một số bản phân phối Linux phổ biến được sử dụng để định cấu hình sudo không tốt lắm - vì vậy lệnh này yêu cầu một tty (thiết bị đầu cuối), vì vậy Ansible đã tắt cài đặt rất hữu ích này theo mặc định.

pipelining = True

Thu thập sự thật

Bạn có biết rằng với cài đặt mặc định, Ansible cho mỗi lần chơi sẽ bắt đầu thu thập thông tin thực tế cho tất cả các máy chủ tham gia vào trò chơi đó không? Nói chung là chưa biết thì giờ bạn đã biết rồi. Để ngăn điều này xảy ra, bạn cần bật chế độ yêu cầu rõ ràng để thu thập dữ kiện (rõ ràng) hoặc chế độ thông minh. Trong đó, thông tin thực tế sẽ chỉ được thu thập từ những vật chủ chưa từng gặp trong các lần chơi trước.
CẬP NHẬT. Khi sao chép, bạn sẽ phải chọn một trong các cài đặt này.

gathering = smart|explicit

Sử dụng lại kết nối ssh

Nếu bạn đã từng chạy Ansible ở chế độ gỡ lỗi (tùy chọn "v", lặp lại từ một đến chín lần), bạn có thể nhận thấy rằng các kết nối ssh liên tục được tạo và bị hỏng. Vì vậy, có một số điều tinh tế ở đây.

Bạn có thể tránh bước thiết lập lại kết nối ssh ở hai cấp độ cùng một lúc: cả trực tiếp trong ứng dụng khách ssh và khi truyền tệp đến máy chủ được quản lý từ người quản lý.
Để sử dụng lại kết nối ssh đang mở, chỉ cần chuyển các khóa cần thiết cho máy khách ssh. Sau đó, nó sẽ bắt đầu thực hiện những việc sau: khi thiết lập kết nối ssh lần đầu tiên, nó sẽ tạo thêm cái gọi là ổ cắm điều khiển, trong các lần cài đặt tiếp theo, nó sẽ kiểm tra sự tồn tại của chính ổ cắm này và nếu thành công, hãy sử dụng lại kết nối ssh hiện có. Và để làm cho tất cả điều này trở nên hợp lý, hãy đặt thời gian duy trì kết nối khi không hoạt động. Bạn có thể đọc thêm ở tài liệu sshvà trong ngữ cảnh của Ansible, chúng tôi chỉ cần sử dụng “chuyển tiếp” các tùy chọn cần thiết đến ứng dụng khách ssh.

ssh_args = "-o ControlMaster=auto -o ControlPersist=15m"

Để sử dụng lại kết nối ssh đã mở khi truyền tệp đến máy chủ được quản lý, chỉ cần chỉ định một cài đặt không xác định khác ssh_tranfer_method. Các tài liệu về chủ đề này là vô cùng keo kiệt và gây hiểu lầm, vì tùy chọn này hoạt động khá tốt! Nhưng đọc mã nguồn cho phép bạn hiểu chính xác điều gì sẽ xảy ra: lệnh dd sẽ được khởi chạy trên máy chủ được quản lý, làm việc trực tiếp với tệp mong muốn.

transfer_method = piped

Nhân tiện, trong nhánh "phát triển" cài đặt này cũng tồn tại không đi đâu cả.

Đừng sợ dao, chỉ sợ nĩa

Một cài đặt hữu ích khác là fork. Nó xác định số lượng quy trình công nhân sẽ đồng thời kết nối với máy chủ và thực hiện các tác vụ. Do đặc thù của Python là ngôn ngữ, các quy trình được sử dụng chứ không phải luồng, vì Ansible vẫn hỗ trợ Python 2.7 - không có asyncio cho bạn, không có ích gì khi giới thiệu hành vi không đồng bộ ở đây! Theo mặc định Ansible chạy năm công nhân, nhưng nếu được hỏi chính xác, nó sẽ khởi chạy thêm:

forks = 20

Tôi chỉ cảnh báo ngay với bạn rằng ở đây có thể có một số khó khăn liên quan đến dung lượng bộ nhớ khả dụng trên máy điều khiển. Nói cách khác, tất nhiên bạn có thể đặt forks=100500, nhưng ai nói nó sẽ hoạt động?

Để tất cả chúng cùng nhau

Do đó, đối với ansible.cfg (định dạng ini), các cài đặt cần thiết có thể trông như thế này:

[defaults]
gathering = smart|explicit
forks = 20
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=15m
transfer_method = piped

Và nếu bạn muốn ẩn mọi thứ trong kho YaML bình thường của một người khỏe mạnh, thì nó có thể trông giống như thế này:

---
all:
  vars:
    ansible_ssh_pipelining: true
    ansible_ssh_transfer_method: piped
    ansible_ssh_args: -o ControlMaster=auto -o ControlPersist=15m

Thật không may, điều này sẽ không hoạt động với cài đặt “thu thập = thông minh/rõ ràng” và “forks = 20”: các cài đặt tương đương YaML của chúng không tồn tại. Hoặc chúng ta đặt chúng trong ansible.cfg hoặc chúng ta chuyển chúng qua các biến môi trường ANSIBLE_GATHERING và ANSIBLE_FORKS.

Giới thiệu về Mitogen
- Chuyện này ở đâu về Mitogen? - bạn có quyền hỏi, bạn đọc thân mến. Không có nơi nào trong bài viết này. Nhưng nếu bạn thực sự sẵn sàng đọc mã của nó và tìm hiểu lý do tại sao playbook của bạn gặp sự cố với Mitogen, nhưng hoạt động tốt với vanilla Ansible hoặc tại sao cùng một playbook vẫn hoạt động tốt trước đó, nhưng sau khi cập nhật bắt đầu làm những điều kỳ lạ - à, Mitogen có thể là công cụ của bạn. Áp dụng nó, hiểu nó, viết bài - Tôi sẽ đọc nó một cách thích thú.

Tại sao cá nhân tôi không sử dụng Mitogen? Bởi vì lay ơn nó chỉ hoạt động miễn là các nhiệm vụ thực sự đơn giản và mọi thứ đều ổn. Tuy nhiên, nếu bạn rẽ sang trái hoặc phải một chút - thế là xong, chúng tôi đã đến nơi: đáp lại, một số trường hợp ngoại lệ không rõ ràng sẽ bay vào bạn và để hoàn thành bức tranh, tất cả những gì còn thiếu là cụm từ phổ biến “cảm ơn tất cả các bạn”. , mọi người đều được tự do.” Nói chung, tôi chỉ không muốn lãng phí thời gian để tìm hiểu lý do cho “cú đánh ngầm” tiếp theo.

Một số cài đặt này đã được phát hiện trong quá trình đọc mã nguồn plugin kết nối dưới tên tự giải thích “ssh.py”. Tôi chia sẻ kết quả của việc đọc với hy vọng rằng nó sẽ truyền cảm hứng cho người khác xem xét các nguồn, đọc chúng, kiểm tra việc thực hiện, so sánh với tài liệu - suy cho cùng, sớm hay muộn tất cả những điều này sẽ mang lại cho bạn kết quả tích cực. Chúc may mắn!

Chỉ những người dùng đã đăng ký mới có thể tham gia khảo sát. Đăng nhập, xin vui lòng.

Bạn sử dụng cài đặt Ansible nào sau đây để tăng tốc dự án của mình?

  • 69,6%đường ống=true32

  • 34,8%thu thập = thông minh/rõ ràng16

  • 52,2%ssh_args = "-o ControlMaster=auto -o ControlPersist=..."24

  • 17,4%transfer_method = pipe8

  • 63,0%nĩa = XXX29

  • 6,5%Không có cái nào trong số này, chỉ có Mitogen3

  • 8,7%Mitogen + Tôi sẽ lưu ý cài đặt nào trong số này4

46 người dùng bình chọn. 21 người dùng đã bỏ phiếu trắng.

Muốn biết thêm thông tin về Ansible?

  • 78,3%vâng, tất nhiên54

  • 21,7%vâng, tôi chỉ muốn những thứ mạnh mẽ hơn!15

  • 0,0%không, và nó không cần thiết vì không có gì0

  • 0,0%không, nó phức tạp quá!!!0

69 người dùng bình chọn. 7 người dùng bỏ phiếu trắng.

Nguồn: www.habr.com

Thêm một lời nhận xét