Quản lý cấu hình cho 'nhiều máy chủ quản trị viên'


9

Chúng tôi đã thiết lập một máy chủ chạy cơ sở hạ tầng cho một hiệp hội nhỏ. Cho đến nay, chúng tôi đã cố gắng quản lý cấu hình với Ansible, nhưng đó không phải là một thành công lớn. Có lẽ chúng ta đang làm sai.

Về nguyên tắc, ý tưởng là máy chủ này sẽ bị bỏ lại một mình trong hầu hết thời gian, với việc mọi người thêm hoặc thay đổi mọi thứ một lần trong một mặt trăng xanh. Điều này làm cho điều quan trọng là bất cứ điều gì được cấu hình và chạy trên máy chủ đều được ghi lại rõ ràng và rõ ràng, vì những người không quản trị hệ thống thường bị ràng buộc để mất tổng quan (hãy để ý các chi tiết). Ngoài ra, theo thời gian, thành phần của nhóm người sẽ quản trị máy chủ này sẽ thay đổi (khi mọi người rời khỏi và tham gia 'ủy ban').

Chúng tôi bắt đầu với một bản cài đặt sạch sẽ, thêm các vai trò trong ansible bất cứ khi nào chúng tôi muốn thiết lập một cái gì đó (nginx, phpfpm, postfix, tường lửa, sftp, munin, ..). Có lẽ do thiếu kinh nghiệm của chúng tôi, tất nhiên chúng tôi không bao giờ có thể loại ra một tập hợp các nhiệm vụ có thể tìm thấy chính xác theo cách chúng tôi cần trong một lần, vì cấu hình là một quá trình thử và sai. Điều đó có nghĩa là trong thực tế, trước tiên chúng ta thường định cấu hình bất kỳ dịch vụ nào chúng ta muốn chạy trên máy chủ , sau đó chuyển sang các tác vụ có thể tìm thấy. Bạn có thể thấy nơi này sẽ đi. Mọi người quên sau đó kiểm tra nhiệm vụ, hoặc sợ làm như vậy có nguy cơ phá vỡ mọi thứ, hoặc tệ hơn: chúng ta quên hoặc bỏ bê để thêm mọi thứ vào ansible.

Ngày nay, chúng ta có rất ít niềm tin rằng cấu hình ansible thực sự phản ánh những gì được cấu hình trên máy chủ.

Hiện tại tôi thấy ba vấn đề chính:

  • Thật khó để (đọc: chúng tôi không có cách nào tốt) để kiểm tra các nhiệm vụ khả thi mà không có nguy cơ phá vỡ mọi thứ.
  • Nó bổ sung thêm công việc để tìm ra cấu hình mong muốn và sau đó tìm ra cách dịch nó sang các tác vụ có thể tìm thấy.
  • (Lý tưởng nhất), chúng tôi không sử dụng nó thường xuyên đủ để xây dựng sự quen thuộc và thói quen.

Một cân nhắc quan trọng ở đây là đối với bất cứ điều gì chúng ta kết thúc, sẽ dễ dàng cho những người mới học các sợi dây mà không cần một tấn thực hành.

Có một sự thay thế khả thi nào vẫn cung cấp một số đảm bảo và kiểm tra (có thể so sánh với việc hợp nhất các tệp Ansible với một số master) mà "cấu hình mọi thứ và ghi lại những gì bạn đã làm" không cung cấp?

EDIT: Chúng tôi đã xem xét cam kết /etcgit. Có cách nào hợp lý để bảo vệ bí mật (khóa riêng, v.v.) theo cách đó, nhưng vẫn có kho lưu trữ cấu hình có sẵn bên ngoài máy chủ không?

Câu trả lời:


10

Chỉ cần quay một VM kiểm tra / dàn mà bạn có thể sử dụng để xác nhận các thay đổi của mình. Phương pháp hiện tại của bạn để thực hiện các thay đổi theo cách thủ công trước tiên bị phá vỡ một cách vô vọng và cam chịu thất bại. Bạn và nhóm của bạn cần phải cam kết sử dụng CM đúng cách và một phần trong đó là có sẵn một hệ thống kiểm tra. Thậm chí chỉ cần một VM mơ hồ cục bộ là đủ.

Điều này không chỉ giúp kiểm tra các thay đổi mới mà còn đóng vai trò là giường thử nghiệm cho nhân viên mới (hoặc nhân viên lớn tuổi chưa sử dụng hệ thống trong một thời gian) để làm quen với thiết lập ansible của bạn.

Về việc giữ / etc / in git: không, đừng làm điều này. Thư mục đó chỉ là một phần rất nhỏ của những gì ansible đang thay đổi, và có git tại chỗ sẽ chỉ khuyến khích mọi người thực hiện thay đổi cục bộ.

Giữ playbooks ansible của bạn trong git. Xem xét việc hạn chế các quyền sao cho chỉ bạn mới có thể áp dụng các thay đổi có thể nhìn thấy đối với máy chủ trực tiếp. Những người khác có thể gửi yêu cầu kéo với những thay đổi của họ, mà bạn có thể xem xét và hợp nhất thành chủ nếu thích hợp.


Phải, đó là kịch bản lý tưởng. Tôi hiểu rồi Vấn đề là, chúng tôi không phải là một công ty và chúng tôi không có người làm việc toàn thời gian này. Có lẽ tôi đã làm cho thang đo của điều này không đủ rõ ràng không đơn giản viện trợ.
Joost

1
Vâng, bạn đã hỏi làm thế nào để giải quyết vấn đề của bạn và tôi đã đưa ra câu trả lời của tôi. Trên đây chính xác là cách chúng tôi làm việc tại công ty của tôi và nó hoạt động rất tốt. Có, có thêm chi phí về không gian máy chủ và thời gian cần thiết để kiểm tra, nhưng chúng rất đáng giá vì chúng tôi có mức độ đảm bảo rất cao rằng trong vài phút, chúng tôi có thể xây dựng lại bất kỳ máy chủ nào nếu cần.
EEAA

3
Về cốt lõi, đây thực sự là một vấn đề văn hóa và cung cấp nguồn lực, không phải là một vấn đề kỹ thuật. Bạn chưa cam kết sử dụng quản lý cấu hình. Cho dù bạn có phải là một công ty hay không đều không liên quan. Bạn đang yêu cầu giúp đỡ về cách làm mọi thứ đúng cách và có một môi trường dàn dựng là một phần của điều đó.
EEAA

3
IMHO, vâng, bạn nên cam kết với nó. Dù bạn có thể thuyết phục đồng nghiệp hay không là một câu hỏi khác. Không có cách nào nhẹ để làm điều này mà không yêu cầu một số mức độ chủ ý từ những người quản lý máy chủ. Trong số các hệ thống CM hiện đại, ansible là cách dễ nhất để tăng tốc. Bạn làm muốn theo dõi những thay đổi máy chủ theo thời gian. Cách duy nhất để làm điều này đáng tin cậy là sử dụng CM.
EEAA

4
@ThomWiggers Tôi sẽ cho rằng hai bạn ở cùng một đội kể từ khi bạn sử dụng "chúng tôi". OK, bạn hỏi làm thế nào để làm điều này đúng. Tôi đã đưa ra một câu trả lời. Hoặc bạn muốn làm điều đó đúng hoặc bạn không làm. Làm CM đúng cách cần có thời gian, tiền bạc và chủ ý. Nếu bạn có các yêu cầu như mua sắm và triển khai certs thông qua LE, thì hãy đứng lên một máy ảo $ 5US / tháng với Digital Ocean và sử dụng nó để thử nghiệm. Heck, bạn thậm chí có thể chỉ triển khai nó theo yêu cầu khi bạn muốn kiểm tra các thay đổi và sau đó giết nó.
EEAA

6

Có lẽ do thiếu kinh nghiệm của chúng tôi, tất nhiên chúng tôi không bao giờ có thể loại ra một tập hợp các nhiệm vụ có thể tìm thấy chính xác theo cách chúng tôi cần trong một lần, vì cấu hình là một quá trình thử và sai. Điều đó có nghĩa là trong thực tế, trước tiên chúng ta thường định cấu hình bất kỳ dịch vụ nào chúng ta muốn chạy trên máy chủ, sau đó chuyển sang các tác vụ có thể tìm thấy.

Mặc dù có những vấn đề khác (như không có môi trường thử nghiệm), bạn có thể có một sự cải thiện lớn bằng cách không làm điều này .

Một trong những mục tiêu thiết kế lõi Ansible của là phải idempotent , có nghĩa là chạy playbook của bạn nhiều lần không nên thay đổi bất cứ điều gì (trừ khi bạn đã thay đổi lượt). Do đó, khi tôi định cấu hình một phần mềm mới, các bước của tôi là:

  1. Thay đổi các nhiệm vụ Ansible.
  2. Chạy vở kịch.
  3. Kiểm tra hệ thống và nếu nó không đúng, quay lại bước 1.
  4. Cam kết thay đổi của tôi.

Nếu bạn không nghĩ rằng bạn sẽ viết đúng thứ đầu tiên trong Ansible, hãy viết nó bằng mọi cách và lặp đi lặp lại cho đến khi nó đúng, giống như bất kỳ mã nào khác. Điều này làm giảm đáng kể cơ hội quên Ansiblize một số thay đổi bạn đã thực hiện, vì mọi thay đổi bạn đã thực hiện đã có trong Ansible tại một số điểm trong quá trình phát triển của bạn.


Đúng, đây là lời khuyên tuyệt vời. Làm điều này và đảm bảo rằng bạn luôn có thể đưa máy chủ của mình trở lại trạng thái nổi tiếng là rất miễn phí - nếu mọi thứ ở phía nam, chỉ cần nuke máy chủ và triển khai lại.
EEAA

Phải, tôi đồng ý rằng đây là một nền tảng rất vững chắc giữa nơi chúng ta hiện tại và nơi chúng ta nên đến. Tất nhiên, đây là cách chúng tôi bắt đầu. Tôi cho rằng lý do chính khiến chúng ta trôi dạt đến nơi chúng ta đang ở hiện tại là bước 2 đã khiến toàn bộ chu trình mất quá nhiều thời gian. Có thể là chúng tôi đã làm vở kịch sai. Bây giờ chúng tôi đã thành thạo hơn một chút khi viết các tác vụ Ansible, có lẽ đáng để thử lại, mặc dù vậy. Theo kinh nghiệm của bạn, một chu kỳ đầy đủ sẽ kéo dài bao lâu và tần suất lặp lại một lần? Tôi nhận ra bất kỳ con số nào sẽ được dựa trên tất cả các giả định ..
Joost

2
Một vấn đề khác mà tôi gặp phải với quy trình lặp này xảy ra khi bạn viết một tác vụ thực hiện thay đổi, thực hiện các thay đổi cho máy chủ, phát hiện ra rằng các thay đổi là sai, cập nhật nhiệm vụ của bạn và áp dụng lại playbook. Bây giờ, máy chủ chứa hỗn hợp hai bộ thay đổi: những thay đổi từ lần lặp đầu tiên của nhiệm vụ và những thay đổi từ lần thứ hai. Thông thường lần lặp thứ hai sẽ ghi đè lên lần đầu tiên, nhưng không nhất thiết là luôn luôn. Có cách nào hợp lý để 'dọn dẹp' thay vì 1) SSH thủ công để hoàn tác hoặc 2) bắt đầu từ cài đặt sạch mỗi lần không?
Joost

Ngoài ra, việc thu thập máy chủ thường không tầm thường nếu bạn chỉ có một
Thom Wiggers

"Theo kinh nghiệm của bạn, một chu kỳ đầy đủ sẽ kéo dài bao lâu và tần suất lặp lại một lần?" - Tôi bắt đầu sử dụng Ansible vào tháng 1; vào khoảng tháng 6, tôi đã đến mức tôi nhanh chóng thực hiện toàn bộ quá trình trong Ansible hơn là bằng tay, trong hầu hết các nhiệm vụ. Thời gian cụ thể tất nhiên phụ thuộc vào dự án, từ vài phút đến vài tuần (đối với một số phần mềm đặc biệt khó tính). Nếu bạn thấy rằng việc chạy playbook đang làm bạn chậm lại, bạn có thể muốn xem xét việc sử dụng các thẻ để chỉ chạy một tập hợp con trong các vòng lặp của bạn.
Tẩy chay SE cho Monica Cellio

0

Ansible có thời gian tăng tốc trước khi bạn vượt quá mức năng suất trước đó, nhưng một khi bạn làm thì trạng thái hệ thống rất dễ đảm bảo. Thực tiễn của bạn dường như không đồng bộ với các mục tiêu cuối cùng của bạn. Bạn có thể làm việc hiệu quả với bộ công cụ CM, trong khi vẫn duy trì các thực hành kỹ thuật vững chắc, nhưng cần có thời gian để cấu trúc chính xác. Bạn về cơ bản là hiệu quả giao dịch và dễ thực hiện, cho sự ổn định và khả năng mở rộng doanh nghiệp. Theo cùng một cách chính xác, một lập trình viên chuyên nghiệp có kinh nghiệm không viết ra những bản hack xấu xí, hậu quả luôn lớn hơn lợi ích.

Đối với người mới bắt đầu, bạn có thể có quá nhiều đầu bếp, không có quyền sở hữu rõ ràng, nếu vậy mong đợi một thảm kịch chung. Mỗi ưu tiên kinh doanh sẽ thổi phồng mối quan tâm kỹ thuật hệ thống mọi lúc, trừ khi nó được sử dụng rộng rãi và những gì còn lại phản ánh trực tiếp vào kỹ sư có trách nhiệm.

Một bộ công cụ CM không có khả năng được thiết kế bởi quản trị viên, đây là điều tôi vừa mới nhận ra. Họ có thể sử dụng lại công việc hiện có hoặc POSSIBLY mở rộng dựa trên cơ sở hợp lý, nhưng ngay cả khi đó nó sẽ đòi hỏi một lượng thực thi nặng nề. Những gì một Kỹ sư có thể làm, chỉ đơn giản là KHÔNG phải những gì một quản trị viên có thể làm. Nhiều khái niệm trong Ansible gần giống như trong một cơ sở mã, bạn có thể dạy một con trăn quản trị và mong đợi kết quả có thẩm quyền không? Không, chắc chắn là không, tôi mong đợi một công việc hack, vì vậy bạn cần làm cho nhiệm vụ được cấu trúc đủ để một công việc hack có thể chịu được.

Vì vậy, bạn cần thiết lập mọi thứ để thành công, giải pháp kỹ sư cho các điểm quản trị không cần thiết. Giao dịch hệ thống cấp thấp phức tạp cho những thứ mà quản trị viên thực sự có thể làm thành công. Một bộ công cụ CM sẽ KHÔNG cứu bạn khỏi sự không phù hợp về kiến ​​trúc hoặc thiết kế.

Vì vậy, trật tự là tùy thuộc vào modifactaion, rõ ràng bởi vì việc thực hiện phụ thuộc vào đường dẫn nào ít gây gián đoạn nhất cho trạng thái hiện tại của bạn.

  1. Di chuyển bất kỳ công việc liên quan đến công việc liên quan đến công việc hệ thống đến một rundeck chuyên dụng.

  2. Tách các nhiệm vụ trên hộp, bạn có thể có hai hoặc nhiều hộp trong một ngay bây giờ.

  3. Thực hiện lại CM của bạn theo cách có cấu trúc chặt chẽ hơn và tuân theo các thực tiễn có thể giải thích tốt hơn, các vở kịch đại diện cho các đối tượng KHÔNG phải là chức năng hoặc vai trò. Mỗi hệ thống nên được mô tả trong một lần chơi.

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.