coreos 探索之旅 二 Matchbox

上次完成单机,这部分完成ipxe安装

考虑到coreos的运用环境,ipxe安装估计是工作的主要方式。

coreos也提供了专业化 工具matchbox ,官网有详细介绍。

一、 准备

coreos已经投了redhat怀抱, 官网估计目前也在改了吧,上面一直提示:这些文档在迁移到Red Hat时不推荐使用。有关最新的文档,请参见相应的GitHub存储库。
先把matchbox 代码下回来, 不要去下它发行的打包版本,里面少了很多源码里的案例、脚本,这些对于理解都很重要!!

git clone https://github.com/poseidon/matchbox.git

进入matchbox目录下,先去下载镜像,执行

./scripts/get-coreos stable 2303.3.0 ./examples/assets/

我指定了一个最新的版本, 这个决定也为后面埋满了坑。
默认他是用的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

这次他会按版本号自动给你建一个子目录,如果你虚拟机空间够大,多准备一个版本的估计会方便一点。

二、启动ipxe

matchbox的example已经装备了好几套配置,供你运行,为了更简单易一点, 我采用了docker的方式来完成ipxe环境和配置。
docker的环境准备好就不多说了,

我们先跟随matchbox的案例看看这里面做了什么,
matchbox目录下的example/groups 中提供了下面几个案例,我们就用etc3-install 吧,

bootkube  bootkube-install  etcd3  etcd3-install  grub  simple  simple-install

devnet会创建dnsmasq,matchbox两个容器, 打开devnet 脚本看一看,基本上就是根据你的参数去为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

启动之后还可以用./scripts/devnet status 查看一下,因为你也不知道会被dhcp分配到什么地址,所以./scripts/devnet status可以帮你查看一下,
总之devnet就是帮你启动了两个docker,其中dnsmasq完成 DHCP, DNS ,TFTP,matchbox负责提供配置。

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

此脚本会一次创建3个node,第一次我就挂了, 因为我下的2303.3.0版本镜像,但是这个些example都是用的是1967.3.0,去example目录下, 把自己用的配置都改为新版2303.3.0 ,这个翻翻example下的配置比较容易。

还有重要的,这些节点配置里用的ssh_authorized_keys 可能都跟你没啥关系,把自己的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
这里需要理解的是这个node1.example.com 是在配置中产生 , 被dnsmasq解析和对应ip的,你可以在./scripts/devnet status 中看到输出记录,你也可以执行arp , 可以看到node1.example.com 与mac的对应表,

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

关于这个mac地址,是藏在中间异常重要的一个耦合因素。
重点: 如果你去仔细看node1.json的配置,你就会发现,mac 是被一个叫selector的元素包含的,分析一下不难明白, 当你用kvm生成一个虚拟机时,可以先指定这个mac地址的,为什么要这么干呢?因为matchbox可以根据这个mac对机器做具体的配置做匹配, 可以设想当你安装一批集群时,有一些是普通节点, 有一些必然是有特殊角色,批量部署时,怎么让不同的节点执行不同的配置安装呢, 那么mac值就是用来控制的, 也就不难理解,配置里面有的有default.json,是为了普通节点准备的。

顺利的话,ssh core@node1.example.com 就可以用了,

以下指令清除了docker 容器,也清除了3个虚拟机,干干净净毛都不剩。
$ sudo ./scripts/devnet destroy
$ sudo ./scripts/libvirt destroy

是不是觉得比第一篇还简单点。
不过一般都会碰到一些问题,下面是一些杂七杂八的话题

三、 其他一些问题
1,抛开他的案例我们怎么独立执行,

看看脚本里最后生成虚拟机的部分, 主要是影响的是节点名称,网络,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 

在改动一下第一篇中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>

这里加了一个vnc,可以远程登上去看看执行的过程, 特别是开始时候,排查问题的时候,

2 关于matchbox 的文件结构

理解的关键三个目录
examples/groups 子目录中配置虚拟机硬件的信息,文件中引用了profiles中的配置
examples/profiles 配置启动引导的配置文件,启动后加载ignition中的配置
examples/ignition 这个是负责系统配置,安装etcd3,网络等等
耐心翻翻他的配置很有好处

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的, 所以,我是认为这是官网没讲明白的地方, 启动之后进入系统之后可以自己手动给加上hosts。

3,matchbox 其他方式

docker不是唯一方式, 也可以直接部署,我只是觉得方便,官网有介绍。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容