緣由
最近在云平臺中架設(shè)了三臺節(jié)點(diǎn)的CoreOS集群,雖然對于很多云平臺和虛擬化管理平臺,官方都提供了安裝腳本,但由于我所使用的云平臺的一些原因,我無法選擇使用官方的云平臺部署腳本,所以本次紀(jì)錄,是紀(jì)錄直接在虛擬機(jī)中安裝CoreOS的過程,理論上安裝步驟適用于裸機(jī)安裝。遇到了一些坑,特此記錄,希望對初次接觸CoreOS的童鞋有所借鑒和幫助。
步驟 & 坑
第一步 : 下載系統(tǒng)安裝的ISO文件
你可能會覺得這一步很簡單,但是,我不得不說,這個過程我花費(fèi)了最多的時間。
由于官方的鏡像下載源被偉大的GFW墻了,所以我無法直接下載這個ISO!
解決過程:我嘗試使用迅雷下載,發(fā)現(xiàn)沒速度,于是找同學(xué)拿了個某雷的VIP賬號,把鏡像下載下來了,速度奇慢
注:目前這個ISO下載地址似乎可以直接訪問了CoreOS ISO
第二步:通過ISO引導(dǎo),進(jìn)入LiveCD
略
第三步:SSH到LiveCD環(huán)境中
雖然這一步不是必須的,但我覺得,這一步是必須的!因?yàn)槟闳绻悴籗SH到LiveCD中,編寫安裝配置文件config.yaml的時候非常麻煩,比如,你要添加SSH-Key,你不可能一個一個字符敲進(jìn)去,所以最好的方法當(dāng)然是在SSH終端上直接拷貝。
坑:從系統(tǒng)上看來,SSHD服務(wù)是開著的,我鏈接了老半天都連不了,排查了很久才發(fā)現(xiàn),在CoreOS中,和其他Linux發(fā)行版不一樣,它的SSHD的PermitRootLogin
默認(rèn)是no
的,禁止了Root登陸,所以需要改了。
配置SSH的過程
cd /etc/ssh
mv sshd_config{,.bak} #你不能直接編輯,因?yàn)檫@個文件是/usr/share/ssh/ssh_config的軟鏈接,而/usr的整個分區(qū),是只讀的
cat sshd_config.bak > sshd_config
vim sshd_config
#...
PermitRootLogin yes #加入這一句
systemctl restart sshd
sudo passwd root
然后就可以用ssh上去了。
第四步:編寫初始化配置
填寫cloud-config的配置,在官方有說明,按照自己的需求來就行,在本次的實(shí)驗(yàn)中,這一步當(dāng)然也少不了坑。
按照網(wǎng)上或者官方的教程,你可能會看到類似于下面這樣的例子(我就是用這個的):
#cloud-config
hostname: coreos01
coreos:
units:
- name: etcd2.service
command: start
- name: fleet.service
command: start
etcd2:
discovery: https://discovery.etcd.io/cb33f38c16bead3a376be9bfc706987
advertise-client-urls: http://$private_ipv4:2379,http://$private_ipv4:4001
initial-advertise-peer-urls: http://$private_ipv4:2380
listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001
listen-peer-urls: http://$private_ipv4:2380,http://$private_ipv4:7001
fleet:
metadata: role=coreos01
users:
- name: core
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC9Q...== KeyExample
- groups:
- sudo
- docker
然而安裝完之后才發(fā)現(xiàn),etcd集群是失敗的。經(jīng)過排查,才發(fā)現(xiàn)etcd偵聽的地址全部都是127.0.0.1
所以我果斷看配置文件cat /run/systemd/system/etcd2.service/20-*
,恍然大悟。
坑:在安裝前配置cloud-config(cloud-config.yaml)的時候,如果要使用$private_ipv4或者其他$public_ipv4之類的變量的時候,要確保這些變量是存在的(一開始我以為CoreOS自動添加的,教程都那樣寫),一個方法是,你可以把環(huán)境變量寫到/etc/environment
中。
第五步:安裝
執(zhí)行安裝命令:
coreos-install -d /dev/sda -c cloud-config.yaml
由于在安裝過程中,系統(tǒng)會從官方下載更新包,如果如我現(xiàn)在所看到的那樣,官方的鏡像站是可以直接訪問的,那么你的安裝過程可能很順利。然而當(dāng)時我安裝的時候,鏡像站是訪問不了的,所以,這個坑,非GFW莫屬。當(dāng)然解決方法也是很簡單。
坑:由于官方鏡像站點(diǎn)被墻,安裝過程中無法下載更新包。所以:
1、用某雷(VIP)或者翻墻之類的方法下載鏡像
2、找到安裝過程中需要下載的更新包,URL路徑可以在安裝腳本中找到,vim /usr/bin/coreos-install
,當(dāng)然還有一個更好的方式是,執(zhí)行安裝的時候用sh -x /usr/bin/coreos-install -d /dev/sda -c /cloud-config.yaml
這樣就可以看到安裝的過程中腳本在哪一步停住了,比如我看到的是腳本一直停在下載下面的兩個文件的步驟:
http://stable.release.core-os.net/amd64-usr/899.13.0/coreos_production_image.bin.bz2
和
http://stable.release.core-os.net/amd64-usr/899.13.0/coreos_production_image.bin.bz2.sig
3、用某雷(VIP)或者翻墻把兩個文件下載下來,自己建立HTTP服務(wù)器,然后在里面簡歷一個899.13.0目錄,并把文件放進(jìn)去,供安裝腳本下載。
4、執(zhí)行安裝,并指定從自己的http服務(wù)器下載更新包
coreos-install -d /dev/sda -c cloud-config.yaml -b http://192.168.1.1
坑:從VPS下載更新包,又傳到內(nèi)網(wǎng)HTTP服務(wù)器上,數(shù)據(jù)損壞,重新下一個,安裝成功 T_T。
總結(jié)
折騰一番之后,總算安裝成功,有了一個繼續(xù)折騰的平臺。
總體感覺,CoreOS的設(shè)計(jì)理念是很好的,尤其是集群和精簡這一點(diǎn),在搭配CoreOS的幾大重量級應(yīng)用(fleet、etcd、Rkt等)之后,相對于傳統(tǒng)的Linux發(fā)行版,在數(shù)據(jù)中心或者微服務(wù)架構(gòu)中,簡直是完爆了,我之后在測試的CoreOS上面開啟docker發(fā)現(xiàn)其運(yùn)行起來比在CentOS7運(yùn)行快很多,不知道是錯覺還是錯覺或者是錯覺...特地也在某云買了一臺虛擬機(jī)來玩CoreOS。但是!由于CoreOS相對來說還是比較新的東西,所以在行業(yè)上用得比較少,尤其是國內(nèi),所以學(xué)習(xí)資料、系統(tǒng)架構(gòu)案例和問題疑難解決方案等資料在網(wǎng)絡(luò)上都比較少,另一方面,由于CoreOS大部分時候注重大體架構(gòu),細(xì)節(jié)上比較少關(guān)注,所以對于用戶而言,會有很多小坑(體驗(yàn)頗深)。