認識 Linux Container (LXC)
使用 Linux Container 可以不需要透過虛擬化平台 (Hypervisor) 來模擬所有的硬體裝置, 而是可以直接使用實體主機的硬體裝置, 讓虛擬化的主機能達到最大效能. Linux Container 或稱 Linux 容器系統, 也簡稱 LXC, 其本身僅提供最低程度虛擬化 (硬體) 的功能, 並利用兩個系統管理模組 "cgroup" 與 "AppArmor" 來有效管理, 控制並隔離虛擬與實體主機之間的資源運用. 另外 Linux Container 並不需要透過複雜的程序, 來解譯主機與實體主機間的 CPU 指令運算, 或是周邊裝置的虛擬化, 簡單來說 Linux Container 可以直接使用實體主機上的軟硬體資源, 而最特別的地方就是 Linux Container 與實體系統共用相同的核心與函示庫.
Linux Container 的技術是由 IBM 所開發, 除早期運用在 IBM 的大型主機上面, 也存在一些非 Linux 的系統之中, 直到 Linux 核心版本 2.6.29 之後, 才開始支援 Linux 作業系統.
安裝 LXC 核心模組
這邊使用 Ubuntu Desktop 14.04 LTS (Gnome 64bits) 作業系統, 作為後續建立 Hadoop Cluster 的 Host 系統, 系統安裝完成後請開啟終端機, 並使用下面指令進行更新:
接著使用下面指令開始安裝 Linux Container 核心模組:
安裝完畢後讓我們來確認到底 LXC 核心模組可以安裝那些作業系統. 不管是著名的 Linux 分支如 CentOS, Debian, 或是客製化的 Linux 作業系統 (例如 Busybox, sshd) 基本上都能安裝, 而 LXC 核心模組與實體主機共用相同的 Linux 核心, 因此在 LXC 核心模組中, Windows 作業系統就出局了!
LXC 虛擬主機建置範本
不過並不是所有的 Linux 延伸出來的分支都可以透過 LXC 核心模組的線上安裝模式, 安裝到實體主機之內, 我們可以使用下面指令來查詢目前版本的 LXC 核心模組內, 可以支援安裝那些 Linux 的作業系統:
上面就是目前 LXC 核心模組可以安裝的 Linux 作業系統, 那麼這些範本是什麼? 簡單的說就是安裝對應的 Linux 作業系統所需要的建置指令, 由 Bash Script 撰寫. 內容就是安裝此作業系統的相關設定與所需下載的檔案. 換句話說就是如果可以了解整個設定檔的內容, 那要創造一個自訂的 Linux 作業系統範本也是可以辦到的.
建立 LXC 虛擬主機
接下來我們就實際透過 LXC 核心模組的指令, 來安裝 Ubuntu 系統上的虛擬主機, 首先在實體主機的終端輸入命令如下:
上面是簡易的安裝模式, 選擇了與實體主機相同的作業系統範本來建立 LXC 虛擬主機. 如果實體主機是 x86_64 的系統, 則安裝的 LXC 虛擬主機也會是 x86_64. 當然若是加入適當的參數如 "lxc-create -t ubuntu -n lpdev -r lucid -a i386", 這個指令明確的指定要安裝的 Ubuntu 版本為 lucid; 與 i386 的 CPU. 若要安裝名稱為 "myUS12"; 作業系統為 Ubuntu 12.04 64bits 位元的 LXC 虛擬主機, 可以參考下面命令:
作業系統安裝的時間長短, 幾乎取決於網路的速度, 因為大部分所需要的套件, 都需要經過網路下載後再安裝, 等待安裝完成之後會有如下畫面:
圖中註解符號 (#) 內的訊息就是登入 myUS14 虛擬主機的預設使用者帳號及密碼, 以安裝 Ubuntu 模板的虛擬主機來說, 預設的帳號密碼都是 'ubuntu'. 那安裝好的系統到底在哪裡呢? 這個時候我們就需要使用到 "tree" 這個指令, 以樹狀的方式顯示目錄內容:
在主要的檔案結構中, "config" 就是虛擬主機的設定檔案, 而虛擬主機的系統目錄則是在 "rootfs" 之中.
啟動與使用 LXC 虛擬主機
安裝好虛擬機之後, 只需要利用以下指令就可以啟動該虛擬機, 並以終端機連線模式進入虛擬機的登入畫面:
myUS14 虛擬機啟動後會停留在載入系統的狀態, 必須先按下 Enter 鍵, 接著輸入帳號密碼 (ubuntu/ubuntu) 便可以成功登入虛擬機. 登入之後如同一般新裝好的系統, 接下來就是系統套件版本的檢查更新與升級, 以 Ubuntu 系統來說可以使用下面命令完成:
LXC 虛擬主機上的操作與指令完全跟實體主機一模一樣, 不僅如此還可以發現系統整體的反應速度幾乎跟實體主機相同, 光這點就可以強過使用 Hypervisor 的其他虛擬技術.
關閉 LXC 虛擬主機
關閉啟動的虛擬主機有兩個方法:
複製與刪除 LXC 虛擬主機
LXC 核心模組有提供複製虛擬主機的指令 lxc-clone, 來直接複製現有的 LXC 虛擬主機, 我們可以使用下面命令來複製 myUS14 虛擬主機:
複製的虛擬主機跟 myUS14 虛擬主機都會放在 /var/lib/lxc 目錄下. 既然可以複製 LXC 虛擬主機, 當然也可以刪除 LXC 虛擬主機. 使用命令 lxc-destroy 如下:
建立 CentOS 虛擬主機
建立 CentOS 虛擬主機
目前版本的 LXC 核心模組, 可以透過現有的範本, 安裝需多熱門的 Linux 分支系統, 像是 CentOS, 就是許多人或是公司企業會安裝的 Linux 作業系統之一. 原因之一就是 CentOS 與 RedHat 具有相同的系統架構, 卻又擁有如同 Fedora 的擴充性與自由度, 所以安裝的使用者相當多.
這邊我們接著介紹如何在 Ubuntu 系統的實體主機上面, 利用 LXC 核心模組來安裝 CentOS 系統的虛擬主機. 不過安裝前必須了解一件事, 雖然 Ubuntu 與 CentOS 都是 Linux 系統, 也都可能擁有相同的核心版本, 但是撇除操作介面的差異不說, 兩者最大的差別就是套件的安裝與管理方式. 簡單的來說 Ubuntu 是透過 "apt-get", 以線上的方式來進行套件的安裝, 移除與升級; 而 CentOS 是透過 "yum". 不過在我們的實體主機, 也就是安裝 LXC 核心模組的 Ubuntu 系統內, 實際上並存在 "yum" 這一個管理套件, 且實際安裝 CentOS 虛擬主機時, 也需要用到 "yum" 的指令, 所以要安裝 CentOS 虛擬主機就必須先在實體主機內安裝 "yum" 這一個套件. 安裝指令如下:
套件安裝完畢後, 就可以利用 LXC 核心模組的指令 lxc-create 來建立一台名為 "myCentOS" 的 CentOS 虛擬主機:
在安裝好 myCentOS 虛擬主機之後, 系統會提示該虛擬主機預設的帳號密碼. 接著下面透過命令 chroot 變更該虛擬機的 root 密碼:
啟動 CentOS 虛擬主機
接著使用 LXC 核心模組指令 lxc-start 啟動剛剛建立的 CentOS 虛擬主機:
剛建立的 myCentOS 虛擬主機初期只會有 root 這一個帳號, 所以第一次登入只能使用 root 登入.
認識 CentOS 虛擬主機的檔案結構
理論上在 LXC 核心模組內, 利用範本所安裝的各種虛擬主機, 在檔案結構上應該都是相同的, 但事實上並不然. 先讓我們利用前面使用過的 "tree" 指令來比較一下安裝 Ubuntu 系統的虛擬主機與安裝 CentOS 系統的虛擬主機在檔案結構上的差異:
由上可以發現安裝 Ubuntu 系統的虛擬主機 (myUS14) 與安裝 CentOS 系統的虛擬主機 (myCentOS), 最大的差別在於 CentOS 虛擬主機目錄下並無檔案 "fstab". 不過有無該檔案對於 LXC 核心模組的虛擬主機而言, 到底有何差異? 其實差別就在於虛擬主機有無權限可以使用實體主機的檔案儲存設備 (或資料夾) 的資源! "fstab" 這個檔案的內容就是在控制實體主機的檔案儲存設備的讀取權限, 簡單來說有了這個檔案, LXC 虛擬主機就可以讀取實體主機的外接儲存裝置, 相關的設定會在後續章節介紹.
設定 CentOS 虛擬主機的固定 IP
後續會介紹如何建立並連結多台虛擬主機, 以組成 Hadoop 分散式運算平台, 而虛擬主機預設都是由 LXC 核心模組的 DHCP Server 直接派發 IP 位址給虛擬主機並使用預設的網路區段為 "10.0.3.x" 如下所示:
若虛擬主機都使用浮動的 IP 位址, 在連結多台虛擬主機上, 將會造成很大的困擾, 為了管理與後續操作上的方便, 我們可以先來了解如何設定虛擬主機使用固定 IP 位址. 在設定之前, 為了後續編輯檔案上的直覺與便利性, 我將使用 "vim" 這套文字編輯器進行設定檔的編輯. 在 CentOS 中可以如下安裝設置:
接著使用下面命令來編輯 "虛擬主機網路卡設定檔":
Supplement
* 03 管理 Linux Container 虛擬主機
* LXC container libvirt on CentOS 7
* Introduction to Containers on Linux using LXC
* CentOS6 使用 LXC
* How To Install Java on Ubuntu with Apt-Get
使用 Linux Container 可以不需要透過虛擬化平台 (Hypervisor) 來模擬所有的硬體裝置, 而是可以直接使用實體主機的硬體裝置, 讓虛擬化的主機能達到最大效能. Linux Container 或稱 Linux 容器系統, 也簡稱 LXC, 其本身僅提供最低程度虛擬化 (硬體) 的功能, 並利用兩個系統管理模組 "cgroup" 與 "AppArmor" 來有效管理, 控制並隔離虛擬與實體主機之間的資源運用. 另外 Linux Container 並不需要透過複雜的程序, 來解譯主機與實體主機間的 CPU 指令運算, 或是周邊裝置的虛擬化, 簡單來說 Linux Container 可以直接使用實體主機上的軟硬體資源, 而最特別的地方就是 Linux Container 與實體系統共用相同的核心與函示庫.
Linux Container 的技術是由 IBM 所開發, 除早期運用在 IBM 的大型主機上面, 也存在一些非 Linux 的系統之中, 直到 Linux 核心版本 2.6.29 之後, 才開始支援 Linux 作業系統.
安裝 LXC 核心模組
這邊使用 Ubuntu Desktop 14.04 LTS (Gnome 64bits) 作業系統, 作為後續建立 Hadoop Cluster 的 Host 系統, 系統安裝完成後請開啟終端機, 並使用下面指令進行更新:
接著使用下面指令開始安裝 Linux Container 核心模組:
安裝完畢後讓我們來確認到底 LXC 核心模組可以安裝那些作業系統. 不管是著名的 Linux 分支如 CentOS, Debian, 或是客製化的 Linux 作業系統 (例如 Busybox, sshd) 基本上都能安裝, 而 LXC 核心模組與實體主機共用相同的 Linux 核心, 因此在 LXC 核心模組中, Windows 作業系統就出局了!
LXC 虛擬主機建置範本
不過並不是所有的 Linux 延伸出來的分支都可以透過 LXC 核心模組的線上安裝模式, 安裝到實體主機之內, 我們可以使用下面指令來查詢目前版本的 LXC 核心模組內, 可以支援安裝那些 Linux 的作業系統:
上面就是目前 LXC 核心模組可以安裝的 Linux 作業系統, 那麼這些範本是什麼? 簡單的說就是安裝對應的 Linux 作業系統所需要的建置指令, 由 Bash Script 撰寫. 內容就是安裝此作業系統的相關設定與所需下載的檔案. 換句話說就是如果可以了解整個設定檔的內容, 那要創造一個自訂的 Linux 作業系統範本也是可以辦到的.
建立 LXC 虛擬主機
接下來我們就實際透過 LXC 核心模組的指令, 來安裝 Ubuntu 系統上的虛擬主機, 首先在實體主機的終端輸入命令如下:
上面是簡易的安裝模式, 選擇了與實體主機相同的作業系統範本來建立 LXC 虛擬主機. 如果實體主機是 x86_64 的系統, 則安裝的 LXC 虛擬主機也會是 x86_64. 當然若是加入適當的參數如 "lxc-create -t ubuntu -n lpdev -r lucid -a i386", 這個指令明確的指定要安裝的 Ubuntu 版本為 lucid; 與 i386 的 CPU. 若要安裝名稱為 "myUS12"; 作業系統為 Ubuntu 12.04 64bits 位元的 LXC 虛擬主機, 可以參考下面命令:
作業系統安裝的時間長短, 幾乎取決於網路的速度, 因為大部分所需要的套件, 都需要經過網路下載後再安裝, 等待安裝完成之後會有如下畫面:
圖中註解符號 (#) 內的訊息就是登入 myUS14 虛擬主機的預設使用者帳號及密碼, 以安裝 Ubuntu 模板的虛擬主機來說, 預設的帳號密碼都是 'ubuntu'. 那安裝好的系統到底在哪裡呢? 這個時候我們就需要使用到 "tree" 這個指令, 以樹狀的方式顯示目錄內容:
在主要的檔案結構中, "config" 就是虛擬主機的設定檔案, 而虛擬主機的系統目錄則是在 "rootfs" 之中.
啟動與使用 LXC 虛擬主機
安裝好虛擬機之後, 只需要利用以下指令就可以啟動該虛擬機, 並以終端機連線模式進入虛擬機的登入畫面:
myUS14 虛擬機啟動後會停留在載入系統的狀態, 必須先按下 Enter 鍵, 接著輸入帳號密碼 (ubuntu/ubuntu) 便可以成功登入虛擬機. 登入之後如同一般新裝好的系統, 接下來就是系統套件版本的檢查更新與升級, 以 Ubuntu 系統來說可以使用下面命令完成:
LXC 虛擬主機上的操作與指令完全跟實體主機一模一樣, 不僅如此還可以發現系統整體的反應速度幾乎跟實體主機相同, 光這點就可以強過使用 Hypervisor 的其他虛擬技術.
關閉 LXC 虛擬主機
關閉啟動的虛擬主機有兩個方法:
複製與刪除 LXC 虛擬主機
LXC 核心模組有提供複製虛擬主機的指令 lxc-clone, 來直接複製現有的 LXC 虛擬主機, 我們可以使用下面命令來複製 myUS14 虛擬主機:
複製的虛擬主機跟 myUS14 虛擬主機都會放在 /var/lib/lxc 目錄下. 既然可以複製 LXC 虛擬主機, 當然也可以刪除 LXC 虛擬主機. 使用命令 lxc-destroy 如下:
建立 CentOS 虛擬主機
建立 CentOS 虛擬主機
目前版本的 LXC 核心模組, 可以透過現有的範本, 安裝需多熱門的 Linux 分支系統, 像是 CentOS, 就是許多人或是公司企業會安裝的 Linux 作業系統之一. 原因之一就是 CentOS 與 RedHat 具有相同的系統架構, 卻又擁有如同 Fedora 的擴充性與自由度, 所以安裝的使用者相當多.
這邊我們接著介紹如何在 Ubuntu 系統的實體主機上面, 利用 LXC 核心模組來安裝 CentOS 系統的虛擬主機. 不過安裝前必須了解一件事, 雖然 Ubuntu 與 CentOS 都是 Linux 系統, 也都可能擁有相同的核心版本, 但是撇除操作介面的差異不說, 兩者最大的差別就是套件的安裝與管理方式. 簡單的來說 Ubuntu 是透過 "apt-get", 以線上的方式來進行套件的安裝, 移除與升級; 而 CentOS 是透過 "yum". 不過在我們的實體主機, 也就是安裝 LXC 核心模組的 Ubuntu 系統內, 實際上並存在 "yum" 這一個管理套件, 且實際安裝 CentOS 虛擬主機時, 也需要用到 "yum" 的指令, 所以要安裝 CentOS 虛擬主機就必須先在實體主機內安裝 "yum" 這一個套件. 安裝指令如下:
套件安裝完畢後, 就可以利用 LXC 核心模組的指令 lxc-create 來建立一台名為 "myCentOS" 的 CentOS 虛擬主機:
在安裝好 myCentOS 虛擬主機之後, 系統會提示該虛擬主機預設的帳號密碼. 接著下面透過命令 chroot 變更該虛擬機的 root 密碼:
啟動 CentOS 虛擬主機
接著使用 LXC 核心模組指令 lxc-start 啟動剛剛建立的 CentOS 虛擬主機:
剛建立的 myCentOS 虛擬主機初期只會有 root 這一個帳號, 所以第一次登入只能使用 root 登入.
認識 CentOS 虛擬主機的檔案結構
理論上在 LXC 核心模組內, 利用範本所安裝的各種虛擬主機, 在檔案結構上應該都是相同的, 但事實上並不然. 先讓我們利用前面使用過的 "tree" 指令來比較一下安裝 Ubuntu 系統的虛擬主機與安裝 CentOS 系統的虛擬主機在檔案結構上的差異:
由上可以發現安裝 Ubuntu 系統的虛擬主機 (myUS14) 與安裝 CentOS 系統的虛擬主機 (myCentOS), 最大的差別在於 CentOS 虛擬主機目錄下並無檔案 "fstab". 不過有無該檔案對於 LXC 核心模組的虛擬主機而言, 到底有何差異? 其實差別就在於虛擬主機有無權限可以使用實體主機的檔案儲存設備 (或資料夾) 的資源! "fstab" 這個檔案的內容就是在控制實體主機的檔案儲存設備的讀取權限, 簡單來說有了這個檔案, LXC 虛擬主機就可以讀取實體主機的外接儲存裝置, 相關的設定會在後續章節介紹.
設定 CentOS 虛擬主機的固定 IP
後續會介紹如何建立並連結多台虛擬主機, 以組成 Hadoop 分散式運算平台, 而虛擬主機預設都是由 LXC 核心模組的 DHCP Server 直接派發 IP 位址給虛擬主機並使用預設的網路區段為 "10.0.3.x" 如下所示:
若虛擬主機都使用浮動的 IP 位址, 在連結多台虛擬主機上, 將會造成很大的困擾, 為了管理與後續操作上的方便, 我們可以先來了解如何設定虛擬主機使用固定 IP 位址. 在設定之前, 為了後續編輯檔案上的直覺與便利性, 我將使用 "vim" 這套文字編輯器進行設定檔的編輯. 在 CentOS 中可以如下安裝設置:
接著使用下面命令來編輯 "虛擬主機網路卡設定檔":
Supplement
* 03 管理 Linux Container 虛擬主機
* LXC container libvirt on CentOS 7
* Introduction to Containers on Linux using LXC
* CentOS6 使用 LXC
* How To Install Java on Ubuntu with Apt-Get
This message was edited 43 times. Last update was at 22/08/2015 22:44:19
沒有留言:
張貼留言