Proxmox LXC (Linux Containers) từ lâu đã là lựa chọn phổ biến đối với nhiều người đam mê ảo hóa nhờ tính nhẹ, chi phí tối thiểu và thời gian khởi động nhanh chóng. Tuy nhiên, trong hành trình xây dựng và quản lý các thiết lập home lab khác nhau, tôi nhận thấy mình có xu hướng chuyển sang sử dụng Máy ảo (VM) và Docker containers. Mặc dù LXC chắc chắn có vị trí riêng của mình, bài viết này sẽ khám phá những lý do hàng đầu khiến VM và Docker, thường được kết hợp, mang lại trải nghiệm vượt trội cho các nhu cầu cụ thể của tôi.
3. VM mang lại sự cô lập và bảo mật thực sự
Tránh các rủi ro bảo mật
Giao diện Ubuntu chạy trên máy ảo VirtualBox trên Windows 11, minh họa khả năng cô lập của VM
Đây là điểm khác biệt quan trọng nhất. Khi nói đến sự cô lập, tôi muốn đề cập đến việc tách biệt một môi trường tính toán này khỏi môi trường khác, và chủ yếu là khỏi hệ thống host (máy chủ vật lý) của nó. Mỗi VM chạy một hệ điều hành hoàn toàn độc lập của riêng mình, với kernel, không gian bộ nhớ và phần cứng ảo hóa riêng.
Nếu một VM cụ thể bị xâm nhập do lỗi bảo mật, kẻ tấn công sẽ rất khó có thể ảnh hưởng đến hệ thống host hoặc các VM khác. Nó không thể trực tiếp truy cập vào kernel, hệ thống tập tin của host hoặc các VM khác mà không tìm thấy lỗ hổng trong chính hypervisor.
Ngược lại, LXC containers chia sẻ kernel với hệ thống host. Đây là điểm khác biệt cơ bản. Mặc dù nó cung cấp khả năng cô lập tiến trình tuyệt vời, tất cả các ứng dụng đều dựa vào cùng một kernel Linux của Proxmox host. Điều đó có nghĩa là, nếu kẻ tấn công tìm thấy lỗ hổng cấp kernel trong một LXC, chúng có thể giành quyền truy cập vào hệ thống host và tất cả các LXC khác đang chạy trên host đó.
Bất cứ khi nào tôi cần thiết lập một phần mềm mã nguồn mở mới với một codebase mới, tôi sẽ cài đặt ứng dụng web thử nghiệm đó trên một VM. Nếu nó có lỗ hổng dẫn đến việc bị xâm nhập toàn bộ hệ thống, phần mềm độc hại sẽ bị mắc kẹt trong môi trường cô lập của VM. Tôi có thể đơn giản xóa VM bị xâm nhập và bắt đầu lại từ đầu.
2. Passthrough phần cứng chuyên dụng
Tận hưởng hiệu năng gốc
Thiết lập hai card đồ họa (GPU) RTX 3080 Ti và GTX 1080, minh họa cho việc passthrough phần cứng
Đây là nơi VM thực sự tỏa sáng. Khả năng passthrough phần cứng là một tính năng mà LXC không thể sánh kịp. Với một VM, tôi có thể thực hiện PCI passthrough. Điều này có nghĩa là nó cho phép một máy ảo trực tiếp kiểm soát một thiết bị phần cứng vật lý. VM tương tác với thiết bị như thể nó được cắm trực tiếp vào bo mạch chủ của riêng nó. Cách tiếp cận này mang lại hiệu năng gần như gốc. Ví dụ, với GPU passthrough, tất cả các khả năng của GPU được dành riêng cho VM đó.
Ngược lại, LXC hoạt động theo mô hình chia sẻ tài nguyên. Ở đây, LXC vẫn truy cập thiết bị thông qua kernel và driver của host. Nếu nhiều LXC cố gắng sử dụng cùng một thiết bị, nó thường dẫn đến các vấn đề về hiệu năng và thiết lập phức tạp.
Giả sử bạn đã tạo một VM chuyên dụng (một VM Ubuntu Server) cho một Jellyfin server. Bạn có thể thực hiện PCI passthrough iGPU Intel hoặc một GPU NVIDIA chuyên dụng trực tiếp cho VM này. Bây giờ, khi dịch vụ cần chuyển mã video 4K sang full-HD cho điện thoại của tôi, nó sẽ sử dụng trực tiếp GPU được gán cho VM. Điều này mang lại hiệu năng chất lượng cao mà không bị ảnh hưởng bởi các dịch vụ khác. Rốt cuộc, GPU hoàn toàn dành riêng cho VM.
Về mặt kỹ thuật, tôi có thể cấp quyền sử dụng iGPU cho một LXC, nhưng sẽ có sự suy giảm hiệu năng và các vấn đề về độ ổn định. Bởi vì, iGPU được cả Proxmox host và Jellyfin sử dụng khi bạn chạy Jellyfin trong một LXC container.
1. Docker xuất sắc trong ảo hóa cấp ứng dụng
Các máy ảo ảo hóa toàn bộ máy, trong khi Docker tập trung vào việc đóng gói các ứng dụng riêng lẻ thành các đơn vị cô lập và di động được gọi là container. Mặc dù các Docker container này cung cấp sự cô lập, chúng vẫn chia sẻ kernel cơ bản của host của chúng. Đây là lúc tôi chạy Docker bên trong một VM và thêm một lớp bảo mật bổ sung.
Nếu, bằng cách nào đó, một kẻ tấn công tinh vi cố gắng thoát khỏi một trong các Docker container của tôi, chúng vẫn sẽ bị giam giữ trong VM. Chúng sẽ không có quyền truy cập trực tiếp vào kernel, hệ thống tập tin của host hoặc các VM khác của tôi.
Một lợi thế khác là các Docker container bên trong VM đó có thể dễ dàng tận dụng thiết bị đã được passthrough. Điều này tạo ra một con đường rõ ràng để tăng tốc phần cứng mà không cần cố gắng cấp quyền sử dụng phần cứng phức tạp trực tiếp cho LXC. VM có phần cứng, và Docker bên trong VM đó có thể sử dụng nó một cách dễ dàng.
Sổ tay người dùng chuyên nghiệp
Đối với tôi, những lợi ích rõ ràng của VM, chẳng hạn như cung cấp khả năng tách biệt cấp phần cứng hoàn toàn, phân bổ tài nguyên chuyên dụng và khả năng passthrough các thiết bị quan trọng như GPU, khiến chúng trở thành lựa chọn hoàn hảo cho các tác vụ nặng và ứng dụng nhạy cảm. Đồng thời, Docker nổi trội trong việc đóng gói và khả năng di động cấp ứng dụng.
Điều này không có nghĩa là LXC đã lỗi thời. Chúng khá tiện dụng trong các tình huống cụ thể khi bạn cần một hệ thống nhẹ và việc chia sẻ kernel không phải là một hạn chế.