Openstack-Ansible

OSA简介


OpenStack-Ansible 是 OpenStack 社区的官方项目,可以部署在指定物理机器上,而不使用容器技术,从而可以更加容易的去的运维、升级、及扩展集群。同时OpenStack-Ansible(OSA)使用Ansible 自动化工具在Ubuntu Linux上部署OpenStack集群。为了隔离和易于维护,OSA也可以使用Linux容器(LXC)将Openstack核心服务安装到容器当中。除了OSA社区中官方项目Kolla,它的原理基于容器作为服务载体,使用Docker技术,如果有兴趣读者可以阅读Kolla章节。

  • 注意了解本章需要你有一定的 Ansible 和 OpenStack的基本概念。本次我们通过一个 OpenStack-Ansible部署一套AIO环境

Ansible

Ansible是目前市面上非常流行一个自动化工具,主要是为了简化系统和应用程序的部署。Ansible通过SSH技术链接到每台服务器上。Ansible使用以YAML语言编写的手册进行编排。

Linux containers (LXC)

Linux Container容器是一种内核虚拟化技术。容器通过增强chroot环境的概念提供操作系统级虚拟化。容器为特定的一组进程隔离资源和文件系统,而没有虚拟机的开销和复杂性。们访问底层主机上的相同内核,设备和文件系统,并提供围绕一组规则构建的精简操作层。

OSA可配置的组件

可以部署Infrastructure 组件包括

  • MariaDB with Galera
  • RabbitMQ
  • Memcached
  • Repository
  • Load balancer
  • Utility container
  • Log aggregation host
  • Unbound DNS container

可以部署的Openstack组件包括
OpenStack services

  • Bare Metal (ironic)
  • Block Storage (cinder)
  • Compute (nova)
  • Container Infrastructure Management (magnum)
  • Dashboard (horizon)
  • Data Processing (sahara)
  • Identity (keystone)
  • Image (glance)
  • Networking (neutron)
  • Object Storage (swift)
  • Orchestration (heat)
  • Telemetry (aodh, ceilometer, gnocchi)

OSA 安装Openstack


环境准备,需要准备如下配置:
8 vCPU’s 50GB free disk space on the root partition
*8GB RAM


最小化配置需求:

  • CPU主板支持hardware-assisted的虚拟化
  • 8 CPU Cores
  • 80GB的主分区,或者60GB的第二块分区。(如果使用第二块分区需要使用bootstrap_host_data_disk_device参数)。更多的细节可以去看如下链接:

官方建议配置:

开始构建AIO环境
通过OpenStack-Ansible部署一套AIO环境有四步曲,但是第一步是可选项,此步骤需要你自己完成。

  • 环境配置
  • 安装bootstrap和Ansible
  • 初始化主机的bootstrap
  • 运行Playbook

注意:当部署一套新的集群时,我们建议将当前机器的内核及软件包升级到最新的版本。并且如下的命令都是通过Root用户来运行。可以在虚拟机中执行AIO构建以进行演示和评估,但是虚拟机性能会很差。对于生产环境中建议为特定角色使用多节点方式。

本次部署环境使用Ubuntu 14.04 LTS,Ansible 版本为2.2.0,首先在节点所有将Package 更新

  1. $ sudo apt-get dist-upgrade

git clone最新版本的openstack-ansible

  1. $ sudo su -
  2. $ git clone https://github.com/openstack/openstack-ansible
  3. $ cd /opt/openstack-ansible

根据自己需求来部署对应的Openstack集群版本

  1. # # 显示所有的TAG号
  2. # git tag -l
  3. # # 本次我们使用Newton版本搭建一套AIO
  4. # git checkout stable/newton
  5. # git describe --abbrev=0 --tags
  6. # # Checkout the latest tag from either method of retrieving the tag.
  7. # git checkout 15.0.0.0rc1

设定参数在部署过程中会使用

  1. export BOOTSTRAP_OPTS="bootstrap_host_data_disk_device=vdb"
  2. export ANSIBLE_ROLE_FETCH_MODE=git-clone

环境执行工具的安装和初始化

  1. $ scripts/bootstrap-ansible.sh

执行命令环境准备

  1. $ scripts/bootstrap-aio.sh

最后执行部署命令

  1. $ scripts/run-playbooks.sh

安装过程需要一段时间才能完成,但这里有一些一般估计:

  • 带SSD存储的裸机系统:30-50分钟
  • 具有SSD存储的虚拟机:约45-60分钟
  • 系统与传统硬盘:90-120分钟

一旦playbook完全执行,可以尝试在/etc/openstack_deploy/user_variables.yml中的各种设置更改,并且只运行单个剧本。例如,要运行Keystone服务的剧本,请执行

  1. # cd /opt/openstack-ansible/playbooks
  2. # openstack-ansible os-keystone-install.yml

重新构建环境
有时,销毁所有容器并重建AIO是最佳的方案。虽然最佳方案是AIO被完全破坏和重建,但这并不是最佳的方案。因此,可以执行以下操作

  1. # cd /opt/openstack-ansible/playbooks
  2. # 删除所有的LXC容器
  3. # openstack-ansible lxc-containers-destroy.yml
  4. # # On the host stop all of the services that run locally and not
  5. # # within a container.
  6. # for i in \
  7. $(ls /etc/init \
  8. | grep -e "nova\|swift\|neutron\|cinder" \
  9. | awk -F'.' '{print $1}'); do \
  10. service $i stop; \
  11. done
  12. # # 卸除所有已经安装的Openstack服务
  13. # for i in $(pip freeze | grep -e "nova\|neutron\|keystone\|swift\|cinder"); do \
  14. pip uninstall -y $i; done
  15. # # 删除日志和配置目录
  16. # rm -rf /openstack /etc/{neutron,nova,swift,cinder} \
  17. /var/log/{neutron,nova,swift,cinder}
  18. # # 删除pip配置文件
  19. # rm -rf /root/.pip
  20. # # 删除apt的proxy配置文件
  21. # rm /etc/apt/apt.conf.d/00apt-cacher-proxy

OSA部署流程

OSA - 图1

OSA的AIO工作流程图

OSA - 图2

OpenStack-ansible配置管理

OSA将安装服务文件存放在/etc/openstack_deploy/conf.d/目录当中,提供AIO和example展示当前主机组使用的文件。如果需要添加其它服务,分配主机到当前的主机文件当中,最后执行playbooks。

  1. # 执行命令
  2. # openstack-ansible setup-infrastructure.yml

setup-infrastructure.yml 文件包含了如下yaml

  1. - include: unbound-install.yml
  2. - include: repo-install.yml
  3. - include: haproxy-install.yml
  4. - include: memcached-install.yml
  5. - include: galera-install.yml
  6. - include: rabbitmq-install.yml
  7. - include: etcd-install.yml
  8. - include: ceph-install.yml
  9. - include: utility-install.yml
  10. - include: rsyslog-install.yml

Ansible 基础服务的playbooks安装如下基础服务:Memcached repository Galera RabbitMQ rsyslog
memcached-install.yaml 详细代码,主要由两个role组成

  1. - name: Install memcached
  2. hosts: memcached
  3. gather_facts: "{{ gather_facts | default(True) }}"
  4. max_fail_percentage: 20
  5. user: root
  6. pre_tasks:
  7. - include: common-tasks/os-lxc-container-setup.yml
  8. - include: common-tasks/os-log-dir-setup.yml
  9. vars:
  10. log_dirs:
  11. - src: "/openstack/log/{{ inventory_hostname }}-memcached"
  12. dest: "/var/log/memcached"
  13. - include: common-tasks/package-cache-proxy.yml
  14. roles:
  15. - role: "memcached_server"
  16. - role: "rsyslog_client"
  17. rsyslog_client_log_rotate_file: memcached_log_rotate
  18. rsyslog_client_log_dir: "/var/log/memcached"
  19. rsyslog_client_config_name: "99-memcached-rsyslog-client.conf"
  20. tags:
  21. - rsyslog
  22. - role: "system_crontab_coordination"
  23. tags:
  24. - crontab
  25. vars:
  26. is_metal: "{{ properties.is_metal|default(false) }}"
  27. tags:
  28. - memcached

role: “memcached_server” 默认参数

  1. ## Logging level
  2. debug: False
  3. ## APT Cache Options
  4. cache_timeout: 600
  5. # Set the package install state for distribution packages
  6. # Options are 'present' and 'latest'
  7. memcached_package_state: "latest"
  8. # Defines that the role will be deployed on a host machine
  9. is_metal: true
  10. # The default memcache memory setting is to use .25 of the available system ram
  11. # as long as that value is < 8192. However you can set the `memcached_memory`
  12. # value to whatever you like as an override.
  13. base_memcached_memory: "{{ ansible_memtotal_mb | default(4096) }}"
  14. memcached_memory: "{{ base_memcached_memory | int // 4 if base_memcached_memory | int // 4 < 8192 else 8192 }}"
  15. memcached_port: 11211
  16. memcached_listen: "127.0.0.1"
  17. memcached_log: /var/log/memcached/memcached.log
  18. memcached_connections: 1024
  19. memcached_threads: 4
  20. memcached_file_limits: "{{ memcached_connections | int + 1024 }}"
  21. memcached_distro_packages: []
  22. memcached_test_distro_packages: []
  23. install_test_packages: False

更多参数可以参考:https://github.com/openstack/openstack-ansible-memcached_server

其它

安装前检查命令

  1. openstack-ansible setup-hosts.yml --syntax-check
  2. openstack-ansible setup-infrastructure.yml --syntax-check
  3. openstack-ansible setup-openstack.yml --syntax-check

总结

优点

  • 部署简单
  • 支持的部署的服务多
  • 可以自定义role中参数

缺点

  • 友好程度