Quản lý cấu hình: cấu trúc liên kết dựa trên đẩy so với kéo


22

Các hệ thống quản lý cấu hình (CM) được thiết lập nhiều hơn như Puppet và Chef sử dụng cách tiếp cận dựa trên kéo: khách hàng thăm dò ý kiến ​​tổng thể định kỳ để cập nhật. Một số trong số họ đưa ra một vô chủ cách tiếp cận cũng như (như vậy, push-based), nhưng trạng thái đó nó là 'không phục vụ sản xuất' (Saltstack) hoặc 'ít khả năng mở rộng' (Múa rối). Hệ thống duy nhất mà tôi biết đó là dựa trên đẩy từ đầu là Á hậu Ansible.

Lợi thế khả năng mở rộng cụ thể của một hệ thống dựa trên kéo là gì? Tại sao nó được cho là dễ dàng hơn để thêm nhiều chủ kéo hơn so với tác nhân đẩy?

Ví dụ: agXLesting.blogspot.nl viết:

trong một hệ thống 'kéo', các máy khách liên lạc với máy chủ một cách độc lập với nhau, do đó, toàn bộ hệ thống có khả năng mở rộng hơn hệ thống 'đẩy'

Mặt khác, Rackspace chứng minh rằng họ có thể xử lý các hệ thống 15K bằng mô hình dựa trên lực đẩy.

infastructures.org viết:

Chúng tôi thề với một phương pháp kéo để duy trì cơ sở hạ tầng, sử dụng một công cụ như SUP, CVSup, máy chủ rsync hoặc cfengine. Thay vì đẩy các thay đổi ra cho khách hàng, mỗi máy khách cá nhân cần có trách nhiệm bỏ phiếu cho máy chủ vàng khi khởi động và định kỳ sau đó, để duy trì mức độ vòng quay của chính nó. Trước khi áp dụng quan điểm này, chúng tôi đã phát triển các kịch bản dựa trên đẩy rộng rãi dựa trên ssh, rsh, RCp và rdist. Vấn đề chúng tôi gặp phải với các lệnh r (hoặc ssh) là: Khi bạn chạy tập lệnh dựa trên lệnh r để đẩy thay đổi ra các máy mục tiêu của mình, tỷ lệ cược là nếu bạn có hơn 30 máy chủ đích thì một trong số chúng sẽ xuống bất cứ lúc nào Duy trì danh sách các máy được ủy thác trở thành một cơn ác mộng. Trong quá trình viết mã để sửa lỗi này, bạn sẽ kết thúc với mã trình bao bọc phức tạp để xử lý: thời gian chờ từ máy chủ chết; đăng nhập và thử lại máy chủ chết; rèn và chạy các công việc song song để cố gắng đánh nhiều máy chủ trong một khoảng thời gian hợp lý; và cuối cùng phát hiện và ngăn chặn trường hợp sử dụng hết tất cả các socket TCP có sẵn trên máy nguồn với tất cả các phiên rsh bên ngoài. Sau đó, bạn vẫn gặp vấn đề về việc lấy bất cứ thứ gì bạn vừa làm vào các ảnh cài đặt cho tất cả các máy chủ mới sẽ được cài đặt trong tương lai, cũng như lặp lại nó cho bất kỳ máy chủ nào chết và phải được xây dựng lại vào ngày mai. Sau những rắc rối chúng tôi đã trải qua để thực hiện sao chép dựa trên lệnh r, chúng tôi thấy rằng nó không đáng. Chúng tôi không có kế hoạch quản lý cơ sở hạ tầng với các lệnh r một lần nữa hoặc với bất kỳ cơ chế đẩy nào khác cho vấn đề đó. Họ không mở rộng quy mô cũng như các phương pháp dựa trên kéo. rèn và chạy các công việc song song để cố gắng đánh nhiều máy chủ trong một khoảng thời gian hợp lý; và cuối cùng phát hiện và ngăn chặn trường hợp sử dụng hết tất cả các socket TCP có sẵn trên máy nguồn với tất cả các phiên rsh bên ngoài. Sau đó, bạn vẫn gặp vấn đề về việc lấy bất cứ thứ gì bạn vừa làm vào các ảnh cài đặt cho tất cả các máy chủ mới sẽ được cài đặt trong tương lai, cũng như lặp lại nó cho bất kỳ máy chủ nào chết và phải được xây dựng lại vào ngày mai. Sau những rắc rối chúng tôi đã trải qua để thực hiện sao chép dựa trên lệnh r, chúng tôi thấy rằng nó không đáng. Chúng tôi không có kế hoạch quản lý cơ sở hạ tầng với các lệnh r một lần nữa hoặc với bất kỳ cơ chế đẩy nào khác cho vấn đề đó. Họ không mở rộng quy mô cũng như các phương pháp dựa trên kéo. rèn và chạy các công việc song song để cố gắng đánh nhiều máy chủ trong một khoảng thời gian hợp lý; và cuối cùng phát hiện và ngăn chặn trường hợp sử dụng hết tất cả các socket TCP có sẵn trên máy nguồn với tất cả các phiên rsh bên ngoài. Sau đó, bạn vẫn gặp vấn đề về việc lấy bất cứ thứ gì bạn vừa làm vào các ảnh cài đặt cho tất cả các máy chủ mới sẽ được cài đặt trong tương lai, cũng như lặp lại nó cho bất kỳ máy chủ nào chết và phải được xây dựng lại vào ngày mai. Sau những rắc rối chúng tôi đã trải qua để thực hiện sao chép dựa trên lệnh r, chúng tôi thấy rằng nó không đáng. Chúng tôi không có kế hoạch quản lý cơ sở hạ tầng với các lệnh r một lần nữa hoặc với bất kỳ cơ chế đẩy nào khác cho vấn đề đó. Họ không mở rộng quy mô cũng như các phương pháp dựa trên kéo. và cuối cùng phát hiện và ngăn chặn trường hợp sử dụng hết tất cả các ổ cắm TCP có sẵn trên máy nguồn với tất cả các phiên rsh bên ngoài. Sau đó, bạn vẫn gặp vấn đề về việc lấy bất cứ thứ gì bạn vừa làm vào hình ảnh cài đặt cho tất cả các máy chủ mới sẽ được cài đặt trong tương lai, cũng như lặp lại nó cho bất kỳ máy chủ nào chết và phải được xây dựng lại vào ngày mai. Sau những rắc rối chúng tôi đã trải qua để thực hiện sao chép dựa trên lệnh r, chúng tôi thấy rằng nó không đáng. Chúng tôi không có kế hoạch quản lý cơ sở hạ tầng với các lệnh r một lần nữa hoặc với bất kỳ cơ chế đẩy nào khác cho vấn đề đó. Họ không mở rộng quy mô cũng như các phương pháp dựa trên kéo. và cuối cùng phát hiện và ngăn chặn trường hợp sử dụng hết tất cả các ổ cắm TCP có sẵn trên máy nguồn với tất cả các phiên rsh bên ngoài. Sau đó, bạn vẫn gặp vấn đề về việc lấy bất cứ thứ gì bạn vừa làm vào hình ảnh cài đặt cho tất cả các máy chủ mới sẽ được cài đặt trong tương lai, cũng như lặp lại nó cho bất kỳ máy chủ nào chết và phải được xây dựng lại vào ngày mai. Sau những rắc rối chúng tôi đã trải qua để thực hiện sao chép dựa trên lệnh r, chúng tôi thấy rằng nó không đáng. Chúng tôi không có kế hoạch quản lý cơ sở hạ tầng với các lệnh r một lần nữa hoặc với bất kỳ cơ chế đẩy nào khác cho vấn đề đó. Họ không mở rộng quy mô cũng như các phương pháp dựa trên kéo. Sau đó, bạn vẫn gặp vấn đề về việc lấy bất cứ thứ gì bạn vừa làm vào hình ảnh cài đặt cho tất cả các máy chủ mới sẽ được cài đặt trong tương lai, cũng như lặp lại nó cho bất kỳ máy chủ nào chết và phải được xây dựng lại vào ngày mai. Sau những rắc rối chúng tôi đã trải qua để thực hiện sao chép dựa trên lệnh r, chúng tôi thấy rằng nó không đáng. Chúng tôi không có kế hoạch quản lý cơ sở hạ tầng với các lệnh r một lần nữa hoặc với bất kỳ cơ chế đẩy nào khác cho vấn đề đó. Họ không mở rộng quy mô cũng như các phương pháp dựa trên kéo. Sau đó, bạn vẫn gặp vấn đề về việc lấy bất cứ thứ gì bạn vừa làm vào hình ảnh cài đặt cho tất cả các máy chủ mới sẽ được cài đặt trong tương lai, cũng như lặp lại nó cho bất kỳ máy chủ nào chết và phải được xây dựng lại vào ngày mai. Sau những rắc rối chúng tôi đã trải qua để thực hiện sao chép dựa trên lệnh r, chúng tôi thấy rằng nó không đáng. Chúng tôi không có kế hoạch quản lý cơ sở hạ tầng với các lệnh r một lần nữa hoặc với bất kỳ cơ chế đẩy nào khác cho vấn đề đó. Họ không mở rộng quy mô cũng như các phương pháp dựa trên kéo. hoặc với bất kỳ cơ chế đẩy nào khác cho vấn đề đó. Họ không mở rộng quy mô cũng như các phương pháp dựa trên kéo. hoặc với bất kỳ cơ chế đẩy nào khác cho vấn đề đó. Họ không mở rộng quy mô cũng như các phương pháp dựa trên kéo.

Đó không phải là một vấn đề thực hiện thay vì một kiến ​​trúc? Tại sao việc viết một máy khách đẩy luồng khó hơn máy chủ kéo có ren?


4
Chỉ cần một lưu ý, Ansible cũng có thể kéo, thông qua ansible-pull.
ceejayoz

1
Một lợi thế lớn là vượt qua NAT và tường lửa. Điều này thường không phải là một rào cản, nhưng đôi khi nó là một thay đổi trò chơi.
Dan Garthwaite

SALT sử dụng pub / sub ZeroMQ. Mà khác.
Dan Garthwaite

1
Đã có cuộc tranh luận rộng rãi về vấn đề này trong chuỗi triển khai Ứng dụng so với chủ đề cấu hình hệ thống trong danh sách gửi thư [devops-toolchain] [1]. [1]: code.google.com/p/devops-toolchain
sciurus

1
btw - Tự động hóa máy chủ HP được mô hình hóa và có thể quản lý hàng chục nghìn thiết bị {tiết lộ - Tôi là Kiến trúc sư tự động hóa cho đối tác của HP}
warren

Câu trả lời:


8

Vấn đề với các hệ thống dựa trên đẩy là bạn phải có một mô hình hoàn chỉnh của toàn bộ kiến ​​trúc trên nút đẩy trung tâm. Bạn không thể đẩy đến một cái máy mà bạn không biết.

Nó rõ ràng có thể hoạt động, nhưng phải mất rất nhiều công việc để giữ cho nó đồng bộ.

Sử dụng những thứ như Mcollective, bạn có thể chuyển đổi Puppet và các CM khác thành một hệ thống dựa trên lực đẩy. Nói chung, việc chuyển đổi một hệ thống kéo sang một hệ thống đẩy dựa trên tầm thường, nhưng không phải lúc nào cũng đơn giản để đi theo con đường khác.

Ngoài ra còn có câu hỏi về chính trị tổ chức. Một hệ thống dựa trên đẩy đặt tất cả các bàn tay kiểm soát của quản trị viên trung tâm. Có thể rất khó để quản lý sự phức tạp theo cách đó. Tôi nghĩ rằng vấn đề mở rộng là một cá trích đỏ, hoặc là tiếp cận quy mô nếu bạn chỉ nhìn vào số lượng khách hàng. Trong nhiều cách đẩy dễ dàng hơn để mở rộng quy mô. Tuy nhiên, cấu hình động ít nhiều ngụ ý rằng bạn có ít nhất một phiên bản kéo đăng ký khách hàng.

Cuối cùng, đó là về hệ thống nào phù hợp với quy trình làm việc và quyền sở hữu trong tổ chức của bạn. Theo nguyên tắc chung, hệ thống kéo linh hoạt hơn.


2
Cảm ơn! Nhưng tại sao cấu hình động sẽ ngụ ý kéo? Ansible sử dụng đẩy động, ví dụ. Vì vậy, có vẻ như việc Puppet không thể thực hiện động lực, là một hạn chế của việc triển khai, không phải là giới hạn của kiến ​​trúc, phải không?
Willem

4
@Willem Một môi trường thực sự "năng động" có nghĩa là một máy mới có thể xuất hiện ở bất cứ đâu, bất cứ lúc nào và yêu cầu cấu hình. Một hệ thống dựa trên đẩy yêu cầu bạn cấu hình hệ thống đó trên nút trung tâm; một hệ thống dựa trên pull có thể kéo cấu hình (chung) mà không cần quản trị viên môi trường cần làm bất cứ điều gì với (các) máy chủ cấu hình.
voretaq7

1
Zabbix phát hiện ra các máy chủ, Ansible có thể sử dụng kho lưu trữ động để đẩy cấu hình kéo đến các máy chủ mới bị loại bỏ.
bbaassssiiee

vâng, ansible có thể sử dụng nhiều nguồn cho kho lưu trữ động của nó, ví dụ API ESX. Bằng cách đó, bạn biết về VM ngay khi được tạo và có thể chạy các phát trên một mẫu khớp.
JM Becker

11

Trong trường hợp nó là mối quan tâm của bất kỳ ai, tôi đoán tối thiểu tôi có thể đưa ra một báo cáo trải nghiệm người dùng đã đưa lần đầu tiên sử dụng Ansible ra khỏi khả năng đẩy trong bối cảnh quản lý bản vá của các thiết lập đa máy chủ của các hệ thống quan trọng trong đám mây Amazon. Để hiểu các định kiến ​​hoặc thành kiến ​​của tôi, tôi nên giải thích rằng tôi có sở thích với Ruby ở cấp độ kịch bản tự động hóa và đã thiết lập các dự án để sử dụng cấu hình con rối tác nhân chính trên mỗi dự án-Vpc trong quá khứ. Vì vậy, kinh nghiệm của tôi tin vào những định kiến ​​trong quá khứ, nếu có.

Kinh nghiệm gần đây của tôi là rất thuận lợi để thúc đẩy năng động thay đổi từ hàng chục đến hàng trăm máy chủ có thể mở rộng hoặc giảm xuống, bị chấm dứt và làm mới. Trong tình huống của tôi, một lệnh ads Ansible 1.7 đơn giản là tất cả những gì tôi cần để tạo ra bản vá. Tuy nhiên, theo quan điểm về hiệu quả của việc thiết lập AnsibleControll (trên t2.micro) cho mỗi Vpc cho mục đích, trong tương lai tôi dự định mở rộng kỹ thuật cho các yêu cầu phức tạp hơn.

Vì vậy, hãy để tôi trở lại câu hỏi được hỏi trong chủ đề này: ưu và nhược điểm của việc đẩy trong một bất động thay đổi năng động.

Các giả định của loại tài sản máy chủ mà tôi nhắm đến là:

  • Không có giả định rằng địa chỉ IP hoặc tên máy chủ cục bộ do Amazon tạo sẽ tồn tại lâu dài - cả hai đều có thể đến và đi
  • Tất cả các phiên bản được tạo từ hình ảnh máy đã có khả năng truy cập ssh từ một người dùng quản trị đặc quyền duy nhất
  • Để phân chia các máy chủ và có khả năng phân vùng chúng thành các nhóm, theo chức năng hoặc theo giai đoạn phát triển (ví dụ: thử nghiệm hoặc sản phẩm), điều này sẽ được thực hiện thông qua việc khởi chạy các thẻ Amazon cụ thể của các Tên thông thường đã thỏa thuận
  • Rằng tôi sẽ vá riêng quản trị máy chủ Linux và Windows, bằng các lệnh ad hoc khác nhau, do đó chỉ cần cho phép đăng nhập cụ thể của Linux không thành công khi liên hệ với máy chủ Windows là hoàn toàn chấp nhận được

Với các điều kiện này, việc tạo một hình ảnh máy của AnsibleControll để thả vào nhiều Vpc và định cấu hình (có thông tin xác thực) tại chỗ trong các tài khoản máy chủ hiện tại là rất đơn giản. Tự động trong mỗi phiên bản được tạo từ hình ảnh là

  1. Một công việc định kỳ để đẩy các bản vá đến các máy chủ đang chạy đều đặn để di sản được yêu cầu được truy cập liên tục theo các khoảng thời gian
  2. Một cách tính toán hàng tồn kho Ansible ở mỗi khoảng thời gian như vậy.

Mục thứ hai có thể được thực hiện tương đối tinh vi nếu cần (thông qua cấu trúc Thông tin của kho Ansible). Nhưng nếu không cần sự tinh vi, thì đây là một ví dụ rất đơn giản về tập lệnh để tính toán tất cả các phiên bản Amazon EC2 ở mỗi khoảng thời gian và chuyển kết quả vào một tệp kiểm kê thích hợp (ví dụ / etc / ansible / hosts)

#!/bin/bash
# Assumes aws-cli/1.3.4 Python/2.6.9 Linux/3.4.73-64.112.amzn1.x86_64 or greater
# http://aws.amazon.com/releasenotes/8906204440930658
# To check yum list aws-cli
# Assumes that server is equipped with AWS keys and is able to access some or all
# instances in the account within it is running.
# Provide a list of host IPs each on a separate line
# If an argument is passed then treat it as the filename, whether local or absolute 
# path, to which the list is written

function list-of-ips {
    /usr/bin/aws ec2 describe-instances --filters '[ {"Name": "instance-state-code", "Values": [ "16" ] } ]' | grep -w PrivateIpAddress | awk  '{x=$2; gsub("\"","", x); gsub(",","", x); if(x && FNR!=1){print x;}}' | uniq
 }

if [ -n "$1" ]; then
   list-of-ips > "$1"
else
   list-of-ips
fi

Nhắc nhở duy nhất cho trường hợp sử dụng là lệnh patch phải là idempotent. Điều mong muốn là thử nghiệm trước để đảm bảo hoàn toàn chắc chắn rằng điều này được thỏa mãn, như là một phần của việc đảm bảo rằng bản vá thực hiện chính xác những gì được dự định.

Vì vậy, để tóm tắt, tôi đã minh họa một trường hợp sử dụng trong đó động lực đẩy có hiệu quả so với các mục tiêu tôi đặt ra. Đó là một giải pháp có thể lặp lại (theo nghĩa được gói gọn trong một hình ảnh có thể được triển khai trong nhiều tài khoản và khu vực). Theo kinh nghiệm của tôi cho đến nay, kỹ thuật đẩy động dễ dàng hơn nhiều để cung cấp --- và bắt đầu hành động --- so với các lựa chọn thay thế có sẵn từ các bộ công cụ có sẵn cho chúng tôi tại thời điểm này.


2
//, @jonz, đây là loại thảo luận mà theo tôi, các nhà phát triển có kinh nghiệm đã yêu thích mô hình Stack Exchange. Tôi đặc biệt thích các thuật ngữ bạn đã chọn, và câu trả lời này liệt kê các giả định đầu tiên.
Nathan Basan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.