作為一個操作系統,CoreOS 采用了高度精簡的系統內核及外圍定制,將許多原本需要復雜人工操作或者第三方軟件支持的功能在操作系統級別進行了實現,同時剔除了其他對于服務器系統非核心的軟件,比如GUI和包管理器。來自ThoughtWorks的軟件工程師林帆將帶來“漫步云端:CoreOS實踐指南”系列文章,帶大家了解CoreOS的精華和推薦的實踐方法。本文為基礎第二篇:架設CoreOS集群。
CoreOS 集群的架設比架設一個傳統服務器集群更加容易。一方面因為 CoreOS 使用了 Cloud-init 自動化了集群信息的配置,另一方面則是受益于 etcd 分布式存儲實現的消息分發和服務器自發現機制。這些便利性正是 CoreOS 系統設計充分為集群架構考慮帶來的效率提升。
安裝 CoreOS
CoreOS 的安裝方法和傳統 Linux 系統有很大的不同。鑒于是基礎教程,在這一篇中,我們會使用官方的Vagrant鏡像一步一步的構建CoreOS的VirtualBox虛擬機集群。本文使用了Linux/Mac作為測試環境,Vagrant從1.6版已經支持Windows,但需要安裝Putty作為登錄工具,略有不同,具體使用方法見 鏈接。
需要順帶說明一點,比較仔細的使用者可能已經發現官方提供的鏡像中有一個是“ ISO鏡像文件”,然而這個鏡像實際上只是一個 Live CD,也就免安裝的試用鏡像,直接使用這個ISO啟動的系統是不具備服務自發現和分布式消息分發的能力的。通過ISO鏡像安裝集群的方式我們會放到專題篇的內容里面詳述。好,現在進入正題吧。
正如系列的篇所提到的,Cloud-init 通常依賴于具體平臺的實現定制,將其直接在物理機上使用并不是主流的使用方法。對于這種安裝方法, 官方有一篇文檔提供了詳細的步驟,這里不再進行詳細討論。
首先來看一下 CoreOS 原生支持的平臺。截止到目前,新版本的CoreOS v540已經支持的平臺如下圖。
可以看到除去安裝到本地的 Bare Metal,其余基本是針對主流的云服務平臺定制的版本。這里的定制主要是 Cloud-init 等啟動服務的配置,那么如何知道 CoreOS 已經支持自動化的集群部署的平臺有哪些呢?我們可以從 CoreOS 源代碼的 coreos-base 目錄里得到答案。
這些 oem 開頭的目錄就是平臺定制的實現。其中每個目錄中的 files/cloud-config.yml 文件,就是 Cloud-init 的配置文件。在每一種平臺安裝 CoreOS 的方式各有不同,可以從官方網站相應的頁面找到相應步驟。這里我們選擇其中的 Vagrant 作為演示的目標平臺。
在 Vagrant 上部署 CoreOS 集群
使用 Vagrant 建立 CoreOS 集群可以說是簡單且經濟的方式了,使用本地虛擬機構建,特別適合快速驗證 CoreOS 的功能。
預備
需要準備的東西,包括一臺連接到互聯網的 Mac 或者桌面 Linux 電腦,安裝好 Git、VirtualBox 和 Vagrant。
通過 Git 下載官方的 Vagrant 倉庫:
git clone https://github.com/coreos/coreos-vagrant.git
下載完成后,我們接下來配置 CoreOS 集群。
配置
為了使用集群服務器的自發現功能,我們需要一個能用來標識一個集群并提供集群信息的地址。CoreOS 官方提供了這個服務,當然我們也可以使用自己搭建的私有集群標識服務器。鑒于搭建私有標識服務器屬于比較進階的內容,我們會在這個系列的后續文章詳述。
通過瀏覽器或命令行 curl 訪問地址 https://discovery.etcd.io/new可以得到一個新的集群標識 URL(如果是在Windows下,可以直接使用瀏覽器訪問這個URL地址),這個 URL 會在配置 user-data 時候使用到。
curl https://discovery.etcd.io/new
進入 coreos-vagrant 目錄,將 user-data.sample 和 config.rb.sample 兩個文件各備份一份,并去掉 .sample 后綴。得到 user-data 和 config.rb 文件。
首先修改 user-data 文件,它將作為啟動的配置文件提供給 CoreOS 操作系統。值得一提的是,在這個配置中,可以使用兩個變量 $private_ipv4 和 $public_ipv4,它們會在實際運行的時候被自動替換為主機的真實外網 IP 和內網 IP 地址。
這里我們需要做的只是將其中 discovery所在行前面的注釋符合“#”去掉,然后替換它的值為我們剛剛獲得的集群標識 URL 地址。簡單來說,所有使用了同一個標識 URL 的主機實例都會在 CoreOS 啟動時自動加入到同一個集群中,這就實現了無需人工干預的集群服務器自發現。
#cloud-config
coreos:
etcd:
# generate a new token for each unique cluster from https://discovery.etcd.io/new
# WARNING: replace each time you 'vagrant destroy'
discovery: <集群標識URL地址>
addr: $public_ipv4:4001
peer-addr: $public_ipv4:7001
... ...
然后修改 config.rb 文件,這里包含了 Vagrant 虛擬機的配置。通過這個文件實際上可以覆寫任何 Vagrantfile 里的參數,但是目前我們只需要關注 $num_instances 和 $update_channel 這兩個參數的值。
$num_instances 表示將啟動的 CoreOS 集群中需要包含主機實例的數量;
$update_channel 表示啟動的 CoreOS 實例使用的升級通道,可以是 ‘stable’,’beta’ 或 ‘alpha’。
$num_instances=3
$update_channel='stable'
CoreOS 沒有跨越式的版本發布,而是使用與 Arch Linux 類似的平滑的滾動升級,確保用戶任何時候下載到的版本都是新發布的系統鏡像,并且從根本上解決了服務器系統在運行幾年后,由于無法平滑升級而被迫重新安裝的情況。此外 CoreOS 提供了 Stable、Beta 和 Alpha 三種升級通道,用于滿足不同用戶對系統新特性和穩定性的平衡。關于升級通道的切換,可參考官方的文檔。
啟動
啟動集群,執行:
vagrant up
查看集群運行狀態,所有的集群實例都已經啟動。
vagrant up
Current machine states:
core-01 running (virtualbox)
core-02 running (virtualbox)
core-03 running (virtualbox)
此時,在 CoreOS 集群的內部正發生著許多故事,集群的實例之間通過自發現服務,相互認識了對方并建立了聯系。它們具備了在集群中任意一個實例節點控制整個集群的能力。是的,一個功能完備的 CoreOS 服務器集群已經完全運行起來了。
參考內容:Running CoreOS on Vagrant
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。