Intro

Trong khoảng 1 thập kỉ qua, chắc hẳn bạn cũng đã từng nghe đến công nghệ ảo hoá (virtualization), điển hình là các máy ảo (Virtual Machine) áp dụng phương pháp ảo hoá hypervisor-based đã được sử dụng để cài đặt các hệ điều hành khác nhau như một ứng dụng trên cùng 1 máy tính. Tuy nhiên, bài viết này sẽ đề cập đến phương pháp ảo hoá khác có tên là ảo hoá container-based. Trước tiên chúng ta cần hiểu rõ ảo hoá là gì?

Ảo hoá là gì?

Ảo hoá là ứng dụng phần mềm tách cơ sở hạ tầng vật lý để tạo ra các tài nguyên chuyên dụng khác nhau. Phần mềm ảo hoá giúp việc chạy nhiều hệ điều hành và nhiều ứng dụng trên cùng một máy chủ trong cùng một thời điểm. Nó giúp giảm chi phí khi tăng tính hiệu quả, ứng dụng và mềm dẻo của phần cứng máy tính hiện có.

Hãy tưởng tượng bạn có 1 máy chủ vật lý với 10G RAM, vi xử lý 8 core và CARD 1G NIC. Và bạn đang sử dụng máy chủ này cho hệ thống web nội bộ và làm máy chủ FTP cho toàn bộ nhân viên để chia sẻ file. Bạn có thể thấy là máy chủ có thể không được sử dụng nhiều vì khộng phải chịu tải nhiều với web nội bộ và máy chủ FTP. Toàn bộ phần cứng được gắn với nó cũng sẽ ko được sử dụng tối đa và trở thành dư thừa, lãng phí. Sử dụng ảo hoá bạn có thể dễ dành tạo ra nhiều máy ảo trong máy chủ và chỉ định tài nguyên phần cứng cho từng máy ảo (vì web và FTP không cần quá 1G bộ nhớ), những máy ảo còn lại có thể được sử dụng với mục đích khác.

Từ ví dụ trên có thể rút ra được các điểm mạnh của công nghệ ảo hoá:

  • Tận dụng tối đa tài nguyên – Ảo hoá giúp giảm thiểu số lượng máy chủ vật lý bạn cần và tận dụng được giá trị của chúng.
  • Đa dạng hệ thống – Bạn có thể chạy rất nhiều loại ứng dụng cũng nhau các hệ điều hành khác nhau trên cùng một phần cứng.
  • Quản lý chi phí IT – Việc quản lý chi phí sử dụng cho IT dễ dành hơn.

Ảo hoá hypervisor-based là gì?

Trước khi nói về ảo hoá container-based, chúng ta cần nhắc đến ảo hoá hypervisor-based, nhằm hiểu rõ hơn bản chất và sự khác nhau giữa 2 phương pháp ảo hoá này.

Trong vài năm trở lại đây, ảo hoá hypervisor-based đã trở thành xu hướng chính trong công nghệ ảo hoá. Cũng không khó hiểu vì tính linh hoạt của nó cho phép bạn cài hầu như tất cả các hệ điều hành. Trong ảo hoá hypervisor-based, các máy ảo – là một hệ điều hành hoàn chỉnh, được tạo ra trên cùng và phía dưới một tầng được sử dụng để chuyển hướng các mệnh lệnh từ máy chủ đến tầng phần cứng. Trong VMware ESX Server and Citrix Systems’ XenServer, tầng này là Linux kernel, còn với Windows Hyper-V là Microsoft kernel.

Điểm mạnh đầu tiên mà bạn có thể thấy là phương pháp hypervisor-based cho phép chạy đa dạng hệ điều hành. Ví dụ như KVM, VMware Server hay ESX, Parallels Server Bare Metal và Xen cho phép chạy bất cứ hệ điều hành x86 nào. Điều này thực sự hiệu quả khi tổng hợp các khối lượng công việc hiện tại thành một môi trường ảo quá. Ví dụ như bạn đang có 20 máy chủ chạy Microsoft Windows Server 2000 và 50 máy chủ chạy SUSE Linux Enterprise Server 9.

Tuy nhiên điểm yếu của phương pháp này là hiệu suất. Vì phải sử dụng thêm 1 tầng nữa giữa hệ điều hành và phần cứng nên hiệu suất sẽ bị ảnh hưởng. Ngoài ra một hệ điều hành đầy đủ cũng được cài đặt cho từng máy ảo nên sẽ có những phần thừa trong bộ nhớ.

Vì vậy, phương pháp container-based được đưa ra nhằm giải quyết vấn đề này.

Ảo hoá container-based là gì?

Ảo hoá container-based, hay còn gọi là ảo hoá hệ điều hành, là một phương pháp ảo hoá mà tầng ảo hoá chạy như một ứng dụng trên hệ điều hành. Trong phương pháp này, kernel của hệ điều hành sẽ chịu trách nhiệm xử lý với phần cứng và các máy ảo sẽ được cài đặt nằm trên nó. Và những máy ảo khách này gọi là container.

Cũng vì chạy trên cùng một hệ điều hành nên những máy ảo khách không cần phải cài đặt đầy đủ hệ điều hành nữa mà chỉ cần có các file riêng cần thiết thôi. Điều này giúp tăng hiệu năng vì chỉ một hệ điều hành xử lý với phần cứng mà thôi, cũng vì vậy mà các vấn đề về liên kết phần cứng sử dụng driver sẽ không còn gặp phải nữa

Vì vậy nếu bạn đang có hàng trăm máy ảo khách Linux cần deploy thì container-based là phương pháp tốt hơn nhiều so với hypervisor-based. Nhưng đây cũng là nhược điểm của ảo hoá container-based là tất cả các máy ảo khách phải dùng chung một hệ điều hành duy nhất. Bạn không thể chạy Linux và Windows cùng nhau. Nếu máy chủ là Linux thì các máy ảo khách cũng chạy Linux, nhưng cũng không bị giới hạn các phiên bản khác nhau, ví dụ như bạn có thể chạy Debian trên máy chủ CentOS chạy OpenVZ hay Virtuozzo.

Một số ví dụ sử dụng phương pháp ảo hoá container

  • OpenVZ: Ban đầu dự án OpenVZ nằm trong giải pháp ảo hoá server gọi là Virtuozzo, được thực hiện bởi công ty SWsoft năm 1997. Năm 2005, một phần sản phẩm của Virtuozzo được công bố như một dự án mã nguồn mở, sau này là OpenVZ. Sau đó, năm 2008 SWsoft sáp nhập với công ty Parallels. OpenVZ được sử dụng cho hosting và các dịch vụ cloud, và được gọi là Parallels Cloud Server. OpenVZ dựa trên Linux kernel đã được sửa lại. Command-line tools (primarily vzctl) được sử dụng để tạo các container Linux.
  • Google containers: năm 2013, Google cho ra mắt bản mã nguồn mở của container stack, gọi là lmctfy (Let Me Contain That For You). Hiện tại thì nó vẫn đang ở bản Beta. Hầu như mọi sản phẩm của Google đều sử dụng container.
  • Linux-VServer: một dự án mả nguồn mở, được ra mắt năm 2001. Nó cung cấp các phân vùng tài nguyên trên host và host này phải sửa dụng kernel đả được chỉnh sửa.
  • LXC: dựa án LXC (LinuX Containers) cung cấp một bộ gồm công cụ hữu ích để quản lý Linux container. Nhiều người đóng góp trong dự án đến từ team OpenVZ. Ngược lại với OpenVZ thì nó được chạy trên kernel ko chỉnh sửa. LXC được viết hoàn chỉnh trong userspace và hỗ trợ liên kết với các ngôn ngữ khác như Python, Lua hay Go. Nó chạy được trên hầu hết các phiên bản của Linux như Fedora, Ubuntu, Debian …

Ngoài ra bảo mật cũng là một vấn đề cần nhắc tới. Vấn đề là các container chia sẻ cùng 1 kernel, vì vậy khi có một lỗ hổng trong kernel đó và nếu chỉ một người biết lỗ hổng này và có thể xâm nhập vào các container của người khác.

Sử dụng

Để sử dụng container trong Linux, bạn sử dụng LXC userspec tools. Với công cụ này, ứng dụng có thể chạy trong container của chính nó. Nó có file hệ thống của chính nó, bộ nhớ lưu trữ, CPU, RAM, v.v Để làm được điều này công cụ đã sử dụng các tính năng của Linux kernel:

  • Kernel namespaces (ipc, uts, mount, pid, network, and user)
  • AppArmor and SELinux profiles
  • Seccomp policies
  • Chroots (using pivot_root)
  • Kernel capabilities
  • Control groups (cgroups)

Bạn có thể đọc thêm ở http://www.linuxjournal.com/content/linux-containers-and-future-cloud?page=0,1

Tổng kết

Không bao giờ là đơn giản và không có sản phẩm nào là đúng 100% cả. Việc lựa chọn phương pháp ảo hoá dựa rất nhiều trên hệ điều hành bạn muốn deploy cũng như loại công việc bạn cần làm. Nó cũng phụ thuộc vào phần cứng vì một số máy tính cũ cũng có thể không hỗ trợ áo hoá.

Tham khảo