1. 程式人生 > >輕鬆掌握!一文教你用CloudBoot批量安裝RancherOS

輕鬆掌握!一文教你用CloudBoot批量安裝RancherOS

開發十年,就只剩下這套架構體系了! >>>   

RancherOS是Rancher Labs設計的小巧、專用的容器作業系統。本文詳細介紹瞭如何使用CloudBoot簡單批量安裝RancherOS。


作者簡介

趙安家,山東順能網路全棧研發工程師。前端後端通吃,DevOps、安全、培訓都有涉獵,負責了公司從單體服務遷移至微服務的專案。

介紹

CloudBoot

CloudBoot是雲霽科技科技開源的一款簡單易用的裝機系統,類似Cobbler ,但是功能更強大,更易用。(詳情可參閱參考資料的連結)

RancherOS

RancherOS是Rancher Labs開源的一款容器作業系統,類似coreOS,RancherOS是Rancher Labs設計的小巧、專用的容器作業系統,可用安裝到伺服器本地硬碟中,也可以部署到公有云上,或者配合DockerMachine使用。與Ubuntu和CentOS不同,RancherOS使用cloud-config.yml配置檔案來管理機器的配置資訊,包括系統啟動時的服務、網路相關的配置資訊、儲存配置、容器配置等等,都可以放到配置檔案中進行管理。

安裝cloudboot

可參閱CloudBoot一鍵部署 :

http://idcos.github.io/osinstall-doc/environment/%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2.html

掛載RancherOS映象

wget -P /tmp/ http://releases.rancher.com/os/latest/rancheros.iso

mkdir -p $PWD/cloudboot/deploy/iso/rancheros/1.5.1/

mount -o loop /tmp/rancheros.iso /media

rsync -a /media/ $PWD/cloudboot/deploy/iso/rancheros/1.5.1/

umount /media

建立軟連線

docker exec -it cloudboot /bin/sh

ln -s /data/iso/rancheros /home/www/rancheros

注意:

  • CloudBoot預設使用者名稱密碼是 admin/admin

  • 登陸後需要配置dhcp(【系統管理】-> 【系統設定】)

  • 需要配置網段(【網段管理】->【應用網段】)

  • 本文講的是VMware,所以不需要配置OOB

  • 需要配置裝置位置(【模板管理】->【位置管理】)

  • 如果CloudBoot和RancherOS都裝在VMware虛擬機器裡,需要把VMware的網路設定中的dhcp去掉,否則會衝突

pxe安裝RancherOS

參考RancherOS#docs#iPXE和CloudBoot PXE模板定製規範

PXE模板管理

從【模板管理】->【PXE模板管理】 新增RancherOS-1.5.1

DEFAULT rancheros

LABEL rancheros

KERNEL http://osinstall.idcos.com/rancheros/1.5.1/boot/vmlinuz-4.14.85-rancher

APPEND initrd=http://osinstall.idcos.com/rancheros/1.5.1/boot/initrd-v1.5.1  rancher.cloud_init.datasources=[url:http://osinstall.idcos.com/api/osinstall/v1/device/getSystemBySn?sn={sn}] rancher.autologin=tty1 rancher.autologin=ttyS0 rancher.autologin=ttyS1 rancher.autologin=ttyS1 console=tty1 console=ttyS0 console=ttyS1 printk.devkmsg=on panic=10 

IPAPPEND 2

系統模板管理

從【模板管理】->【系統模板管理】 新增rancheros-1.5.1

把docker mirror換成實際的加速器,如果不需要,可以刪除,ssh_authorized_keys 換成真實的ssh key

#cloud-config

rancher:

    console: alpine

    docker:

        registry_mirror: "https://xxx.mirror.aliyuncs.com"

runcmd:

    - sh -c 'curl http://osinstall.idcos.com/scripts/rancheros.sh | bash'

ssh_authorized_keys:

    - ssh-rsa AAAA....ZZZZ user@user

自定義指令碼

在CloudBoot宿主機上,執行 docker exec -it cloudboot /bin/sh ,然後執行 vim /home/www/scripts/rancheros.sh

#!/bin/bash

progress() {

    curl -H "Content-Type: application/json" -X POST -d "{\"Sn\":\"$_sn\",\"Title\":\"$1\",\"InstallProgress\":$2,\"InstallLog\":\"$3\"}" http://osinstall.idcos.com/api/osinstall/v1/report/deviceInstallInfo

}



_sn=$(sed q /sys/class/net/eth0/address)

progress "配置主機名和網路" 0.7 "6YWN572u5Li75py65ZCN5ZKM572R57uc"


# config network

curl -o /tmp/networkinfo "http://osinstall.idcos.com/api/osinstall/v1/device/getNetworkBySn?sn=${_sn}&type=raw"

source /tmp/networkinfo



cat > /etc/network/interfaces <<EOF

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

address $IPADDR

netmask $NETMASK

gateway $GATEWAY

EOF



echo "$HOSTNAME" > /etc/hostname

sudo hostname "$HOSTNAME"

progress "配置alpine映象源" 0.8 "6YWN572uYWxwaW5l6ZWc5YOP5rqQ"

sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

progress "安裝完成" 1 "5a6J6KOF5a6M5oiQ"

sudo ros install -c http://osinstall.idcos.com/api/osinstall/v1/device/getSystemBySn?sn=$_sn" -d /dev/sda -f

自動化安裝RancherOS

從VMware建立 空盤 -> 其他Linux4.x或更高版本核心64位,2核2G虛擬機器,然後上電 虛擬機器會從PXE拉取CloudBoot的bootos 安裝到記憶體中,並且往CloudBoot上註冊待錄入的裝置(待螢幕變藍色)

http://${cloudboot host}/#/dashboard/device/scan/list 會發現新裝置,選中後,點選錄入新裝置

bootos會自動輪詢是否有自動裝機任務,所以靜候即可。如果等不及,可以在錄入成功後,手動重啟虛擬機器。

在【正在安裝的裝置】中,會自動出現要安裝的裝置

點選【詳情】會在滾動模式下試試看到安裝進度

在【裝置列表】可以看到已安裝成功的裝置

注意

和Rancher Labs架構師張智博討論後,張智博指出

booting from ISO 首次啟動,整個系統都在記憶體中。 執行ros install後,安裝bootloader和initrd/vmlinuz到磁碟。 再次啟動後,就是完整的執行在硬碟上的作業系統。

腦洞

可以在 cloud config 配置自定義服務,這樣裝機後,就可以直接啟動服務,不需要ssh到ros上,手動執行命令,例如配置Rancher client的新增主機的命令,這樣就可以直接新增到已有叢集。

更多參考 Custom System Services:

https://rancher.com/docs/os/v1.x/en/installation/system-services/custom-system-services/

#cloud-config

rancher:

  services:

    nginxapp:

      image: nginx

      restart: always

參考資料