ansible的安裝及部署

前言

什麼是ansible

ansible是一款開源自動化平臺,是一個配置管理工具,自動化運維工具
ansible命令相當於linux命令
ansible是基於模塊開發的,常用的20~30個
YAML語法是自帶語法
playbook(劇本)相當於腳本
ansible roles(角色)一大堆腳本

ansible的優點

1.跨平臺支持
2.人類可讀自動化: ansible提供linux,Windows,unix和網絡設備的無代理支持,適用於>物理、虛擬、雲和容器環境
3.完美描述應用:playbook
4.輕鬆管理版本控制:playbook是純文本,可視作源代碼
5.支持動態清單
6.編排可與其他系統輕鬆集成:puppet、jenkins
7.基礎架構即代碼
8.減少人爲錯誤

任務、play和playbook設計爲具有冪等性,所以在運行playbook時,
如果目標主機處於正確狀態,則不會進行任何更改。

安裝ansible

  • 在機子上安裝ansible(先確定已經搭建好了epel倉庫)

      dnf install -y ansible
    
  • 查看ansible版本信息

      ansible --version
    

    示例:

      [root@rhel8_node2 /]# ansible --version
      ansible 2.9.5
        config file = /etc/ansible/ansible.cfg
        configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
        ansible python module location = /usr/lib/python3.6/site-packages/ansible
        executable location = /usr/bin/ansible
        python version = 3.6.8 (default, Jan 11 2019, 02:17:16) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
    
  • 使用setup模塊驗證python

      ansible -m setup localhost | grep ansible_python_version
      "ansible_python_version": "3.6.8",
    

部署ansible

構建ansible清單(講解)

  • 清單:它定義了ansible將要管理的一批主機

靜態清單
每行一個,填寫主機名或ip,如:
www.westos.org
172.25.254.250

還可以定義主機組:
[webservers]
server1.westos.org
server2.westos.org
172.25.0.1

[dbservers]
node1.westos.org
node1.westos.org

‘注意:一臺主機可以存在於多個主機組’

定義嵌套組
ansible主機清單可以包含多個主機組構成的組,如:

[webservers]
server1.westos.org
server2.westos.org
172.25.0.1

[dbservers]
node1.westos.org
node1.westos.org

[servers:children]
webservers
dbservers

通過範圍簡化主機規格
可以指定主機名稱或ip範圍或者數字和字母範圍

語法:[START:END]

172.25.[0:4].[0:254] (匹配172.25.0.0/24,172.25.1.0/24 …)
server[01:10].example.com (匹配server01.example.com到server20.example.com>所有主機,此方式不匹配server1,之匹配server01)
[a:c].example.com (匹配a.example.com到c.example.com)

  • 驗證清單
    [root@workstation ~]# ansible workstation.lab.example.com --list-hosts
    ‘當前主機中沒有受管主機’

  • 默認清單位置:/etc/ansible/hosts(一般不使用,而是自己新建)

  • 動態清單–> 可以從開源社區的腳本中獲取

練習
配置默認清單:

[root@workstation ~]# vim /etc/ansible/hosts

servera.lab.example.com

[webservers]
serverb.lab.example.com

列出清單中所有受管主機:

[root@workstation ~]# ansible all --list-hosts

列出不屬於某個組的主機:

[root@workstation ~]# ansible ungrouped --list-hosts

列出屬於webservers組的主機

[root@workstation ~]# ansible webservers --list-hosts

自定義清單

mkdir deploy-inventory  #建立清單目錄

列出主機

[root@workstation deploy-inventory]# ansible all -i inventory --list-hosts

列出未入組主機

[root@workstation deploy-inventory]# ansible ungrouped -i inventory --list-hosts

列出www組中的主機

[root@workstation deploy-inventory]# ansible www -i inventory --list-hosts     

westos組包含www組和bbs組

[root@workstation deploy-inventory]# ansible westos -i inventory --list-hosts   

管理ansible配置文件

  • 配置ansible
    配置文件:

    1. /etc/ansible/ansible.cfg (基本配置文件,如果找不到其他配置文件,>使用這個)
    2. ~/.ansible.cfg(如果存在此配置並且當前工作目錄中也沒有ansible.cfg,此文件替代/etc/ansible/ansible.cfg)
    3. ./ansible.cfg(執行ansible命令的目錄中如果有ansible.cfg,就用它,不使用上面兩個(推薦使用,上面兩個不常用))

    顯示使用的配置文件:

    [root@rhel8_node1 deploy-adhoc]# ansible web -i inventory --list-host -v
    Using /root/.ssh/deploy-adhoc/ansible.cfg as config file
    hosts (2):
    rhel7_node1.westos.com
    rhel7_node2.westos.com

  • 管理配置文件中的設置:

    [defaults] (部分設置ansible操作的默認值)
    [privilege_escalation] (配置ansible如何在受管主機上執行特權升級)

    例:

    [root@workstation deploy-inventory]# vim ansible.cfg
    [defaults]
    inventory = ./inventory
    remote_user = student #指定登錄受管主機的用戶,如不指定則使用當前用戶名稱
    ask_pass = false #是否提示輸入ssh密碼,做了免密就可以設置爲false,否則需>爲true

    [privilege_escalation]
    become = true #連接到受管主機上是否進行身份切換
    become_method = sudo #切換方式,默認爲sudo
    become_user = root #切換到的用戶
    become_ask_pass = false #是否需要爲become_method提示輸入密碼,默認爲false

    使用sudo進行權限下放
    使用超級用戶編輯文件:

    [root@workstation ~]# vim /etc/sudoers.d/student
    student ALL=(ALL) NOPASSWD: ALL
    注意: 需要在每一個需要用戶下放權限的主機都進行權力下放

運行臨時命令

使用臨時命令可以快速測試和更改,無需編寫playbook

  • 格式:
    ansible host-pattern -m module [-a ‘module arguments’] [-i inventory]

  • 檢查能否在受管主機上運行python模塊
    [root@workstation ~]# ansible all -m ping
    serverb.lab.example.com | SUCCESS => {
    “ansible_facts”: {
    “discovered_interpreter_python”: “/usr/libexec/platform-python”
    },
    “changed”: false,
    “ping”: “pong”
    }
    在運行過程可能會出現一些問題,常見問題的解決辦法

  • 使用臨時命令通過模塊執行任務
    列出所有模塊:

      [root@workstation ~]# ansible-doc -l 
    

    查看ping模塊幫助文檔:

      [root@workstation ~]# ansible-doc ping  
    
  • ansible模塊
    文件模塊:
    -copy:將本地文件複製到受管主機
    -file:設置文件的權限和其他屬性
    -lineinfile:確保特定行是否在文件中
    -synchronize:使用rsync同步內容

    系統模塊:
    -firewalld:使用firewalld管理任意端口和服務
    -reboot:重啓
    -service:管理服務
    -user:添加、刪除和管理用戶賬戶

    Net Tools模塊:
    -get_url:通過http、https、或者ftp下載文件
    -nmcli:管理網絡
    -uri:與web服務交互

  • 例:
    使用user模塊確保student用戶存在於servera.lab.example.com且uid爲1000

      [root@workstation ~]# ansible -m user -a 'name=student uid=1000 state=present' servera.lab.example.com
    

    在受管主機上運行命令:

      [root@workstation ~]# ansible webservers -m command -a /usr/bin/hostname
      serverb.lab.example.com | CHANGED | rc=0 >>     #狀態報告,顯示主機名稱和操作結>果
      serverb.lab.example.com                         #命令輸出
    

    使結果顯示在一行:

      [root@workstation ~]# ansible webservers -m command -a /usr/bin/hostname -o     #加上-o參數,單行顯示
      serverb.lab.example.com | CHANGED | rc=0 | (stdout) serverb.lab.example.com
    

    注意: command模塊允許執行遠程命令,但這些命令不是shell處理,所以無法訪問shell環境變量,所以不能執行重定向、傳送等操作

  • 使用shell和command的區別
    shell:

      [root@workstation ~]# ansible localhost -m command -a set
      localhost | FAILED | rc=2 >>
      [Errno 2] No such file or directory: 'set': 'set'
    

    command:

      [root@workstation ~]# ansible localhost -m shell -a set
      localhost | CHANGED | rc=0 >>
      BASH=/bin/sh
      ...
    
  • 使用command模塊執行臨時命令

      [root@workstation deploy-adhoc]# ansible localhost -m command -a 'id'
      
      [root@workstation deploy-adhoc]# ansible localhost -m command -a 'id' -u student        #通過-u選項使用student進行連接並執行id命令
    

    注意: 執行上面兩條命令時,需要在新建的目錄中執行,否則結果不會變

  • 使用copy模塊

1.首先使用student用戶,因爲student用戶沒有寫權限,會失敗
[root@workstation deploy-adhoc]# ansible localhost -m copy -a ‘content=“westos ansible\n” dest=/etc/motd’ -u westos
(使用copy模塊,以westos用戶登錄,使用root權限,把“westos ansible” 複製給本臺主機的/etc/motd文件,–become給westos用戶提升權限)

2.使用特權升級
‘注意:此處使用特權升級需要先編輯/etc/sudoers.d/student文件’
[root@workstation deploy-adhoc]# cat /etc/sudoers.d/student
student ALL=(ALL) NOPASSWD: ALL

以root身份運行
[root@workstation deploy-adhoc]# ansible localhost -m copy -a ‘content=“westos ansible\n” dest=/etc/motd’ -u student --become

查看是否更改
[root@workstation deploy-adhoc]# cat /etc/motd
westos ansible

使用all參數一次更改servera和localhost
[root@workstation deploy-adhoc]# ansible all -m copy -a ‘content=“westos ansible\n” dest=/etc/motd’ -u student --become
可以看到localhost顯示SUCCESS,servera顯示CHANGED,因爲localhost已經處於正確狀態

查看
[root@workstation deploy-adhoc]# ansible all -m command -a ‘cat /etc/motd’ -u student

後記

練習and記憶

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