ansible笔记1--ansible基础

ansible笔记1--ansible基础

  • 笔记1--ansible基础
    • ansible
      • ansible 基础介绍
      • ansible 基础用法
    • playbook
      • playbook基础介绍
      • playbook用法
        • 案例1
    • 说明

笔记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。

你可能感兴趣的:(Linux基础操作及使用技巧)