一、准备工作
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.查看部署后的一些配置信息
. /etc/kolla/admin-openrc.sh
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