使用 Ansible 管理您的 OpenStack 云:第二天运维

使用 Ansible Playbook 自动化升级、备份和扩展。
365 位读者喜欢这篇文章。
7 great open source tools to power your marketing stack

Opensource.com

在 OpenStack 上管理应用程序对系统管理员提出了许多挑战,找到降低复杂性和提高一致性的方法是获得成功的关键要素。通过使用无代理 IT 自动化技术 Ansible,系统管理员可以创建Ansible Playbook,从而提供一致性并降低复杂性。

OpenStack 提供了丰富的 API 来管理资源,这促使人们创建了数十个 Ansible 模块,这些模块可以轻松地融入任何自动化工作流程。结合在 OpenStack 实例中自动化任务的能力,操作员可以在内部外部工作,以协调针对环境的复杂操作。

“第一天”运维指的是在环境的初始配置和部署期间执行的任务。Ansible 的 OpenStack 模块索引列出了许多用于完成第一天任务的常用模块。它涵盖了创建各种资源,例如网络、卷和实例。“第二天”运维则处理接下来会发生的事情

  • 升级将如何进行?
  • 如何维护备份?
  • 环境如何随着需求扩展?

Ansible 可以轻松处理这些用例。

例如,考虑一个 Web 服务器集群,它们需要升级,并且都位于 OpenStack 负载均衡器之后。凭借管理基础设施和虚拟机本身内部任务的能力,操作员可以确保事件执行的顺序始终按照特定的顺序发生。这是一个执行滚动升级的简单 Playbook 示例

- hosts: web
  gather_facts: true
  user: centos
  serial: 1  # ensures only one server will update/reboot at a time
  tasks:
  - name: check for pending updates
    yum:
      list: updates
    register: yum_update # check if there are updates before going any further
  - block: 
      - name: remove web server from pool
        os_member:
          state: absent
          name: '{{ ansible_hostname }}'
          pool: weblb_80_pool
        delegate_to: localhost
      - name: update packages
        package:
          name: '*'
          state: latest
        become: true
      - name: reboot server
        shell: sleep 5 && reboot &
        async: 1
        poll: 0
      - name: wait for server
        wait_for_connection:
          connect_timeout: 20
          sleep: 5
          delay: 5
          timeout: 600
        become: true
      - name: put server back in pool
        os_member:
          state: present
          name: '{{ ansible_hostname }}'
          pool: weblb_80_pool
          address: '{{ ansible_default_ipv4.address }}'
          protocol_port: 80
        delegate_to: localhost
    when:
    - yum_update.results | length > 0 # only execute the block if there are updates

此 Playbook 首先检查是否有任何更新需要应用。如果有,Playbook 会将节点从池中移除,应用更新,然后重启节点。一旦节点恢复在线,它就会被添加回池中。Ansible Playbook 使用 serial 关键字来确保一次只从池中移除一个节点。

如果数据库在 OpenStack 云中运行,则偶尔需要恢复备份——无论是为了刷新一些测试数据,还是在发生数据损坏事件时。使用 Ansible 可以轻松完成数据库服务器和 Cinder 之间的任务编排

- hosts: db
  gather_facts: true
  user: centos
  tasks:
  - name: stop database
    systemd:
      name: mongod
      state: stopped
    become: true
  - name: unmount db volume
    mount:
      path: /var/lib/mongodb
      state: unmounted
    become: true
  - name: detach volume from server
    os_server_volume: 
      state: absent
      server: db0
      volume: dbvol
    delegate_to: localhost
  - name: restore cinder backup
    command: openstack volume backup restore dbvol_backup dbvol
    delegate_to: localhost
    register: vol_restore
    failed_when:
    - vol_restore.rc > 0
    - "'VolumeBackupsRestore' not in vol_restore.stderr"
  - name: wait for restore to finish
    command: openstack volume show -c status -f value dbvol
    register: restore_progress
    until: restore_progress.stdout is search("available")
    retries: 60
    delay: 5
    delegate_to: localhost
  - name: reattach volume to server
    os_server_volume: 
      state: present
      server: db0
      volume: dbvol
      device: /dev/vdb
    delegate_to: localhost
  - name: mount db volume
    mount:
      path: /var/lib/mongodb
      state: mounted
      src: LABEL=dbvol
      fstype: xfs
    become: true
  - name: start database
    systemd:
      name: mongod
      state: started
    become: true

仔细查看 Playbook,您可能会注意到恢复是通过 OpenStack 命令行完成的,而不是通过适当的 Ansible 模块完成的。在某些情况下,任务的模块可能不存在,但 Ansible 非常灵活,允许在 Playbook 中调用任意命令,直到开发出模块为止。觉得您可以编写缺少的模块吗?考虑通过为 Ansible 项目做贡献来创建它。

这些只是系统管理员可能需要在其云中编排的几个第二天运维操作。Roger Lopez 和我将在柏林OpenStack 峰会上提供一个动手实验,其中包含真实世界的场景和相关的 Ansible Playbook 来自动化它们。我们还将在会议周将我们的示例和材料上传到 GitHub,以方便无法参加会议的任何人。


Roger Lopez 和 David Critch 将在 11 月 13 日至 15 日于柏林举行的 OpenStack 峰会上介绍使用 Ansible 简化第二天运维(动手实验)

User profile image.
David 在进入激动人心且充满活力的咨询行业之前,曾在 BlackBerry (前身为 RIM) 作为系统管理员崭露头角。作为 Red Hat “云基础设施实践”部门的高级云顾问,David 基于 Red Hat 的新兴技术产品(如 Red Hat OpenStack 和 OpenShift)为许多财富 500 强公司设计并交付了云解决方案。
User profile image.
Roger Lopez 是 Red Hat 解决方案工程组的首席软件工程师。该团队根据销售、市场营销和工程团队的意见,确定高价值的解决方案堆栈,并为内部和外部客户开发参考架构。Roger 是一名红帽认证工程师 (RHCE),在戴尔和红帽拥有超过 10 年的计算机行业经验。

评论已关闭。

© . All rights reserved.