CoreOS實踐指南(二) 架設CoreOS集群

2021-06-28 14:12:14 字數 3271 閱讀 8994

編者按】作為乙個作業系統,coreos 採用了高度精簡的系統核心及外圍定製,將許多原本需要複雜人工操作或者第三方軟體支援的功能在作業系統級別進行了實現,同時剔除了其他對於伺服器系統非核心的軟體,比如gui和包管理器。 來自thoughtworks的軟體工程師林帆將帶來「漫步雲端:coreos實踐指南」系列文章,帶大家了解coreos的精華和推薦的實踐方法。本文為基礎第二篇:架設coreos集群。

coreos 集群的架設比架設乙個傳統伺服器集群更加容易。一方面因為 coreos 使用了 cloud-init 自動化了集群資訊的配置,另一方面則是受益於 etcd 分布式儲存實現的訊息分發和伺服器自發現機制。這些便利性正是 coreos 系統設計充分為集群架構考慮帶來的效率提公升。 

作者簡介:

林帆,生在80後尾巴的it攻城獅,thoughtworks成都辦公室cloudops小組成員,平時喜歡在業餘時間研究devops相關的應用,目前在備考aws認證和推廣docker相關技術。

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 集群可以說是最簡單且經濟的方式了,使用本地虛擬機器構建,特別適合快速驗證 coreos 的功能。

需要準備的東西,包括一台連線到網際網路的 mac 或者桌面 linux 電腦,安裝好 git、virtualbox 和 vagrant。

git clone 

為了使用集群伺服器的自發現功能,我們需要乙個能用來唯一標識乙個集群並提供集群資訊的位址。coreos 官方提供了這個服務,當然我們也可以使用自己搭建的私有集群標識伺服器。鑑於搭建私有標識伺服器屬於比較高階的內容,我們會在這個系列的後續文章詳述。

通過瀏覽器或命令列 curl 訪問位址  可以得到乙個新的集群標識 url(如果是在windows下,可以直接使用瀏覽器訪問這個url位址),這個 url 會在配置 user-data 時候使用到。

curl 

進入 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

# 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=3$update_channel='stable'

啟動集群,執行:

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

Dubbo實踐(二)架構

節點角色說明 節點 角色說明 provider 暴露服務的服務提供方 consumer 呼叫遠端服務的服務消費方 registry 服務註冊與發現的註冊中心 monitor 統計服務的呼叫次數和呼叫時間的監控中心 container 服務執行容器 呼叫關係說明 服務容器負責啟動,載入,執行服務提供者...

(二)Restful API設計指南 最佳實踐

facebook,google,github,netflix和其他一些科技巨頭給開發人員和產品提供了通過api使用其資料的機會,即使你沒有為其他開發人員和產品編寫過api,對於你的應用程式來說,擁有精心製作的api總是非常健康的。關於設計api的最佳方法,網際網路上存在著長期的爭論,沒有為此定義過任...

LINQ TO SQLite實踐指南

前言 當前,軟體應用程式中,資料庫已經成為不可缺少的重要組成部分.然而傳統資料庫正趨向巨無霸化,對系統的要求一步步提高,管理成本也越來越大,對於中小型專案的應用,它的很多功能變得越來越多餘,但是我卻不得不為這些不需要的功能付出更多的資金和人力成本.在這些場景,嵌入式資料庫的輕量,零部署,跨平台,義移...