RancherOS (v0.7.1)
# 1.下载部署包,点这里下载,由于CSDN资源限制原因,其中不包含ros.tar.xz,需要完整包点这里
# 2.按需修改文件参数:1.boot.txt  2.ros-install.sh(标红按需修改,.sh为linux脚本,win下要专业编辑器
# 3.在服务器上执行 pxesrv.exe,全部选项已经在配置文件中设置完毕,无需更改变动,直接运行即可。
# 4.修改客户端节点设备 BIOS 为 PXE 启动,开机后便批量自动安装,无需人员值守,安装时长不到 2 分钟。
# 5.安装中途请查看 flag 文件夹,会有文件生成,可以检视该节点设备安装状态,如果该文件夹中生成有状态文件,该节点机器无法再次安装系统,必须删除该状态文件才可以重新安装该节点。
# 6.用 SSH 工具登录安装完毕的节点,必须导入私钥登录,该私钥没有加密,直接登录即可。

iPXE-RancherOS
├── root
│   │   └──  flag            # 该目录保存批量安装节点的状态文件(如果该节点有状态存在,无法再次安装)
│   ├──  ros.tar.xz         # System-Docker Save 包(命令:docker save rancher/os | xz > ros.tar.xz)
│   ├──  vmlinuz           # 官方 GIT 下载
│   ├──  ros-install.sh   # 自动安装脚本
│   ├── ipxe.pxe          # iPXE 引导文件
│   ├──  initrd               # 官方 GIT 下载
│   ├── boot.txt           # iPXE 执行脚本
│   └──  2048.rsa          # 登录节点的私钥
├──  pxesrv.exe            # tiny pxe server 执行文件
└──  config.ini              # tiny pxe server 配置文件

# boot.txt
#!ipxe
# Boot a persistent RancherOS to RAM
# Location of Kernel/Initrd images
# iPXE 的 httpd 地址
set server-url  http://192.168.1.2
kernel ${server-url}/vmlinuz rancher.state.formatzero=true rancher.cloud_init.datasources=[url:${server-url}/ros-install.sh]
initrd ${server-url}/initrd
boot

# ros-install.sh
#!/bin/sh
# 网卡接口名称 
IFACE_NAME='eth0'
# RancherOS 的 Docker save 包
TAR_NAME='ros.tar.xz'
# 需要安装所在位置盘符
HDD_NAME='/dev/sda'
# 服务器 IP (iPXE)
SERVER_IP='192.168.1.2'
# DNS IP
DNS='114.114.114.114'
# 加速器 地址
REGISTRY='http://XXXXX.m.daocloud.io'
# 私有仓库 地址
PRIV_REGISTRY='192.168.1.254:5000'
# 管理 公钥 (首次安装无法直接登陆,必须用私钥登陆节点,然后 sudo passwd rancher 修改密码,私钥在包内提供 2048.rsa)
PUBLIC_KEY='ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxgLYkQJFt0F64X7FP1iwOi4JJcgwZntSCdBgwfkq6CHduudlrswnJHrnDBVc9OIc9jRnC0AWwp6miqPAn3R5hZ6xWjWalXBZfwic4ibbGp1sEGemGTSP6+M5xMpJUacy/u7qdkwof08vAFGzFIhKw3nQ34tSU0TTcHtpx+KR/ZXlYR6Q7ek8RJPk2cei/m/zVe4jHsLHHWKbeyC+f2aRudWKohnU5qlQuMH753PkcyVzVThKDdTVTgMnjhyPErEUY4ajjvPngM11XcpnA+zaS98VH2YYsFXsCTbux4n7/ZnemuQhQdTO8EpSVLNnNMDwhP4L8lDra5aQ77uXqqnWAQ=='

# 获取客户端 IP 地址(从网卡信息自动获取)
CLIENT_IP=`ifconfig $IFACE_NAME | grep "inet addr" | awk '{ print $2}' | awk -F: '{print $2}'`
# 获取客户端 掩码(从 DHCP 路由条目自动获取)
CLIENT_IP_NETMASK=`ip route show | grep $IFACE_NAME | grep "proto" | awk '{ print $1}' | awk -F/ '{print $2}'`
# 获取客户端 网关(从默认路由自动获取)
GATEWAY=`ip route show | grep "default" | awk '{ print $3}'`
# 获取主机名 前段(从 tar.xz 包文件名自动截取)
HOST_NAME1=`echo $TAR_NAME | awk -F. '{print $1}'`
# 获取主机名 后端(从 DHCP 的 IP 主机位自动获取)
HOST_NAME2=`echo $CLIENT_IP | awk -F. '{print $4}'`

#echo $CLIENT_IP_NETMASK $GATEWAY $HOST_NAME1$HOST_NAME2

# 从服务器检测 OK 标志符,如果有,则关机
if tftp -g $SERVER_IP -r /flag/$HOST_NAME1$HOST_NAME2.ok.rsa.pub -l a  ; then halt ; fi
# 从服务器检测 err 标志符
if tftp -g $SERVER_IP -r /flag/$HOST_NAME1$HOST_NAME2.err.dmesg -l b  ; then halt ; fi
# 从服务器下载 System-Docker 镜像 并 load
wget $SERVER_IP/$TAR_NAME && sudo system-docker load -i $TAR_NAME

# 写 RancherOS 安装配置文件
cat > "cloud-config.yml" << EOF
#cloud-config
# 配置 主机名
hostname: $HOST_NAME1$HOST_NAME2
rancher:
  docker:
    extra_args:
    # 用户 Docker 的加速器地址
    - --registry-mirror
    - $REGISTRY
    # 用户 Docker 的私服地址
    - --insecure-registry
    - $PRIV_REGISTRY
  network:
    dns:
      nameservers:
      - $DNS
    interfaces:
      # 关闭所有网卡的 DHCP
      eth*:
        dhcp: false
      eth0:
        address: $CLIENT_IP/$CLIENT_IP_NETMASK
        gateway: $GATEWAY
        mtu: 1500
  state:
    fstype: auto
    dev: LABEL=RANCHER_STATE
    autoformat:
      - $HDD_NAME
# 公钥
ssh_authorized_keys:
- $PUBLIC_KEY
EOF

# 开始安装 RancherOS 系统至硬盘
ros install --no-reboot -f -c cloud-config.yml -d $HDD_NAME

# 如果安装成功,返回(真)传递给服务器 flag OK 信息,包含公钥做 SSH 对等
# 如果安装失败,返回(假)传递给服务器 flag err 信息,包含 dmesg 启动日志
if (($?)) ; then dmesg > dmesg && tftp -p $SERVER_IP -r /flag/$HOST_NAME1$HOST_NAME2.err.dmesg -l dmesg ; else ssh-keygen  -t rsa -N '' -f ~/.ssh/id_rsa -q -b 2048 && tftp -p $SERVER_IP -r /flag/$HOST_NAME1$HOST_NAME2.ok.rsa.pub -l ~/.ssh/id_rsa.pub ; fi

#重启节点客户端机器
reboot

—————————————————————————————————————————————————————

# ros & system-docker  常用命令
sudo ros os version
sudo system-docker ps
sudo ros console switch ubuntu
sudo ros config set rancher.password rancher
sudo ros config set rancher.network.interfaces.eth*.dhcp false
sudo ros config set rancher.network.interfaces.eth0.address 192.168.1.82/24
sudo ros config set rancher.network.interfaces.eth0.gateway 192.168.1.1
sudo ros config set rancher.network.dns.nameservers "['218.2.135.1','114.114.114.114']"
# system-docker.extra_args 好像不生效,如有大神知道,请告知。
sudo ros config set rancher.system-docker.extra_args "['--registry-mirror','http://552fb0d9.m.daocloud.io','--insecure-registry','192.168.1.89:5000']"
sudo ros config set rancher.docker.extra_args "['--registry-mirror','http://552fb0d9.m.daocloud.io','--insecure-registry','192.168.1.89:5000']"
sudo system-docker restart docker
sudo ros config export
vi /var/lib/rancher/conf/cloud-config.yml

——————————————————————————————————————————————————————

RancherLabs (rancher/server:v1.3.1,rancher/agent:v1.1.3)
# mysql 安装(该节点很重要,不能宕机,有负载均衡器和数据库)
docker run -d --name mysql --restart=unless-stopped -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql/mysql-server
docker exec -it $? bash
# 配置 rancher/server 数据库 表 和 用户
mysql -uroot -proot
CREATE DATABASE IF NOT EXISTS cattle COLLATE = 'utf8_general_ci' CHARACTER SET = 'utf8';
GRANT ALL ON cattle.* TO 'cattle'@'%' IDENTIFIED BY 'cattle';
GRANT ALL ON cattle.* TO 'cattle'@'localhost' IDENTIFIED BY 'cattle';
flush privileges;

# haproxy 安装(Rancher HA 前置 LB,在 mysql 节点上安装,两个 IP 为 Rancher/Server 地址)
sudo su
mkdir -p /opt/haproxy
cat > /opt/haproxy/haproxy.cfg <<EOF
defaults
    mode http
    option forwardfor
    timeout client 50000
    timeout connect 5000
    timeout server 50000
listen Rancher-HA
    bind *:80
    balance roundrobin
    server web1 192.168.1.109:8080 check
    server web2 192.168.1.108:8080 check
listen stats
    bind *:6666
    stats refresh 3s
    stats uri /
EOF

docker run -d --name haproxy --restart=unless-stopped -p 80:80 -p:6666:6666 -v /opt/haproxy:/usr/local/etc/haproxy haproxy
# haproxy 安装完毕 可以登录该节点 IP 查看状态 http://haproxy-ip:6666

# rancher 安装(这里仅介绍 双活 HA 模式,数据库地址为 mysql 节点 IP,最后的地址为本机 IP)
sudo docker run -d --name rancher --restart=unless-stopped -p 8080:8080 -p 9345:9345 rancher/server --db-host 192.168.1.111 --advertise-address 192.168.1.109

# 最后,登录 rancher 界面,添加 rancher/agent 节点都需要使用 haproxy 的 IP 地址才能实现真正意义上的双活 HA。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐