碼??!Ansible安裝使用詳解來襲!
一、使用 yum 安裝
1.使用yum安裝
yum install epel-release -y
yum install ansible –y
2.使用 pip(python的包管理模塊)安裝
首先,我們需要安裝一個(gè)python-pip包,安裝完成以后,則直接使用pip命令來安裝我們的包,具體操作過程如下:
yum install python-pip
pip install ansible
3.查看ansible的版本號(hào)
[root@app01 paas-basic]# ansible --version
ansible 2.9.18
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Nov 16 2020, 22:23:17) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
[root@app01 paas-basic]#
二、ansible的配置文件
1.ansible 命令執(zhí)行過程
- 加載自己的配置文件,默認(rèn)/etc/ansible/ansible.cfg;
- 查找對(duì)應(yīng)的主機(jī)配置文件,找到要執(zhí)行的主機(jī)或者組;
- 加載自己對(duì)應(yīng)的模塊文件,如 command;
- 通過ansible將模塊或命令生成對(duì)應(yīng)的臨時(shí)py文件(python腳本), 并將該文件傳輸至遠(yuǎn)程服務(wù)器;
- 對(duì)應(yīng)執(zhí)行用戶的家目錄的.ansible/tmp/XXX/XXX.PY文件;
- 給文件 +x 執(zhí)行權(quán)限;
- 執(zhí)行并返回結(jié)果;
- 刪除臨時(shí)py文件,sleep 0退出;
2.ansible 程序結(jié)構(gòu)
安裝目錄如下(yum安裝):
配置文件目錄:/etc/ansible/
執(zhí)行文件目錄:/usr/bin/
Lib庫依賴目錄:/usr/lib/pythonX.X/site-packages/ansible/
Help文檔目錄:/usr/share/doc/ansible-X.X.X/
Man文檔目錄:/usr/share/man/man1/
3.ansible配置文件查找順序
ansible與我們其他的服務(wù)在這一點(diǎn)上有很大不同,這里的配置文件查找是從多個(gè)地方找的,順序如下:
1、檢查環(huán)境變量ANSIBLE_CONFIG指向的路徑文件(export ANSIBLE_CONFIG=/etc/ansible.cfg);
2、~/.ansible.cfg,檢查當(dāng)前目錄下的ansible.cfg配置文件;
3、/etc/ansible.cfg檢查etc目錄的配置文件。
4.ansible配置文件
ansible 的配置文件為/etc/ansible/ansible.cfg,ansible 有許多參數(shù),下面我們列出一些常見的參數(shù):
inventory = /etc/ansible/hosts #這個(gè)參數(shù)表示資源清單inventory文件的位置
library = /usr/share/ansible #指向存放Ansible模塊的目錄,支持多個(gè)目錄方式,只要用冒號(hào)(:)隔開就可以
forks = 5 #并發(fā)連接數(shù),默認(rèn)為5
sudo_user = root #設(shè)置默認(rèn)執(zhí)行命令的用戶
remote_port = 22 #指定連接被管節(jié)點(diǎn)的管理端口,默認(rèn)為22端口,建議修改,能夠更加安全
host_key_checking = False #設(shè)置是否檢查SSH主機(jī)的密鑰,值為True/False。關(guān)閉后第一次連接不會(huì)提示配置實(shí)例
timeout = 60 #設(shè)置SSH連接的超時(shí)時(shí)間,單位為秒
log_path = /var/log/ansible.log #指定一個(gè)存儲(chǔ)ansible日志的文件(默認(rèn)不記錄日志)
5.ansible主機(jī)清單
在配置文件中,我們提到了資源清單,這個(gè)清單就是我們的主機(jī)清單,里面保存的是一些 ansible 需要連接管理的主機(jī)列表。我們可以來看看他的定義方式:
1)直接指明主機(jī)地址或主機(jī)名:
green.example.com
blue.example.com#
192.168.100.1
192.168.100.10
2)定義一個(gè)主機(jī)組[組名]把地址或主機(jī)名加進(jìn)去:
[mysql_test]
192.168.253.159
192.168.253.160
192.168.253.153
需要注意的是,這里的組成員可以使用通配符來匹配,這樣對(duì)于一些標(biāo)準(zhǔn)化的管理來說就很輕松方便了。
我們可以根據(jù)實(shí)際情況來配置我們的主機(jī)列表,具體操作如下:
[root@server ~]# vim /etc/ansible/hosts
[web]
192.168.19.100
192.168.19.101
6.設(shè)置ssh無密碼登錄
設(shè)置免密碼登錄:
ssh-keygen
ssh-copy-id -p 33 root@192.168.19.101
7.ansible 命令詳解
命令的具體格式如下:
ansible [-f forks] [-m module_name] [-a args]
也可以通過ansible -h來查看幫助,下面我們列出一些比較常用的選項(xiàng),并解釋其含義:
-a MODULE_ARGS #模塊的參數(shù),如果執(zhí)行默認(rèn)COMMAND的模塊,即是命令參數(shù),如:“date”,“pwd”等等
-k,--ask-pass #ask for SSH password。登錄密碼,提示輸入SSH密碼而不是假設(shè)基于密鑰的驗(yàn)證
--ask-su-pass #ask for su password。su切換密碼
-K,--ask-sudo-pass #ask for sudo password。提示密碼使用sudo,sudo表示提權(quán)操作
--ask-vault-pass #ask for vault password。假設(shè)我們?cè)O(shè)定了加密的密碼,則用該選項(xiàng)進(jìn)行訪問
-B SECONDS #后臺(tái)運(yùn)行超時(shí)時(shí)間
-C #模擬運(yùn)行環(huán)境并進(jìn)行預(yù)運(yùn)行,可以進(jìn)行查錯(cuò)測試
-c CONNECTION #連接類型使用
-f FORKS #并行任務(wù)數(shù),默認(rèn)為5
-i INVENTORY #指定主機(jī)清單的路徑,默認(rèn)為/etc/ansible/hosts
--list-hosts #查看有哪些主機(jī)組
-m MODULE_NAME #執(zhí)行模塊的名字,默認(rèn)使用 command 模塊,所以如果是只執(zhí)行單一命令可以不用 -m參數(shù)
-o #壓縮輸出,嘗試將所有結(jié)果在一行輸出,一般針對(duì)收集工具使用
-S #用 su 命令
-R SU_USER #指定 su 的用戶,默認(rèn)為 root 用戶
-s #用 sudo 命令
-U SUDO_USER #指定 sudo 到哪個(gè)用戶,默認(rèn)為 root 用戶
-T TIMEOUT #指定 ssh 默認(rèn)超時(shí)時(shí)間,默認(rèn)為10s,也可在配置文件中修改
-u REMOTE_USER #遠(yuǎn)程用戶,默認(rèn)為 root 用戶
-v #查看詳細(xì)信息,同時(shí)支持-vvv,-vvvv可查看更詳細(xì)信息
8.執(zhí)行命令
[root@ambari1 .ssh]# ansible all -m ping
The authenticity of host '192.168.17.221 (192.168.17.221)' can't be established.
ECDSA key fingerprint is c5:76:ed:2e:c8:6b:85:25:0b:d7:b4:8f:12:66:72:1f.
Are you sure you want to continue connecting (yes/no)? yes
192.168.19.100 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Warning: Permanently added '192.168.19.100' (ECDSA) to the list of known hosts.\r\nPermission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n",
"unreachable": true
}
192.168.19.101 | SUCCESS => {
"changed": false,
"ping": "pong"
}
存在的問題解決:
從上面我們可以看到,192.168.19.100這一臺(tái)出現(xiàn)了問題,并不能執(zhí)行成功,此時(shí)可以在/etc/ansible/hosts的基礎(chǔ)上添加相關(guān)內(nèi)容如下:
## db-[99:101]-node.example.com
[master]
192.168.19.100 ansible_connection=ssh ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=33
192.168.19.101
三、ansible的命令
1.command 模塊
這個(gè)模塊可以直接在遠(yuǎn)程主機(jī)上執(zhí)行命令,并將結(jié)果返回本主機(jī)。
[root@test1 ~]# ansible web -m command -a 'netstat -ntlp'
192.168.19.100 | CHANGED | rc=0 >>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
192.168.19.101 | CHANGED | rc=0 >>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
[root@test1 ~]#
2.shell 模塊
shell模塊可以在遠(yuǎn)程主機(jī)上調(diào)用shell解釋器運(yùn)行命令,支持shell的各種功能,例如管道等。
[root@test1 ~]# ansible web -m shell -a 'cat /etc/passwd |grep "root"'
192.168.19.101 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
192.168.19.100 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@test1 ~]#