使用Ansible管理您的OpenStack云:第二天的操作

在OpenStack上管理应用程序给系统管理员带来了许多挑战,寻找降低复杂性和产生一致性的方法是获得成功的关键因素。 通过使用无代理IT自动化技术Ansible,系统管理员可以创建提供一致性并降低复杂性的Ansible剧本

OpenStack提供了丰富的API来管理资源,从而导致创建了数十个可以轻松适合任何自动化工作流程的Ansible模块。 结合在OpenStack实例中自动执行任务的能力,操作员可以在内部外部进行工作以针对环境协调复杂的操作。

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

  • 升级将如何发生?
  • 如何维护备份?
  • 环境如何随需求扩展?

例如,考虑一个需要升级的Web服务器集群,它们都位于OpenStack负载均衡器的后面。 通过管理VM本身中的基础结构和任务的能力,操作员可以确保执行的事件顺序始终按特定顺序发生。 这是执行滚动升级的剧本的一个简单示例:


   
   
- 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

该剧本首先检查是否有任何更新要应用。 如果是这样,则剧本会从池中删除该节点,应用更新,然后重新启动该节点。 节点重新联机后,它将被重新添加到池中。 Ansible剧本使用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

仔细观察剧本,您可能已经注意到还原是通过OpenStack命令行完成的,而不是通过适当的Ansible模块完成的。 在某些情况下,可能不存在用于任务的模块,但是Ansible足够灵活,可以在剧本中调用任意命令,直到开发模块为止。 感觉可以编写缺少的模块了吗? 考虑通过为Ansible项目做出贡献来创建它。

这些只是系统管理员在云中进行的第二天的操作。 我和罗杰·洛佩兹(Roger Lopez)和我将在柏林的OpenStack峰会 提供动手实验 ,其中包含实际场景和相关的Ansible剧本来实现它们的自动化。 在会议举行的当周,我们还将示例和材料上传到GitHub ,以使任何无法参加的人受益。


罗杰·洛佩兹(Roger Lopez)和戴维·克里奇(David Critch)将在11月13日至15日在柏林举行的OpenStack峰会 上与Ansible进行第二天的简化操作(动手实验)

翻译自: https://opensource.com/article/18/10/manage-your-openstack-cloud-ansible

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值