Monday, 17 March 2014

[VM] Từ VirtualBox đến docker

Bài này không trình bày dài dòng về các công nghệ ảo hóa.
Bài này là một dạng nhật ký về hành trình sử dụng những công nghệ ảo hóa trên chính chiếc laptop của mình.

Cuộc hành trình bắt đầu

ngày xửa ngày xưa...
khi mà thế giới loài người văn minh mới chỉ có Windows, một ngày nọ, chàng trai xứ sở hoa ban quyết mang Linux lạc hậu đến thế giới hiện đại này. Có lẽ là trước đó, nhưng bộ nhớ giới hạn chỉ có thể nhớ đến đây.VirtualBox là phần mềm ảo hóa đầu tiên mình sử dụng để chạy Ubuntu.

1. VirtualBox
Cũng không nhớ nổi lý do vì sao mình chỉ dùng VirtualBox mà chưa 1 lần cài VMWare vào máy. Trải nghiệm với VirtualBox khá dễ chịu, bởi ngày ấy mình vẫn còn là 1 cute user của Windows. Và quá trình tập tành cài đặt Ubuntu cũng được thực hiện ở đây.

VirtualBox là một giải pháp ảo hóa hóa phần cứng. VirtualBox chạy cả trên Windows, Linux và Mac. Nhờ VirtualBox, người dùng có thể chạy các hệ điều hành khác ngay trên hệ điều hành mình đang dùng. Đặt 1 chân sang thế giới khác!

Nhưng hãy tin, thay đổi là việc khó khăn, phải nhấn mạnh hơn là cực kỳ khó.
Bởi thế cho nên, trên kinh nghiệm bản thân, mình chẳng bao giờ tin rằng 1 đứa dùng chỉ Ubuntu trên 1 cái máy ảo sẽ dùng Ubuntu trên 1 cái máy thật. Trừ 1 vài trường hợp bất bình thường, và nó sẽ cài Ubuntu lên máy thật. Tất nhiên, dual boot.



Tạm rời xa thế giới của game, của những giao diện bóng bẩy, Ubuntu với GNOME2 đã hiện lên màn hình desktop, nhà ấy. Và nếu như chuyện này không xảy ra, dù chỉ 1 lần, thì sẽ chẳng thể có FAMILUG như ngày hôm nay. Nhấn mạnh lại 1 lần nữa, thay đổi vô cùng khó khăn, bởi thế cho nên, để có thể thay đổi được, phải tạo môi trường hết sức hỗ trợ việc thay đổi, phải cương quyết, gay gắt, hay nói theo cách tiểu thuyết hơn, phải hấp diêm thay đổi! Đâu ai dễ quên được tình đầu 8 năm, bỏ đi, cũng tiếc lắm chứ,,.

2. KVM 
Kernel-based Virtual Machine.
Cũng chẳng nhớ mình bắt đầu dùng KVM từ bao giờ, nhưng trải nghiệm với KVM tuyệt hơn hẳn VirtualBox khi mình đã làm quen với giao diện dòng lệnh (CLI). Từ ấy, VirtualBox ra đi mãi mãi.

Có thể với GUI user, KVM là thứ gì đó bất thường, khó hiểu, nhưng với các fan CLI, bạn chỉ cần đâu đó 5-6 câu lệnh là có thể điều hành hệ thống máy ảo này (cài, xóa, bật, tắt, snapshot) bạn còn cần gì hơn?

KVM sống khỏe trong sự nghiệp của mình, chỉ đôi lúc khi sự non trẻ của nó khiến mình phải quay lại với VirtualBox, để cài FreeBSD (do KVM + FreeeBSD ngày ấy chưa hỗ trợ tốt VirtIO khiến tốc độ đọc ghi không thể chấp nhận nổi). Và chung số phận với những OS chỉ cài trên máy ảo. FreeBSD chưa bao giờ được dùng trên máy thật của mình.

Tại sao  những dòng lệnh lại hấp dẫn đến thế? bởi nó mang cho người dùng một uy quyền, một sức mạnh to lớn khủng khiếp. Nói một cách thật thà, đấy là khả năng scripting.
Với 1 file bash, bạn có thể tạo, bật, tắt, xóa, tất cả việc ấy, theo thứ tự bạn muốn, vào lúc nào bạn muốn, tất cả chỉ bị giới hạn ở khả năng của bạn.
Và nhờ cái sức mạnh ấy, mà người ta đã dùng KVM để tạo nên một đế chế hùng mạnh mang tên OpenStack, giải pháp IaaS mã mở "xịn" nhất quả đất này. (Ngắn gọn OpenStack là một hệ thống một lô một lốc các phần mềm dùng để cài đặt và quản lý các máy ảo (hầu hết) dựa trên KVM, tất nhiên cần quản lý thêm hàng tá thứ khác, như network, storage...)

Vài năm hạnh phúc với KVM (bởi lúc ấy mình chưa biết trên thế giới tồn tại 1 thứ hấp dẫn hơn thế nhiều), đôi lúc có 2 3 cái Linux VM cùng nhau chạy trên chiếc laptop bé nhỏ, chúng nó cắn CPU, hút RAM, âu cũng không thể xem là chuyện bình thường.

3. LXC
Linux Containers, thế giới thay đổi,
Cái tên này không phải là mới, mà chỉ vì với một lập trình viên mơ màng, một basic Linux user thì sẽ chả bao giờ nghe đến nó. Cho đến một ngày, docker nổi lên như những thứ có thể nổi trên mặt nước khác. LXC là thứ gì đó bí hiểm, ẩn chứa sau nó, nhưng không thể qua mắt được những kẻ thích nhìn vào trong khe!
LXC dựa vào khả năng tách biệt tài nguyên trên kernel Linux từ các phiên bản mới, giúp cho người dùng có thể tạo nhiều "namespace", và chạy các chương trình trên đó, nhờ vậy mà chúng không bị "conflict" với nhau. Tưởng tượng như bạn chạy 2 server ssh trên 2 máy ảo KVM, cả 2 cùng listen port 22, thì LXC cũng làm được điều như vậy, nói cho dễ hiểu, nó giúp nguời dùng tạo ra môi trường, giống như máy ảo, nhưng không phải bởi việc ảo hóa phần cứng, mà nhờ tách biệt các nguồn tài nguyên.
Nhắc đến LXC, có lẽ sẽ là thiếu sót nếu không đả động tới OpenVZ. Cái tên này cũng đã có từ quá lâu, nó là một cái gì đó lớn hơn, già dặn hơn LXC bây giờ, nhưng Linux như một con sông và dòng chảy nào chảy ngược nó rồi cũng sẽ bị lật dòng và cuốn trôi. OpenVZ đang dần hòa mình vào LXC và đi sâu vào Linux kernel, như một điều tất yếu.
Với nhu cầu chỉ cần dùng các máy ảo Linux, LXC đã hoàn tòan thay thế KVM, trên chiếc laptop của mình. (bạn không cài được BSD, Windows, Macintos trên LXC). Những container chạy nhẹ nhàng đến bàng hoàng khiến đôi khi, người ta quên mất sự tồn tại của nó.


4. Docker
Nổi như cồn vào năm 2013, Docker là sự hội tụ của tinh hoa công nghệ. Cloud, Golang, ít nhất, nó cũng thu hút tối đa sự quan tâm của giới công nghệ dẫu đang phát cuồng vì đồng tiền ảo bitcoin.
Docker như thêm mắm thêm muối vào miếng thịt bò LXC, khiến cho nó trở nên dễ dùng hơn, nhiều tính năng hơn, và thời thượng hơn. Chỉ có vậy.
Docker complements LXC with a high-level API which operates at the process level. It runs unix processes with strong guarantees of isolation and repeatability across servers.

Rồi docker sẽ thay thế LXC utils trên máy mình. Để có thể "nhúng" mình vào  công nghệ. Để một lần nữa, phải hấp diêm sự đổi thay khó khăn này.

Hết, đi ngủ :3