首頁 Ansible教程Ansible的配置指南(超過1萬人收藏)

Ansible的配置指南(超過1萬人收藏)

運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

目錄

  • 定義主機和組
    • 主機的定義
    • 主機組的定于
    • 主機組的嵌套
  • 選擇主機和組
    • 匹配主機
    • 使用通配符匹配
  • 配置文件優先級
  • 配置文件詳解
    • 1. 在節點上創建一個普通用戶devops,并設置密碼123
    • 2. 配置sudo提權
    • 3. 配置管理節點免密登錄到被管節點
    • 4. 配置
    • 5. 寫主機清單
    • 6. 驗證配置是否生效
    • 配置文件段
    • 配置文件參數說明
    • 配置案例

定義主機和組

在使用ansible來批量管理主機的時候,通常我們需要先定義要管理哪些主機或者主機組,而這個用于管理主機與主機組的文件就叫做Inventory,也叫做主機清單,該文件默認位于/etc/ansible/hosts(如果是pip安裝則沒有)
當然我們也可以通過修改ansible的配置文件來修改默認使用的主機清單

主機的定義

  • 主機部分可以使用域名,主機名,IP地址來定義;使用前2者時,需要主機能夠解析到對應的IP地址

[devops@node1 ~]$ cat hosts
node1
node2
node1.example.com
node2.example.com
192.168.200.100
192.168.200.200

我們可以看到,現在主機清單里面是寫了node1(主機名),node1.example.com(域名),192.168.200.100(IP地址),這三種定義方式都是可以的,但是你要想管理的話,主機名和域名必須是有對應的解析的
這種方式是一個個定義,我們還可以指定范圍,比如


[devops@node1 ~]$ cat hosts
192.168.200.[1:10]
# 通過命令來查看當前被定義的主機是哪些
# ansible all --list就是列出主機清單內的全部主機
[devops@node1 ~]$ ansible all --list
hosts (10):
192.168.200.1
192.168.200.2
192.168.200.3
192.168.200.4
192.168.200.5
192.168.200.6
192.168.200.7
192.168.200.8
192.168.200.9
192.168.200.10

可以看到,他確實是我們定義的那樣從1-10這個IP地址范圍

主機組的定于

主機的定義就是直接講被管理的節點寫入到主機清單內,而主機組的定義是需要加上一個[組名]的


[devops@node1 ~]$ cat hosts
[webserver]
node1
node2

中括號里面寫的就是組名,下面的內容就是這個組內有哪些主機
同樣我們可以通過組名來查看組內有哪些主機


# 注意,我之前寫的是ansible all --list
# 這里寫的是webserver,也就是主機組的名字,所以他只會列出這個主機組內的成員
[devops@node1 ~]$ ansible webserver --list
hosts (2):
node1
node2

如果有多個主機組,那么就可以寫多個中括號,一個主機可以隸屬于不同主機組


[devops@node1 ~]$ cat hosts
[webserver]
node1
node2
[sqlserver]
node2
node3
[devops@node1 ~]$ ansible all --list
hosts (3):
node1
node2
node3

這里不知道你有沒有疑問,那我主機和主機組同時定義的時候,位置是隨意的嗎?不是!
單個主機只能寫在主機組之前,如果你寫在主機組之后,不管你空多少行,他都會認為你這個主機是屬于這個組內的,來看例子

Ansible的配置指南(超過1萬人收藏)插圖

從截圖我們可以看到,這個192.168.1.1與主機組sqlserver之前是空了很多行的,我們通過命令來查一下看看


# 我們直接來查sqlserver主機組內有哪些成員
[devops@node1 ~]$ ansible sqlserver --list
hosts (3):
node2
node3
192.168.1.1

看到了嗎,sqlserver主機組內是包含這個主機的,那我們將這個主機提前到所有主機組之前

Ansible的配置指南(超過1萬人收藏)插圖1

我們再來查一下
[devops@node1 ~]$ ansible sqlserver –list
hosts (2):
node2
node3
# 通過這個命令可以查到不屬于任何主機組的主機
[devops@node1 ~]$ ansible ungrouped –list
hosts (1):
192.168.1.1

現在他被定義成了一個單個主機

主機組的嵌套

主機組的嵌套是什么呢?我們可以這樣來想象,假設你現在管理2個機房的服務器,現在你需要對機房1的所有服務器進行軟件升級,這個時候你怎么去選擇機房1呢?我們可以通過主機嵌套來解決


[devops@node1 ~]$ cat hosts
192.168.1.1


[webserver]
node1
node2




[sqlserver]
node2
node3


[MachineRoom:children]
webserver
sqlserver

就是這樣定義的,[MachineRoom:children],也就是說MachineRoom下面有哪些孩子嘛,它下面有webserver組和sqlserver組,這2個組就代表著機房1,所以我需要對機房1進行操作的話我就可以直接選擇Machine這個組就可以了


[devops@node1 ~]$ ansible MachineRoom --list
hosts (3):
node1
node2
node3

選擇主機和組

上面我們說到了定義主機和主機組,定義完了之后我們如何去選擇呢?上面也提到了一些,選擇我們來看如果更精準的選擇

匹配主機


# 或者執行ansible all --list-hosts是一樣的
[devops@node1 ~]$ ansible all --list
hosts (4):
192.168.1.1
node1
node2
node3
  1. 匹配指定的主機或組

# 匹配單個主機
[devops@node1 ~]$ ansible 192.168.1.1 --list
hosts (1):
192.168.1.1
# 配置主機組
[devops@node1 ~]$ ansible webserver --list
hosts (2):
node1
node2
# 匹配多個主機,這種方式可以選擇多個,只需要用逗號隔開就行
[devops@node1 ~]$ ansible 192.168.1.1,webserver --list
hosts (3):
192.168.1.1
node1
node2
# 匹配不屬于任何主機組的主機
[devops@node1 ~]$ ansible ungrouped --list
hosts (1):
192.168.1.1

使用通配符匹配

先改一個hosts文件內容


[devops@node1 ~]$ cat hosts
192.168.1.1
node1.example.com
node2.example.com


[webserver]
node1
node2


[sqlserver]
node2
node3

使用通配符匹配


# 匹配所有以.example.com結尾的主機
[devops@node1 ~]$ ansible *.example.com --list
hosts (2):
node1.example.com
node2.example.com
# 匹配所有.example.com結尾的主機但是不匹配node2開頭的主機,這種情況需要使用引號,如果不使用引號終端會將!當作歷史命令給執行的
[devops@node1 ~]$ ansible '*.example.com,!node2*' --list
hosts (1):
node1.example.com

配置文件優先級

ansible的配置文件也是有優先級的,他一般會存在4個地方

    1. ANSIBLE_CONFIG:首先,Ansible命令會檢查這個環境變量以及指向的配置文件,優先級最高
    1. ./ansible.cfg:當前目錄下的ansible.cfg,如果ANSIBLE_CONFIG環境變量不存在,那么就會使用這個
    1. ~/.ansible.cfg:當前用戶家目錄下的一個隱藏文件,如果當前目錄下沒有ansible.cfg文件,就會檢查這個隱藏文件是否存在
    1. /etc/ansible/ansible.cfg:默認的配置文件,如果以上所有的配置文件都不存在,則會使用這個

配置文件詳解

配置文件段

ansible.cfg的配置迷人分為十段:
[defaults] 通用配置項目
[inventory] 與主機清單相關配置
[privilege_escalation] 特權升級相關配置
[paramiko_connection] 使用paramiko連接的相關配置
[ssh_connection] 使用openssh連接的相關配置
[persistent_connection] 持久連接的配置項
[accelerate] 加速模式相關配置
[selinux] selinux相關配置
[color] ansible命令輸出的顏色相關配置
[diff] 是否再運行時打印diff (變更前與變更后的差異)

配置文件參數說明


[defaults]
inventory = /etc/ansible/hosts
ask_pass = false
remote_user = root
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = False

這些配置我們一行行來看

  1. inventory: 定義默認使用的主機清單,當前是使用的/etc/ansible/hosts,可以將他修改成你想用的那個文件
  2. remote_user:ansible在操作遠程主機時,使用遠程主機上的哪個用戶身份,默認是root,為了安全可以使用一個普通用戶
  3. ask_pass:在操作遠程主機時,登錄時是否輸入密碼,默認為true。如果使用密鑰認證,將這里設置為false
  4. become:是否提權
  5. become_method:如果使用提權,將以何種方式提權,默認時sudo
  6. become_user:提權到哪個用戶,默認提權到root
  7. become_ask_pass:提權是否需要輸入密碼,默認為False

配置案例

前置條件,配置hosts映射,所有節點都要做

主機IP主機名
node1192.168.100.210node1
kvm192.168.100.220node2
echo "192.168.100.210 node1" >> /etc/hosts
echo "192.168.100.220 node2" >> /etc/hosts

需求,使用普通用戶devops去操作主機,devops使用密鑰驗證,可以免密提權到root

1. 在節點上創建一個普通用戶devops,并設置密碼123


[root@node1 ~]# useradd devops
[root@node1 ~]# echo 123|passwd --stdin devops
[root@kvm ~]# useradd devops
[root@kvm ~]# echo 123|passwd --stdin devops

2. 配置sudo提權


[root@node1 ~]# cat /etc/sudoers.d/devops
devops ALL=(root) NOPASSWD:ALL
[root@kvm ~]# cat /etc/sudoers.d/devops
devops ALL=(root) NOPASSWD:ALL

3. 配置管理節點免密登錄到被管節點


[root@node1 ~]# su - devops
[devops@node1 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/devops/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/devops/.ssh/id_rsa.
Your public key has been saved in /home/devops/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:eUVPHb1laerU/LB+EDBFHu8nrtjz9jE91cZ2SditO8Y devops@node1.example.com
The key's randomart image is:
+---[RSA 3072]----+
| .o=o+|
| .o+o=*|
| .+B+=|
| . . o+Bo|
| S . o o=@|
| . +o=*|
| .E=.|
| o.oo.=|
| . o+.o.|
+----[SHA256]-----+
# 將公鑰發送到被管節點
[devops@node1 ~]$ ssh-copy-id node1
[devops@node1 ~]$ ssh-copy-id node2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/devops/.ssh/id_rsa.pub"
The authenticity of host 'node2 (192.168.100.220)' can't be established.
ECDSA key fingerprint is SHA256:sH7gqZEak7Xap0VARUzaZJXrr2y4RE2ds40WKMoCspw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
devops@node2's password: # 這里輸入密碼
Now try logging into the machine, with: "ssh 'node2'"

4. 配置


# 1. 將配置文件拷貝到普通用戶家目錄下
[devops@node1 ~]$ cp -r /etc/ansible/ .
[devops@node1 ~]$ ls
ansible
# 2. 進入目錄修改配置
[devops@node1 ~]$ cd ansible/
[devops@node1 ansible]$ ls
ansible.cfg hosts roles
# 最后將配置文件修改成這樣就行
[devops@node1 ansible]$ cat ansible.cfg
[defaults]
inventory = ./hosts
sudo_user = devops
ask_sudo_pass = False
ask_pass = False
host_key_checking = False
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

5. 寫主機清單


[devops@node1 ansible]$ cat hosts
node1
node2

6. 驗證配置是否生效


[devops@node1 ansible]$ ansible all --list
hosts (2):
node1
node2
[devops@node1 ansible]$ ansible all -m shell -a 'whoami'
node2 | CHANGED | rc=0 >>
root
node1 | CHANGED | rc=0 >>
root

我們可以看到,node1和node2上都執行成功了,并且返回的結果時root,說明提權也是配置正確的
這就是ansible的基本配置了

鏈接:https://www.cnblogs.com/fsdstudy/p/18030956

                                                              (版權歸原作者所有,侵刪)

Ansible的配置指南(超過1萬人收藏)插圖2
常見的100個Shell命令,超級實用!插圖4

掃描二維碼添加好友

備注:【運維初中高】100%可以獲得資料哦

本文鏈接:http://www.thecarconnectin.com/46203.html

網友評論comments

發表回復

您的電子郵箱地址不會被公開。

暫無評論

Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
掃二維碼
掃二維碼
返回頂部
国产曰批视频免费观看完|久久久一本精品99久久精品66直播|色天使色偷偷AV一区二区三区|国产色秀视频在线播放|亚洲欧洲免费三级网站