vieyahn2017 / iBlog

44 stars 0 forks source link

6.25 Openstack之使用ansible安装部署试验 #170

Closed vieyahn2017 closed 4 years ago

vieyahn2017 commented 6 years ago

openstack 之 使用ansible安装部署试验

https://blog.51cto.com/yuweibing/1897117

vieyahn2017 commented 4 years ago

openstack 之 使用ansible安装部署试验

前期一直使用Mirantis公司的fuel工具进行安装部署openstack,但是在实际使用当中,发现fuel对于定制化的需求还是做得不够好,如果中间部署出错,你找不出原因,同时如果资源紧张,需要同时在一个物理节点上同时部署多个组件,fuel的支持不是很好。我在试验环境下测试了controller和cinder复用一台物理主机,controller与ironic复用,都失败了,而且鉴于查找解决办法,还需要深入了解fuel本身的结构,因此后面发现只有简单环境下使用fuel是顺利的,稍微灵活一点的部署,fuel就不合适了。另外,我猜想这也有可能是Mirantis公司的策略,如果fuel在很多场景下都可以正常使用的话,那别人也不会购买他们的服务了(仅仅是个人猜测)。另外提一句,目前为止,我测试fuel,成功的有3节点的,即1个controller,1个compute,1个cinder;5个节点的:3个controller的ha,1个compute,1个cinder。

实验过程参考了openstack官网的OpenStack-Ansible Deployment Guide ,网址是:

http://docs.openstack.org/project-deploy-guide/openstack-ansible/newton/

过程总结一下:

  1. 首先建一个虚拟机安装ubuntu16.04版本的操作系统(基础版,,账号ywb密码ywb123),配置了4个网卡,其中一块网卡是桥接到物理网卡,并且能够上网,运行apt-get update 和 apt-get dist-upgrade 更新安装源,以及执行apt-get install aptitude build-essential git ntp ntpdate openssh-server python-dev sudo 安装必要的软件包;完成后将这个虚拟机作为模板。

  2. 复制上面建好的虚拟机模板,分别建ansible主机,controller主机,compute主机,cinder主机;

  3. 根据官网的操作手册进行后面的安装配置。

第一阶段实验规划:

1个ansible部署节点,1个控制节点/1个计算节点/1个cinder存储节点,共4个节点,每个虚拟机3块网卡,第一块用于管理,第二块用于ansible部署以及内部的存储/管理/私有网络,第三块直接桥接到外部网络;

相关的网络平面规划如下:

host-only, enp0s3:部署平面: 10.20.0.0/24

bridge, enp0s8: 管理平面: 172.29.236.0/22 整个网段 vlan tag: 10

存储平面: 172.29.244.0/22 整个网段 vlan tag: 30

私有网络平面:172.29.240.0/22 整个网段 网关:172.29.240.1 vlan tag: 20

bridge,enp0s9: 连到外网 192.168.170.0/24

4台虚拟机的主机名和ip地址规划如下:

主机名:ansible        部署平面: 10.20.0.201

                       公共平面:  192.168.170.201

主机名:controller1    部署平面: 10.20.0.211

                       公共平面:  192.168.170.211

                       管理平面:  172.29.236.211

                       存储平面:  172.29.244.211

                       私有网络平面:  172.29.240.211

主机名:compute1    部署平面: 10.20.0.212

                       公共平面:  192.168.170.212

                       管理平面:  172.29.236.212

                       存储平面:  172.29.244.212

                       私有网络平面:  172.29.240.212

主机名:cinder     部署平面: 10.20.0.213

                       公共平面:  192.168.170.213

                       管理平面:  172.29.236.213

                       存储平面:  172.29.244.213

                       私有网络平面:  172.29.240.213

部署过程除了按照官网的进行配置之外,还需要做下面步骤:

1.由于需要bridge支持,因此需要安装bridge-utils 包,否则br-mgmt网卡起不来,运行下面的命令:

sudo apt-get install bridge-utils

echo '8021q' >> /etc/modules

2.git clone -b TAG https://git.openstack.org/openstack/openstack-ansible /opt/openstack-ansible 改为:

git clone -b stable/newton https://github.com/openstack/openstack-ansible /opt/openstack-ansible

即选择newton版本的安装

git clone -b stable/mitaka https://github.com/openstack/openstack-ansible /opt/openstack-ansible

即选择mitaka版本的安装

3.配置ssh信任关系:

在ansible上执行ssh-keygen ,在目录 ~/.ssh/生成id_rsa.pub ,将这个文件里面密钥拷贝到所有target服务器中的 authorized_keys文件中

然后测试:

ssh 172.29.236.11

ssh 172.29.236.12

ssh 172.29.236.13

4.到/etc/openstack_deploy 目录,拷贝openstack_user_config.yml.test.example文件到/etc/openstack_deploy/openstack_user_config.yml

安装目标服务器target host,按照官网的进行配置,其中配置cinder的cider_volume,磁盘类型选择为8e,Linux LVM 类型

修改/etc/openstack_deploy/openstack_user_config.yml 配置文件中参数external_lb_vip_address: openstack.example.com ,实际安装过程中需要改为实际controller外网地址网卡地址

external_lb_vip_address: 10.20.0.211

5.配置代理,配置/etc/openstack_deploy/user_variables.yml 文件中的下面几个参数,其中 proxy_env_url: http://192.168.170.249:8118/ 是使用192.168.170.249上的8118口,请参考《shadowsocks和redsocks消息转发设置.txt》:

proxy_env_url: http://192.168.170.249:8118/

no_proxy_env: "localhost,127.0.0.1,internal_lb_vip_address,external_lb_vip_address,{% for host in groups['all_containers'] %}{{ hostvars[host]['container_address'] }}{% if not loop.last %},{% endif %}{% endfor %}"

global_environment_variables:

HTTP_PROXY: "proxy_env_url"

HTTPS_PROXY: "proxy_env_url"

NO_PROXY: "no_proxy_env"

http_proxy: "proxy_env_url"

https_proxy: "proxy_env_url"

no_proxy: "no_proxy_env"

配置代理服务器:

export http_proxy="http://192.168.170.249:8118/"

export https_proxy="http://192.168.170.249:8118/"

如果安装还未完成,服务器中途重启,重启后需要重新检查网络是否正常,是否可以访问外网;

修改 /etc/ansible/roles/haproxy_server/tasks/haproxy_install_hatop.yml ,增加validate_certs : 0

安装galera组件的时候,连接haproxy提供的repo对外端口8181,发现haproxy没有正常启动,增加系统核心参数:

vi /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind=1

并生效: sysctl -p

并手动增加VIP地址:

ip a add 172.29.236.10 dev br-mgmt

ip a add 10.20.0.210 dev enp0s3

  1. 安装完openstack组件之后,检查组件运行情况,发现有几个问题:

1)使用命令 openstack user list ,提示错误,通过pip重新安装openstackclient后正常:

pip install python-openstackclient

2)登陆网页10.20.0.211检查horizon,首页出不来,检查是haproxy服务启动失败

3)修改 /etc/apache2/ports.conf

Listen 80

Listen 443

Listen 8888

Listen 35357

Listen 5000

然后重启apache2: systemctl restart apache2

7.修改默认路由:

route del default gw 172.29.236.1

route add default gw 192.168.170.254

vieyahn2017 commented 4 years ago

kolla-ansible部署OpenStack多节点

https://www.jianshu.com/p/6b7ebcb82196

1、准备环境: 物理机或者虚拟机三台(本文使用CentOS7系统,虚拟机环境) 一台deploy,两块网卡(ens192、ens224) 一台control+network,两块网卡(ens192、ens224) 一台compute+storage,三块网卡(ens192、ens224、ens256) compute计算节点加一块硬盘

1.1 网络配置 deploy:

vim /etc/sysconfig/network-scripts/ifcfg-ens192
BOOTPROTO=static
DEVICE=ens192
ONBOOT=yes
IPADDR=10.24.3.10
NETMASK=255.255.255.0
GATEWAY=10.24.3.254

control: ens-192配置ip:

vim /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=Ethernet
BOOTPROTO=static
DEVICE=ens192
ONBOOT=yes
IPADDR=10.24.3.12
NETMASK=255.255.255.0
GATEWAY=10.24.3.254

ens-224网卡配置三个子接口(xvlan),分别为:

ens-224.10

vim /etc/sysconfig/network-scripts/ifcfg-ens224.10
VLAN=yes
DEVICE=ens224.10
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.10.20
NETMASK=255.255.255.0

vim /etc/sysconfig/network-scripts/ifcfg-vlan10
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan10
PHYSDEV=ens224
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.10.20
NETMASK=255.255.255.0

ens-224.20
vim /etc/sysconfig/network-scripts/ifcfg-ens224.20
VLAN=yes
DEVICE=ens224.20
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.20.20
NETMASK=255.255.255.0

vim /etc/sysconfig/network-scripts/ifcfg-vlan20
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan20
PHYSDEV=ens224
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.20.20
NETMASK=255.255.255.0

3ns-224.30
vim /etc/sysconfig/network-scripts/ifcfg-ens224.30
VLAN=yes
DEVICE=ens224.30
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.30.20
NETMASK=255.255.255.0

vim /etc/sysconfig/network-scripts/ifcfg-vlan30
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan30
PHYSDEV=ens224
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.30.20
NETMASK=255.255.255.0

ens256配置ip:

$# 外网网卡配置

vim /etc/sysconfig/network-scripts/ifcfg-ens256
DEVICE=ens256
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet

compute: ens192和ens224配置和control一样,ens224配置三个子接口,子接口ip网段,VLAN不换,只更改IP:

vim /etc/sysconfig/network-scripts/ifcfg-ens192
BOOTPROTO=static
DEVICE=ens192
ONBOOT=yes
IPADDR=10.24.3.11
NETMASK=255.255.255.0
GATEWAY=10.24.3.254

vim /etc/sysconfig/network-scripts/ifcfg-ens224.10
IPADDR=192.168.10.10

vim /etc/sysconfig/network-scripts/ifcfg-ens224.20
IPADDR=192.168.20.10

vim /etc/sysconfig/network-scripts/ifcfg-ens224.30
IPADDR=192.168.30.10

1.2 重启网卡 systemctl restart network

ip a 查看网卡信息 ping命令检测,主机是否连通,例:[root@compute ~]# ping 192.168.20.10

1.3 compute新添加硬盘分区初始化 fdisk -l pvcreate /dev/sdb vgcreate cinder-volumes /dev/sdb 【deploy上操作以下内容,部署节点服务器】 2、准备部署 2.1 安装依赖关系

yum install -y epel-release yum install -y python-pip pip install -U pip

yum install python-devel libffi-devel gcc openssl-devel libselinux-python

2.2 安装部署工具【ansible、kolla-ansible】

yum install ansible pip install kolla-ansible 2.3 将globals.yml和passwords.yml复制到/etc/kolla目录

cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/kolla/ 2.4 将all-in-one和multinode库存文件复制到当前目录。

cp /usr/share/kolla-ansible/ansible/inventory/* . 3、下载kolla源码 若没有git命令,手动安装yum install -y git

3.1 获取Kolla和Kolla-Ansible存储库

git clone https://github.com/openstack/kolla git clone https://github.com/openstack/kolla-ansible 3.2 Kolla-ansible在etc/kolla中保存配置文件(globals.yml和passwords.yml)将配置文件复制到/etc/kolla目录

cp -r kolla-ansible/etc/kolla /etc/kolla/ 3.3 Kolla-ansible将库存文件(all-in-one和multinode)保存在ansible / inventory中。 现将清单文件复制到当前目录

cp kolla-ansible/ansible/inventory/* . 4、准备部署 4.1 部署中使用的密码存储在/etc/kolla/passwords.yml文件中。通过运行下面命令生成随机密码:

kolla-genpwd 初始化之后,可手动更改keystone_admin_password密码(OpenStack登录密码)

vim /etc/kolla/passwords.yml keystone_admin_password:admin 4.2 配置multinode文件

[control] 10.24.3.12 ansible_user=root ansible_password=1234 ansible_become=true

[network] 10.24.3.12 ansible_user=root ansible_password=1234 ansible_become=true

[external-compute] 10.24.3.11 ansible_user=root ansible_password=1234 ansible_become=true

[monitoring] 10.24.3.12 ansible_user=root ansible_password=1234 ansible_become=true

[storage] 10.24.3.11 ansible_user=root ansible_password=1234 ansible_become=true

[deployment] localhost ansible_connection=local

检测:确认inventory配置文件是否正确:

ansible -m ping all

结果:

[root@deploy /]# ansible -m ping all
10.24.3.11 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
10.24.3.12 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

4.3 编辑globals.yml配置文件

kolla_base_distro: "centos"
# binary使用像apt或yum这样的软件仓库,source使用原始源代码归档,git存储库或本地源代码目录
kolla_install_type: "source"  
openstack_release: "queens"  # 使用的版本

kolla_internal_vip_address: "192.168.10.120"  # 内部VIP
kolla_external_vip_address: "10.24.3.120"  # 外部VIP

network_interface: "ens224.10"
kolla_external_vip_interface: "ens192"
api_interface: "ens224.10"

storage_interface: "ens224.20"
cluster_interface: "ens224.20"
tunnel_interface: "ens224.30"

# 接口是活动的,没有IP地址。否则,实例将无法访问外部网络
neutron_external_interface: "ens256"

enable_cinder: "yes"

5、开始部署 ''' 1、带有kolla的引导服务器部署依赖关系''' kolla-ansible -i ./multinode bootstrap-servers

''' 2、对主机执行预部署检查''' kolla-ansible -i ./multinode prechecks

''' 3、执行OpenStack部署''' kolla-ansible -i ./multinode deploy 6、使用OpenStack 6.1 OpenStack需要一个openrc文件,其中设置了admin用户的凭证。 要生成这个文件运行以下命令:

kolla-ansible post-deploy . /etc/kolla/admin-openrc.sh 6.2 安装基本的OpenStack CLI客户端:

pip install python-openstackclient python-glanceclient python-neutronclient 6.3 运行脚本创建示例网络,图像等

. /usr/share/kolla-ansible/init-runonce 打开浏览器输入10.24.3.120(外部VIP),用户admin ,密码admin 可登录openstack_dashboard,如图所示:

vieyahn2017 commented 4 years ago

kolla-ansible部署OpenStack多节点

https://www.jianshu.com/p/6b7ebcb82196

1、准备环境: 物理机或者虚拟机三台(本文使用CentOS7系统,虚拟机环境) 一台deploy,两块网卡(ens192、ens224) 一台control+network,两块网卡(ens192、ens224) 一台compute+storage,三块网卡(ens192、ens224、ens256) compute计算节点加一块硬盘

1.1 网络配置 deploy:

vim /etc/sysconfig/network-scripts/ifcfg-ens192
BOOTPROTO=static
DEVICE=ens192
ONBOOT=yes
IPADDR=10.24.3.10
NETMASK=255.255.255.0
GATEWAY=10.24.3.254

control: ens-192配置ip:

vim /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=Ethernet
BOOTPROTO=static
DEVICE=ens192
ONBOOT=yes
IPADDR=10.24.3.12
NETMASK=255.255.255.0
GATEWAY=10.24.3.254

ens-224网卡配置三个子接口(xvlan),分别为:

ens-224.10

vim /etc/sysconfig/network-scripts/ifcfg-ens224.10
VLAN=yes
DEVICE=ens224.10
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.10.20
NETMASK=255.255.255.0

vim /etc/sysconfig/network-scripts/ifcfg-vlan10
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan10
PHYSDEV=ens224
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.10.20
NETMASK=255.255.255.0

ens-224.20
vim /etc/sysconfig/network-scripts/ifcfg-ens224.20
VLAN=yes
DEVICE=ens224.20
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.20.20
NETMASK=255.255.255.0

vim /etc/sysconfig/network-scripts/ifcfg-vlan20
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan20
PHYSDEV=ens224
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.20.20
NETMASK=255.255.255.0

3ns-224.30
vim /etc/sysconfig/network-scripts/ifcfg-ens224.30
VLAN=yes
DEVICE=ens224.30
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.30.20
NETMASK=255.255.255.0

vim /etc/sysconfig/network-scripts/ifcfg-vlan30
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan30
PHYSDEV=ens224
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.30.20
NETMASK=255.255.255.0

ens256配置ip:

$# 外网网卡配置

vim /etc/sysconfig/network-scripts/ifcfg-ens256
DEVICE=ens256
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet

compute:
ens192和ens224配置和control一样,ens224配置三个子接口,子接口ip网段,VLAN不换,只更改IP:

vim /etc/sysconfig/network-scripts/ifcfg-ens192 BOOTPROTO=static DEVICE=ens192 ONBOOT=yes IPADDR=10.24.3.11 NETMASK=255.255.255.0 GATEWAY=10.24.3.254

vim /etc/sysconfig/network-scripts/ifcfg-ens224.10 IPADDR=192.168.10.10

vim /etc/sysconfig/network-scripts/ifcfg-ens224.20 IPADDR=192.168.20.10

vim /etc/sysconfig/network-scripts/ifcfg-ens224.30 IPADDR=192.168.30.10


1.2 重启网卡
systemctl restart network 

ip a 查看网卡信息
ping命令检测,主机是否连通,例:[root@compute ~]# ping 192.168.20.10

1.3 compute新添加硬盘分区初始化
fdisk -l
pvcreate /dev/sdb
vgcreate cinder-volumes /dev/sdb
【deploy上操作以下内容,部署节点服务器】
2、准备部署
2.1 安装依赖关系

yum install -y epel-release
yum install -y python-pip
pip install -U pip

yum install python-devel libffi-devel gcc openssl-devel libselinux-python

2.2 安装部署工具【ansible、kolla-ansible】

yum install ansible
pip install kolla-ansible
2.3
将globals.yml和passwords.yml复制到/etc/kolla目录

cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/kolla/
2.4 将all-in-one和multinode库存文件复制到当前目录。

cp /usr/share/kolla-ansible/ansible/inventory/* .
3、下载kolla源码
若没有git命令,手动安装yum install -y git

3.1 获取Kolla和Kolla-Ansible存储库

git clone https://github.com/openstack/kolla
git clone https://github.com/openstack/kolla-ansible
3.2 Kolla-ansible在etc/kolla中保存配置文件(globals.yml和passwords.yml)将配置文件复制到/etc/kolla目录

cp -r kolla-ansible/etc/kolla /etc/kolla/
3.3 Kolla-ansible将库存文件(all-in-one和multinode)保存在ansible / inventory中。
现将清单文件复制到当前目录

cp kolla-ansible/ansible/inventory/* .
4、准备部署
4.1 部署中使用的密码存储在/etc/kolla/passwords.yml文件中。通过运行下面命令生成随机密码:

kolla-genpwd
初始化之后,可手动更改keystone_admin_password密码(OpenStack登录密码)

vim /etc/kolla/passwords.yml
keystone_admin_password:admin
4.2 配置multinode文件

[control]
10.24.3.12 ansible_user=root ansible_password=1234 ansible_become=true

[network]
10.24.3.12 ansible_user=root ansible_password=1234 ansible_become=true

[external-compute]
10.24.3.11 ansible_user=root ansible_password=1234 ansible_become=true

[monitoring]
10.24.3.12 ansible_user=root ansible_password=1234 ansible_become=true

[storage]
10.24.3.11 ansible_user=root ansible_password=1234 ansible_become=true

[deployment]
localhost       ansible_connection=local

检测:确认inventory配置文件是否正确:

ansible -m ping all

结果:

[root@deploy /]# ansible -m ping all 10.24.3.11 | SUCCESS => { "changed": false, "ping": "pong" } 10.24.3.12 | SUCCESS => { "changed": false, "ping": "pong" }

4.3 编辑globals.yml配置文件

kolla_base_distro: "centos"

binary使用像apt或yum这样的软件仓库,source使用原始源代码归档,git存储库或本地源代码目录

kolla_install_type: "source"
openstack_release: "queens" # 使用的版本

kolla_internal_vip_address: "192.168.10.120" # 内部VIP kolla_external_vip_address: "10.24.3.120" # 外部VIP

network_interface: "ens224.10" kolla_external_vip_interface: "ens192" api_interface: "ens224.10"

storage_interface: "ens224.20" cluster_interface: "ens224.20" tunnel_interface: "ens224.30"

接口是活动的,没有IP地址。否则,实例将无法访问外部网络

neutron_external_interface: "ens256"

enable_cinder: "yes"



5、开始部署
''' 1、带有kolla的引导服务器部署依赖关系''' 
kolla-ansible -i ./multinode bootstrap-servers

''' 2、对主机执行预部署检查''' 
kolla-ansible -i ./multinode prechecks

''' 3、执行OpenStack部署'''
kolla-ansible -i ./multinode deploy
6、使用OpenStack
6.1 OpenStack需要一个openrc文件,其中设置了admin用户的凭证。
要生成这个文件运行以下命令:

kolla-ansible post-deploy
. /etc/kolla/admin-openrc.sh
6.2 安装基本的OpenStack CLI客户端:

pip install python-openstackclient python-glanceclient python-neutronclient
6.3 运行脚本创建示例网络,图像等

. /usr/share/kolla-ansible/init-runonce
打开浏览器输入10.24.3.120(外部VIP),用户admin ,密码admin 可登录openstack_dashboard,如图所示: