ansible笔记1--ansible基础

笔记1–ansible基础

ansible

ansible 基础介绍

Ansible是一种IT自动化工具。 它可以配置系统,部署软件并协调更高级的IT任务,例如连续部署或零停机滚动更新。
Ansible的主要目标是简单和易用。 它还非常关注安全性和可靠性,其特色为具备最少的活动部件,使用OpenSSH进行运输(也可以使用其他运输方式和拉动模式作为替代方案);其提供一种基于人类可审计性而设计的语言,即便一些人不熟悉该程序。

更多介绍参考:ansible/latest/index 官方介绍

ansible 基础用法

  1. copy
    案例1:
    ansible -i ~/tmp/iplist all -m copy -a “src=/etc/hosts dest=/tmp/hosts”
    案例2:
    ansible -i ~/tmp/iplist all -m copy -a “src=/etc/hosts dest=/home/xg/tmp/hosts owner=xg group=xg mode=0644”
    不加参数的话,此处只能使用自己的用户群组,使用root会出错
    案例3:
    ansible -i ~/tmp/iplist all -m copy -a “src=/etc/hosts dest=/home/xg/tmp/hosts_root2 owner=root group=root mode=0755” -b --become-method su --become-user root -K
  2. shell
    案例1:
    ansible -i ~/tmp/iplist all -m shell -a “mkdir /home/xg/tmp0610 -p”
    案例2:
    ansible -i ~/tmp/iplist all -m shell -a “chown -R root:root /home/xg/tmp0610” -b --become-method su --become-user root -K
  3. get_url
    ansible -i /home/xg/file/tmp/mars all -m get_url -a ‘url=http://10.120.75.102:8660/tarFile.tar.gz dest=/home/xg’
  4. unarchive
    ansible -i /home/xg/file/tmp/iplist all -m unarchive -a ‘src=/home/xg/tarFile.tar.gz dest=/home/xg copy=no’

playbook

playbook基础介绍

playbook是基于Ansible的配置、部署和编排语言。 它可以描述我们希望远程系统执行的策略,或一般IT流程中的一组步骤。
如果把Ansible模块比作车间中的工具,则playbook是工具的说明手册,主机清单是原材料。
从根本上讲,playbook可用于管理远程计算机的配置和部署。 更进一步,它可以对涉及滚动更新的多层部署进行排序,并可以将操作委派给其他主机,在此期间与监视的服务器和负载平衡器进行交互。

更多介绍参考:playbooks 官方介绍

playbook用法

案例1
  1. host.py
    案例1均使用如下host信息,第一行必须指定/usr/bin/env python,否则会报错
    #!/usr/bin/env python
    # coding=utf-8
    
    import json
    
    ret = {
        '_meta': {
            'hostvars': {
                'docker-master-01_10.120.75.102': {
                    'ansible_host': '10.120.75.102'
                }, 
                'docker-master-02_10.120.75.103': {
                    'ansible_host': '10.120.75.103'
                }, 
                'docker-master-03_10.120.75.107': {
                    'ansible_host': '10.120.75.107'
                },
                'docker-data-01_10.120.75.102': {
                    'ansible_host': '10.120.75.102'
                }, 
                'docker-data-02_10.120.75.103': {
                    'ansible_host': '10.120.75.103'
                }, 
                'docker-data-03_10.120.75.107': {
                    'ansible_host': '10.120.75.107'
                },
                'docker-meta-01_10.120.75.102': {
                    'ansible_host': '10.120.75.102'
                }, 
                'docker-meta-02_10.120.75.103': {
                    'ansible_host': '10.120.75.103'
                }, 
                'docker-meta-03_10.120.75.107': {
                    'ansible_host': '10.120.75.107'
                },
                'docker-object-01_10.120.75.102': {
                    'ansible_host': '10.120.75.102'
                }, 
                'docker-object-02_10.120.75.103': {
                    'ansible_host': '10.120.75.103'
                }, 
                'docker-object-03_10.120.75.107': {
                    'ansible_host': '10.120.75.107'
                }
            }
        },
        'zx_101': {
            'hosts': [
                'docker-master-01_10.120.75.102',
                'docker-master-02_10.120.75.103',
                'docker-master-03_10.120.75.107',
                'docker-data-01_10.120.75.102',
                'docker-data-02_10.120.75.103',
                'docker-data-03_10.120.75.107',
                'docker-meta-01_10.120.75.102',
                'docker-meta-02_10.120.75.103',
                'docker-meta-03_10.120.75.107',
                'docker-object-01_10.120.75.102',
                'docker-object-02_10.120.75.103',
                'docker-object-03_10.120.75.107'
            ]
        }
    }
    #print(ret)
    print json.dumps(ret,indent=4)
    
  2. 主要功能
    1)拷贝文件到tmp目录
    2)将操作时间和inventory_hostname输出到指定文件
    3)按照 inventory_hostname的前半部分启动对应的docker
    chubao_rolling_upgrade.yml 内容如下:
    - hosts: "{{ hosts }}"
      serial: "{{ serial }}"
      remote_user: xg
      gather_facts: False
      tasks:
          - name: copy the latest script
            copy: src=./docker_update.py dest=/tmp
            vars:
                display: true
          - name: echo time and hostname to file
            shell: date>>/home/xg/0610.log && echo {{inventory_hostname}}>>/home/xg/0610.log 
            vars:
                display: true
          - name: run container
            shell: service_name="{{ inventory_hostname.split('_')[0] }}";port=881;if [[ ${service_name} == *data* ]];then port=882;elif [[ ${service_name} == *meta* ]];then port=883;elif [[ ${service_name} == *object* ]];then port=884;else port=881;fi; docker run -d --name=$service_name -p 0.0.0.0:${port}:80 nginx
    
  3. 执行效果
    依次将hosts=‘docker-xxx-0*’ 中的xxx更改为master、data、meta、object即可分别启动对应的容器实例。
    ansible-playbook -i zx_host.py chubao_rolling_upgrade.yml -e hosts=‘docker-object-0*’ -e ‘serial=1’
    其中serial=n可以用于控制执行并发力度;
    执行效果:
    在这里插入图片描述
    机器上容器:
    在这里插入图片描述
  4. 关闭所有data容器:
    ansible-playbook -i zx_host.py chubao_rolling_upgrade.yml -e hosts=‘docker-data-0*’ -e ‘serial=1’
    只需要将上述中的run container更改为如下内容即可:
    - hosts: "{{ hosts }}"
     serial: "{{ serial }}"
     remote_user: xg
     gather_facts: False
     tasks:
         - name: copy the latest script
           copy: src=./docker_update.py dest=/tmp
           vars:
               display: true
         - name: echo time and hostname to file
           shell: date>>/home/xg/0610.log && echo {{inventory_hostname}}>>/home/xg/0610.log 
           vars:
               display: true
         - name: stop and delete container
           shell: service_name="{{ inventory_hostname.split('_')[0] }}";docker stop ${service_name} > /dev/null 2>&1 && docker rm ${service_name} > /dev/null 2>&1
    

说明

测试系统为debian系统,需要安装对应的docker,并pull相应镜像;
主控机为mac,安装ansible后即会有对应的ansible-playbook。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昕光xg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值