Ansible基礎 day01 快速入門

1.介紹

Ansib1e是一個IT自動化工具。它能配置系統、部署軟件、編排更復雜的IT任務,如連續部署或零停機時間滾動更新。Ansible用Python編寫,儘管市面上已經有很多可供選擇的配置管理解決方案(例如Sa1t、Puppet、Chef等),但它們各有優劣,而Ansible的特點在於它的簡潔(只需要安裝服務端)。讓Ansib1e在主流的配置管理系統中與衆不同的一點便是,它並不需要你在想要配置的每個節點上安裝自己的組件。同時提供的另一個優點,如果需要的話,你可以在不止一個地方控制你的整個基礎架構。

 

2.工作原理

在這裏插入圖片描述
1、在ANSIBLE管理體系中,存在“管理節點”和“被管理節點”兩種角色。
2、被管理節點通常被稱爲“資產”
3、在管理節點上,Ansible將AdHoc或PlayBook 轉換爲Python腳本。並通過SSH將這些Python 腳本傳遞到被管理服務器上。

特定的模塊Module支持特定的功能
 

3.如何安裝

3.1 先決條件

在這裏插入圖片描述 

3.2 安裝Ansible

  • yum方式
yum install epel-release
yum install ansible
  • pip方式
    這裏是使用系統自帶的python2的環境
    如果系統中安裝的pip3,可以直接使用pip3安裝ansible
yum install epel-release
yum install python2-pip
pip install ansible
  • 查看版本
ansible --version

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

4.管理節點與被管理節點建立SSH信任關係

管理節點(ansible)追蹤創建密鑰對

[root@localhost ~]# ssh-keygen -t rsa

在這裏插入圖片描述
將本地的公鑰傳輸到被管理節點
(每個被管理節點都需要傳遞)
(需要被管理節點的用戶名和密碼)

[root@localhost ~]# ssh-copy-id [email protected]
[root@localhost ~]# ssh [email protected]

 

在這裏插入圖片描述

5.快速入門

5.1 場景假設

管理節點
192.168.1.133 主機名 server

被管理節點(資產):
192.168.1.134

且管理節點 和 被管理節點之間的節點已經打通SSH信任關係

5.2 場景一

在管理節點上,測試所有被管理節點的網絡連通性
# ansible all -i 192.168.1.134, -m ping

在這裏插入圖片描述
[WARNING]: Unable to parse /root/192.168.1.134 as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match
‘all’

注意 -i 參數後面排的是一個列表(List),因此當爲一個被管理節點時,我們後面一定要加一個英文逗號(,)告知是List

ansible all -i 192.168.1.134, -m ping

在這裏插入圖片描述
在/etc/hosts 添加:192.168.1.134 client
通過主機名:需要在/etc/ansible/hosts 中Ex 1那塊添加client
在這裏插入圖片描述

5.3 場景二

在管理節點上,確保文件/tmp/a.conf 發佈到所有被管理節點

touch /tmp/a.conf
ansible all -i 192.168.1.134, -m copy -a "src=/tmp/a.conf dest=/tmp/"

all 在ansible中,將其叫做pattern,即匹配。我通常稱它爲資產選擇器。就是匹配資產(-i參數指定)中的一部分。這裏的all是匹配所有指定的所有資產。將在下面資產部分詳細闡述。
-i指定Ansible的資產,也就是被管理服務器。
-m指定要運行的模塊,比如這裏的ping模塊和copy模塊
-a 指定模塊的參數,這裏模塊ping 沒有指定參數。模塊copy指定了src和dest參數。

在這裏插入圖片描述
在client端被管理節點查看
在這裏插入圖片描述

  • 總結一句話:ansible就是用什麼模塊,讓誰去幹什麼事情。

6.Ansible資產

在快速入門的場景中,我們一共管理了兩臺服務器。但是在實際場景中,我們要管理的服務器往往要多得多。難道依然要在Ansible的-i參數後面一個個追加IP指定嗎?這顯然不合乎常理。
因此這一節我們主要去介紹一下Ansible的資產。
Ansible的資產分爲靜態資產和動態資產,動態資產會在後面的高級部分詳細闡釋。

6.1 靜態資產

顧名思義它本身是一個文本文件,一個格式類似INI的文件。默認情況下,Ansible的資產文件位於 /etc/ansible/hosts。
我們這裏給出一個自定義的靜態資產實例,然後再具體解釋其含義。

cat inventory

1.1.1.1
2.2.2.2
3.3.3.[1:15]    # 表示3.3.3.1 ~ 3.3.3.15
test01.biudefor.com
test03.biudefor.com
test[05:09].biudefor.com

[web_servers]   # 組名
10.3.134.4      # 組內成員
10.3.134.3
10.3.134.5

[db_servers]    # 組名
10.3.134.4      # 組內成員
10.3.134.3
10.3.134.5

[all_servers]   # 組名
[all_servers:children]  # 子組
db_servers   # 子組成員
web_servers


    1、Ansible 的資產文件中,可以以IP地址的形式或者主機名的形式存在
    2、Ansible 的資產若連續,可以使用[stat:end] 的形式去表達
    3、可以將服務器按照業務場景定義成組,比如db_servers 和 web_servers
    4、組和組之間可以存在繼承關係,比如db_servers 和 web_servers 同時繼承all_servers 組

如何使用自定義資產

// 通過 -i 參數指定自定義資產的位置即可(可以是全路徑,也可以是相對路徑)# ansible all -i inventory.ini ... // 僞指令,不可執行

如何驗證自定義資產

// 假如我們剛剛定義的資產爲 inventory.ini

  • 列舉出所有資產
# ansible all -i inventory.ini  --list-hosts
  • 列舉出選定資產
    比如這裏列舉出web-servers短橫線是錯誤寫法 web_servers
    // 注意這裏使用的了資產選擇器(pattern),我們將會在下面對他進行詳細的闡述
# ansible web_servers -i inventory.ini --list-hosts

// 以上指令,若能列舉出我們在資產中定義的服務器,那麼你的自定義資產也就生效了。 如下圖,列出所有資產

在這裏插入圖片描述

6.2 動態資產

動態資產, -i 參數後面接的是一個可運行的腳本。腳本的結果爲一個 Ansible 可理解的 JSON 格式字符串。

爲什麼要存在動態資產呢? 往往我們在使用 Ansible 管理服務器前,公司中有可能已經將服務器信息存儲在了特定位置,比如 CMDB, 數據庫等系統。
此時若我們再使用靜態資產去管理服務器,勢必會造成資產管理入口不統一的問題。

因此我們只能拋棄原先的靜態資產,通過腳本從已存在的系統中獲取要管理的節點,並按照特定的形式傳給 Ansible。這樣既解決了公司資產統一入口, 也解決了Ansible 的服務器管理來源。

{
  "_meta": {
    "hostvars": {
      "10.3.134.3": {
        "host_var": "hoge"
      },
      "10.3.134.4": {
        "host_var": "fuga"
      }
    }
  },
  "sample-servers": {
    "hosts": [
      "10.3.134.3",
      "10.3.134.4"
    ],
    "vars": {
      "group_var": "hogefuga"
    }
  }
}

6.3 資產選擇器

有時操作者希望只對資產中的一部分服務器進行操作,而不是資產中列舉的所有服務器

基本語法格式:

ansible PATTERN -i inventory -m module -a argument

選擇一臺或者幾臺服務器

# ansible 1.1.1.1 -i inventory.ini --list-hosts
# ansible test01.biudefor.com -i inventory.ini --list-hosts
# ansible 1.1.1.1,2.2.2.2 -i inventory.ini --list-hosts

選擇所有服務器

# ansible '*' -i  inventory.ini --list-hosts
# ansible all -i inventory.ini --list-hosts

選擇一組服務器

# ansible web_servers -i inventory.ini --list-hosts
# ansible db_servers -i inventory.ini --list-hosts
# ansible all_servers -i inventory.ini --list-hosts

在這裏插入圖片描述
使用 * 匹配

# ansible 3.3.3.* -i inventory.ini --list-hosts

使用邏輯匹配

// web_servers 和 db_servers 的並集
# ansible 'web_servers:db_servers' -i inventory.ini --list-hosts
// web_servers 和 db_servers 的交集
# ansible 'web_servers:&db_servers' -i inventory.ini --list-hosts
// 在 web_servers 中, 但不在 db_servers 的服務器
# ansible 'web_servers:!db_servers' -i inventory.ini --list-hosts

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