1. 程式人生 > 其它 >ansible1:介紹及安裝

ansible1:介紹及安裝

目錄


寫在前面

  本系列文章參考文件:

基礎介紹

  ansible是一個用python語言編寫的自動化運維工具,它集合了舊有運維工具(puppet、chef、func等)的優點,實現批量執行命令、批量部署等功能。ansible只是提供一種框架,其本身並沒有批量操作的能力,批量操作需要依賴其眾多的模組實現,上手容易,是運維工程師不可或缺的利器之一。

工具對比

  與ansible類似的還有puppet和saltsatck,saltstack與ansible屬於蘿蔔白菜,puppet則需要在被管理的主機上安裝agent,顯得略臃腫;而ansible不需要安裝客戶端,它只需要依賴SSH就可以正常工作,也就是說你能通過SSH連線到對應主機,就能通過ansible去管控它,當然還需要將被管控的主機加入到ansible的配置清單中(Inventory,這個清單檔案就是/etc/ansible/hosts)。

ansible部署說明

  1. 本機環境。

      0 18:45:07 root@ansible,172.16.2.9:~ # cat /etc/redhat-release 
    CentOS Linux release 7.9.2009 (Core)
      0 18:45:14 root@ansible,172.16.2.9:~ # uname -r
    3.10.0-1160.15.2.el7.x86_64
    
  2. yum安裝ansible。

    [root@ansible ~]# yum -y install ansible
    [root@ansible ~]# ansible --version
    ansible 2.9.18
    
  3. 檔案說明說明。

    配置檔案目錄:/etc/ansible/
    ansible配置清單(ansible inventory):/etc/ansible/hosts					# 需要將被管控的主機資訊都新增至清單中。
    執行檔案目錄:/usr/bin/
    lib庫依賴目錄:/usr/lib/python2.7/site-packages/ansible/		# 根據實際依賴的python版本。
    
  4. ansible配置檔案查詢順序。

    1. 檢查環境變數 ANSIBLE_CONFIG 指向的路徑。
    2. 檢查當前使用者家目錄~/.ansible.cfg。
    3. 檢查/etc/下的配置檔案/etc/ansible.cfg。
    
  5. 常用ansible命令集。

    /usr/bin/ansible			# 常用於臨時命令的執行,該命令常用格式:ansible <host-pattern> [-f forks] [-m module_name] [-a args]。
    /usr/bin/ansible-doc		# 檢視ansible的模組。
    /usr/bin/ansible-playbook	# ansible自動化任務集編排工具。
    

ansible簡單使用

主機名 IP地址 作業系統
ck-ansible 172.16.2.9 CentOS Linux release 7.9.2009 (Core)
ck-node1 172.16.15.21 CentOS Linux release 7.9.2009 (Core)
ck-node2 172.16.15.22 CentOS Linux release 7.9.2009 (Core)
ck-node3 172.16.15.23 CentOS Linux release 7.9.2009 (Core)

  1. 檢視ansible所有模組說明。

      0 20:25:13 root@ck-ansible,172.16.2.9:~ # ansible-doc -l
      0 20:25:22 root@ck-ansible,172.16.2.9:~ # ansible-doc -l | grep nginx
    
  2. 檢視某一個模組說明。

      0 20:26:14 root@ck-ansible,172.16.2.9:~ # ansible-doc -s ping
    
  3. 使用 ping 模板測試主機的連通性。

    # 首先將要被管控的主機資訊新增至 inventory 中(此處配置別名對應資訊,方便後續直接呼叫)。
    ## 第一種方式是隻配置/etc/ansible/hosts,顯然把密碼寫在配置檔案中是不安全的。
      0 13:15:45 root@ck-ansible,172.16.2.9:~ # vim /etc/ansible/hosts
    ck-node1	ansible_host=172.16.15.21	ansible_port=22 	ansible_user=root	ansible_ssh_pass=123456
    ck-node2	ansible_host=172.16.15.22	ansible_port=22 	ansible_user=root	ansible_ssh_pass=123456
    ck-node3	ansible_host=172.16.15.23	ansible_port=22 	ansible_user=root	ansible_ssh_pass=123456
    ## 第二種方式是將別名與IP對應資訊配置在/etc/hosts中,然後配置免密登入,在/etc/ansible/hosts中只配置別名即可(工作中一般都會將ansible直接裝在jumpserver主機上,可以省去配置/etc/hosts和免密登入)。
      0 13:49:50 root@ck-ansible,172.16.2.9:~ # vim /etc/hosts
    172.16.15.21    ck-node1
    172.16.15.22    ck-node2
    172.16.15.23    ck-node3
      0 13:50:24 root@ck-ansible,172.16.2.9:~ # mkdir-p /server/ops_tools/ops_scripts/
      0 13:51:14 root@ck-ansible,172.16.2.9:~ # cd /server/ops_tools/ops_scripts/
      0 13:51:21 root@ck-ansible,172.16.2.9:/server/ops_tools/ops_scripts # cat batch_key.sh 		# 編寫一個批量分發公鑰的指令碼。
    #!/bin/bash
    
    PWD=123456
    
    
    for ip in $*
    do
      sshpass -p $PWD ssh-copy-id -i /root/.ssh/id_rsa.pub -o StrictHostKeyChecking=no $ip &>/dev/null
      if [ $? != 0 ];then
        echo -e "\n----- $ip distribution of failure -----\n" 
        continue
      fi
    done
      0 13:53:22 root@ck-ansible,172.16.2.9:/server/ops_tools/ops_scripts # sh batch_key.sh ck-node1 ck-node2 ck-node3
      0 13:53:33 root@ck-ansible,172.16.2.9:/server/ops_tools/ops_scripts # cd
      0 13:57:36 root@ck-ansible,172.16.2.9:~ # cat /etc/ansible/hosts
    ck-node1
    ck-node2
    ck-node3
    # 使用ping模組測試連通性。
      0 13:57:38 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m ping
    ck-node1 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
      0 13:58:08 root@ck-ansible,172.16.2.9:~ # ansible ck-node2 -m ping
    ck-node2 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
      0 13:58:12 root@ck-ansible,172.16.2.9:~ # ansible ck-node3 -m ping
    ck-node3 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    # 還可以直接使用ansible的“all”關鍵字,直接對配置清單中所有主機執行ping模組。
      0 13:58:15 root@ck-ansible,172.16.2.9:~ # ansible all -m ping
    ck-node1 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    ck-node3 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    ck-node2 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    # 如果不想輸入上面的"yes/no"資訊,可以修改ansible配置檔案。
      0 13:24:19 root@ck-ansible,172.16.2.9:~ # vim /etc/ansible/ansible.cfg
    host_key_checking = False		# 取消此行的註釋
    

顏色說明

  ansible具有冪等性。ansible是"以結果為導向的",我們指定了一個"目標狀態",ansible會自動判斷,"當前狀態"是否與"目標狀態"一致,如果一致,則不進行任何操作,如果不一致,那麼就將"當前狀態"變成"目標狀態",這就是"冪等性","冪等性"可以保證我們重複的執行同一項操作時,得到的結果是一樣的。

  1. 綠色:表示查詢,或者沒有發生任何改變。
  2. 紅色:表示執行命令時出現異常。
  3. 黃色:表示執行命令後,對受控端主機產生了影響,發生了配置改變。
  4. 粉色:表示忠告、建議資訊。
  5. 藍色:表示命令執行過程資訊。


寫作不易,轉載請註明出處,謝謝~~