rackshift裸金属管理平台部署参考:
环境:
不小于 8 G内存的 64位 CentOS 7 / RHEL 7 以上 Linux 主机
此部署方式只支持CentOS 7 / RHEL 7 以上 Linux 主机
概览:
centos部署
ubuntu部署(官方没有ubuntu部署rackship的教程此处需要修改install.sh脚本)
一. centos二进制部署rackship(下载源码包直接部署) 网络结构 RackShift 网卡说明
管理:与BMC管理网络三层通信,通过该网络 RackShift 能控制物理机的 PXE启动等行为
PXE:与 物理机 PXE 网口直连,通过该网络 RackShift能下发 PXE过程中需要的文件
在线安装¶ 1 sh -c "$(curl -sSL https://github.com/rackshift/rackshift/releases/latest/download/quick_start.sh)"
离线安装¶
百度网盘下载地址(提取码:vcuv)
或GEGEWU阿里云盘获取
tar -zxvf rackshift-offline-installer-v1.x.x.tar.gz
cd rackshift-offline-installer-v1.x.x/installer
./install.sh (文件位置:/opt/rockship/rackshift-offline-installer-v1.7.1/installer)
安装过程截图
二. ubuntu部署rachship
建议手动安装好docker以及docker-compose 手动将适配ubuntu的脚本上传到源码解压目录
防火墙部分注释ubuntu采用ufw防火墙只需手动执行ufw allow +端口即可
cd rackshift-offline-installer-v1.x.x/installer 赋予权限
chmod +x check_install.sh 执行
./check_install.sh
check_install.sh脚本留存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 #!/bin/bash set -einstallLog="/tmp/rackshift-install.log" red=31 green=32 yellow=33 blue=34 validationPassed=1 cmd=$1 Environment_Preparation () { function printTitle () { echo -e "\n\n**********\t ${1} \t**********\n" } function printSubTitle () { echo -e "------\t \033[${blue} m ${1} \033[0m \t------\n" } function colorMsg () { echo -e "\033[$1m $2 \033[0m" } function checkPort () { record=$(lsof -i:$1 | grep LISTEN | wc -l) echo -ne "$1 端口 \t\t........................ " if [ "$record " -eq "0" ]; then colorMsg $green "[OK]" else validationPassed=0 colorMsg $red "[被占用]" fi } echo "" >$installLog systemName=" RackShift 服务" versionInfo=$(cat ../rackhd/conf/version) } rackshift_IP () {if [ "$cmd " != "upgrade" ]; then if [ ! "$serverIp " ]; then printTitle "配置 RackShift 服务 IP 地址:" echo "请输入 RackShift 当前 IP 地址(与物理机 PXE 口属于同一个 VLAN ):" read serverIp else printTitle "RackShift 服务 IP 地址: $serverIp " fi fi `` colorMsg $yellow "\n\n开始安装 $systemName ,版本 - $versionInfo " echo -e "\n" echo " ____ __ _____ __ _ _____ " echo " / __ \____ ______/ /__/ ___// /_ (_) __/ /_" echo " / /_/ / __ \`/ ___/ //_/\__ \/ __ \/ / /_/ __/" echo " / _, _/ /_/ / /__/ ,< ___/ / / / / / __/ /_" echo "/_/ |_|\__,_/\___/_/|_|/____/_/ /_/_/_/ \__/" printTitle "${systemName} 安装环境检测" } user_check () {echo -ne "root 用户检测 \t\t........................ " isRoot=$(id -u -n | grep root | wc -l) if [ "x$isRoot " == "x1" ]; then colorMsg $green "[OK]" else colorMsg $red "[ERROR] 请用 root 用户执行安装脚本" validationPassed=0 fi } system_check () {echo -ne "操作系统检测 \t\t........................ " if [ -f /etc/redhat-release ]; then majorVersion=$(cat /etc/redhat-release | grep -oE '[0-9]+\.[0-9]+' | awk -F. '{print $1}' ) if [ "x$majorVersion " == "x" ]; then colorMsg $red "[ERROR] 操作系统类型版本不符合要求,请使用 CentOS 7.x, RHEL 7.x 版本 64 位" validationPassed=0 else if [ "x$majorVersion " == "x7" ]; then is64bitArch=$(uname -m) if [ "x$is64bitArch " == "xx86_64" ]; then colorMsg $green "[OK]" else colorMsg $red "[ERROR] 操作系统必须是 64 位的,32 位的不支持" validationPassed=0 fi else colorMsg $red "[ERROR] 操作系统类型版本不符合要求,请使用 CentOS 7.x, RHEL 7.x 版本 64 位" validationPassed=0 fi fi else colorMsg $red "[ERROR] 操作系统类型版本不符合要求,请使用 CentOS 7.x, RHEL 7.x版本 64 位" validationPassed=0 fi } disk_space () {echo -ne "磁盘剩余空间检测 \t........................ " path="/opt/rackshift" IFSOld=$IFS IFS=$'\n' lines=$(df ) for line in ${lines} ; do linePath=$(echo ${line} | awk -F' ' '{print $6}' ) lineAvail=$(echo ${line} | awk -F' ' '{print $4}' ) if [ "${linePath:0:1} " != "/" ]; then continue fi if [ "${linePath} " == "/" ]; then rootAvail=${lineAvail} continue fi pathLength=${#path} if [ "${linePath:0:${pathLength} } " == "${path} " ]; then pathAvail=${lineAvail} break fi done IFS=$IFSOld if test -z "${pathAvail} " ; then pathAvail=${rootAvail} fi if [ $pathAvail -lt 2097 ]; then colorMsg $red "[ERROR] 安装目录剩余空间小于 200G, 所在机器的安装目录可用空间需要至少 200G" validationPassed=0 else colorMsg $green "[OK]" fi } docker_check () {echo -ne "Docker 检测 \t\t........................ " systemctl start docker 1>/dev/null 2>/dev/null if [ $? -eq 0 ]; then colorMsg $green '[OK]' else colorMsg $red '[不存在]' if [ -d ../docker ]; then echo "离线安装 Docker" cp ../docker/bin/* /usr/bin/ cp ../docker/service/docker.service /etc/systemd/system/ chmod +x /usr/bin/docker* chmod 754 /etc/systemd/system/docker.service else echo "在线安装 Docker" curl -fsSL https://get.docker.com -o get-docker.sh 2>&1 | tee -a $installLog sudo sh get-docker.sh --mirror Aliyun 2>&1 | tee -a $installLog echo "... 启动 docker" fi fi systemctl enable docker 2>&1 | tee -a $installLog systemctl start docker 2>&1 | tee -a $installLog docker ps 1>/dev/null 2>/dev/null if [ $? != 0 ]; then echo "Docker 未正常启动,请先安装并启动 Docker 服务后再次执行本脚本" exit fi } docker_compose_check () {echo -ne "Compose 检测 \t\t........................ " docker-compose -v 1>/dev/null 2>/dev/null if [[ $? -eq 0 ]]; then colorMsg $green '[OK]' else colorMsg $red '[不存在]' if [[ -d ../docker ]]; then echo "... 离线安装 docker-compose" cp ../docker/bin/docker-compose /usr/bin/ chmod +x /usr/bin/docker-compose else echo "... 在线安装 docker-compose" curl -L "https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s) -$(uname -m) " -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose fi fi docker-compose version 1>/dev/null 2>/dev/null if [ $? != 0 ]; then echo "docker-compose 未正常安装,请先安装 docker-compose 后再次执行本脚本" exit fi } port_check (){hasLsof=$(which lsof 2>&1) if [ "$cmd " != "upgrade" ]; then if [[ ! $hasLsof =~ "no lsof" ]]; then rackshiftPorts=$(grep -A 1 "ports:$" ./docker-compose.yml | grep "\-.*:" | awk -F":" '{print $1}' | awk -F" " '{print $2}' ) for rackshiftPort in ${rackshiftPorts} ; do checkPort $rackshiftPort done else echo -ne "lsof 检测端口 \t\t........................ " colorMsg $red "[不存在]" fi fi if [ $validationPassed -eq 0 ]; then colorMsg $red "\n${systemName} 安装环境检测未通过,请查阅上述环境检测结果\n" exit 1 fi printTitle "开始进行${systemName} 安装" if [ $(grep "vm.max_map_count" /etc/sysctl.conf | wc -l) -eq 0 ]; then echo "vm.max_map_count=262144" >>/etc/sysctl.conf sysctl -p /etc/sysctl.conf >>$installLog fi } configuration_rackshift (){if [ "$cmd " != "upgrade" ]; then printTitle "配置 RackShift服务" echo -ne "配置 RackShift服务 \t........................ " mkdir -p /opt/rackshift/logs if [ -f /opt/rackshift/rackhd/dhcp/config/dhcpd.conf ];then mv -f /opt/rackshift/rackhd/dhcp/config/dhcpd.conf /tmp fi cp -rpf ../rackhd /opt/rackshift if [ -f /tmp/dhcpd.conf ];then mv -f /tmp/dhcpd.conf /opt/rackshift/rackhd/dhcp/config/dhcpd.conf fi cp rsctl /etc/init.d/rackshift chmod a+x /etc/init.d/rackshift mkdir -p /opt/rackshift/conf/mysql/sql cp ./mysql.cnf /opt/rackshift/conf/mysql cp ./rackshift.sql /opt/rackshift/conf/mysql/sql cp ./.env /opt/rackshift mkdir -p /opt/rackshift/plugins sed -i "s/172.31.128.1/${serverIp} /g" /opt/rackshift/conf/mysql/sql/rackshift.sql else if [ -d /opt/rackshift/rackhd/monorail/config.json ];then serverIp=`cat /opt/rackshift/rackhd/monorail/config.json | grep "apiServerAddress" | awk -F ':' '{print $2}' | awk -F '"' '{print $2}' ` else serverIp=`cat /opt/rackshift/conf/rackshift.properties | grep "api.server.url" | awk -F '=' '{print $2}' ` fi fi cp ./rackshift.properties /opt/rackshift/confcp ./rackshift.properties /opt/rackshift/rackhd/conf/rackshift.properties.baksed -i "s/172.31.128.1/${serverIp} /g" /opt/rackshift/conf/rackshift.properties cp ./docker-compose.yml /opt/rackshiftcp ../rackhd/conf/version /opt/rackshift/rackhd/conf/versionif [ -d ../plugins ]; then cp -rf ../plugins/* /opt/rackshift/plugins fi colorMsg $green '[OK]' } configuration_loading () {printSubTitle "加载 Docker 镜像" ||true docker_images_folder="../docker-images" if [ ! -d "$docker_images_folder " ]; then echo -ne "目录检测 \t\t........................ " colorMsg $red "[不存在]" else for docker_image in ${docker_images_folder} /*; do temp_file=$(basename $docker_image ) printf "加载镜像 %-45s ........................ " $temp_file docker load -q -i ${docker_images_folder} /$temp_file >>$installLog printf "\e[32m[OK]\e[0m \n" done fi cp rsctl /usr/local/bin && chmod +x /usr/local/bin/rsctlif [ -f "/usr/bin/rsctl" ]; then rm -rf /usr/bin/rsctl fi ln -s /usr/local/bin/rsctl /usr/bin/rsctl ||true chkconfig rackshift on >>/dev/null ||true echo -ne "启动 Docker 服务 \t........................ " systemctl restart docker colorMsg $green "[OK]" ||true printTitle "启动 RackShift 服务" ||true rsctl stop if [ "$cmd " == "online" ];then docker pull registry.cn-qingdao.aliyuncs.com/x-lab/kvm:v1.5.1 docker pull registry.cn-qingdao.aliyuncs.com/x-lab/racadm-docker docker pull registry.cn-qingdao.aliyuncs.com/x-lab/ipmitool fi rsctl reload if [ $? -eq 0 ]; then echo -ne "启动 RackShift 服务 \t........................ " colorMsg $green "[OK]" ||true else echo -ne "启动 RackShift 服务 \t........................ " colorMsg $red "[失败]" ||true exit 1 fi } open_port () {printTitle "正在开放必要端口" notRunning=$(firewall-cmd --state 2>&1) if [[ "${notRunning} " == "running" ]]; then firewall-cmd --zone=public --add-port=80/tcp --permanent 1>>$installLog 2>/dev/null firewall-cmd --zone=public --add-port=8082/tcp --permanent 1>>$installLog 2>/dev/null firewall-cmd --zone=public --add-port=8083/tcp --permanent 1>>$installLog 2>/dev/null firewall-cmd --zone=public --add-port=8443/tcp --permanent 1>>$installLog 2>/dev/null firewall-cmd --zone=public --add-port=9080/tcp --permanent 1>>$installLog 2>/dev/null firewall-cmd --zone=public --add-port=9090/tcp --permanent 1>>$installLog 2>/dev/null firewall-cmd --zone=public --add-port=9030/tcp --permanent 1>>$installLog 2>/dev/null firewall-cmd --zone=public --add-port=4011/udp --permanent 1>>$installLog 2>/dev/null firewall-cmd --zone=public --add-port=67/udp --permanent 1>>$installLog 2>/dev/null firewall-cmd --zone=public --add-port=69/udp --permanent 1>>$installLog 2>/dev/null firewall-cmd --reload 1>/dev/null 2>/dev/null firewall-cmd --zone=public --list-ports else echo "防火墙已关闭,无需配置端口开放" fi } successful () {echo echo "*********************************************************************************************************************************************" echo -e "\t $systemName 安装完成,请在服务完全启动后(大概需要等待5分钟左右)访问 http://$serverIp :8082 来访问 RackShift 控制台 默认账号密码 admin/123" echo echo "*********************************************************************************************************************************************" echo rsctl } main () { Environment_Preparation rackshift_IP user_check disk_space docker_check docker_compose_check port_check configuration_rackshift configuration_loading successful } main
note: 最简环境需要注释脚本下方函数否则检查时无法通过
三. 效果 安装成功后您可以通过浏览器访问 RackShift WEB 控制台
通过 rsctl status 查看服务状态
控制命令
rsctl status 查看 RackShift 服务运行状态
rsctl start 启动 RackShift 服务
rsctl stop 停止 RackShift 服务
rsctl restart 重启 RackShift 服务
rsctl reload 重新加载 RackShift 服务
rsctl reconfig 重设 RackShift 服务 IP(PXE 网卡) 地址
rsctl upgrade 升级 RackShift 至最新版本
rsctl uninstall 卸载 RackShift 服务
rsctl version 查看 RackShift 版本信息
四. 使用 参考:
后端挂载 CentOS 镜像¶
上传镜像文件 CentOS.iso 到 /opt/rackshift/rackhd/files/mount/common 目录
执行命令 mkdir -p /opt/rackshift/rackhd/files/mount/common/centos-test(名称可以随意写,只要不重复)
执行命令 mount CentOS.iso /mnt/
执行 cp -r /mnt/* /opt/rackshift/rackhd/files/mount/common/centos-test
在 WEB-UI 上添加镜像,选择后端挂载,URL 填 http://nodeIp:9090/common/centos-test 即可
注意 等待镜像上传完毕之后点击“提交/确定”按钮
如果需要 Minimal 版本,请到 https://docs.rackshift.io/iso/ 下载 !官网的 Minimal 镜像没有 curl 等工具会造成 RackShift 工作流不能正常结束