kolla-ansible虚拟机单节点部署OpenStack

wuchangjian2021-11-04 17:27:08编程学习

kolla-ansible虚拟机单节点部署OpenStack

VMware虚拟机配置如下

在这里插入图片描述

网卡配置信息

IP地址网络类型网卡作用
10.0.0.10NAT模式ens32内部管理网络
无需配置IP桥接模式ens34外部网络,虚拟机通过这块网卡访问外网
ens34网卡配置信息
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens34 
NAME=ens34
DEVICE=ens34
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none

准备工作

# 修改主机名
[root@all-in-one ~]# hostnamectl set-hostname all-in-one

# 配置hosts
[root@all-in-one ~]# echo "10.0.0.10 all-in-one" >> /etc/hosts

# 关闭selinux和防火墙
[root@all-in-one ~]# setenforce 0
[root@all-in-one ~]# systemctl stop firewalld && systemctl disable firewalld

# SSH免密验证
[root@all-in-one ~]# ssh-keygen 
[root@all-in-one ~]# ssh-copy-id root@all-in-one

# 更改yum源
[root@all-on-one ~]# sed -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' -i.bak /etc/yum.repos.d/CentOS-Base.repo


# 配置docker源
[root@all-in-one ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
[root@all-in-one ~]# sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

# 安装epel源
[root@all-in-one ~]# yum makecache
[root@all-in-one ~]# yum install -y epel-release

# 安装python-pip
[root@all-in-one ~]# yum install python-pip -y 
[root@all-in-one ~]# pip install --upgrade "pip < 21.0" 
[root@all-in-one ~]# pip install pbr 

安装kolla-ansible

kolla版本与openstack版本对应关系https://releases.openstack.org/teams/kolla.html

# 安装依赖包
[root@all-in-one ~]# yum install python2-devel libffi-devel openssl-devel libselinux-python -y 
[root@all-in-one ~]# yum remove docker docker-common docker-selinux docker-engine -y
[root@all-in-one ~]# yum install yum-utils device-mapper-persistent-data lvm2  -y

# 安装ansible
[root@all-in-one ~]# yum install -y ansible

# 配置ansbile.cfg文件
[root@all-in-one ~]# sed -i 's/#host_key_checking = False/host_key_checking = True/g' /etc/ansible/ansible.cfg
[root@all-in-one ~]# sed -i 's/#pipelining = False/pipelining = True/g' /etc/ansible/ansible.cfg
[root@all-in-one ~]# sed -i 's/#forks          = 5/forks          = 100/g' /etc/ansible/ansible.cfg

# 安装kolla-ansbile
[root@all-in-one ~]# pip install kolla-ansible==9.3.1 --ignore-installed PyYAML
# 因为yum安装ansible会与kolla中的YAML包冲突,所以这里忽略已安装的PyYAML

# 安装docker-ce
[root@all-in-one ~]# yum install docker-ce -y

# 复制kolla-ansible配置文件到当前环境
[root@all-in-one ~]# mkdir -p /etc/kolla
[root@all-in-one ~]# chown $USER:$USER /etc/kolla
[root@all-in-one ~]# cp -r /usr/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
[root@all-in-one ~]# cp /usr/share/kolla-ansible/ansible/inventory/* .

# 配置docke镜像加速
[root@all-in-one ~]# mkdir /etc/docker/
[root@all-in-one ~]# cat >> /etc/docker/daemon.json << EOF
> {
> "registry-mirrors": [
> "https://registry.docker-cn.com",
> "http://hub-mirror.c.163.com",
> "https://docker.mirrors.ustc.edu.cn"
> ]
> }
> EOF
[root@all-in-one ~]# systemctl daemon-reload && systemctl enable docker && systemctl restart docker&& systemctl status docker 

默认有all-in-one和multinode两个inevntory文件,这里使用all-in-one

[root@all-in-one ~]# vim all-in-one 
[control]
all-in-one
[network]
all-in-one

[compute]
all-in-one

[storage]
all-in-one

[monitoring]
all-in-one

[deployment]
all-in-one
....

# 检查配置是否正确
[root@all-in-one ~]# ansible -i all-in-one all -m ping

在这里插入图片描述

# 配置globals.yml文件
# 该文件用来控制安装哪些组件,以及如何配置组件
[root@all-in-one ~]# vim /etc/kolla/globals.yml 
kolla_base_distro: "centos" 基于什么版本的基础镜像
kolla_install_type: "source" 安装方式 binary二进制安装 source源码安装
openstack_release: "train" openstack版本
kolla_internal_vip_address: "10.0.0.11" OpenStack内部管理网络地址,通过该IP访问OpenStack Web页面进行管理。如果启用了高可用,需要设置为VIP(漂移IP)
docker_namespace: "kolla" kolla镜像仓库所在的命名空间,dockerhub官网默认是kolla
network_interface: "ens32" OpenStack内部管理网络地址的网卡接口
neutron_external_interface: "ens34" 外部网络的网卡
neutron_plugin_agent: "openvswitch"  默认启用openvswitch
enable_neutron_provider_networks: "yes" 启用外部网络
nova_compute_virt_type: "qemu" 虚拟机环境 选用qemu类型


# 生成随机密码
[root@all-in-one ~]# kolla-genpwd 

# 修改web登录密码为123456
[root@all-in-one ~]# sed -i 's/^keystone_admin_password.*/keystone_admin_password: 123456/' /etc/kolla/passwords.yml

# 设置nova配置文件
[root@all-in-one ~]# mkdir /etc/kolla/config
[root@all-in-one ~]# 
[root@all-in-one ~]# mkdir /etc/kolla/config/nova
[root@all-in-one ~]# cat >> /etc/kolla/config/nova/nova-compute.conf << EOF
> [libvirt]
> virt_type = qemu
> cpu_mode = none
> EOF

开始安装

#预配置,安装docker、docker sdk、关闭防火墙、配置时间同步等
[root@all-in-one ~]# kolla-ansible -i ./all-in-one bootstrap-servers
#部署前环境检查
[root@all-in-one ~]# kolla-ansible -i ./all-in-one prechecks
#执行实际部署,拉取镜像,运行对应组件容器
[root@all-in-one ~]# kolla-ansible -i ./all-in-one deploy
#生成openrc文件
[root@all-in-one ~]# kolla-ansible post-deploy

#拷贝openrc文件
[root@all-in-one ~]# cp /etc/kolla/admin-openrc.sh  ./
[root@all-in-one ~]# chmod +x admin-openrc.sh 
[root@all-in-one ~]# source admin-openrc.sh

# 安装openstack包
[root@all-in-one ~]# cd /etc/yum.repos.d/
[root@all-in-one yum.repos.d]# yum install centos-release-openstack-train  -y
[root@all-in-one yum.repos.d]# yum makecache fast 
[root@all-in-one yum.repos.d]# yum install python-openstackclient -y
[root@all-in-one yum.repos.d]# cd

以上部署没有报错中断说明部署成功,所有OpenStack组件以容器方式运行

查看镜像数量 是否和容器数量一致
[root@all-in-one ~]# docker images |wc -l
30
[root@all-in-one ~]# docker ps -a | wc -l
30
# 编辑初始化脚本
[root@all-in-one ~]# vim /usr/share/kolla-ansible/init-runonce
EXT_NET_CIDR=${EXT_NET_CIDR:-'192.168.137.0/24'} 外部网络,这里是桥接模式直接桥接到了电脑的无线网卡,所以这里是无线网卡的网段
EXT_NET_RANGE=${EXT_NET_RANGE:-'start=192.168.137.100,end=192.168.137.200'}  网络地址池
EXT_NET_GATEWAY=${EXT_NET_GATEWAY:-'192.168.137.1'} 网关与无线网卡网关一致

# 执行脚本
[root@all-in-one ~]# sh /usr/share/kolla-ansible/init-runonce
# 出现下面 代表成功

在这里插入图片描述

访问web界面

http://10.0.0.10/auth/login/

在这里插入图片描述

创建一个实例 测试一下是否能ping通网络

在这里插入图片描述
可以ping通外网,而且内网之间也是互通的
在这里插入图片描述

卸载openstack环境

kolla-ansible destroy -i /root/all-in-one --include-images --yes-i-really-really-mean-it

# 重启
reboot

# 参考文章
https://www.cnblogs.com/yyx66/p/14685792.html

相关文章

第 14 章 继承:究竟是好是坏

[...] 我们需要一个更好的关于继承的理论(现在仍然如此)...

SpringBoot refresh() 方法解析

一、prepareRefresh()         进行刷新前配置 二、Confi...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。