一、准备工作
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
7.查看web界面
8.安装openstack命令客户端
pip install python-openstackclient python-glanceclient python-neutronclient --ignore-installed
9.openstack命令测试
# 虚拟化类型列表
openstack hypervisor list
# 镜像列表
openstack image list
# nova服务列表
nova service-list