自動化運維工具Ansible

  • 2020 年 10 月 1 日
  • 筆記

介紹

更加簡潔的自動化運維工具,不需要再客戶端上安裝,

基於python開發,

安裝簡單,centos上直接yum,

可以實現批量作業系統配置、批量程式的部署、批量運行命令。

 

Ansible常用命令參數

-a:制定模組所需的參數

-i:文件路徑

-m:要使用的模組的名稱

-h:幫助資訊

-v:詳細資訊

all:針對hosts定義的所有主機執行

1、Ansible安裝部署

(1)安裝ansible

直接yum安裝

yum install ansible -y

版本資訊

 

2ssh免密鑰登錄設置(只在主控制端使用)

 

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”

1chdir:執行命令前,進入到指定目錄

//進入到41home目錄下查看

 

 

2creates:判斷文件是否存在,如果存在不執行(先在41home下創建1.txt

 

//判斷1.txt存在,就不執行後面的內容,skip跳過

//判斷3.txt不存在就執行後面的,在41上創建2.txt

 

 

3removes:判斷文件是否存在,如果存在就執行

//判斷到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的主機名

 

 

2ping:測試連接可通性

 

[root@mycat ansible]# ansible webservers -m ping

 

 

3、文件模組

 

copy:複製文件(主要用於將管理主機上的數據資訊傳送給多台主機)

 

常用參數

 

1)Src:指定將本地管理主機的什麼數據資訊進行遠程複製

//test1複製到41data

 

 

 

2)backup:默認數據複製到遠程主機,會覆蓋原有文件(選項yes/no是否將原文件進行備份)

//修改一下test1的內容,然後執行backup=yes覆蓋原文件,並且備份原文件

查看41data生成了test1的備份

 

 

3content:(可以代替src)在文件中添加資訊,直接設定文件的值

//test1中加入123內容

//content添加的內容不會添加回車符

//41上查看test1

 

 

4group:文件數據複製到遠程主機,設置文件/目錄的屬組
owner:文件數據複製到遠程主機,設置文件/目錄的屬主
mode:文件數據複製到遠程主機,設置文件/目錄的許可權

//創建test2,複製test241上它的組為www,用戶為qqq,許可權為755

查看

5destrequired):為必須使用的參數,必選項。將數據複製到遠程節點的絕對路徑,如果源文件是一個目錄,那麼該路徑也必須是個目錄

 

4、管理任務計劃

 

cron:定時任務模組

 

常用參數

 

1Weekday/mouth/day/hour/minute(周///小時/分鐘)

//*代表一周都執行,*/2一周執行兩次

 

2Job:設置定時執行任務

 

3Name:設定定時任務注釋描述
//每五分鐘同步一次(ntpdate 同步更新時間)

查看41crontab -l查看定時任務的列表

 

 

4state:刪除/創建指定的定時任務absent/present

再查看41上的定時任務就沒有了

 

5disabled:將指定定時任務進行注釋

//注釋和取消注釋時必須填寫job和時間參數

查看41(內容被注釋)

取消注釋disabled=no

再次查看

 

 

5、用戶模組

 

group:批量創建組

 

常用參數

 

1gid:創建的組ID

2Name:創建組的名稱

3State:刪除/創建組

創建組abcgid1055

[root@mycat ~]# ansible 192.168.200.41 -m group -a “name=abc gid=1055”

刪除指定組abcgid1055

[root@mycat ~]# ansible 192.168.200.41 -m group -a “name=abc gid=1055 state=absent”

 

user:批量創建用戶

 

常用參數

 

1Groups:指定用戶的屬組

2Uid:指定用戶的uid

3Passwd:指定用戶的密碼(不能使用明文,只能使用密文方式)

4Name:指定用戶名

5Home:指定用戶的家目錄()

6Createhome:是否創建家目錄yes/no

7System:是否為系統用戶

8Remove:是否連同家目錄一起刪掉yes/no

9State:創建/刪除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”

 

6Rsynchronize:使用rsync同步文件

 

常用參數

1archive:歸檔,相當於同時開啟recursive(遞歸)linkspermstimesowner

2group-D選項都為yes ,默認該項為開啟

3checksum: 跳過檢測sum值,默認關閉

4compress:是否開啟壓縮

5copy_links:複製鏈接文件,默認為no ,注意後面還有一個links參數

6delete: 刪除不存在的文件,默認no

7dest:目錄路徑

8dest_port:默認目錄主機上的埠 ,默認是22,走的ssh協議

9dirs:傳速目錄不進行遞歸,默認為no,即進行目錄遞歸

10rsync_optsrsync參數部分

11set_remote_user:主要用於/etc/ansible/hosts中定義或默認使用的用戶與rsync使用的用戶不同的情況

12mode: pushpull 模組,push模的話,一般用於從本機向遠程主機上傳文件,pull 模式用於從遠程主機上取文件,pull 模式用於從遠程主機上取文件

 

//首先需要在遠程客戶端下載rsync

ansiblehosts同步到41tmp目錄下

查看41tmp/hosts

Get_url該模組主要用於從httpftp ,https等伺服器上下載文件類似於wget

 sha256sum:下載完成後進行sha256 check

 timeout:下載超時時間,默認10s

 url:下載的URL

 url_passwordurl_username:主要用於需要用戶名密碼進行驗證的情況

 use_proxy:是事使用代理,代理需事先在環境變更中定義

//從網站下載頁面到data/1

查看是否下載成功

Yum:軟體包管理

 Stat:獲取遠程文件資訊

 Service:遠程主機系統服務管理

 Sysctl:遠程主機sysctl配置