自動化運維工具Ansible
- 2020 年 10 月 1 日
- 筆記
介紹
更加簡潔的自動化運維工具,不需要再客戶端上安裝,
基於python開發,
安裝簡單,centos上直接yum,
可以實現批量作業系統配置、批量程式的部署、批量運行命令。
Ansible常用命令參數
-a:制定模組所需的參數
-i:文件路徑
-m:要使用的模組的名稱
-h:幫助資訊
-v:詳細資訊
all:針對hosts定義的所有主機執行
1、Ansible安裝部署
(1)安裝ansible
直接yum安裝
yum install ansible -y
版本資訊
(2)ssh免密鑰登錄設置(只在主控制端使用)
在ansible伺服器上生成公鑰和私鑰
[root@mycat ansible]# ssh-keygen -t rsa(-t rsa:表示使用rsa演算法進行加密)
//會讓你設置密鑰生成路徑和密鑰(可以不設置默認路徑和自動生成密鑰)
(3)將公鑰發送給客戶端
[root@mycat ansible]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
//將公鑰發送到客戶端41上(提示輸入是否連接yes,和客戶端登陸密碼)
(4)測試登錄客戶端
使用scp命令也可以
[root@mycat ansible]# scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh
//將公鑰複製到客戶端42上
如果出現報錯可能是
1)檢查selinux是否關閉
2)公鑰文件的許可權是否為600
3)Python的版本是否一致
(5)測試登陸到客戶端42上
2、編輯hosts文件(/etc/anside/hosts)
添加組名(服務)組內可以有多個ip
[webservers]
192.168.200.41
[dbservers]
192.168.200.42
(1)測試主機連通性
只測試web
全部測試
常用模組
1. 查看所有模組:ansible-doc -l
2. 查看具體某個模組:ansible-doc -s (模組的名)
格式
1、遠程命令模組
commond:默認模組(可省略)用於遠程執行命令(不能使用變數)
示例:查看遠程主機名
[root@mycat ansible]# ansible all -m command -a “hostname”
1)chdir:執行命令前,進入到指定目錄
//進入到41的home目錄下查看
2)creates:判斷文件是否存在,如果存在不執行(先在41的home下創建1.txt)
//判斷1.txt存在,就不執行後面的內容,skip跳過
//判斷3.txt不存在就執行後面的,在41上創建2.txt
3)removes:判斷文件是否存在,如果存在就執行
//判斷到2.txt就創建4.txt
//判斷沒有6.txt就不創建
shell:執行遠程主機上的腳本(在遠程主機上調用shell解釋器運行命令,支援shell的各種功能)
示例:執行41主機上的3.sh
[root@mycat ansible]# ansible 192.168.200.41 -m shell -a “/home/3.sh”
scripts:遠程主機執行主控伺服器ansible上的腳本(把本地腳本複製到遠程主機,並執行)
示例:執行ansible上的test1,輸出41的主機名
2、ping:測試連接可通性
[root@mycat ansible]# ansible webservers -m ping
3、文件模組
copy:複製文件(主要用於將管理主機上的數據資訊傳送給多台主機)
常用參數
1)Src:指定將本地管理主機的什麼數據資訊進行遠程複製
//把test1複製到41的data下
2)backup:默認數據複製到遠程主機,會覆蓋原有文件(選項yes/no是否將原文件進行備份)
//修改一下test1的內容,然後執行backup=yes覆蓋原文件,並且備份原文件
查看41上data生成了test1的備份
3)content:(可以代替src)在文件中添加資訊,直接設定文件的值
//向test1中加入123內容
//content添加的內容不會添加回車符
//在41上查看test1
4)group:文件數據複製到遠程主機,設置文件/目錄的屬組
owner:文件數據複製到遠程主機,設置文件/目錄的屬主
mode:文件數據複製到遠程主機,設置文件/目錄的許可權
//創建test2,複製test2到41上它的組為www,用戶為qqq,許可權為755
查看
5)dest(required):為必須使用的參數,必選項。將數據複製到遠程節點的絕對路徑,如果源文件是一個目錄,那麼該路徑也必須是個目錄
4、管理任務計劃
cron:定時任務模組
常用參數
1)Weekday/mouth/day/hour/minute(周/月/日/小時/分鐘)
//*代表一周都執行,*/2一周執行兩次
2)Job:設置定時執行任務
3)Name:設定定時任務注釋描述
//每五分鐘同步一次(ntpdate 同步更新時間)
查看41的crontab -l查看定時任務的列表
4)state:刪除/創建指定的定時任務absent/present
再查看41上的定時任務就沒有了
5)disabled:將指定定時任務進行注釋
//注釋和取消注釋時必須填寫job和時間參數
查看41(內容被注釋)
取消注釋disabled=no
再次查看
5、用戶模組
group:批量創建組
常用參數
1)gid:創建的組ID
2)Name:創建組的名稱
3)State:刪除/創建組
創建組abc,gid為1055
[root@mycat ~]# ansible 192.168.200.41 -m group -a “name=abc gid=1055”
刪除指定組abc,gid為1055
[root@mycat ~]# ansible 192.168.200.41 -m group -a “name=abc gid=1055 state=absent”
user:批量創建用戶
常用參數
1)Groups:指定用戶的屬組
2)Uid:指定用戶的uid
3)Passwd:指定用戶的密碼(不能使用明文,只能使用密文方式)
4)Name:指定用戶名
5)Home:指定用戶的家目錄()
6)Createhome:是否創建家目錄yes/no
7)System:是否為系統用戶
8)Remove:是否連同家目錄一起刪掉yes/no
9)State:創建/刪除absent/present
示例:創建www1
[root@mycat ~]# ansible 192.168.200.41 -m user -a “name=www1 comment=lqb uid=1001 group=root”
刪除www1用戶(及其家目錄)
[root@mycat ~]# ansible 192.168.200.41 -m user -a “name=www1 state=absent remove=yes”
6、Rsynchronize:使用rsync同步文件
常用參數
1)archive:歸檔,相當於同時開啟recursive(遞歸)、links、perms、times、owner、
2)group、-D選項都為yes ,默認該項為開啟
3)checksum: 跳過檢測sum值,默認關閉
4)compress:是否開啟壓縮
5)copy_links:複製鏈接文件,默認為no ,注意後面還有一個links參數
6)delete: 刪除不存在的文件,默認no
7)dest:目錄路徑
8)dest_port:默認目錄主機上的埠 ,默認是22,走的ssh協議
9)dirs:傳速目錄不進行遞歸,默認為no,即進行目錄遞歸
10)rsync_opts:rsync參數部分
11)set_remote_user:主要用於/etc/ansible/hosts中定義或默認使用的用戶與rsync使用的用戶不同的情況
12)mode: push或pull 模組,push模的話,一般用於從本機向遠程主機上傳文件,pull 模式用於從遠程主機上取文件,pull 模式用於從遠程主機上取文件
//首先需要在遠程客戶端下載rsync
將ansible的hosts同步到41的tmp目錄下
查看41的tmp/hosts
Get_url:該模組主要用於從http,ftp ,https等伺服器上下載文件類似於wget。
sha256sum:下載完成後進行sha256 check;
timeout:下載超時時間,默認10s
url:下載的URL
url_password、url_username:主要用於需要用戶名密碼進行驗證的情況
use_proxy:是事使用代理,代理需事先在環境變更中定義
//從網站下載頁面到data/1下
查看是否下載成功
Yum:軟體包管理
Stat:獲取遠程文件資訊
Service:遠程主機系統服務管理
Sysctl:遠程主機sysctl配置