上次完成單機(jī)显沈,這部分完成ipxe安裝
考慮到coreos的運(yùn)用環(huán)境,ipxe安裝估計(jì)是工作的主要方式。
coreos也提供了專業(yè)化 工具matchbox ,官網(wǎng)有詳細(xì)介紹拉讯。
一涤浇、 準(zhǔn)備
coreos已經(jīng)投了redhat懷抱, 官網(wǎng)估計(jì)目前也在改了吧魔慷,上面一直提示:這些文檔在遷移到Red Hat時(shí)不推薦使用只锭。有關(guān)最新的文檔,請(qǐng)參見相應(yīng)的GitHub存儲(chǔ)庫院尔。
先把matchbox 代碼下回來蜻展, 不要去下它發(fā)行的打包版本,里面少了很多源碼里的案例邀摆、腳本,這些對(duì)于理解都很重要W莨恕!
git clone https://github.com/poseidon/matchbox.git
進(jìn)入matchbox目錄下栋盹,先去下載鏡像施逾,執(zhí)行
./scripts/get-coreos stable 2303.3.0 ./examples/assets/
我指定了一個(gè)最新的版本, 這個(gè)決定也為后面埋滿了坑例获。
默認(rèn)他是用的1967.3.0汉额,坑主要是在它后面提供的example里面的配置都是1967.3.0, 害的我好一陣改闷愤, 好處是踩坑多,明白的也多件余。
一次性的都拿下讥脐,查看一下
CoreOS_Image_Signing_Key.asc
coreos_production_pxe_image.cpio.gz.sig
coreos_production_image.bin.bz2
coreos_production_pxe.vmlinuz
coreos_production_image.bin.bz2.sig
coreos_production_pxe.vmlinuz.sig
coreos_production_pxe_image.cpio.gz
version.txt
這次他會(huì)按版本號(hào)自動(dòng)給你建一個(gè)子目錄,如果你虛擬機(jī)空間夠大损谦,多準(zhǔn)備一個(gè)版本的估計(jì)會(huì)方便一點(diǎn)岖免。
二、啟動(dòng)ipxe
matchbox的example已經(jīng)裝備了好幾套配置照捡,供你運(yùn)行颅湘,為了更簡(jiǎn)單易一點(diǎn), 我采用了docker的方式來完成ipxe環(huán)境和配置栗精。
docker的環(huán)境準(zhǔn)備好就不多說了闯参,
我們先跟隨matchbox的案例看看這里面做了什么瞻鹏,
matchbox目錄下的example/groups 中提供了下面幾個(gè)案例,我們就用etc3-install 吧鹿寨,
bootkube bootkube-install etcd3 etcd3-install grub simple simple-install
devnet會(huì)創(chuàng)建dnsmasq新博,matchbox兩個(gè)容器, 打開devnet 腳本看一看脚草,基本上就是根據(jù)你的參數(shù)去為docker -v加載不同的配置目錄赫悄。
./scripts/devnet create etcd3-install
# 下面是腳本里-v mount目錄的看得比較清楚,etcd3-install 就是$EXAMPLE
# DATA_MOUNT="-v $PWD/examples:/var/lib/matchbox:Z -v $DIR/../examples/groups/$EXAMPLE:/var/lib/matchbox/groups
啟動(dòng)之后還可以用./scripts/devnet status 查看一下馏慨,因?yàn)槟阋膊恢罆?huì)被dhcp分配到什么地址涩蜘,所以./scripts/devnet status可以幫你查看一下,
總之devnet就是幫你啟動(dòng)了兩個(gè)docker,其中dnsmasq完成 DHCP, DNS 熏纯,TFTP同诫,matchbox負(fù)責(zé)提供配置。
quay.io/poseidon/dnsmasq: "/usr/sbin/dnsmasq -d" 53/tcp, 67/tcp, 69/tcp dnsmasq
quay.io/poseidon/matchbox:latest "/matchbox -address=…" 0.0.0.0:8080-8081->8080-8081/tcp matchbox
二樟澜、安裝etcd3-install
sudo ./scripts/libvirt create
此腳本會(huì)一次創(chuàng)建3個(gè)node误窖,第一次我就掛了, 因?yàn)槲蚁碌?303.3.0版本鏡像秩贰,但是這個(gè)些example都是用的是1967.3.0霹俺,去example目錄下, 把自己用的配置都改為新版2303.3.0 ,這個(gè)翻翻example下的配置比較容易毒费。
還有重要的丙唧,這些節(jié)點(diǎn)配置里用的ssh_authorized_keys 可能都跟你沒啥關(guān)系,把自己的id_rsa.pub 換上去(見第一章)
matchbox/examples/groups/etcd3-install/node1,2,3.json
{
"id": "node1",
"name": "etcd Node 1",
"profile": "etcd3",
"selector": {
"mac": "52:54:00:a1:9c:ae",
"os": "installed"
},
"metadata": {
"domain_name": "node1.example.com",
"ssh_authorized_keys": ["ssh-rsa 換掉...... "],
"etcd_name": "nodc1",
"etcd_initial_cluster": "node1=http://node1.example.com:2380,node2=http://node2.example.com
:2380,node3=http://node3.example.com:2380"
}
一陣暗箱操作后你可以用下面登錄
ssh core@node1.example.com
這里需要理解的是這個(gè)node1.example.com 是在配置中產(chǎn)生 觅玻, 被dnsmasq解析和對(duì)應(yīng)ip的想际,你可以在./scripts/devnet status 中看到輸出記錄,你也可以執(zhí)行arp 溪厘, 可以看到node1.example.com 與mac的對(duì)應(yīng)表胡本,
nodc3.example.com ether 52:54:00:c3:61:77 C docker0
nodc2.example.com ether 52:54:00:b2:2f:86 C docker0
nodc1.example.com ether 52:54:00:a1:9c:ae C docker0
關(guān)于這個(gè)mac地址,是藏在中間異常重要的一個(gè)耦合因素畸悬。
重點(diǎn): 如果你去仔細(xì)看node1.json的配置侧甫,你就會(huì)發(fā)現(xiàn),mac 是被一個(gè)叫selector的元素包含的蹋宦,分析一下不難明白披粟, 當(dāng)你用kvm生成一個(gè)虛擬機(jī)時(shí),可以先指定這個(gè)mac地址的冷冗,為什么要這么干呢守屉?因?yàn)閙atchbox可以根據(jù)這個(gè)mac對(duì)機(jī)器做具體的配置做匹配, 可以設(shè)想當(dāng)你安裝一批集群時(shí)贾惦,有一些是普通節(jié)點(diǎn)胸梆, 有一些必然是有特殊角色敦捧,批量部署時(shí)须板,怎么讓不同的節(jié)點(diǎn)執(zhí)行不同的配置安裝呢碰镜, 那么mac值就是用來控制的, 也就不難理解习瑰,配置里面有的有default.json,是為了普通節(jié)點(diǎn)準(zhǔn)備的绪颖。
順利的話,ssh core@node1.example.com 就可以用了甜奄,
以下指令清除了docker 容器柠横,也清除了3個(gè)虛擬機(jī),干干凈凈毛都不剩课兄。
$ sudo ./scripts/devnet destroy
$ sudo ./scripts/libvirt destroy
是不是覺得比第一篇還簡(jiǎn)單點(diǎn)牍氛。
不過一般都會(huì)碰到一些問題,下面是一些雜七雜八的話題
三烟阐、 其他一些問題
1搬俊,拋開他的案例我們?cè)趺椽?dú)立執(zhí)行,
看看腳本里最后生成虛擬機(jī)的部分, 主要是影響的是節(jié)點(diǎn)名稱蜒茄,網(wǎng)絡(luò)唉擂,mac,
virt-install
--name $NODE1_NAME
--network=bridge:docker0,mac=$NODE1_MAC
--memory=${VM_MEMORY}
--vcpus=1
--disk pool=default,size=${VM_DISK}
--os-type=linux
--os-variant=generic
--noautoconsole
--events on_poweroff=preserve
--boot=hd,network
在改動(dòng)一下第一篇中kvm的xml定義
<domain type='kvm'>
<name>coreos1</name>
<memory>2048576</memory>
<currentMemory>2048576</currentMemory>
<vcpu>2</vcpu>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='network'/>
<!-- <boot dev='hd'/> -->
<!-- matchbox &docker ipex安裝用 network -->
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/opt/kvmdisk/core1.img'/>
<target dev='hda' bus='ide'/>
</disk>
<interface type='bridge'>
<source bridge='docker0'/>
<mac address="00:16:3e:5d:aa:a8"/>
</interface>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5901' autoport='no' listen = '0.0.0.0' keymap='en-us'/>
</devices>
</domain>
這里加了一個(gè)vnc檀葛,可以遠(yuǎn)程登上去看看執(zhí)行的過程玩祟, 特別是開始時(shí)候番宁,排查問題的時(shí)候搓彻,
2 關(guān)于matchbox 的文件結(jié)構(gòu)
理解的關(guān)鍵三個(gè)目錄
examples/groups 子目錄中配置虛擬機(jī)硬件的信息,文件中引用了profiles中的配置
examples/profiles 配置啟動(dòng)引導(dǎo)的配置文件赔嚎,啟動(dòng)后加載ignition中的配置
examples/ignition 這個(gè)是負(fù)責(zé)系統(tǒng)配置润讥,安裝etcd3,網(wǎng)絡(luò)等等
耐心翻翻他的配置很有好處
3, 官方文檔 里提到的/etc/hosts
# /etc/hosts
...
172.17.0.21 node1.example.com
172.17.0.22 node2.example.com
172.17.0.23 node3.example.com
除非安裝完成勺卢,提前是沒法知道具體分配ip的, 所以象对,我是認(rèn)為這是官網(wǎng)沒講明白的地方黑忱, 啟動(dòng)之后進(jìn)入系統(tǒng)之后可以自己手動(dòng)給加上hosts。
3,matchbox 其他方式
docker不是唯一方式勒魔, 也可以直接部署甫煞,我只是覺得方便,官網(wǎng)有介紹冠绢。