一、准备工作

1.准备6台机器(主要是服务分开部署,也可以少于6台,建议至少6台)

主机名

节点名称

网络

磁盘

contorl

控制节点


网卡1:

  网卡名称:ens33

  模式:nat模式

  ip:192.168.185.23

  作用:和外网通信

网卡2:

  网卡名称:ens34

  模式:仅主机模式

  ip:10.66.66.23

  作用:用作API网络、VM网络(tenant 网络)

网卡3:

  网卡名称:ens35

  模式:nat模式

  ip:无需ip

  作用:用作External 网络,用于虚拟机连接外部网络


一块磁盘

network

网络节点


网卡1:

  网卡名称:ens33

  模式:nat模式

  ip:192.168.185.24

  作用:和外网通信

网卡2:

  网卡名称:ens34

  模式:仅主机模式

  ip:10.66.66.24

  作用:用作API网络、VM网络(tenant 网络)

网卡3:

  网卡名称:ens35

  模式:nat模式

  ip:无需ip

  作用:用作External 网络,用于虚拟机连接外部网络


一块磁盘

compute

计算节点


网卡1:

  网卡名称:ens33

  模式:nat模式

  ip:192.168.185.25

  作用:和外网通信

网卡2:

  网卡名称:ens34

  模式:仅主机模式

  ip:10.66.66.25

  作用:用作API网络、VM网络(tenant 网络)

网卡3:

  网卡名称:ens35

  模式:nat模式

  ip:无需ip

  作用:用作External 网络,用于虚拟机连接外部网络


一块磁盘

storage

存储节点


网卡1:

  网卡名称:ens33

  模式:nat模式

  ip:192.168.185.26

  作用:和外网通信

网卡2:

  网卡名称:ens34

  模式:仅主机模式

  ip:10.66.66.26

  作用:用作API网络、VM网络(tenant 网络)

网卡3:

  网卡名称:ens35

  模式:nat模式

  ip:无需ip

  作用:用作External 网络,用于虚拟机连接外部网络


两块磁盘

monitor

监控节点


网卡1:

  网卡名称:ens33

  模式:nat模式

  ip:192.168.185.27

  作用:和外网通信

网卡2:

  网卡名称:ens34

  模式:仅主机模式

  ip:10.66.66.27

  作用:用作API网络、VM网络(tenant 网络)

网卡3:

  网卡名称:ens35

  模式:nat模式

  ip:无需ip

  作用:用作External 网络,用于虚拟机连接外部网络


一块磁盘

deploy

部署节点


网卡1:

  网卡名称:ens33

  模式:nat模式

  ip:192.168.185.28

  作用:和外网通信

网卡2:

  网卡名称:ens34

  模式:仅主机模式

  ip:10.66.66.28

  作用:用作API网络、VM网络(tenant 网络)

网卡3:

  网卡名称:ens35

  模式:nat模式

  ip:无需ip

  作用:用作External 网络,用于虚拟机连接外部网络


 一块磁盘


2.存储节点

要启动cinder存储服务,需对第二个磁盘做如下处理


pvcreate /dev/sdb
vgcreate cinder-volumes /dev/sdb     #vg名取名为 cinder-volumes,这里主要跟 kolla配置文件里vg名一致


3.所有节点关闭selnux


# 临时关闭,不需要重启,但是重启失效
setenforce 0
# 永久关闭需要重启才能生效
sed -i 's/SELINUX=.*/SELINUX=Disabled/g' /etc/selinux/config
# 重启
reboot
# 查看selnux状态
getenforce


4.所有节点关闭防火墙


systemctl stop firewalld
systemctl disable firewalld


5.所有节点设置主机名,按照上面表格里的命名,也可以是其他名称,建议这样命名,方便区分


hostnamectl set-hostname  主机名称


6.所有节点配置/etc/hosts


cat >> /etc/hosts << EOF
192.168.185.23 control
192.168.185.24 network
192.168.185.25 compute
192.168.185.26 storage
192.168.185.27 monitor
192.168.185.28 deploy
EOF


7.部署节点做到其他节点的免密


# 生成公有密钥和私有密码,一直默认即可
ssh-keygen -t rsa
# 分发共有密钥到其他节点
ssh-copy-id -i ~/.ssh/id_rsa.pub 节点名称 # 没有上一步的映射,这里写ip即可,建议配置上面的映射方便一些


8.所有节点安装docker


yum update -y && yum upgrade -y
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io -y
# 配置国内源
mkdir -p /etc/docker
cat >> /etc/docker/daemon.json << EOF
{
"registry-mirrors" : [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://cr.console.aliyun.com/"
]
}
EOF
systemctl restart docker


9.所有节点设置数据包转发


echo " net.ipv4.ip_forward = 1 ">> /etc/sysctl.conf&&sysctl -p


10.所有节点安装并升级pip


# 方式1:
yum install -y epel-release
# python2
yum install -y python-pip
pip install -U pip
# python3
yum install -y python3-pip
pip3 install -U pip
# 方式2:
# python2
curl -o get-pip.py https://bootstrap.pypa.io/pip/2.7/get-pip.py
python2 get-pip.py
# python3
curl -o get-pip.py https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py


11.部署节点安装ansible和kolla-ansible


yum install -y python-devel libffi-devel gcc openssl-devel libselinux-python
pip install -U ansible -i http://mirrors.aliyun.com/pypi/simple/
pip install kolla-ansible==9.1.0 --ignore-installed PyYAML -i http://mirrors.aliyun.com/pypi/simple/


12.部署节点优化ansible配置(可以不做)


vim /etc/ansible/ansible.cfg
forks = 10  # 第19行,设置并行进程数。如果要管理的主机很多,可以优先尝试增加该值
host_key_checking = False  /# 第67行,跳过ssh首次连接提示验证部分
pipelining = True  # 第403行,开启管道输送。ansible在执行一个模块需要ssh到目的主机多次,开启该模式减少ssh连接次数,缩短ansible执行时间。
# 在部署大规模服务器或引用模块非常多时,开启pipelining会给ansible带来显著的性能提升


13. 部署节点复制kolla-ansible的一些配置


cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/
cp /usr/share/kolla-ansible/ansible/inventory/* .


14.部署节点自动生成OpenStack各服务的密码文件


kolla-genpwd
# 修改网页登录密码
vim /etc/kolla/passwords.yml
keystone_admin_password: admin # 第165行


15. 部署节点修改kolla-ansible的全局配置(/etc/kolla/global.yml),以下是我的示例,大家根据自己的情况改


# 选择下载的基础镜像
kolla_base_distro: "centos"
# 选择的安装方法:binary二进制安装,source源码安装
kolla_install_type: "source"
# 选择OpenStack的版本标签,详细请看:https://releases.openstack.org/
openstack_release: "train"
# OpenStack内部管理网络地址,通过该IP访问OpenStack Web页面进行管理。如果启用了高可用,需要设置为VIP(漂移IP)
kolla_internal_vip_address: "192.168.185.20"
# OpenStack外部管理网络地址
kolla_external_vip_address: "10.66.66.20"
# docker 命名空间
docker_namespace: "kolla"
# OpenStack内部管理网络地址的网卡接口
network_interface: "ens33"
# OpenStack外部(或公共)网络的网卡接口,可以是vlan模式或flat模式,此网卡应该在没有IP地址的情况下处于活动,如果不是,那么OpenStack云平台中的云主机实例将无法访问外部网络。(存在IP时br-ex桥接就不成功)
neutron_external_interface: "ens34"
# neutron网络服务插件
neutron_plugin_agent: "openvswitch"
# 启用cinder(块存储)
enable_cinder: "yes"
# cinder(块存储)后端启用lvm
enable_cinder_backend_lvm: "yes"
# 开启web界面
enable_horizon: "yes"
# 开启neutron网络服务
enable_neutron_provider_networks: "yes"


16. 部署节点配置multinode多节点主机清单文件


[control]
control


[network]
network

[compute]
compute

[monitoring]
monitor


[storage]
storage

[deployment]
localhost ansible_connection=local


17.部署节点检测所有主机是否正常通信


ansible -i ~/multinode all -m ping


二、开始部署openstack9(只在部署节点执行)

1. 通过kolla-ansible安装OpenStack所需依赖包


kolla-ansible -i ~/multinode bootstrap-servers


2.对主机进行预部署检查


kolla-ansible -i ~/multinode prechecks


3.拉取OpenStack的镜像


kolla-ansible -i ~/multinode pull


4.部署OpenStack


kolla-ansible -i ~/multinode deploy


5.验证部署


kolla-ansible -i ~/multinode post-deploy


6.查看部署后的一些配置信息


cat /etc/kolla/admin-openrc.sh  


kolla多节点部署openstack_docker

 7.查看web界面

kolla多节点部署openstack_python_02

 8.安装openstack命令客户端


pip install python-openstackclient python-glanceclient python-neutronclient --ignore-installed


9.openstack命令测试


# 虚拟化类型列表
openstack hypervisor list
# 镜像列表
openstack image list
# nova服务列表
nova service-list


kolla多节点部署openstack_python_03