Ansible 介紹

2021-12-29 馬哥Linux運維
什麼是 Ansible

Ansible 是一個簡單,強大且無代理的自動化語言。

Ansible 的好處:

簡單易讀:基於 YAML 文本編寫,易於閱讀,非專業的開發人員也可以編寫。

功能強大:它可以同於管理配置,軟體安裝,流程自動化

無代理:不需要在客戶端安裝額外的 agent

跨平臺支持:支持 linux,Windows,Unix 和網絡設備

Ansible 是如何工作的

Ansible 典型的工作方式是通過一個腳本文件(基於 YAML 格式構建的)去控制遠端作業系統按照特定的順序執行相關任務,我們稱這個文件為 playbook;

架構

**節點:**Ansible 架構中擁有兩種計算機類型,即控制節點和受控節點。Ansible 運行在控制節點上,並且只能運行在 linux 作業系統上,對於被控節點,可以是主機設備,也可以是網絡設備,主機設備的作業系統,可以是 Windows,也可以是 linux。

清單(inventory): 受控節點設備的列表。在這個列表中,你可以根據某些標準(如,作用,服務等)將擁有相同屬性的計算機組織到一個組中。Ansible 清單,支持靜態清單(一旦定義好,除非你修改配置文件,不然不會發生改變。),也支持動態清單(通過腳本從外部源獲取清單,該清單可以隨著環境的改變而改變。)。

Playbook: 需要在被控節點主機上運行的任務列表,從而讓他們達到我們預期的狀態。Playbook 中包含一個或多個 play,每個 play 會在一組或多組計算機上按順序執行已經定義好的一系列 task,每個 task 都是一個執行模塊。

模塊(Module): 用於確保主機處於某一個特定的狀態,例如可以使用 yum(對於不同發行版本的 Linux,模塊名可能有所不同個,如,在 Ubuntu 中與之對應的是 apt 模塊。) 模塊確保主機已經安裝了某個軟體,如果主機狀態已經是預期的了(已經安裝了該軟體),那麼就不會執行任何操作,執行下一個模塊(task)。

Plugin  添加到 Ansible 中的代碼段,用於擴展 Ansible 平臺

安裝 Ansible

在 Ubuntu 上安裝 ansible

it@workstation:~$ sudo apt install -y ansible

安裝完成後,你可以通過 ansible --version 查看 ansible 的版本信息

it@workstation:~$ ansible --version
ansible 2.9.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/it/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.2 (default, Jul 16 2020, 14:00:26) [GCC 9.3.0]

配置 Ansible

Ansible 提供的默認主機配置文件:

it@workstation:~$ ls -l /etc/ansible/ansible.cfg 
-rw-r--r-- 1 root root 19985 3月   5  2020 /etc/ansible/ansible.cfg

* 只有 root 用戶才有權限編輯。

創建新的主機配置文件:

一般情況,我們直接複製默認配置文件,然後根據需要修改複製過來的配置文件。

it@workstation:~$ mkdir ansible
it@workstation:~$ cp /etc/ansible/ansible.cfg ansible/
it@workstation:~$ ls -l ansible/
total 24
-rw-r--r-- 1 it it 19985 12月 29 15:03 ansible.cfg

*  在創建新的配置文件之前,我們首先需要創建一個用於測試 Ansible 的工作目錄,然後再創建配置文件。

當我們擁有多個配置文件時,配置文件生效的順序為:

默認配置文件:/etc/ansible/ansible.cfg

複製完成後,我們可以通過 ansible --version 查看當前生效的配置文件

it@workstation:~$ cd ansible/
it@workstation:~/ansible$ ansible --version
ansible 2.9.6
  config file = /home/it/ansible/ansible.cfg
  configured module search path = ['/home/it/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.2 (default, Jul 16 2020, 14:00:26) [GCC 9.3.0]

*  你需要切換到 Ansible 的工作目錄,不然 Ansible 工作目錄下的配置文件是無效的。

對於默認配置文件,我們當前需要了解的有兩個模塊:defaultsprivilege_escalation

defaults 模塊:

inventory: 指定清單文件路徑

host_key_checking : 是否檢查主機 key 是否可信

remote_user: 遠程連接時使用的用戶,默認使用當前用戶

ask_pass: 連接時是否詢問輸入密碼(如果沒有配置密鑰登錄,需要配置該選項為 true。)

privilege_escalation 模塊:sudo 提權相關的配置

become: 是否開啟切換用戶

become_method: 如何切換用戶

become_user: 切換到那個用戶

become_ask_pass: 是否提示輸入密碼

更改配置文件

it@workstation:~/ansible$ vim ansible.cfg 
it@workstation:~/ansible$ grep -vE '^$|#' ansible.cfg 
[defaults]
inventory      = /home/it/ansible/hosts
host_key_checking = False
remote_user = it
ask_pass      = True
[inventory]
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=True
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]

清單(Inventory)

Ansible 提供了一個示例清單文件,並給我們提供了一些常規的示例:

EX 1: 將未分組的主機放在所有組的前面的;

EX 2: 通過 [ ] 指定主機組的名稱,如,webservers,下面直到下一個組名(dbservers)前結束的都是屬於該組的主機,即使主機與主機之間存在空行,但如沒有到下一個組名,他們依然屬於同一個主機組;如果某些主機之間有某些順序關係,你可以通過簡寫,將他們放到同一行,如示例中的 「www[001:006].example.com」,分別表示 www001.example.com、www002.example.com、www003.example.com、www004.example.com、www005.example.com 和 www006.example.com。

EX 3: 提供了另一種主機範圍的示例

it@workstation:~$ cat /etc/ansible/hosts 
# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
#   - Comments begin with the '#' character
#   - Blank lines are ignored
#   - Groups of hosts are delimited by [header] elements
#   - You can enter hostnames or ip addresses
#   - A hostname/ip can be a member of multiple groups

# Ex 1: Ungrouped hosts, specify before any group headers.

#green.example.com
#blue.example.com
#192.168.100.1
#192.168.100.10

# Ex 2: A collection of hosts belonging to the 'webservers' group

#[webservers]
#alpha.example.org
#beta.example.org
#192.168.1.100
#192.168.1.110

# If you have multiple hosts following a pattern you can specify
# them like this:

#www[001:006].example.com

# Ex 3: A collection of database servers in the 'dbservers' group

#[dbservers]
#
#db01.intranet.mydomain.net
#db02.intranet.mydomain.net
#10.25.1.56
#10.25.1.57

# Here's another example of host ranges, this time there are no
# leading 0s:

#db-[99:101]-node.example.com

it@workstation:~$ 

創建自己的主機清單

it@workstation:~$ vim ansible/hosts
it@workstation:~$ cat ansible/hosts
serverb

[web]
servera

[prod:children]
web

在該清單中,我們使用組嵌套,這個是前面示例中沒有的,web 組是 prod 組的子組。

我們可以通過 ansible 命令查看主機清單內容:

it@workstation:~/ansible$ ansible web --list-host
SSH password: 
BECOME password[defaults to SSH password]: 
  hosts (1):
    servera
it@workstation:~/ansible$ ansible prod --list-host
SSH password: 
BECOME password[defaults to SSH password]: 
  hosts (1):
    servera

我們可以通過 ansible 命令來驗證我們的主機清單文件

同時 Ansible 還有兩個默認組:

all: 表示所有組件

ungrouped: 表示所有未分組的主機

it@workstation:~/ansible$ ansible all --list-host
SSH password: 
BECOME password[defaults to SSH password]: 
  hosts (2):
    serverb
    servera
it@workstation:~/ansible$ ansible ungrouped --list-host
SSH password: 
BECOME password[defaults to SSH password]: 
  hosts (1):
    serverb

*  在 Ansible 中,主機可以同時屬於多個組。

Ansible 中存在一個隱藏的主機 localhost,即 ansible 本身,當主機指定為 localhost 時,ansible 會自動忽略掉 remote_user 配置;

運行 ansible 臨時命令

Ansible 臨時命令可以快速執行單個 ansible 任務,而不需編寫 playbook,這對測試和排錯很有幫助。如,你可以使用臨時命令去檢查,某個軟體包在主機上的狀態是什麼,是否可用。

通過臨時命令查看連接到遠程主機的用戶信息

it@workstation:~/ansible$ ansible servera -m shell -a "id"
SSH password: 
BECOME password[defaults to SSH password]: 
servera | CHANGED | rc=0 >>
uid=0(root) gid=0(root) groups=0(root)

*  由於我們沒有配置免密(密鑰),所以這裡需要我們輸入輸入兩次密碼,一次時 ssh 連接的密碼,一次是 sudo 提權的密碼;

*  如果使用 ssh 密碼方式運行 ansible,你還需要安裝 sshpass,不然會有報錯;

it@workstation:~/ansible$ ansible servera -m shell -a "id"
SSH password: 
BECOME password[defaults to SSH password]: 
servera | FAILED | rc=-1 >>
to use the 'ssh' connection type with passwords, you must install the sshpass program

安裝 sshpass

it@workstation:~/ansible$ sudo apt install sshpass

相關焦點

  • ansible詳細介紹
    在學習批量管理軟體時,首先要明確的知道自己需要什麼,網上大神很多,他們都研究到源碼上了,寫了很多介紹絢麗功能的文檔,但其實那些功能基本上我們都用不到
  • ansible常用模塊簡單介紹
    本篇介紹下常用的模塊。根據官方的分類,將模塊按功能分類為:雲模塊、命令模塊、資料庫模塊、文件模塊、資產模塊、消息模塊、監控模塊、網絡模塊、通知模塊、包管理模塊、源碼控制模塊、系統模塊、單元模塊、web設施模塊、windows模塊 ,具體可以參看官方頁面。這裡從官方分類的模塊裡選擇最常用的一些模塊進行介紹(commands模塊上一篇已經介紹,這裡不再提)。
  • Ansible系列-基礎篇-Ansible 的安裝、配置和基本使用
    (kfz-ansible) [jumproot@devops-jumpserver-vm]$ ansible --versionansible [core 2.11.6] config file = /etc/ansible/ansible.cfg configured module search path = ['/home/jumproot/.
  • Ansible自動化入門,只要這一篇就夠了
    本文蟲蟲給大家介紹就是Ansible入門教程,如果此前已有對應的基礎可以忽略本文。概述Ansible是一個開源配置管理工具,可以使用它來自動化任務,部署應用程式實現IT基礎架構。Ansible可以用來自動化日常任務,比如,伺服器的初始化配置、安全基線配置、更新和打補丁系統,安裝軟體包等。
  • Ansible 詳細用法說明(一)
    本文詳細介紹了ansible的使用。至於紅帽為什麼收購ansible,從下圖我們可以看出端倪。接下來,請看乾貨。 not found報錯了解決方法:    yum -y install openssh-clients2、ansible安裝及程序環境:安裝# yum install ansible程序:ansibleansible-playbook ansible-doc
  • 一文詳解 Ansible 自動化運維
    --連續按Tab鍵-->ansible ansible-console-2 ansible-galaxy ansible-playbook-2.7 ansible-vault-2ansible-2 ansible-console-2.7 ansible-galaxy
  • ansible常見模塊實戰運用
    :[webserver]172.16.4.101 ansible_ssh_user=root ansible_ssh_pass=password172.16.4.102 ansible_ssh_user=root ansible_ssh_pass=password[dbserver]172.16.4.103 ansible_ssh_user=root ansible_ssh_pass
  • Ansible 日常使用技巧 (下)
    [root@hostname ~]# ansible 172.16.60.242 -m setup|grep ansible_fqdn "ansible_fqdn": "webserver02",[root@hostname ~]# cat /etc/ansible/test.yml- hosts: kevin_server remote_user: root gather_facts
  • 關於Ansible,這四點一定要注意
    01ansible的配置文件/etc/ansible/ansible.cfg:這是ansible程序的核心配置文件>/etc/ansible/host:這是被管理主機的主機信息文件/etc/ansible/roles:這是ansible的角色目錄/usr/bin/ansible:這是ansible程序的主程序/usr/bin/ansible-doc:這是ansible的幫助文檔命令
  • 這就是ansible系列之三(adhoc模式入門實踐)
    前面ansible系列的內容介紹了基礎信息, 而番外篇則介紹了定位準備ansible環境過程中如何定位SSH帶來的問題的全過程, 本文開始筆者將從實踐的角度介紹
  • 一文詳解 Ansible 的自動化運維
    [root@centos01 ~]# ansible -i /etc/ansible/hosts web -m ping如果使用默認的 Inventory文件(/etc/ansible/hosts),也可以不指定 Inventory 文件,例如:[root@centos01 ~]# ansible web -m pingAnsible 通過設備列表以分組的方式添加到
  • 使用Ansible&Tower實現一鍵自動化測試
    ansible是基於模塊工作的,本身沒有批量部署的能力。1、ansible的各模塊:真正具有批量部署能力的是ansible所運行的模塊,ansible只是提供一種框架。介紹幾個比較常見的playbook語法:A)hosts: 代表選擇的主機,我們的playbook中設置為all,是因為在tower的inventory中指定了host,後續會有介紹;B)vars:playbook中使用到的變量,比如我們playbook中用到的username和password分別是在check nginx和resin代碼的時候需要的svn用戶名和密碼
  • 大話Ansible Ad-Hoc命令
    通過ansible server1 -m ping這樣的方式來使用;通過ansible-playbook shellDemo.yaml這樣的方式來使用。默認的並發數目由ansible.cfg中的forks值來控制。當然了,我們也可以在運行Ansible命令的時候通過-f指定並發數。
  • Ansible 點對點命令快速入門指南示例 | Linux 中國
    點對點命令的一般語法:ansible [模式] -m [模塊] -a "[模塊選項]"點對點命令包含四個部分,詳細信息如下:部分描述ansible命令模式輸入清單或指定組模塊運行指定的模塊名稱模塊選項指定模塊參數如何使用 Ansible 清單文件如果使用 Ansible 的默認清單文件 /etc/ansible/hosts
  • WannaCry肆虐,Ansible如何一招制敵
    使用ansible playbook可實現批量對Windows伺服器的管理配置操作。    Ansible如何管理Windows客戶端請參考文檔末尾的附錄。    以下為關閉和檢查SMBv1協議的Playbook示例:    以下為hosts的Inventory文件,客戶端為Windows 2012 R2
  • Ansible系列(7):代碼調試利器,debugger讓你不用重啟在線調試
    上一節介紹了幾個在編寫playbook時幫助調試的工具,這幾個工具通過輸出日誌,分步執行等方式也能提高調試的效率。但這幾個工具也有不足,每次修改完代碼後,需要重新執行才能驗證修改的代碼的正確性。今天跟大家介紹另一個調試利器:debugger,為什麼說它是調試利器呢?它有什麼強大之處,下面我們來介紹一下。
  • Ansible 自動化工具安裝、配置和快速入門指南 | Linux 中國
    $ sudo apt install software-properties-common$ sudo apt-add-repository --yes --update ppa:ansible/ansible$ sudo apt install ansible對於 Debian 系統,配置以下源列表:$ echo "deb http://ppa.launchpad.net
  • Ansible Tower 權限管理使用實例技術手冊 | 乾貨
    【摘要】本文介紹了Ansible Tower的權限管理及其使用方法,先從Ansible Tower的權限管理使用對象和權限控制對象介紹入手
  • Ansible如何管理你的雲:AWS、Openstack?你的運維也可以很帥!
    不是一個兩個,很是很多很多,但最有名的幾個是:AWS、Azure、Google、Openstack、VMware(虛擬化)(http://docs.ansible.com/ansible/latest/modules/list_of_cloud_modules.html)事實上,Anisble的管理功能是全棧的:從底層硬體到頂層雲租戶中的應用。