Ansible學習筆記--配置ansible-創(chuàng)新互聯

環(huán)境

系統環(huán)境:CentOS Linux release 7.5.1804 (Core)

創(chuàng)新互聯-專業(yè)網站定制、快速模板網站建設、高性價比吳中網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式吳中網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋吳中地區(qū)。費用合理售后完善,十年實體公司更值得信賴。

ansible版本:ansible 2.9.0

ansible的配置

環(huán)境配置

Ansible配置以ini格式存儲配置數據,在Ansible中幾乎所有配置都可以通過Ansible的Playbook或環(huán)境變量來重新賦值。在運行Ansible命令時,命令將會按照以下順序查找配置文件。

(1)ANSIBLE_CONFIG :首先,Ansible命令會檢查環(huán)境變量,及這個環(huán)境變量指向的配置文件。

(2)./ansible.cfg :其次,將會檢查當前目錄下的ansible.cfg配置文件。

(3)~/.ansible.cfg :再次,將會檢查當前用戶home目錄下的.ansible.cfg配置文件。

(4)/etc/ansible/ansible.cfg :最后,將會檢查在用軟件包管理工具安裝Ansible時自動產生的配置文件。

使用環(huán)境變量方式來配置

大多數的Ansible參數可以通過設置帶有ANSIBLE_開頭的環(huán)境變量進行配置,參數名稱必須都是大寫字母,如下配置:

export ANSIBLE_SUDO_USER=root

設置了環(huán)境變量之后,ANSIBLE_SUDO_USER就可以在后續(xù)操作中直接引用。

設置ansible.cfg配置參數

Ansible有很多配置參數,以下是幾個默認的配置參數:

inventory = /root/ansible/hosts
library = /usr/share/my_modules/
forks = 5
sudo_user = root
remote_port = 22
host_key_checking = False
timeout = 20
log_path = /var/log/ansible.log

對上面的參數進行說明:

<1> inventory:該參數表示inventory文件的位置,資源清單(inventory)就是Ansible需要連接管理的一些主機列表。

<2> library:Ansible的所有操作都使用模塊來執(zhí)行實現,這個library參數就是指向存放Ansible模塊的目錄。

<3> forks:設置默認情況下Ansible最多能有多少個進程同時工作,默認5個進程并行處理。具體需要設置多少個,可以根據控制端性能和被管理節(jié)點的數量來確定。

<4> sudo_user:設置默認執(zhí)行命令的用戶,也可以在playbo o k中重新設置這個參數。

<5> remote_port:指定連接被管理節(jié)點的管理端口,默認是22,除非設置了特殊的SSH端口,否則不需要修改此參數。

<6> host_key_checking:設置是否檢查SSH主機的密鑰??梢栽O置為True或False。即ssh的主機再次驗證。

<7> timeout:設置SSH連接的超時間隔,單位是秒。

<8> log_path:Ansible默認不記錄日志,如果想把Ansible系統的輸出記錄到日志文件中,需要設置log_path。需要注意,模塊將會調用被管節(jié)點的(r)syslog來記錄,執(zhí)行Ansible的用戶需要有寫入日志的權限。

SSH互信配置

將ansible server的ssh公鑰分發(fā)到各被管節(jié)點上。

指定ssh公鑰生成格式和存放路徑:ssh-keygen -t rsa -f /tmp/temp/id_rsa -N ''

ssh公鑰分發(fā)目標機:ssh-copy-id root@192.168.246.204

也可以使用ansible自身來批量添加密鑰到被控節(jié)點上。使用ansible的authorized_key模塊即可。

以下是借助expect 工具實現非交互式的s s h- co py- id,免得總是詢問遠程用戶的登錄密碼。

# 安裝expect
yum install -y expect
# 編輯expect腳本
cat auto_sshcopyid.exp
#!/usr/bin/expect
 set timeout 10
 set user_hostname [lindex $argv 0]
 set password [lindex $argv 1]
 spawn ssh-copy-id $user_hostname
 expect {
         "(yes/no)?"
         {
                 send "yes\n"
                 expect "*password: " { send "$password\n" }
         }
         "*password: " { send "$password\n" }
}
expect eof
# 編輯調用expect的sehll腳本
#!/bin/bash
#加載系統函數庫
. /etc/init.d/functions

ip=$(echo -n "$(seq -s "," 59 61),187" | xargs -d "," -i echo 192.168.246.{})
password="wtf"
for i in $ip
do
    ping -c 1 $i > /dev/null

    if [ $(echo $?) -eq 0 ];then
        /tmp/temp/auto_sshcopyid.exp root@$i $password & >> /tmp/temp/a.log
        action "$i is ok" /bin/true
    else
        action "$i There is no!" /bin/false
    fi
done
# 執(zhí)行shell腳本配置互信
chmod +x /tmp/temp/{sshkey.sh,auto_sshcopyid.exp}
./sshkey.sh

簡單測試

向默認的inventory文件/etc/ansible/hosts中添加上幾個被管節(jié)點清單。

[test]
## ansible_python_interpreter指定python解釋器版本
192.168.246.187 ansible_python_interpreter=/usr/local/python3/bin/python3
192.168.246.188
192.168.246.189

使用ping模塊測試被管節(jié)點。能成功,說明ansible能控制該節(jié)點。

## 單獨測試一臺node主機
ansible 192.168.246.187 -m ping

192.168.246.187 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
## 測試一個主機組
ansible test -m ping
192.168.246.188 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.246.188 port 22: No route to host",
    "unreachable": true
}
192.168.246.189 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.246.189 port 22: No route to host",
    "unreachable": true
}
192.168.246.187 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

如果要指定非root用戶運行ansible命令,則加上"--sudo"或"-s"來提升為sudo_user配置項所指定用戶的權限。

ansible 192.168.246.187 -m ping -b --become-user=root --become-method=sudo

inventory

inventory用于定義ansible要管理的主機列表,可以定義單個主機和主機組。上面的/etc/ansible/hosts就是默認的inventory。下面展示了inventory常用的定義規(guī)則。

cat -n /etc/ansible/hosts
 1 192.168.100.59:22
 2 192.168.100.60 ansible_ssh_pass=123456 ansible_ssh_port=22
 3 [nginx]
 4 192.168.100.5[7:9]
 5 [nginx:vars]
 6 ansible_ssh_pass='123456'
 7 [webservers:children]
 8 nginx

第一行和第二行單獨定義主機,第一行帶上了連接被管節(jié)點的端口,第二行帶上了單獨傳遞給ssh的參數,分別是ssh連接時的登錄遠程用戶的密碼參數和ssh的連接端口。

第三行和第四行定義的是nginx主機組,該組中包含了192.168.100.57 到59這3臺主機。還支持字母的擴展,如"web[a- d]"。

第五行和第六行定義了要傳遞給nginx主機組的變量。若定義為"[all:vars]"或"[*:vars]"則表示傳遞給所有主機的變 量。

第七和第八行定義了一個新的主機組webservers,改組的組成員有nginx組。

可以指定多個inventory配置文件,只需在ansible的配置文件如/etc/ansible/ansible.cfg中將inventory指令設置為 對應的文件或目錄即可,如果是目錄,那么此目錄下的所有文件都是inventory文件。

inventory文件中可以使用一些內置變量,絕大多數ansible的連接和權限變量都可以在此使用,見ansible命令解釋。常見的有:

(1)ansible_ssh_host : ansible使用ssh要連接的主機。

(2)ansible_ssh_port : ssh的端口。默認為22。

(3)ansible_ssh_user : ssh登錄的用戶名。默認為root。

(4)ansible_ssh_pass : ssh登錄遠程用戶時的認證密碼。

(5)ansible_ssh_private_key_file : ssh登錄遠程用戶時的認證私鑰。

(6)ansible_connection : 使用何種模式連接到遠程主機。默認值為smart(智能),表示當本地ssh支持持久連接(controlpersist)時采用ssh連接,否則采用python的paramiko ssh連接。

(7)ansible_shell_type : 指定遠程主機執(zhí)行命令時的shell解析器,默認為sh(不是bash,它們是有區(qū)別的,也不是全路徑)。

(8)ansible_python_interpreter : 遠程主機上的python解釋器路徑。默認為/usr/bin/python。

(9)ansible_*_interpreter : 使用什么解釋器。例如,sh、bash、awk、sed、expect、ruby等等。

其中有幾個參數可以在配置文件ans ible.cf g中指定,但指定的指令不太一樣,以下是對應的配置項:

(1)remote_port: 對應于ansible_ssh_port。

(2)remote_user: 對應于ansible_ssh_user。

(3)private_key_f ile: 對應于ansible_ssh_private_key_f ile。

(4)excutable: 對應于ansible_shell_type。但有一點不一樣,excutable必須指定全路徑,而后者只需指定 basename。

如果定義了"ansible_ssh_host",那么其前面的主機名就稱為別名。例如,以下inventory文件中nginx就是一個別名,真正連接的對象是192.168.246.187。/etc/ansible/hosts如下:

[test]
nginx ansible_ssh_host=192.168.246.187
#192.168.246.187
192.168.246.188
192.168.246.189
[test:vars]
ansible_ssh_private_key_file=/root/.ssh/rsa_back/id_rsa
ansible_python_interpreter=/usr/local/python3/bin/python3

執(zhí)行ansible:

ansible test -m ping
nginx | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.246.188 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.246.188 port 22: No route to host",
    "unreachable": true
}
192.168.246.189 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.246.189 port 22: No route to host",
    "unreachable": true
}

手動指定inventory主機清單文件路徑:

ansible test -i /tmp/inventory_file -m ping

說明

本博文是參考馬龍帥大佬文章整理生成,屬于博主讀書筆記,如有侵權,請大佬與我聯系,立刪!

最后,感謝開源,擁抱開源~

另外有需要云服務器可以了解下創(chuàng)新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網站題目:Ansible學習筆記--配置ansible-創(chuàng)新互聯
分享網址:http://muchs.cn/article46/coeohg.html

成都網站建設公司_創(chuàng)新互聯,為您提供全網營銷推廣、動態(tài)網站、用戶體驗、ChatGPT、自適應網站建站公司

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

微信小程序開發(fā)