私有云国基

脚本安装没有cinder服务,就不能操作卷,可以按照先行安装1.sh  2.sh  此时环境都已经好了,把compute上的:fdisk /dev/sdb      n p w   ,而后在 控制节点上运行:

iaas-install-ceilometer-controller.sh

再在compute上运行:

iaas-install-ceilometer-compute.sh

成功后,在控制节点上运行3.sh .要先查看下里面设定的电脑内存,改为1024,不然数值太大,内存不够用。

win镜像,openstack:031701安装KVM主机_哔哩哔哩_bilibili 

带有减卷操作的文章: 

国基北盛—云计算私有云iaas(2.4)平台搭建_搭建私有云计算平台-CSDN博客

【OpenStack(Train版)安装部署(十二)】之win7系统安装,qcow2格式镜像制作_openstack windows镜像下载_开发小鸽的博客-CSDN博客

7.8、如何制作openstack镜像_51CTO博客_openstack镜像下载

虚拟机创建时,CPU数量要设置为1,线程数为8,磁盘空间要500G,computer要两个500G,1.sh 的是72c INTERFACE_NAME=ens34,

创建虚拟机,并设置的详细过程能可参看,注意其中的两个虚拟机的CPU虚拟化,磁盘个数 及与物理主机相通的网卡、网卡类型、IP地址、关闭DHCP、关闭防火墙、等,100网段有IP在址,子网掩码、网关,没有DNS,200网段仅有IP及子网掩码,以下内容复制于这个连接:

2020 ~ 2022 云计算先电 2.4 私有云 IaaS 最小化部署 & 创建 PaaS 实验云主机环境_iaas镜像下载地址_孤_存的博客-CSDN博客

======================================================== 复制开始

一、硬件环境
1. 网卡


2. 配置
Controller 节点:

Compute节点:

所有节点处理器开启虚拟化:

注: 内存 和 处理器 根据个人而定,硬盘容量建议 250G 以上;此处计算节点的 第二块硬盘 是给 Cinder 和 Swift 服务预留的,最小化部署可先不加;两台虚拟机处理器需要开启 虚拟化 功能;真实 服务器 请根据实际情况作出调整,且需要配合交换机使用。

二、系统安装
1. 加载镜像
CentOS-7-x86_64-DVD-1804.iso
下载镜像:CentOS 官方开源镜像站

2. 选择安装软件包
默认最小化安装

3. 磁盘配置
选择手动配置

点击自动创建

删除 /home 用户分区

将可用空间最大化分配给 / 根分区

友情提示:可参考左下角 Available Space 数值。

接受更改

4. 其它安装前配置


语言:英语(US)
时区:中国/上海
KDUMP:关闭

三、配置 CentOS
1. 更改主机名
Controller 节点:

hostnamectl set-hostname controller
bash
1
2
Compute 节点:

hostnamectl set-hostname compute
bash
1
2
注:更改完主机名后在执行部署脚本前请 重启 环境,否则 RabbitMQ 服务可能会报错导致部署失败。(重要)

2. 配置网卡
节点名称    内部 IP 地址(网卡1)    外部 IP 地址(网卡2 )    子网掩码    网关
controller    192.168.100.10    192.168.200.10    24    192.168.100.1
compute    192.168.100.20    192.168.200.20    24    192.168.100.1
vi /etc/sysconfig/network-scripts/ifcfg-<网卡名> # 修改配置文件命令
1
Controller 节点:

## ens32(网卡1)
BOOTPROTO=static 
ONBOOT=yes
IPADDR=192.168.100.10 
PREFIX=24 
GATEWAY=192.168.100.1 

## ens33(网卡2)
BOOTPROTO=static 
ONBOOT=yes
IPADDR=192.168.200.10
PREFIX=24 

Compute 节点:

## ens32(网卡1)
BOOTPROTO=static 
ONBOOT=yes
IPADDR=192.168.100.20 
PREFIX=24 
GATEWAY=192.168.100.1 

## ens33(网卡2)
BOOTPROTO=static 
ONBOOT=yes
IPADDR=192.168.200.10
PREFIX=24 
1
2
3
4
5
6
7
8
9
10
11
12
注:服务器 自行对照更改参数 。

所有节点上执行:

systemctl restart network # 重启网卡使配置生效
1
3. 基础配置
所有节点上执行:

关闭防火墙和SELINUX

systemctl disable --now firewalld
sed -i "7c SELINUX=disabled" /etc/selinux/config
setenforce 0
1
2
3
添加解析记录

echo "192.168.100.10 controller" >> /etc/hosts
echo "192.168.100.20 compute" >> /etc/hosts
————————————————
版权声明:本文为CSDN博主「孤_存」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013246692/article/details/112387110

========================================================复制结束

错误处理

错误: 云主机 "centos01" 执行所请求操作失败,云主机处于错误状态。: 请稍后再试 [错误: No valid host was found. ].

============================开始处理错误

百度安全验证

1. CPU虚拟化参数配置错误

查看nova-compute 日志:

couldn'tobtain the vcpu count fromdomain id:769f95ac-d8da-41be-8e29-f326f03a762f, exception: Requestedoperationis not valid: cpu affinity is not supported

分析:

日志出现绑定CPU失败的错误,立刻想到和CPU虚拟化相关。/etc/nova/nova.conf 中的virt_type参数设置得不对

处理:

修改compute节点的配置文件/etc/nova/nova.conf

如果compute节点是物理机或开启嵌套虚拟化(CPU硬件加速)的虚拟机: virt_type=kvm

如果compute节点未开启嵌套虚拟化的虚拟机:virt_type=qemu

============================结束处理错误

ubuntu16下对vmware的虚拟网卡操作需要root权限,所以,在打开vm时,需要sudo su命令切换到root用户,再执行#vmware,启动后网卡是可以连接外网的。

***100网段是内网不必填写gateway,需要配置200网段并设置网关及DNS,测试可正常访问外网,,再行安装。

1,在10机器 上配IP后,用CRT登录,vi 1.sh。

2,在20机器上配置IP后,用CRT登录,vi 2.sh.

3,在10机器上,CRT,vi 3.sh

4.浏览器访问:http://192.168.100.10/dashboard

账号与密码是前面设置过的: 域:demo 账号:admin 密码:000000创建云主机

[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens34
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
NAME=ens34
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.200.10
NETMASK=255.255.255.0

[root@controller ~]# 




[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.20
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens34
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
NAME=ens34
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.200.20
NETMASK=255.255.255.0

[root@controller ~]# 

1.sh

#!/bin/bash
## Author:孤_存

ControllerPasswd=000000
ComputePasswd=000000
InstallDir=/opt
CentOSDir=${InstallDir}/centos
IaaSDir=${InstallDir}/iaas
RedHatReposDir=/etc/yum.repos.d
LocalRepo=${RedHatReposDir}/local.repo
CentOSISO=/dev/sr0
XiandianISO=/dev/sr1
XiandianConf=/etc/xiandian/openrc.sh
SSHConf=/etc/ssh/ssh_config

## 组合函数
function CombinationFunction() {
##  UserJudgment
##  BasicConfig
  MountImage
  YUMConfig
  FTPConfig
  SSHConfig
  IaaSConfig
  IaaSInstallation
  ResultJudgment
}

## 当前用户名判定:
function UserJudgment() {
  if [ $(hostname) != "controller" ]; then
    echo -e "\033[31m ------------ 请更改主机名为 controller 并重启! --------------- \033[0m"
    return
  fi
}

## 基础配置:
function BasicConfig() {
  systemctl disable --now firewalld && setenforce 0
  echo "192.168.100.10 controller" >>/etc/hosts
  echo "192.168.100.20 compute" >>/etc/hosts
}

## 挂载镜像:
function MountImage() {
  mkdir -p ${CentOSDir} ${IaaSDir}
  mount -o loop ${CentOSISO} ${CentOSDir}
  mount -o loop ${XiandianISO} ${IaaSDir}
  mv ${CentOSISO} ${XiandianISO} ${InstallDir}
}

## 配置YUM源:
function YUMConfig() {
  mkdir -p ${RedHatReposDir}.bak
  mv -f ${RedHatReposDir}/* ${RedHatReposDir}.bak
  echo -e "[centos]\nname=centos\nbaseurl=file://${CentOSDir}\nenabled=1\ngpgcheck=0" >>${LocalRepo}
  echo -e "[iaas]\nname=iaas\nbaseurl=file://${IaaSDir}/iaas-repo\nenabled=1\ngpgcheck=0" >>${LocalRepo}
  yum makecache
}

## 配置FTP服务器
function FTPConfig() {
  yum -y install vsftpd
  echo "anon_root=${InstallDir}" >>/etc/vsftpd/vsftpd.conf
  systemctl enable --now vsftpd
}

## 配置ssh免密登录
function SSHConfig() {
  yum install -y expect
  systemctl daemon-reload
  echo "StrictHostKeyChecking no" >>${SSHConf}
  expect -c "
spawn ssh-keygen
expect \"(/root/.ssh/id_rsa):\"
send \"\r\"
expect \"(empty for no passphrase):\"
send \"\r\"
expect \"passphrase again\"
send \"\r\"
expect eof
"
  expect -c "
spawn ssh-copy-id 192.168.100.10
expect \"password: \"
send \"${ControllerPasswd}\r\"
expect eof
"
  expect -c "
spawn ssh-copy-id 192.168.100.20
expect \"password: \"
send \"${ComputePasswd}\r\"
expect eof
"
}

## 配置iaas-xiandian软件包
function IaaSConfig() {
  yum install -y iaas-xiandian
  sed -i "3c HOST_IP=192.168.100.10" ${XiandianConf}
  sed -i "6c HOST_PASS=000000" ${XiandianConf}
  sed -i "9c HOST_NAME=controller" ${XiandianConf}
  sed -i "12c HOST_IP_NODE=192.168.100.20" ${XiandianConf}
  sed -i "15c HOST_PASS_NODE=000000" ${XiandianConf}
  sed -i "18c HOST_NAME_NODE=compute" ${XiandianConf}
  sed -i "22c network_segment_IP=192.168.100.0/24" ${XiandianConf}
  sed -i "26c RABBIT_USER=openstack" ${XiandianConf}
  sed -i "29c RABBIT_PASS=000000" ${XiandianConf}
  sed -i "33c DB_PASS=000000" ${XiandianConf}
  sed -i "37c DOMAIN_NAME=demo" ${XiandianConf}
  sed -i "38c ADMIN_PASS=000000" ${XiandianConf}
  sed -i "39c DEMO_PASS=000000" ${XiandianConf}
  sed -i "42c KEYSTONE_DBPASS=000000" ${XiandianConf}
  sed -i "46c GLANCE_DBPASS=000000" ${XiandianConf}
  sed -i "49c GLANCE_PASS=000000" ${XiandianConf}
  sed -i "53c NOVA_DBPASS=000000" ${XiandianConf}
  sed -i "56c NOVA_PASS=000000" ${XiandianConf}
  sed -i "60c NEUTRON_DBPASS=000000" ${XiandianConf}
  sed -i "63c NEUTRON_PASS=000000" ${XiandianConf}
  sed -i "66c METADATA_SECRET=000000" ${XiandianConf}
  sed -i "69c INTERFACE_IP=192.168.100.10" ${XiandianConf}
  sed -i "72c INTERFACE_NAME=ens34" ${XiandianConf}
  sed -i "75c Physical_NAME=provider" ${XiandianConf}
  sed -i "78c minvlan=101" ${XiandianConf}
  sed -i "81c maxvlan=200" ${XiandianConf}
  sed -i "85c CINDER_DBPASS=000000" ${XiandianConf}
  sed -i "88c CINDER_PASS=000000" ${XiandianConf}
  sed -i "91c BLOCK_DISK=sdb1" ${XiandianConf}
  sed -i "95c SWIFT_PASS=000000" ${XiandianConf}
  sed -i "98c OBJECT_DISK=sdb2" ${XiandianConf}
  sed -i "101c STORAGE_LOCAL_NET_IP=192.168.100.20" ${XiandianConf}
  sed -i "105c HEAT_DBPASS=000000" ${XiandianConf}
  sed -i "108c HEAT_PASS=000000" ${XiandianConf}
  sed -i "112c ZUN_DBPASS=000000" ${XiandianConf}
  sed -i "115c ZUN_PASS=000000" ${XiandianConf}
  sed -i "118c KURYR_DBPASS=000000" ${XiandianConf}
  sed -i "121c KURYR_PASS=000000" ${XiandianConf}
  sed -i "125c CEILOMETER_DBPASS=000000" ${XiandianConf}
  sed -i "128c CEILOMETER_PASS=000000" ${XiandianConf}
  sed -i "132c AODH_DBPASS=000000" ${XiandianConf}
  sed -i "135c AODH_PASS=000000" ${XiandianConf}
  sed -i "139c BARBICAN_DBPASS=000000" ${XiandianConf}
  sed -i "142c BARBICAN_PASS=000000" ${XiandianConf}
  . ${XiandianConf}
}

## 执行iaas-xiandian安装脚本
function IaaSInstallation() {
  iaas-pre-host.sh
  iaas-install-mysql.sh
  iaas-install-keystone.sh
  iaas-install-glance.sh
  iaas-install-nova-controller.sh
  iaas-install-neutron-controller.sh
  iaas-install-dashboard.sh
}

## 验证最小化部署结果
function ResultJudgment() {
  source /etc/keystone/admin-openrc.sh
  TEST=$(openstack service list | egrep 'placement|keystone|glance|nova|neutron' -wc)
  if [ $TEST -eq "5" ]; then
    echo -e "\033[32m -------------- controller 控制节点部署完成,服务启动正常 -------------- \033[0m"
  else
    echo -e '\033[31m ------------ 最小化部署失败 --------------- \033[0m'
  fi
}

CombinationFunction

2.sh

#!/bin/bash
## Author:孤_存

ControllerPasswd=000000
ComputePasswd=000000
InstallDir=/opt
CentOSDir=${InstallDir}/centos
IaaSDir=${InstallDir}/iaas
RedHatReposDir=/etc/yum.repos.d
FtpRepo=${RedHatReposDir}/ftp.repo
XiandianConf=/etc/xiandian/openrc.sh
SSHConf=/etc/ssh/ssh_config

## 组合函数
function CombinationFunction() {
  UserJudgment
  BasicConfig
  YUMConfig
  SSHConfig
  IaaSConfig
  IaaSInstallation
  FixError          ## 解决虚拟机环境下QEMU模拟器无法正常使用,服务器请注释
  ResultJudgment
}

## 当前用户名判定:
function UserJudgment() {
  if [ $(hostname) != "compute" ]; then
    echo -e "\033[31m ------------ 请更改主机名为 compute 并重启! --------------- \033[0m"
    return
  fi
}

## 基础配置:
function BasicConfig() {
  systemctl disable --now firewalld && setenforce 0
  echo "192.168.100.10 controller" >>/etc/hosts
  echo "192.168.100.20 compute" >>/etc/hosts
}

## 配置YUM源:
function YUMConfig() {
  mkdir -p ${RedHatReposDir}.bak
  mv -f ${RedHatReposDir}/* ${RedHatReposDir}.bak
  echo -e "[centos]\nname=centos\nbaseurl=ftp://controller/centos\nenabled=1\ngpgcheck=0" >>${FtpRepo}
  echo -e "[iaas]\nname=iaas\nbaseurl=ftp://controller/iaas/iaas-repo\nenabled=1\ngpgcheck=0" >>${FtpRepo}
  yum makecache
}

## 配置ssh免密登录
function SSHConfig() {
  yum install -y expect
  systemctl daemon-reload
  echo "StrictHostKeyChecking no" >>${SSHConf}
  expect -c "
spawn ssh-keygen
expect \"(/root/.ssh/id_rsa):\"
send \"\r\"
expect \"(empty for no passphrase):\"
send \"\r\"
expect \"passphrase again\"
send \"\r\"
expect eof
"
  expect -c "
spawn ssh-copy-id 192.168.100.10
expect \"password: \"
send \"${ControllerPasswd}\r\"
expect eof
"
  expect -c "
spawn ssh-copy-id 192.168.100.20
expect \"password: \"
send \"${ComputePasswd}\r\"
expect eof
"
}

## 配置iaas-xiandian软件包
function IaaSConfig() {
  yum install -y iaas-xiandian
  scp root@controller:${XiandianConf} /etc/xiandian
  sed -i "69c INTERFACE_IP=192.168.100.20" ${XiandianConf}
  . ${XiandianConf}
}

## 执行iaas-xiandian安装脚本
function IaaSInstallation() {
  iaas-pre-host.sh
  iaas-install-nova-compute.sh
  iaas-install-neutron-compute.sh
}

## 解决虚拟机环境下QEMU模拟器无法正常使用,服务器请忽略
function FixError() {
  crudini --set /etc/nova/nova.conf libvirt virt_type qemu
  systemctl restart libvirtd.service openstack-nova-compute.service
}

## 验证最小化部署结果
function ResultJudgment() {
  scp root@controller:/etc/keystone/admin-openrc.sh /root/
  source /root/admin-openrc.sh
  TEST=$(openstack compute service list | egrep 'nova-consoleauth|nova-conductor|nova-scheduler|nova-compute' -wc)
  if [ $TEST -eq "4" ]; then
    echo -e "\033[32m -------------- openstack 最小化部署成功 -------------- \033[0m"
  else
    echo -e '\033[31m ------------ 最小化部署失败 --------------- \033[0m'
  fi
  rm -rf /root/admin-openrc.sh
}

CombinationFunction

3.sh

#!/bin/bash
## Author:孤_存
## 请在控制节点执行此脚本
## 网卡1 192.168.100.0/24   网卡2 192.168.200.0/24

## 使环境变量生效
source /etc/keystone/admin-openrc.sh
## 创建镜像
glance image-create --name CentOS7.5 --disk-format qcow2 --container-format bare --progress < /opt/iaas/images/CentOS_7.5_x86_64_XD.qcow2

# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 二选一 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
## 创建外部网络(虚拟机)
openstack network create ext-net --provider-physical-network provider --provider-network-type flat --external
## 创建外部网络(服务器)
##openstack network create ext-net --provider-network-type vlan --provider-physical-network provider --provider-segment 1 --external

## 创建内部网络
openstack network create int-net1 --provider-network-type vxlan --provider-segment 1
openstack network create int-net2 --provider-network-type vxlan --provider-segment 2
## 创建子网
openstack subnet create ext-subnet --network ext-net --gateway 192.168.200.1 --subnet-range 192.168.200.0/24 --allocation-pool start=192.168.200.100,end=192.168.200.200 --dhcp
openstack subnet create int-subnet1 --network int-net1 --gateway 10.0.0.1 --subnet-range 10.0.0.0/24 --dhcp
openstack subnet create int-subnet2 --network int-net2 --gateway 10.0.1.1 --subnet-range 10.0.1.0/24 --dhcp
## 创建路由
openstack router create ext-router
openstack router set ext-router --external-gateway ext-net
openstack router add subnet ext-router int-subnet1
## 创建安全组和规则
openstack security group create all
openstack security group rule list all | grep None >> rules.txt
sed -i "s/None//g" rules.txt
sed -i "s/|//g" rules.txt
sed -i s/[[:space:]]//g rules.txt
SECURITY_RULE1=$(sed -n 1p rules.txt)
SECURITY_RULE2=$(sed -n 2p rules.txt)
openstack security group rule delete $SECURITY_RULE1
openstack security group rule delete $SECURITY_RULE2
rm -rf rules.txt
openstack security group rule create --ingress --protocol tcp all
openstack security group rule create --ingress --protocol udp all
openstack security group rule create --ingress --protocol icmp all
openstack security group rule create --egress --protocol tcp all
openstack security group rule create --egress --protocol udp all
openstack security group rule create --egress --protocol icmp all
## 创建实例类型
nova flavor-create master 1 2048 100 8
nova flavor-create node 2 2048 100 4
## 创建云主机
nova boot --image CentOS7.5 --flavor 1 --nic net-name=int-net1,v4-fixed-ip=10.0.0.3 --security-groups all --poll master
nova boot --image CentOS7.5 --flavor 2 --nic net-name=int-net1,v4-fixed-ip=10.0.0.4 --security-groups all --poll node
## 创建浮动IP并绑定至云主机
openstack floating ip create ext-net --floating-ip-address 192.168.200.104
openstack floating ip create ext-net --floating-ip-address 192.168.200.105
openstack server add floating ip master 192.168.200.104
openstack server add floating ip node 192.168.200.105

《跟唐老师学习云网络》 - OpenStack网络实现-云社区-华为云
 

https://forum.huawei.com/enterprise/zh/thread/580888768620150784icon-default.png?t=N7T8https://forum.huawei.com/enterprise/zh/thread/580888768620150784

国基北盛云计算opesntack私有云iaas(2.4)Xiandian平台搭建_哔哩哔哩_bilibili

2020 ~ 2022 云计算先电 2.4(私有云 IaaS 最小化部署 + 创建 PaaS 实验云主机环境)Shell 部署脚本_孤_存的博客-CSDN博客

太详细了,步步有图。

 手把手教你搭建OpenStack云平台(超级详细)_openstack搭建_0醒醒的博客-CSDN博客

使用VMware Workstation搭建先电IaaS2.4云平台 - 腾讯云开发者社区-腾讯云

Cloud-computing 实验镜像 chinaskills_cloud_iaas.iso chinaskills_cloud_paas.iso_太阳神LoveU的博客-CSDN博客

脚本部署需要修改的地方,

一、controller的脚本1.sh:

1,第二张网卡名字实际应为:ens34,而不是33

二、compute的脚本2.sh:

没有内容需要修改

三、controller的脚本3.sh

注释掉服务器一行:15

特别声明:请先学会如何手动搭建后再使用,自行更改相关参数!
附:手动官方脚本搭建详细教程:
2020 ~ 2021 云计算先电 2.4 私有云 IaaS 最小化部署 & 创建 PaaS 实验云主机环境

Controller 控制节点
#!/bin/bash
## Author:孤_存

ControllerPasswd=000000
ComputePasswd=000000
InstallDir=/opt
CentOSDir=${InstallDir}/centos
IaaSDir=${InstallDir}/iaas
RedHatReposDir=/etc/yum.repos.d
LocalRepo=${RedHatReposDir}/local.repo
CentOSISO=/root/CentOS-7-x86_64-DVD-1804.iso
XiandianISO=/root/XianDian-IaaS-v2.4.iso
XiandianConf=/etc/xiandian/openrc.sh
SSHConf=/etc/ssh/ssh_config

## 组合函数
function CombinationFunction() {
  UserJudgment
  BasicConfig
  MountImage
  YUMConfig
  FTPConfig
  SSHConfig
  IaaSConfig
  IaaSInstallation
  ResultJudgment
}

## 当前用户名判定:
function UserJudgment() {
  if [ $(hostname) != "controller" ]; then
    echo -e "\033[31m ------------ 请更改主机名为 controller 并重启! --------------- \033[0m"
    return
  fi
}

## 基础配置:
function BasicConfig() {
  systemctl disable --now firewalld && setenforce 0
  echo "192.168.100.10 controller" >>/etc/hosts
  echo "192.168.100.20 compute" >>/etc/hosts
}

## 挂载镜像:
function MountImage() {
  mkdir -p ${CentOSDir} ${IaaSDir}
  mount -o loop ${CentOSISO} ${CentOSDir}
  mount -o loop ${XiandianISO} ${IaaSDir}
  mv ${CentOSISO} ${XiandianISO} ${InstallDir}
}

## 配置YUM源:
function YUMConfig() {
  mkdir -p ${RedHatReposDir}.bak
  mv -f ${RedHatReposDir}/* ${RedHatReposDir}.bak
  echo -e "[centos]\nname=centos\nbaseurl=file://${CentOSDir}\nenabled=1\ngpgcheck=0" >>${LocalRepo}
  echo -e "[iaas]\nname=iaas\nbaseurl=file://${IaaSDir}/iaas-repo\nenabled=1\ngpgcheck=0" >>${LocalRepo}
  yum makecache
}

## 配置FTP服务器
function FTPConfig() {
  yum -y install vsftpd
  echo "anon_root=${InstallDir}" >>/etc/vsftpd/vsftpd.conf
  systemctl enable --now vsftpd
}

## 配置ssh免密登录
function SSHConfig() {
  yum install -y expect
  systemctl daemon-reload
  echo "StrictHostKeyChecking no" >>${SSHConf}
  expect -c "
spawn ssh-keygen
expect \"(/root/.ssh/id_rsa):\"
send \"\r\"
expect \"(empty for no passphrase):\"
send \"\r\"
expect \"passphrase again\"
send \"\r\"
expect eof
"
  expect -c "
spawn ssh-copy-id 192.168.100.10
expect \"password: \"
send \"${ControllerPasswd}\r\"
expect eof
"
  expect -c "
spawn ssh-copy-id 192.168.100.20
expect \"password: \"
send \"${ComputePasswd}\r\"
expect eof
"
}

## 配置iaas-xiandian软件包
function IaaSConfig() {
  yum install -y iaas-xiandian
  sed -i "3c HOST_IP=192.168.100.10" ${XiandianConf}
  sed -i "6c HOST_PASS=000000" ${XiandianConf}
  sed -i "9c HOST_NAME=controller" ${XiandianConf}
  sed -i "12c HOST_IP_NODE=192.168.100.20" ${XiandianConf}
  sed -i "15c HOST_PASS_NODE=000000" ${XiandianConf}
  sed -i "18c HOST_NAME_NODE=compute" ${XiandianConf}
  sed -i "22c network_segment_IP=192.168.100.0/24" ${XiandianConf}
  sed -i "26c RABBIT_USER=openstack" ${XiandianConf}
  sed -i "29c RABBIT_PASS=000000" ${XiandianConf}
  sed -i "33c DB_PASS=000000" ${XiandianConf}
  sed -i "37c DOMAIN_NAME=demo" ${XiandianConf}
  sed -i "38c ADMIN_PASS=000000" ${XiandianConf}
  sed -i "39c DEMO_PASS=000000" ${XiandianConf}
  sed -i "42c KEYSTONE_DBPASS=000000" ${XiandianConf}
  sed -i "46c GLANCE_DBPASS=000000" ${XiandianConf}
  sed -i "49c GLANCE_PASS=000000" ${XiandianConf}
  sed -i "53c NOVA_DBPASS=000000" ${XiandianConf}
  sed -i "56c NOVA_PASS=000000" ${XiandianConf}
  sed -i "60c NEUTRON_DBPASS=000000" ${XiandianConf}
  sed -i "63c NEUTRON_PASS=000000" ${XiandianConf}
  sed -i "66c METADATA_SECRET=000000" ${XiandianConf}
  sed -i "69c INTERFACE_IP=192.168.100.10" ${XiandianConf}
  sed -i "72c INTERFACE_NAME=ens33" ${XiandianConf}
  sed -i "75c Physical_NAME=provider" ${XiandianConf}
  sed -i "78c minvlan=101" ${XiandianConf}
  sed -i "81c maxvlan=200" ${XiandianConf}
  sed -i "85c CINDER_DBPASS=000000" ${XiandianConf}
  sed -i "88c CINDER_PASS=000000" ${XiandianConf}
  sed -i "91c BLOCK_DISK=sdb1" ${XiandianConf}
  sed -i "95c SWIFT_PASS=000000" ${XiandianConf}
  sed -i "98c OBJECT_DISK=sdb2" ${XiandianConf}
  sed -i "101c STORAGE_LOCAL_NET_IP=192.168.100.20" ${XiandianConf}
  sed -i "105c HEAT_DBPASS=000000" ${XiandianConf}
  sed -i "108c HEAT_PASS=000000" ${XiandianConf}
  sed -i "112c ZUN_DBPASS=000000" ${XiandianConf}
  sed -i "115c ZUN_PASS=000000" ${XiandianConf}
  sed -i "118c KURYR_DBPASS=000000" ${XiandianConf}
  sed -i "121c KURYR_PASS=000000" ${XiandianConf}
  sed -i "125c CEILOMETER_DBPASS=000000" ${XiandianConf}
  sed -i "128c CEILOMETER_PASS=000000" ${XiandianConf}
  sed -i "132c AODH_DBPASS=000000" ${XiandianConf}
  sed -i "135c AODH_PASS=000000" ${XiandianConf}
  sed -i "139c BARBICAN_DBPASS=000000" ${XiandianConf}
  sed -i "142c BARBICAN_PASS=000000" ${XiandianConf}
  . ${XiandianConf}
}

## 执行iaas-xiandian安装脚本
function IaaSInstallation() {
  iaas-pre-host.sh
  iaas-install-mysql.sh
  iaas-install-keystone.sh
  iaas-install-glance.sh
  iaas-install-nova-controller.sh
  iaas-install-neutron-controller.sh
  iaas-install-dashboard.sh
}

## 验证最小化部署结果
function ResultJudgment() {
  source /etc/keystone/admin-openrc.sh
  TEST=$(openstack service list | egrep 'placement|keystone|glance|nova|neutron' -wc)
  if [ $TEST -eq "5" ]; then
    echo -e "\033[32m -------------- controller 控制节点部署完成,服务启动正常 -------------- \033[0m"
  else
    echo -e '\033[31m ------------ 最小化部署失败 --------------- \033[0m'
  fi
}

CombinationFunction

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
Compute 计算节点
#!/bin/bash
## Author:孤_存

ControllerPasswd=000000
ComputePasswd=000000
InstallDir=/opt
CentOSDir=${InstallDir}/centos
IaaSDir=${InstallDir}/iaas
RedHatReposDir=/etc/yum.repos.d
FtpRepo=${RedHatReposDir}/ftp.repo
XiandianConf=/etc/xiandian/openrc.sh
SSHConf=/etc/ssh/ssh_config

## 组合函数
function CombinationFunction() {
  UserJudgment
  BasicConfig
  YUMConfig
  SSHConfig
  IaaSConfig
  IaaSInstallation
  FixError          ## 解决虚拟机环境下QEMU模拟器无法正常使用,服务器请注释
  ResultJudgment
}

## 当前用户名判定:
function UserJudgment() {
  if [ $(hostname) != "compute" ]; then
    echo -e "\033[31m ------------ 请更改主机名为 compute 并重启! --------------- \033[0m"
    return
  fi
}

## 基础配置:
function BasicConfig() {
  systemctl disable --now firewalld && setenforce 0
  echo "192.168.100.10 controller" >>/etc/hosts
  echo "192.168.100.20 compute" >>/etc/hosts
}

## 配置YUM源:
function YUMConfig() {
  mkdir -p ${RedHatReposDir}.bak
  mv -f ${RedHatReposDir}/* ${RedHatReposDir}.bak
  echo -e "[centos]\nname=centos\nbaseurl=ftp://controller/centos\nenabled=1\ngpgcheck=0" >>${FtpRepo}
  echo -e "[iaas]\nname=iaas\nbaseurl=ftp://controller/iaas/iaas-repo\nenabled=1\ngpgcheck=0" >>${FtpRepo}
  yum makecache
}

## 配置ssh免密登录
function SSHConfig() {
  yum install -y expect
  systemctl daemon-reload
  echo "StrictHostKeyChecking no" >>${SSHConf}
  expect -c "
spawn ssh-keygen
expect \"(/root/.ssh/id_rsa):\"
send \"\r\"
expect \"(empty for no passphrase):\"
send \"\r\"
expect \"passphrase again\"
send \"\r\"
expect eof
"
  expect -c "
spawn ssh-copy-id 192.168.100.10
expect \"password: \"
send \"${ControllerPasswd}\r\"
expect eof
"
  expect -c "
spawn ssh-copy-id 192.168.100.20
expect \"password: \"
send \"${ComputePasswd}\r\"
expect eof
"
}

## 配置iaas-xiandian软件包
function IaaSConfig() {
  yum install -y iaas-xiandian
  scp root@controller:${XiandianConf} /etc/xiandian
  sed -i "69c INTERFACE_IP=192.168.100.20" ${XiandianConf}
  . ${XiandianConf}
}

## 执行iaas-xiandian安装脚本
function IaaSInstallation() {
  iaas-pre-host.sh
  iaas-install-nova-compute.sh
  iaas-install-neutron-compute.sh
}

## 解决虚拟机环境下QEMU模拟器无法正常使用,服务器请忽略
function FixError() {
  crudini --set /etc/nova/nova.conf libvirt virt_type qemu
  systemctl restart libvirtd.service openstack-nova-compute.service
}

## 验证最小化部署结果
function ResultJudgment() {
  scp root@controller:/etc/keystone/admin-openrc.sh /root/
  source /root/admin-openrc.sh
  TEST=$(openstack compute service list | egrep 'nova-consoleauth|nova-conductor|nova-scheduler|nova-compute' -wc)
  if [ $TEST -eq "4" ]; then
    echo -e "\033[32m -------------- openstack 最小化部署成功 -------------- \033[0m"
  else
    echo -e '\033[31m ------------ 最小化部署失败 --------------- \033[0m'
  fi
  rm -rf /root/admin-openrc.sh
}

CombinationFunction

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
创建云主机环境
#!/bin/bash
## Author:孤_存
## 请在控制节点执行此脚本
## 网卡1 192.168.100.0/24   网卡2 192.168.200.0/24

## 使环境变量生效
source /etc/keystone/admin-openrc.sh
## 创建镜像
glance image-create --name CentOS7.5 --disk-format qcow2 --container-format bare --progress < /opt/iaas/images/CentOS_7.5_x86_64_XD.qcow2

# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 二选一 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
## 创建外部网络(虚拟机)
openstack network create ext-net --provider-physical-network provider --provider-network-type flat --external
## 创建外部网络(服务器)
openstack network create ext-net --provider-network-type vlan --provider-physical-network provider --provider-segment 1 --external

## 创建内部网络
openstack network create int-net1 --provider-network-type vxlan --provider-segment 1
openstack network create int-net2 --provider-network-type vxlan --provider-segment 2
## 创建子网
openstack subnet create ext-subnet --network ext-net --gateway 192.168.200.1 --subnet-range 192.168.200.0/24 --allocation-pool start=192.168.200.100,end=192.168.200.200 --dhcp
openstack subnet create int-subnet1 --network int-net1 --gateway 10.0.0.1 --subnet-range 10.0.0.0/24 --dhcp
openstack subnet create int-subnet2 --network int-net2 --gateway 10.0.1.1 --subnet-range 10.0.1.0/24 --dhcp
## 创建路由
openstack router create ext-router
openstack router set ext-router --external-gateway ext-net
openstack router add subnet ext-router int-subnet1
## 创建安全组和规则
openstack security group create all
openstack security group rule list all | grep None >> rules.txt
sed -i "s/None//g" rules.txt
sed -i "s/|//g" rules.txt
sed -i s/[[:space:]]//g rules.txt
SECURITY_RULE1=$(sed -n 1p rules.txt)
SECURITY_RULE2=$(sed -n 2p rules.txt)
openstack security group rule delete $SECURITY_RULE1
openstack security group rule delete $SECURITY_RULE2
rm -rf rules.txt
openstack security group rule create --ingress --protocol tcp all
openstack security group rule create --ingress --protocol udp all
openstack security group rule create --ingress --protocol icmp all
openstack security group rule create --egress --protocol tcp all
openstack security group rule create --egress --protocol udp all
openstack security group rule create --egress --protocol icmp all
## 创建实例类型
nova flavor-create master 1 12288 100 8
nova flavor-create node 2 8192 100 4
## 创建云主机
nova boot --image CentOS7.5 --flavor 1 --nic net-name=int-net1,v4-fixed-ip=10.0.0.3 --security-groups all --poll master
nova boot --image CentOS7.5 --flavor 2 --nic net-name=int-net1,v4-fixed-ip=10.0.0.4 --security-groups all --poll node
## 创建浮动IP并绑定至云主机
openstack floating ip create ext-net --floating-ip-address 192.168.200.104
openstack floating ip create ext-net --floating-ip-address 192.168.200.105
openstack server add floating ip master 192.168.200.104
openstack server add floating ip node 192.168.200.105
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
注释:

第 12~15 行创建外部网络命令重复,根据物理环境执行对应的命令
第 21~29 行内容含义为删除创建安全组后自带的两条默认规则
自行更改 IP地址 等参数,还有下面创建云主机和浮动IP都固定了IP地址
创建云主机环境脚本的内容与上面提到的 手动官方脚本搭建 教程博客完全对应。
————————————————
版权声明:本文为CSDN博主「孤_存」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013246692/article/details/112494168

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值