Ansible部署先电openstack

发布时间 2023-10-19 08:39:59作者: cyj爱study

一,规划节点:

主机名

IP

节点

 

ansible

192.168.238.11

ansible节点

2核/4G内存/40G硬盘

controller

192.168.238.12

controller节点

4核/8G内存/100G硬盘

compute

192.168.238.13

compute节点

4核/8G内存/100G硬盘+50G临时磁盘

二,基础准备:

使用OpenStack平台创建三台云主机进行实验,云主机镜像使用提供的CentOS_7.9_x86_64_XD.qcow2镜像,将chinaskills_cloud_iaas.iso镜像上传到ansible节点的/root目录下,controller节点和compute节点各配置两张网卡分别为NAT模式和仅主机模式。

三,环境准备

配置网络并修改主机名

在所有节点执行

ip地址设置以实际环境为准

hostnamectl set-hostname ansible

hostnamectl set-hostname controller

hostnamectl set-hostname compute

安装ansible和ftp服务

只在ansible节点执行

yum install epel-release -y

yum install ansible -y ##这里选择网络源安装ansible

systemctl stop firewalld && systemctl disable firewalld

setenforce 0

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ##关闭防火墙和selinux

mkdir /opt/{centos,iaas}

mount /dev/sr0 /opt/centos

mount /root/chinaskills_cloud_iaas.iso /opt/iaas -o loop

cat /etc/yum.repos.d/ansible.repo

[centos]

name=centos

baseurl=file:///opt/centos

enabled=1

gpgcheck=0

[iaas]

name=iaas

baseurl=file:///opt/iaas/iaas-repo

enabled=1

gpgcheck=0

yum clean all

yum repolist ##配置本地镜像源

yum install vsftpd -y

echo 'anon_root=/opt' >> /etc/vsftpd/vsftpd.conf

systemctl restart vsftpd && systemctl enable vsftpd

##安装ftp设置匿名访问目录

配置免密登录

只在ansible节点执行

ssh-keygen

ssh-copy-id root@192.168.238.12

ssh-copy-id root@192.168.238.13

四,目录结构

项目目录

mkdir /opt/openstack_ansible

创建角色

 

mkdir -p /opt/openstack_ansible/roles/{init,mariadb,keystone,glance,placement,nova-controller,nova-compute,neutron-controller,neutron-compute,dashboard,swift-controller,swift-compute,cinder-controller,cinder-compute,heat}/{taska,files,templates,meta,handlers,vars}

## 在每个角色目录下面都有一样的目录,这些目录中的task目录一般是一定会用到的,其他的目录视情况而定来使用

创建group_vars目录

在项目目录/opt/openstack_ansible下创建group_vars目录,并在该目录下创建all文件,该目录用来存放变量声明文件all

mkdir /opt/openstack_ansible/group_vars

cd /opt/openstack_ansible/group_vars

touch all

init角色

该角色的任务是用来部署controller和compute的基础环境,包括配置yum源,安装openstack-iaas脚本,安装iaas-pre-host脚本

  1. 在roles/init/tasks目录下,创建main.yaml文件

cat /opt/openstack_ansible/roles/init/tasks/main.yml

- name: move repos

shell: mv /etc/yum.repos.d/* /media

- name: create local.repo

copy: src=local.repo dest=/etc/yum.repos.d/

- name: install iaas-xiandian

yum: name=iaas-xiandian state=present

- name: openrc.sh

template: src=openrc.sh.j2 dest=/etc/openstack/openrc.sh

- name: install pre-host

shell: iaas-pre-host.sh

 

  1. 在该init角色剧本中,把local.repo文件拷贝至init/files目录下,把openrc.sh.j2文件拷贝至init/templates目录下。

cat /opt/openstack_ansible/roles/init/filea/local.repo

[centos]

name=centos

baseurl=ftp://ansible节点ip地址/centos

enabled=1

gpgcheck=0

[iaas]

name=iaas

baseurl=ftp://ansible节点ip地址/iaas/iaas-repo

enabled=1

gpgcheck=0

 

cat /opt/openstack_ansible/roles/init/templates/openrc.sh.j2

##--------------------system Config--------------------##

##Controller Server Manager IP. example:x.x.x.x

HOST_IP={{controller_ip}}

 

##Controller HOST Password. example:000000

HOST_PASS={{PASSWD}}

 

##Controller Server hostname. example:controller

HOST_NAME={{controller_name}}

 

##Compute Node Manager IP. example:x.x.x.x

HOST_IP_NODE={{compute_ip}}

 

##Compute HOST Password. example:000000

HOST_PASS_NODE={{PASSWD}}

 

##Compute Node hostname. example:compute

HOST_NAME_NODE={{compute_name}}

 

##--------------------Chrony Config-------------------##

##Controller network segment IP. example:x.x.0.0/16(x.x.x.0/24)

network_segment_IP={{network_segment_IP}}/24

 

##--------------------Rabbit Config ------------------##

##user for rabbit. example:openstack

RABBIT_USER=openstack

 

##Password for rabbit user .example:000000

RABBIT_PASS={{PASSWD}}

 

##--------------------MySQL Config---------------------##

##Password for MySQL root user . exmaple:000000

DB_PASS={{PASSWD}}

 

##--------------------Keystone Config------------------##

##Password for Keystore admin user. exmaple:000000

DOMAIN_NAME=demo

ADMIN_PASS={{PASSWD}}

DEMO_PASS={{PASSWD}}

 

##Password for Mysql keystore user. exmaple:000000

KEYSTONE_DBPASS={{PASSWD}}

 

##--------------------Glance Config--------------------##

##Password for Mysql glance user. exmaple:000000

GLANCE_DBPASS={{PASSWD}}

 

##Password for Keystore glance user. exmaple:000000

GLANCE_PASS={{PASSWD}}

 

##--------------------Nova Config----------------------##

##Password for Mysql nova user. exmaple:000000

NOVA_DBPASS={{PASSWD}}

 

##Password for Keystore nova user. exmaple:000000

NOVA_PASS={{PASSWD}}

 

##--------------------Neturon Config-------------------##

##Password for Mysql neutron user. exmaple:000000

NEUTRON_DBPASS={{PASSWD}}

 

##Password for Keystore neutron user. exmaple:000000

NEUTRON_PASS={{PASSWD}}

 

##metadata secret for neutron. exmaple:000000

METADATA_SECRET={{PASSWD}}

 

##Tunnel Network Interface. example:x.x.x.x

{% if ansible_fqdn == "controller" %}

INTERFACE_IP={{controller_ip}}

{% elif ansible_fqdn == "compute" %}

INTERFACE_IP={{compute_ip}}

{% endif %}

 

##External Network Interface. example:eth1

INTERFACE_NAME={{External_Network}}

 

##External Network The Physical Adapter. example:provider

Physical_NAME={{Physical_NAME}}

 

##First Vlan ID in VLAN RANGE for VLAN Network. exmaple:101

minvlan=1

 

##Last Vlan ID in VLAN RANGE for VLAN Network. example:200

maxvlan=4000

 

##--------------------Cinder Config--------------------##

##Password for Mysql cinder user. exmaple:000000

CINDER_DBPASS={{PASSWD}}

 

##Password for Keystore cinder user. exmaple:000000

CINDER_PASS={{PASSWD}}

 

##Cinder Block Disk. example:md126p3

BLOCK_DISK={{cinder_disk}}

 

##--------------------Swift Config---------------------##

##Password for Keystore swift user. exmaple:000000

SWIFT_PASS={{PASSWD}}

 

##The NODE Object Disk for Swift. example:md126p4.

OBJECT_DISK={{swift_disk}}

 

##The NODE IP for Swift Storage Network. example:x.x.x.x.

STORAGE_LOCAL_NET_IP= {{STORAGE_LOCAL_NET_IP}}

 

##--------------------Heat Config----------------------##

##Password for Mysql heat user. exmaple:000000

HEAT_DBPASS={{PASSWD}}

 

##Password for Keystore heat user. exmaple:000000

HEAT_PASS={{PASSWD}}

 

##--------------------Zun Config-----------------------##

##Password for Mysql Zun user. exmaple:000000

ZUN_DBPASS={{PASSWD}}

 

##Password for Keystore Zun user. exmaple:000000

ZUN_PASS={{PASSWD}}

 

##Password for Mysql Kuryr user. exmaple:000000

KURYR_DBPASS={{PASSWD}}

 

##Password for Keystore Kuryr user. exmaple:000000

KURYR_PASS={{PASSWD}}

 

##--------------------Ceilometer Config----------------##

##Password for Gnocchi ceilometer user. exmaple:000000

CEILOMETER_DBPASS={{PASSWD}}

 

##Password for Keystore ceilometer user. exmaple:000000

CEILOMETER_PASS={{PASSWD}}

 

##--------------------AODH Config----------------##

##Password for Mysql AODH user. exmaple:000000

AODH_DBPASS={{PASSWD}}

 

##Password for Keystore AODH user. exmaple:000000

AODH_PASS={{PASSWD}}

 

##--------------------Barbican Config----------------##

##Password for Mysql Barbican user. exmaple:000000

BARBICAN_DBPASS={{PASSWD}}

 

##Password for Keystore Barbican user. exmaple:000000

BARBICAN_PASS={{PASSWD}}

 

  1. 在/opt/openstack_ansible/group_vars/all声明变量

cat /opt/openstack_ansible/group_vars/all

controller_ip: 192.168.238.12

controller_name: controller

compute_ip: 192.168.238.13

compute_name: compute

PASSWD: '000000'

cinder_disk: vdb1

swift_disk: vdb2

network_segment_IP: 172.30.18.0

External_Network: ens33

Physical_NAME: provider

STORAGE_LOCAL_NET_IP: 192.168.238.13

其他角色

其他角色的作用是执行安装openstack的脚本,根据需要编写

编写剧本入口文件

install_openstack.yaml文件为执行剧本的入口文件,需要将调用roles的顺序及哪些主机调用哪些roles在这个文件中体现出来

cat /opt/openstack_ansible/install_openstack.yaml

---

 

- hosts: controller

remote_user: root

 

roles:

- init

- mariadb

- keystone

- glance

- nova-controller

- neutron-controller

- dashboard

- cinder-controller

- swift-controller

- heat

 

- hosts: compute

remote_user: root

 

roles:

- init

- nova-compute

- neutron-compute

- cinder-compute

- swift-compute

五,执行playbook剧本

修改ansible主机清单

cat /etc/ansible/hosts

[controller]

192.168.238.12

[compute]

192.168.238.13

执行剧本

ansible-playbook install_openstack.yaml --syntax-check ##检查剧本语法错误

cd /opt/openstack_ansible

ansible-playbook install_openstack.yaml