Cơ sở hạ tầng dưới dạng Mã (IaC) là một kỹ thuật triển khai và quản lý cơ sở hạ tầng bằng phần mềm, tệp cấu hình và các công cụ tự động. Chiến lược này có thể được sử dụng cho các thiết bị như máy chủ web, bộ định tuyến, cơ sở dữ liệu, bộ cân bằng tải và máy tính cá nhân, cũng như trên các dịch vụ đám mây. Nó khác với quản lý cơ sở hạ tầng truyền thống, dựa trên cấu hình thủ công hoặc tương tác, từng thiết bị một. IaC bao gồm một phương pháp tiếp cận cấp cao đối với cơ sở hạ tầng và không đề cập đến một kỹ thuật, công cụ hoặc giao thức cụ thể nào. Hướng dẫn này thảo luận về lịch sử, khái niệm và lý do đằng sau IaC. Nó cũng khám phá các quyết định triển khai chính và các công cụ phần mềm có sẵn.
Lịch sử và các khái niệm chính đằng sau cơ sở hạ tầng dưới dạng mã
Cơ sở hạ tầng dưới dạng Mã bắt nguồn từ cảm giác thất vọng với cách thiết bị được quản lý theo truyền thống trong các mạng lớn. Với các phương pháp cũ hơn, các kỹ thuật viên phải cấu hình thiết bị theo cách thủ công, có thể là với sự trợ giúp của một công cụ tương tác. Thông tin được thêm vào các tệp cấu hình bằng tay hoặc thông qua việc sử dụng các tập lệnh tùy ý. Trình hướng dẫn cấu hình và các tiện ích tương tự rất hữu ích, nhưng chúng vẫn yêu cầu quản lý thực hành. Một nhóm nhỏ các chuyên gia sở hữu chuyên môn, quy trình thường được xác định kém và lỗi thường gặp.
Cách tiếp cận này tối thiểu là đủ cho một tổ chức nhỏ không thường xuyên thêm, nâng cấp hoặc cấu hình lại thiết bị. Nhưng nó tốn thời gian, tốn kém, tùy tiện và không mở rộng được. Nó không thể hoạt động hiệu quả cho một tổ chức vận hành hàng nghìn máy chủ.
Sau này, những tiến bộ trong điện toán ảo và điện toán đám mây cùng các công cụ phần mềm mới đã dẫn đến một môi trường ít phụ thuộc hơn vào các thiết bị vật lý. Máy chủ hiện có thể được tạo, xóa hoặc cấu hình lại theo yêu cầu mà không cần can thiệp thủ công. Sự phát triển của đường ống tích hợp liên tục và phân phối liên tục (CI/CD) đã khiến ý tưởng coi cơ sở hạ tầng như phần mềm trở nên hấp dẫn hơn nhiều.
Với IaC, cơ sở hạ tầng được cung cấp độc quyền thông qua tự động hóa. Các quy trình IaC sử dụng các tệp cấu hình, tệp định nghĩa và tập lệnh, như một phần của quy trình được lập kế hoạch trước và được quản lý chặt chẽ. Các nhóm phát triển và vận hành, được gọi chung là DevOps , làm việc cùng nhau để xác định chiến lược cho mạng. Cơ sở hạ tầng dưới dạng Mã tận dụng quy trình phát triển phần mềm, sử dụng các kỹ thuật đảm bảo chất lượng và tự động hóa thử nghiệm. Các thay đổi đối với cấu hình được thực hiện thông qua các thay đổi đối với phần mềm chứ không phải thông qua các thay đổi thủ công đối với cơ sở hạ tầng.
Lý do triển khai cơ sở hạ tầng dưới dạng mã
Cơ sở hạ tầng như Bộ luật được thúc đẩy bởi một số mục tiêu kinh doanh chính. Mục tiêu quan trọng nhất trong số này là kiểm soát chi phí, giảm rủi ro, triển khai nhanh chóng và thực thi phương pháp tiếp cận chuẩn hóa nhất quán.
Trị giá
Cấu hình thủ công là một hoạt động tốn kém. Nó đòi hỏi sự hiện diện của một kỹ thuật viên lành nghề, người được trả lương chuyên nghiệp. Mỗi nhân viên chỉ có thể cấu hình một thành phần tại một thời điểm và mỗi thiết lập phải được gỡ lỗi riêng lẻ. Cách duy nhất để tăng tốc mọi thứ là thuê thêm người.
Ngược lại, phương pháp tự động hóa của IaC ban đầu tốn kém hơn nhưng tiết kiệm tiền về lâu dài. Các kỹ thuật IaC loại bỏ các nhiệm vụ tầm thường và lặp đi lặp lại, cho phép nhân viên chuyên nghiệp tập trung vào các hoạt động có lợi nhuận cao hơn và biên lợi nhuận cao hơn. Các công ty có thể hoàn thành nhiều việc hơn với cùng một ngân sách.
Tốc độ
Ngoài việc tốn kém, cấu hình thủ công cũng rất chậm. Không có cách nào để triển khai ngay lập tức hàng trăm thiết bị mới và không thể thay đổi hoặc nâng cấp mạng kịp thời.
Với IaC, các tập lệnh và tệp cấu hình cho phép kích hoạt nhanh chóng cơ sở hạ tầng và thay đổi gần như ngay lập tức đối với các mạng hiện có. Việc phát triển và thử nghiệm các thay đổi nhỏ đối với cơ sở mã và chủ động phân phối các bản cập nhật dễ dàng và nhanh hơn nhiều. Hệ thống có thể được thiết lập theo nhu cầu, giảm chi phí cho việc tạo mẫu và thử nghiệm tuân thủ. Vì các thay đổi có thể được đẩy ra rất nhanh nên thời gian bảo trì có thể nhỏ hơn nhiều và thường xuyên hơn.
Rủi ro
Cho dù mọi người có cẩn thận đến đâu, lỗi cấu hình vẫn có nhiều khả năng xảy ra hơn khi sử dụng phương pháp thủ công. Nếu phát hiện ra vấn đề sau này, cấu hình có thể được thay đổi thêm để cố gắng khắc phục sự cố. Các chi tiết không liên quan có thể được thêm vào hoặc các tính năng quan trọng vô tình bị xóa. Khi kết thúc hoạt động, cấu hình có thể rất khác so với dự định.
Vì áp dụng phương pháp tiếp cận có phương pháp và được kiểm tra kỹ lưỡng, IaC giảm thiểu đáng kể khả năng xảy ra lỗi và giảm rủi ro. Bất kỳ vấn đề rõ ràng nào cũng được phát hiện sớm hơn nhiều trong chu kỳ phát triển. IaC cũng giúp sửa lỗi dễ dàng hơn, cho phép các nhà phát triển nhanh chóng thay đổi, kiểm tra và triển khai mã nguồn.
Sự nhất quán/Chuẩn hóa
Nếu không có quy trình chuẩn hóa, các kỹ thuật viên có thể cấu hình mọi thứ theo thứ tự khác nhau hoặc sử dụng các phương pháp khác nhau để có được cùng một kết quả. Mỗi nút trong mạng trở thành thứ được gọi là bông tuyết , với các thiết lập riêng biệt. Điều này dẫn đến trạng thái hệ thống không dễ tái tạo và khó gỡ lỗi. Có thể thực hiện các thay đổi về cấu hình mà không có đủ hiểu biết hoặc thảo luận về thiết kế ban đầu hoặc các tác động. Phương pháp triển khai có thể thay đổi theo thời gian, dẫn đến sự chênh lệch lớn giữa thiết bị cũ và mới. Xu hướng mạng phân kỳ theo thời gian này được gọi là trôi mạng , có thể là nguồn gây mất ổn định đáng kể trong mạng.
Với các tệp cấu hình chuẩn và cấu hình dựa trên phần mềm, có tính nhất quán cao hơn giữa tất cả các thiết bị cùng loại. Một khái niệm chính của IaC là tính bất biến . Điều này có nghĩa là một thiết bị nhất định luôn chuyển sang cùng một trạng thái khi có cùng các điều kiện tiên quyết. Tính bất biến giúp dễ dàng khắc phục sự cố, kiểm tra, ổn định và nâng cấp tất cả các thiết bị. Mạng có khả năng hoạt động theo những cách có thể dự đoán được khi chịu áp lực hoặc để phản ứng với các điều kiện thay đổi. Một thiết lập nhất quán cũng có khả năng chuẩn hóa việc ghi nhật ký và xử lý lỗi để hỗ trợ khắc phục sự cố và giảm thiểu các lỗ hổng bảo mật. IaC làm giảm tương tác giữa các thiết bị có cấu hình không khớp hoặc chạy các phiên bản phần mềm khác nhau. Nó cho phép các nhóm chia sẻ mã và giúp phân chia và phân vùng các tác vụ dễ dàng hơn.
Cơ sở hạ tầng dưới dạng mã và DevOps
Cơ sở hạ tầng dưới dạng Mã là cốt lõi của văn hóa DevOps, là sự kết hợp giữa phát triển và vận hành. Sự tích hợp chặt chẽ hơn giữa các nhóm phần mềm và cơ sở hạ tầng sẽ thống nhất các hoạt động trong toàn bộ tổ chức và kết nối các triển khai mạng trở lại với quy trình CI/CD. IaC mang lại lợi nhuận cao cho các tổ chức lớn cài đặt hàng trăm thiết bị mỗi ngày và những tổ chức chuyên cung cấp thiết bị và dịch vụ mạng. Tuy nhiên, ngay cả các công ty phát triển phần mềm nhỏ hơn cũng có thể sử dụng các kỹ thuật này để thiết lập và duy trì phòng thí nghiệm của riêng họ.
Một trong những lợi thế quan trọng nhất của IaC là kết nối với tự động hóa, đảm bảo chất lượng và kiểm soát phiên bản. Rất khó để tích hợp các hoạt động này theo bất kỳ cách nào khác. Thay đổi phần mềm trước tiên có thể được xác minh thông qua các tập lệnh hồi quy và thử nghiệm tự động, cho phép nâng cấp đáng tin cậy. Các mô hình sản xuất và nguyên mẫu có thể được thử nghiệm sớm hơn, trước khi triển khai rộng rãi. Tự động hóa cho phép xác thực đầy đủ các trường hợp góc cạnh, cũng như các tình huống đặc biệt như tháo dỡ, cấu hình lại và thử nghiệm ứng suất.
Nếu có vấn đề xảy ra, việc khôi phục sản xuất về phiên bản ổn định gần đây nhất là điều dễ dàng. Trong trường hợp có vấn đề, các chỉnh sửa luôn được thực hiện đối với các tệp cấu hình nguồn, không bao giờ được thực hiện đối với mục tiêu. Bản vá chỉ được triển khai khi nó đã sẵn sàng và QA đã ký vào các thay đổi. Các tệp cấu hình thường được thêm vào cùng một hệ thống kiểm soát phiên bản được sử dụng để phát triển phần mềm. Điều này giúp dễ dàng khôi phục các thay đổi về phần mềm và cấu hình cùng nhau hoặc tạo một nhánh để phát triển hoặc tạo nguyên mẫu ban đầu.
Quyết định thiết kế cơ sở hạ tầng theo mã
Triết lý Cơ sở hạ tầng như Mã quy định một quy trình cấp cao nhất định, nhưng cung cấp nhiều tính linh hoạt hơn liên quan đến các chi tiết cụ thể. Tuy nhiên, một kế hoạch thành công phải giải quyết được một số yếu tố cấp thấp. Những quyết định này có thể khác nhau giữa các công ty dựa trên các yêu cầu và nguồn lực cụ thể của họ.
Cách tiếp cận mang tính tuyên bố so với cách tiếp cận mang tính mệnh lệnh
Một cách tiếp cận khai báo mô tả trạng thái cuối cùng của một thiết bị, nhưng không chỉ định cách thức nó sẽ đạt được trạng thái đó. Công cụ IaC cụ thể đưa ra tất cả các quyết định về thủ tục. Trạng thái cuối thường được xác định thông qua tệp cấu hình, thông số kỹ thuật JSON hoặc mã hóa tương tự.
Một cách tiếp cận bắt buộc xác định các chức năng hoặc quy trình cụ thể phải được sử dụng để cấu hình thiết bị. Nó tập trung vào những gì phải xảy ra, nhưng không nhất thiết phải mô tả trạng thái cuối cùng. Các kỹ thuật bắt buộc thường sử dụng các tập lệnh để triển khai. Cách tiếp cận này có thể được sử dụng để tận dụng các công cụ và phần mềm cũ và có thể là bước đầu tiên tốt hướng tới IaC cho một tổ chức truyền thống.
Phân phối đẩy và kéo
Với cấu hình đẩy, máy chủ trung tâm đẩy cấu hình đến thiết bị đích. Trong cấu hình kéo, mỗi thiết bị yêu cầu cấu hình riêng của mình từ điểm phân phối trung tâm.
Cơ sở hạ tầng có thể thay đổi so với cơ sở hạ tầng không thể thay đổi
Nếu một thiết bị có thể thay đổi, cấu hình của thiết bị đó có thể được thay đổi trong khi thiết bị đang hoạt động. Cách tiếp cận này cho phép nâng cấp và thay đổi trong khi đang hoạt động. Các thiết bị không thể thay đổi không thể thay đổi. Chúng phải được ngừng hoạt động hoặc khởi động lại và sau đó được xây dựng lại hoàn toàn. Điều này có vẻ rất ấn tượng, nhưng cách tiếp cận không thể thay đổi có ý nghĩa đối với cơ sở hạ tầng ảo. Bằng cách loại bỏ khả năng thay đổi một phần hoặc không đầy đủ, cách tiếp cận không thể thay đổi đảm bảo tính nhất quán và tránh trôi dạt. Tuy nhiên, thường mất nhiều thời gian hơn để xóa hoặc xây dựng lại cấu hình so với việc thay đổi cấu hình đó. Vì vậy, đây có thể không phải là lựa chọn phù hợp trong các tình huống nhạy cảm về thời gian.
Rủi ro và nhược điểm của cơ sở hạ tầng theo mã
Ưu điểm của Infrastructure as Code lớn hơn nhiều so với nhược điểm. Tuy nhiên, có một vài nhược điểm. Tất cả các mã và cấu hình cần thiết phải được duy trì và cập nhật. Điều này làm tăng thêm chi phí chung của tổ chức và nợ kỹ thuật. Triển khai là quyết định chung của DevOps, vì vậy điều này có thể khiến các nhà phát triển rời xa các nhiệm vụ thiết kế ưu tiên cao khác. Mã có thể phức tạp và không phải lúc nào cũng dễ dàng thay đổi.
Vì tất cả các thiết bị đều chia sẻ một cấu hình chung và nhất quán, điều này có thể khiến mạng trở thành mục tiêu dễ dàng hơn cho tin tặc. Ngoài ra, một số công cụ IaC có lỗ hổng đã biết. Quản trị viên hệ thống nên xem xét các vấn đề bảo mật như một phần của quy trình phát triển. Đối với phát triển phần mềm, việc chuẩn hóa hệ thống có thể dẫn đến các trường hợp góc cạnh chưa được kiểm tra vì một số kết hợp tính năng nhất định không bao giờ được cấu hình cùng nhau, ngay cả khi là ngẫu nhiên.
Công cụ triển khai cơ sở hạ tầng dưới dạng mã
Có một số công cụ phần mềm Tự động hóa cấu hình liên tục (CCA) có sẵn để hỗ trợ triển khai IaC. Nhiều công cụ trong số này là mã nguồn mở và phụ thuộc vào nội dung cộng đồng.
- Ansible là một ứng dụng IaC nguồn mở rất phổ biến từ Red Hat. Mặc dù chủ yếu được sử dụng trên và với môi trường Linux, nhưng nó cũng hỗ trợ Windows. Ansible thường được sử dụng kết hợp với Kubernetes và Docker. Ansible cung cấp ngôn ngữ khai báo riêng để xác định cơ sở hạ tầng và hoạt động mà không cần tác nhân bằng cách kết nối từ xa bằng SSH. Nó sử dụng các tệp văn bản “kho” có thể định cấu hình, cùng với sổ tay hướng dẫn YAML, để thể hiện cấu hình. Ansible được thiết kế theo hướng tối giản, an toàn và đáng tin cậy, đồng thời sử dụng ít tài nguyên. Ngôn ngữ khai báo riêng của Ansible dễ học và sử dụng, đồng thời có tính năng sử dụng các mẫu. Linode cung cấp một bộ sưu tập gồm một số hướng dẫn Ansible để có cái nhìn tổng quan toàn diện hơn.
- Chef là một công cụ mã nguồn mở cho phép khách hàng viết các công thức cấu hình bằng Ngôn ngữ miền cụ thể (DSL) dựa trên Ruby. Công cụ này thường được sử dụng trên các máy Linux và tương tác với hầu hết các nền tảng đám mây. Người dùng chỉ định các gói, dịch vụ và tệp cho từng thiết bị và Chef sẽ cấu hình, sửa và xác thực các tài nguyên.
- Otter là một công cụ để mô hình hóa cơ sở hạ tầng và cấu hình trên nền tảng Windows.
- Pulumi cho phép sử dụng nhiều ngôn ngữ lập trình khác nhau để triển khai và quản lý cơ sở hạ tầng trong môi trường đám mây. Công cụ IaC mã nguồn mở miễn phí này sử dụng các IDE và công cụ quen thuộc và tạo điều kiện chia sẻ và cộng tác. Linode có phần giới thiệu hay về ứng dụng này.
- Puppet cung cấp ngôn ngữ khai báo riêng để mô tả kết quả cấu hình. Giải pháp dựa trên mô hình của nó cho phép quản lý dễ dàng toàn bộ vòng đời CNTT, bao gồm triển khai, cấu hình và cập nhật. Puppet sử dụng mô hình hóa cấp cao, yêu cầu ít kiến thức lập trình và hoạt động với hầu hết các bản phân phối Linux cũng như Windows. Phiên bản mã nguồn mở miễn phí của công cụ phổ biến này có sẵn, cùng với phiên bản thương mại mạnh mẽ và tiên tiến hơn. Linode cung cấp nhiều hướng dẫn và tài nguyên cho Puppet .
- Salt , còn được gọi là SaltStack, là một giải pháp nguồn mở cho hầu hết các nền tảng. Salt xử lý tự động hóa CNTT, quản lý cấu hình và thực hiện tác vụ từ xa. Các mô-đun Python được phân chia của nó có thể được sửa đổi cho các trường hợp sử dụng cụ thể. Ngoài các tác vụ IaC thông thường, SaltStack còn hỗ trợ quản lý bảo mật và giảm thiểu lỗ hổng. Linode cung cấp một số tài nguyên Salt , bao gồm phần giới thiệu hữu ích.
- Terraform cho phép người dùng cung cấp cơ sở hạ tầng trung tâm dữ liệu bằng JSON hoặc ngôn ngữ khai báo riêng của Terraform. Thay vì cung cấp các dịch vụ quản lý cấu hình riêng, Terraform quản lý tài nguyên thông qua việc sử dụng các nhà cung cấp, tương tự như API. Các nhà cung cấp khai báo tài nguyên và yêu cầu các nguồn dữ liệu, và có sẵn cho hầu hết các nhà cung cấp lớn. Các nhà cung cấp thường được truy cập thông qua Terraform Registry . Terraform mã nguồn mở có sẵn trong các phiên bản miễn phí và thương mại, và sử dụng phương pháp tiếp cận theo mô-đun để khuyến khích tái sử dụng và khả năng bảo trì. Tham khảo bộ sưu tập hướng dẫn Terraform phong phú của Linodeđể biết thêm thông tin.
Wikipedia đã tóm tắt các công cụ CCA cơ sở hạ tầng chính dưới dạng mã thành một biểu đồ tiện dụng . Biểu đồ này bao gồm các so sánh về các thuộc tính cơ bản và nền tảng được hỗ trợ, cũng như mô tả ngắn gọn về từng công cụ. Linode cũng cung cấp hướng dẫn so sánh Terraform và Ansible , hai trong số các giải pháp IaC phổ biến nhất.
Thông tin thêm
Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.