一篇讓你快速熟悉ansible和使用
#基本概述
ansible是一款開源自動化工具,基于python paramiko模塊開發(fā),分布式,無需客戶端
官網(wǎng)網(wǎng)址:https://www.ansible.com
官方文檔:https://docs.ansible.com/ansible/latest/user_guide/become.html
#應(yīng)用場景
批量執(zhí)行和分發(fā)任務(wù)
#如:同時在1000臺服務(wù)器上安裝apache服務(wù),并在安裝后啟動服務(wù)
#如:將某一個文件一次性拷貝到1000臺服務(wù)器上
#特點
部署簡單,只需要在ansible控制端部署
默認使用SSH協(xié)議進行管理主從集中化管理配置簡單,擴展性強支持API及自定義模塊,可通過python擴展通過playbooks劇本來定制強大的配置
#架構(gòu)圖

#安裝
1.設(shè)置epel倉庫(ansible倉庫默認不在yum倉庫中,所以要啟用epel倉庫)
yum install epel-release -y
2.使用yum進行安裝
yum install ansible -y
3.查看版本
Ansible --version
#ansible命令參數(shù)
- ansible - Define and run a single task 'playbook' against a set of hosts
- #針對一組主機定義并運行單個任務(wù)“劇本”
- ansible命令語法:ansible [-i:主機文件] [-f:批次] [組名] [-m 模塊名稱] [-a:模塊參數(shù)]
#ansible常用參數(shù)
- -v,–verbose # 詳細模式,如果命令執(zhí)行成功,輸出詳細的結(jié)果 (-vv –vvv -vvvv)
- -i PATH, -inventory=PATH # 指定 host 文件的路徑,默認是在 /etc/ansible/hosts inventory [ˈɪnvəntri] 庫存 -f NUM,-forks=NUM # NUM 是指定一個整數(shù),默認是 5 ,指定 fork 開啟同步進程的個數(shù)。
- -m NAME,-module-name=NAM # 指定使用的 module 名稱,默認使用 command模塊
- -a,MODULE_ARGS #指定 module 模塊的參數(shù)
- -k,-ask-pass #提示輸入 ssh 的密碼,而不是使用基于 ssh 的密鑰認證 -sudo # 指定使用 sudo 獲得 root 權(quán)限 -K,-ask-sudo-pass #提示輸入 sudo 密碼,與 -sudo 一起使用 -u USERNAME,-user=USERNAME # 指定移動端的執(zhí)行用戶 -C,–check #測試此命令執(zhí)行會改變什么內(nèi)容,不會真正的去執(zhí)行
#ansible查看幫助
- ansible-doc -l #列出所有的模塊列表
- ansible-doc -s 模塊名 #查看指定模塊的參數(shù)
- ansible-doc 模塊名 #查看指定模塊的詳細參數(shù)
- #示例:ansible-doc yum | ansible-dco firewalld
#基本使用
#實驗拓撲圖

一:定義主機清單(有兩種方式:一種基于端口,用戶名密碼,一種基于SSH密鑰)
1、基于端口、用戶名、密碼定義清單
- 格式:ansible_ssh_port:指定ssh端口 ansible_ssh_user:指定用戶 ansible_ssh_pass:指定密碼 ssh_sudo_pass:指明sudo時候的密碼
2、基于SSH密鑰來訪問定義清單
- 在ansible服務(wù)端生成秘鑰,并且復(fù)制公鑰到節(jié)點中
- #ssh-keygen 一直回車#一鍵生成 ssh-keygen -f ~/.ssh/id_rsa -P '' -q
- 使用ssh-copy-id命令復(fù)制ansible公鑰到節(jié)點 ssh-copy-id root@192.168.186.142
- #使用sshpass批量分發(fā)密鑰到服務(wù)器[root@game scripts]# cat scp_isa.sh
- #!/bin/baship=(130 131 132 133)
- for i in ${ip[@]}
- do
- sshpass -p"Skills39" ssh-copy-id -i /root/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" root@192.168.228.$i
- done#服務(wù)端查看效果[root@game ~]# cat /root/.ssh/known_hosts
- 192.168.228.130 ecdsa-sha2-nistp256 AAAAE2VjZHNhL.....AuHi+n9iVPC0Of9D/MKK8lWuGHg=
- 192.168.228.131 ecdsa-sha2-nistp256 AAAAE2VjZHNh...d8FX4mqoYCp43E2knM9t8YAZGg/k08=
- 192.168.228.132 ecdsa-sha2-nistp256 AAAAE2VjZHNhL....y6U2tCs+SU/Sg+rGR8E76lqC316Q=
- 192.168.228.133 ecdsa-sha2-nistp256 AAAAE2....iTuiJ+0VNOYrhh2gqW36XJVlW1+p6pj2dbo=
- #服務(wù)端測試面密鑰登錄ssh 192.168.228.130
- #配置清單#/etc/ansible/hosts [db-server] 192.168.186.142
- 192.168.186.135
- #網(wǎng)段范圍寫法 [all] 192.168.228.[130:133]
- #如果寫主機名,需要在/etc/hosts里面寫 [a] k8s-master#/etc/hosts[root@game ~]# cat /etc/hosts
- 192.168.228.130 k8s-master
二:在ansible服務(wù)端運行命令
- #提示:
- #首次運行如果不進行什么修改的話會提出警告,可以按照將deprecation改為False[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default,
- this will change, but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation
- warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
- [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
- #[root@k8s-master ~]# vim /etc/ansible/ansible.cfg
- deprecation_warnings=False
1、使用ping檢查k8s-node節(jié)點機器的連通性
- [root@k8s-master ~]# ansible k8s-node -m ping
- #提示:也可以指定hosts文件,但是默認就是讀取那個文件,所以不指定也是可以的 # ansible -i /etc/ansible/hosts k8s-node -m ping192.168.86.133 | SUCCESS => {
- "ansible_facts": {
- "discovered_interpreter_python": "/usr/bin/python"
- }, "changed": false,
- "ping": "pong"
- }192.168.86.132 | SUCCESS => {
- "ansible_facts": {
- "discovered_interpreter_python": "/usr/bin/python"
- }, "changed": false,
- "ping": "pong"
- }
2、檢查ansible節(jié)點的運行時間
- [root@k8s-master ~]# ansible k8s-node -m command -a 'uptime'
- 192.168.86.133 | CHANGED | rc=0 >>
- 23:16:34 up 5 min, 2 users, load average: 0.00, 0.03, 0.03
- 192.168.86.132 | CHANGED | rc=0 >>
- 23:16:34 up 31 min, 2 users, load average: 0.00, 0.01, 0.04
3、檢查節(jié)點的內(nèi)核版本
- [root@k8s-master ~]# ansible k8s-node -a 'uname -r'
- 192.168.86.132 | CHANGED | rc=0 >>
- 3.10.0-1062.el7.x86_64
- 192.168.86.133 | CHANGED | rc=0 >>
- 3.10.0-1062.el7.x86_64