Các công cụ quản lý cấu hình (Puppet, Chef) có khả năng cập nhật các gói đã cài đặt không?


28

Đây có lẽ là một câu hỏi đơn giản cho những bạn đã chạy các công cụ quản lý cấu hình. Các công cụ quản lý cấu hình như Puppet hay Chef có phải là phương pháp phù hợp để cập nhật các gói đã cài đặt không?

Giả sử tôi chạy một số máy chủ, chủ yếu dựa trên Debian và Ubuntu. Các công cụ quản lý cấu hình có giúp cập nhật các gói được cài đặt từ kho dễ dàng hơn khi các bản cập nhật bảo mật hoặc sửa lỗi xuất hiện không?

Tôi hiện đang chạy "nâng cấp không giám sát" để cho phép các hệ thống tự động cài đặt các bản cập nhật bảo mật, nhưng tôi vẫn phải kết nối với các máy chủ và chạy aptitude update && aptitude safe-upgradethường xuyên. Đương nhiên, điều này trở nên nhàm chán, tẻ nhạt và dễ bị lỗi khi có nhiều máy chủ hơn.

Các công cụ như Puppet hay Chef có phải là phương pháp phù hợp để cập nhật các gói đã cài đặt không? Có ai trong số các bạn sử dụng các công cụ này để tránh chạy thủ công aptitudehoặc tương đương trên 15 máy chủ không? Tôi khá chắc chắn câu trả lời cho những câu hỏi này là "Có, tất nhiên!"

Nhưng tôi có thể tìm thêm thông tin về trường hợp sử dụng cụ thể này ở đâu? Tôi chưa có thời gian để nghiên cứu chuyên sâu về Puppet hoặc Chef, và các sách hoặc lớp học nấu ăn mẫu chỉ hiển thị ít nhiều các ví dụ tầm thường về việc cài đặt một gói cụ thể, chẳng hạn như ssh. Bạn có tài nguyên nào để giới thiệu không, ngoài tài liệu chính thức (tất nhiên, tôi sẽ nghiên cứu các tài liệu một khi tôi biết, nếu có, các công cụ phù hợp với tôi).


Câu hỏi hay, tôi đã đọc một số hướng dẫn [mà tôi không thể tìm thấy] đề cập đến việc giữ cho debian cập nhật với con rối nhưng không bao giờ tự mình thử nó. Sẽ rất thú vị khi xem câu trả lời của những người sử dụng nó trong sản xuất
pQd

Câu trả lời:


9

Con rối (tôi khá chắc chắn đầu bếp cũng vậy) liên kết với kho phần mềm apt-get / yum của bạn . Vì họ thực hiện rất nhiều việc tìm ra gói nào có sẵn, điều đó có nghĩa là ensure => latestchỉ hoạt động cho Ubuntu / CentOS / Debian như thế. Miễn là bạn thiết lập các tệp thích hợp một cách chính xác ( /etc/apt/sources.list, v.v.).


1
Câu trả lời liên quan đến Puppet hoặc quản lý tương tự từng gói có nghĩa là bạn phải theo dõi mọi gói trong Puppet, ngay cả những gói là một phần của cài đặt phân phối Linux cơ bản. Sử dụng các công cụ như unattended-upgradeshoặc yum-cronđể tự động hóa các bản cập nhật sẽ tốn ít công sức hơn - chỉ cần sử dụng Puppet / Chef / Ansible để định cấu hình các công cụ đó.
RichVel

22

Bạn có thể làm điều đó với con rối, bạn cũng làm:

ensure => latest,

hoặc là

ensure=> "1.0.2",

để chỉ định phiên bản mới nhất / bắt buộc. I E

package { apache2: ensure => "2.0.12-2" }
package { apache2: ensure => latest }

Điều này ít nhất có nghĩa là bạn có thể chỉ định cùng một phiên bản trên tất cả các hệ thống, cũng như ngăn máy chủ tự động (có khả năng nguy hiểm) tự nâng cấp. Tôi đã sử dụng phương pháp này trong sản xuất trên một số trang web và nó hoạt động rất tốt.

Chạy các nâng cấp không giám sát làm tôi sợ một chút, đặc biệt là nếu chúng đang nâng cấp các gói quan trọng, hạt nhân, thư viện mysql, apache, v.v. Đặc biệt nếu tập lệnh cài đặt có thể muốn khởi động lại dịch vụ!


Cảm ơn vi đa trả lơi! Vì vậy, có vẻ như việc giữ các gói được cài đặt qua Puppet được cập nhật ít nhất là có thể. Tốt để biết. Nhưng những gì về máy chủ chạy các phiên bản khác nhau của gói? Như trong Debian Lenny vs Ubuntu 8.04 và 9.10? Tôi có phải chăm sóc các phiên bản bằng tay không? Tôi có một số nghiên cứu thêm để làm, có vẻ như. Tôi không chắc chắn những gì tôi đang mong đợi, có thể là thứ gì đó dọc theo dòng cảnh của Canonical cung cấp giao diện web và các công cụ ưa thích khác hoặc ít hơn để cập nhật các gói trên nhiều máy chủ.
daff

Đối với các máy chủ chạy các phiên bản khác nhau, đây là nơi nó trở nên phức tạp. Bạn cần phải có các khối khác nhau trong bảng kê khai con rối của mình, nơi nó sử dụng Facter để truy xuất từ ​​khóa lsb_release hoặc debian_version từ / etc và sau đó đưa ra quyết định dựa trên gói nào sẽ cài đặt. Tôi chưa thấy Cảnh được sử dụng trong sự tức giận trên các máy chủ sản xuất, tôi thu thập nó khá đắt.
Tom O'Connor

2
ensure => latestsẽ luôn đảm bảo mọi thứ được cập nhật với bất kỳ bộ lưu trữ nào của bạn cung cấp.
womble

18

Tôi nghĩ rằng đây có lẽ là câu hỏi sai. Chắc chắn sử dụng các công cụ quản lý cấu hình như Puppet và Chef để duy trì cơ sở hạ tầng của bạn là một bước tiến lớn từ việc cố gắng làm tất cả bằng tay. Vấn đề giữ cho các phiên bản gói của bạn được cập nhật và đồng bộ hóa không phải là vấn đề mà bất kỳ công cụ nào trong số này giải quyết trực tiếp. Để tự động hóa điều này đúng cách, bạn cần phải tự mang các kho lưu trữ gói dưới sự kiểm soát của bạn.

Cách tôi làm là duy trì một repo Yum chuyên dụng (cho Redhat / Fedora / CentOS; kho APT cho Debian / Ubuntu) chứa các gói tôi quan tâm cho một trang web cụ thể. Đây thường sẽ là các phụ thuộc của chính ứng dụng (Ruby, PHP, Apache, Nginx, thư viện, v.v.) và các gói bảo mật quan trọng.

Khi bạn đã thiết lập xong (thông thường bạn chỉ có thể phản chiếu các gói cần thiết từ repo ngược dòng để bắt đầu), bạn có thể sử dụng cú pháp "đảm bảo => mới nhất" của Puppet để đảm bảo rằng tất cả các máy của bạn sẽ được cập nhật với repo.

Sẽ là khôn ngoan khi sử dụng repo 'dàn dựng' để cho phép bạn kiểm tra các phiên bản cập nhật của các gói trước khi đưa chúng ra sản xuất. Điều này được thực hiện dễ dàng với Puppet mà không có bất kỳ sự trùng lặp mã nào bằng cách sử dụng các mẫu kho lưu trữ.

Tự động hóa phiên bản gói của bạn khuyến khích bạn đồng bộ hóa tất cả các hệ thống sản xuất của mình, vì việc duy trì nhiều repos và gói cho các bản phát hành hệ điều hành khác nhau, các phiên bản và kiến ​​trúc máy rất tốn thời gian và có thể dẫn đến tất cả các vấn đề khó hiểu và không tương thích.

Tất cả lời khuyên này đều áp dụng như nhau cho đá quý Ruby, trứng Python và các hệ thống gói khác mà bạn có thể sử dụng.

Tôi đã viết một hướng dẫn rối nhỏ để giúp bạn nhanh chóng bắt đầu và chạy với Puppet. Bạn có thể triển khai định nghĩa repo tùy chỉnh cho các máy của mình bằng cách sử dụng Puppet làm bước đầu tiên trong việc kiểm soát các phiên bản gói.


5

Trong khi Puppet / Chef là ứng cử viên có thể cho chức năng này, để làm cho chúng giữ mọi thứ trên hệ thống cập nhật yêu cầu các loại tùy chỉnh hoặc liệt kê mọi gói (bao gồm các thư viện hệ thống cơ bản như libc6) làm tài nguyên ensure => latest. Đối với trường hợp cụ thể của cập nhật gói tự động, bạn có thể muốn xem xét cron-aptgói, đó là những gì bạn muốn.


hoặc chỉ cần thực hiện một công việc thực thi "cập nhật yum" với thời gian chơi cao. Làm việc cho tôi bằng mọi cách.
Sirex

5

Câu hỏi này đã cũ, nhưng tôi nghĩ rằng tôi sẽ trả lời theo cách cập nhật vì câu trả lời hiện tại không có sẵn sau đó.

Nếu bạn đang sử dụng con rối hoặc đầu bếp, hãy nhìn vào mcollective. Nó là một công cụ rất hay của những kẻ rối cho phép bạn gửi lệnh đến các nhóm máy chủ. http://docs.puppetlabs.com/mcollective/

Nó cũng có một plugin apt, có thể được sử dụng để thực hiện cập nhật apt trên bất kỳ số lượng máy chủ nào: http://projects.puppetlabs.com/projects/mcollective-plugins/wiki/AgentApt


4

Tôi nhận ra điều này hơi muộn đối với câu hỏi ban đầu của bạn, nhưng ở đây nó có tinh thần "muộn còn hơn không".

Tôi sử dụng Cfengine 3 để làm điều này trên một số máy chủ. Tôi chỉ định một danh sách rõ ràng các gói để cập nhật tự động, do đó tránh cập nhật tất cả các gói mà không cẩn thận một chút về nó. Nó hoạt động rất tốt, và cengine 3 rất nhẹ.

Đây là một đoạn hứa hẹn từ cấu hình cengine của tôi:

    packages:
            "apache2"
                    package_method => "apt",
                    package_policy => "update";

Hi vọng điêu nay co ich.


2

Tôi đồng ý với Jonathan. Cách tiếp cận Cfengine 3 là tốt vì bạn có thể kiểm soát tất cả các khía cạnh của quản lý gói mà không phải mã hóa ở mức thấp.



1

Bạn cũng có thể sử dụng các công cụ quản lý gói như Canonicals Cảnh được thiết kế để quản lý và giám sát các hệ thống Ubuntu / Debian. Nó quản lý nhiều hệ thống, cho phép bạn cập nhật chúng đồng thời và cung cấp một số khả năng giám sát cơ bản.


0

Cập nhật bảo mật

Nói chung, tôi nghĩ đơn giản nhất là sử dụng Ansible hoặc tương tự để thiết lập gói nâng cấp không giám sát mạnh mẽ cho Ubuntu / Debian (hoặc yum-croncho RHEL / CentOS). Bạn có thể sử dụng Puppet, Chef hoặc các công cụ khác, nhưng tôi sẽ thảo luận về Ansible ở đây.

  • unattended-upgrades có thể được sử dụng để thực hiện các cập nhật không bảo mật cùng một lúc nếu bạn thích, điều này dễ dàng hơn nhiều so với việc chạy lệnh qua Ansible mỗi ngày.

  • unattended-upgradeschăm sóc cập nhật tự động mỗi ngày và thường bị hạn chế chỉ cập nhật bảo mật (để tăng tính ổn định). Nếu máy chủ cần khởi động lại sau khi cập nhật, công cụ này có thể tự động khởi động lại vào một thời điểm nhất định.

Nếu quá trình khởi động lại của bạn phức tạp hơn, unattended upgradescó thể gửi email cho bạn và nó cũng tạo ra /var/run/reboot-required, để Ansible (hoặc tương tự) có thể quản lý việc khởi động lại vào một thời điểm thích hợp (ví dụ: khởi động lại một cụm máy chủ web hoặc DB để tránh thời gian chết, chờ đợi máy chủ trở nên khả dụng trên một cổng TCP nhất định trước khi tiếp tục).

Bạn có thể sử dụng các vai trò Ansible như jnv.unattends-nâng cấp cho các hệ thống Ubuntu / Debian hoặc geummingguy.security đơn giản nhưng hiệu quả , cũng bao gồm cả RHEL / CentOS (và làm cứng cấu hình SSH).

Nếu các bản cập nhật bảo mật nhanh ít quan trọng hơn, bạn có thể đặt chúng qua quy trình kiểm tra trên các máy chủ ít quan trọng hơn và chạy unattended-upgradelệnh một khi các kiểm tra cho thấy không có vấn đề gì - tuy nhiên, rất hiếm khi các bản sửa lỗi bảo mật hướng máy chủ gây ra sự cố, trong tôi kinh nghiệm.

Cập nhật chung

Các cập nhật khác ngoài bảo mật phải trải qua quá trình thử nghiệm và tích hợp liên tục thông thường, để đảm bảo mọi thứ không bị hỏng.

Tôi đã thấy aptitude safe-upgradenguyên nhân nghiêm trọng trên các máy chủ trong quá khứ, vì vậy tốt nhất không nên chạy tự động, trong khi các bản cập nhật bảo mật thường khá an toàn.

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.