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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章