1. 程式人生 > >[自動化] 部署Ansible服務及其常用的命令模塊

[自動化] 部署Ansible服務及其常用的命令模塊

ansible images 連接方式 sys command 交互 ansible配置 安裝部署 inventory

Ansible簡介:

Ansible基於Python開發,默認通過SSH協議進行遠程命令執行或下發配置,無需部署任何客戶端代理軟件,可同時支持多臺主機進行管理。ansible是基於模塊工作的,本身沒有批量部署的能力,真正具有批量部署的是ansible所運行的模塊,能夠實現批量運行命令、部署程序、配置系統等功能。

Ansible的基本架構主要包括:

(1)Ansible core核心引擎。
(2)Host inventory 主機清單:用來定義Ansible管理的主機,默認是在Ansible配置文件中定義被管理主機,同時也支持自定義動態主機清單。
(3)Comecton pugins連接插件:負責和被管理主機實現通信。除支持使用SSH連接被管理主機外,Ansible還支持其他的連接方式,所以需要有連接插件將各個主機用連接插件連接到Ansible。

(4)Core modules核心模塊:是Ansible自帶的模塊,使用這些模塊將資源分發到被管理主機,使其執行特定任務或匹配特定的狀態。
(5)Custom meodle自定義模塊:用於完成模塊功能的補充,可借助相關插件完成記
錄日誌、發送郵件等功能。
(6)Playbooks (yaml, jinja2) 劇本:用來集中定義Ansible任務的配置文件,即將多個任務定義在一個劇本中由Ansible自動執行,可以由控制主機針對多臺被管理主機同時運行多個任務。

系統環境

主機 操作系統 IP地址 組名
控制主機 CentOS 7.4 x86_64 192.168.100.138
被管理主機 CentOS 7.4 x86_64 192.168.100.131 webserver
被管理主機 CentOS 7.4 x86_64 192.168.100.132 mysql

安裝部署Ansible服務

1.安裝Ansible

準備yum源,直接使用yum命令安裝Ansible

yum install -y epel-release  #安裝epel源
yum install ansible -y

查看ansible軟件的版本信息

ansible --version 

技術分享圖片
Ansible主要相關配置文件在/etc/ansible目錄下。

[root@promote ~]# cd /etc/ansible/
[root@promote ansible]# pwd
/etc/ansible
[root@promote ansible]# ll
總用量 24
-rw-r--r--. 1 root root 19549 7月   6 23:53 ansible.cfg  #配置文件
-rw-r--r--. 1 root root  1016 7月   6 23:53 hosts  #管控主機文件
drwxr-xr-x. 2 root root     6 7月   6 23:53 roles

2.配置主機清單

修改主機與組配置後,可同時連接到多個被管理主機上執行任務。

cd /etc/ansible
vim hosts
    [webserver]       #被管理主機分類
    192.168.100.131
    [mysql]
    192.168.100.132   #被管理主機分類

3.設置SSH無密碼登錄

使用ssh-keygen產生一對密鑰,使用ssh-copy-id來下發生成的公鑰。

ssh-keygen -t rsa       #基於ssh密鑰的連接
ssh-copy-id [email protected]
ssh-copy-id [email protected]    #配置密鑰對驗證

技術分享圖片
為了實現免交互代理,可以輸入以下命令:

ssh-agent bash
ssh-add

技術分享圖片

Ansible命令應用

Ansible可以使用命令行方式進行自動化管理,它的命令行管理工具都是由一系列模塊、參數所支持的,基本語法如下:

ansible [主機] [-m 模塊] [-a args]

Ansible自帶了很多模塊,能夠下發執行Ansible的各種管理任務。不過查看模塊幫助信息可以用ansible-doc工具。

ansible-doc -l     #列出所有已安裝的模塊 註:按q退出
ansible-doc -s yum   #-s列出yum模塊描述信息和操作動作

技術分享圖片
技術分享圖片

1.command模塊

-m選項指定使用模塊,默認使用command模塊,用於在被管理主機上運行命令。

(1)使用IP地址指定運行主機

ansible 192.168.100.131 -m command -a ‘date‘ 

技術分享圖片
(2)使用被管理主機的分類運行

ansible mysql -m command -a ‘date‘

技術分享圖片
(3)在所有主機清單中的主機運行

ansible all -m command -a ‘date‘

技術分享圖片
(4)不加-m選項,默認運行command模塊

ansible all -a ‘tail -1 /etc/passwd‘

技術分享圖片

2.cron模塊

cron模塊用於定義任務計劃。其中有兩種狀態(state ):present表示添加(省略狀態默認使用),absent表示移除。

(1)添加任務計劃

ansible webserver -m cron -a ‘minute="*/1" job="/bin/echo heihei" name="test cron job"‘

技術分享圖片

#查看計劃是否添加成功
ansible webserver -a ‘crontab -l‘

技術分享圖片
進webserver組的主機查看
技術分享圖片
技術分享圖片
(2)移除任務計劃

ansible webserver -m cron -a ‘name="test cron job" state=absent‘

技術分享圖片

3.user模塊

user模塊用於創建新用戶和更改、刪除已存在的用戶。其中name選項用來指明創建的用戶名稱。請求的是useradd, userdel, usermod三個指令
(1)創建用戶

ansible mysql -m user -a ‘name="test01"‘

技術分享圖片

#查看用戶是否添加成功
ansible mysql -m command -a ‘tail /etc/passwd‘

技術分享圖片
(2)刪除用戶

ansible mysql -m user -a ‘name="test01" state=absent‘

技術分享圖片

4.group模塊

group模塊用於對用戶組進行管理。請求的是groupadd, groupdel, groupmod 三個指令。

例如:創建mysql組,將已創建好的用戶test01添加到mysql組中。

#創建mysql組
ansible mysql -m group -a ‘name=mysql gid=306 system=yes‘  

技術分享圖片

 #查看組是否添加
ansible mysql -a ‘tail /etc/group‘

技術分享圖片

#將用戶mysql添加到mysql組中
ansible mysql -m user -a ‘name=mysql uid=306 system=yes group=mysql‘

技術分享圖片

#查看用戶mysql是否添加到mysql組中
ansible mysql -a ‘tail -1 /etc/passwd‘

技術分享圖片

5.copy模塊

copy模塊用於實現文件復制和批量下發文件。其中使用src來定義本地源文件路徑,使用dest定義被管理主機文件路徑,使用content則是通過指定信息內容來生成目標文件。

(1)將本地文件/etc/fstab復制到被管理主機上的/opt/fstab.back,將所有者設置為root,權限設置為640.

ansible mysql -m copy -a ‘src=/etc/fstab dest=/opt/fstab.back owner=root mode=640‘

技術分享圖片

#查看是否存在復制的文件
ansible mysql -a ‘ls -l /opt‘

技術分享圖片
(2)將hello heihei!寫入/opt/fstab.back。

ansible mysql -m copy -a ‘content="hello heihei!"
dest=/opt/fstab.back‘

技術分享圖片

#查看內容是否寫入
ansible mysql -a ‘cat /opt/fstab.back‘ 

技術分享圖片

6.file模塊

file模塊來設置文件屬性。其中使用path指定文件路徑,使用src定義源文件路徑,使用name或dest來替換創建文件的符號鏈接。

(1)設置文件/opt/fstab.back的所屬主為mysql,所屬組為mysql,權限為644.

ansible mysql -m file -a ‘owner=mysql group=mysql mode=644 path=/opt/fstab.back‘

技術分享圖片

#查看文件的屬性
ansible mysql -a ‘ls -l /opt/‘

技術分享圖片
(2)設置/opt/fstab.link為/opt/fstab.back的鏈接文件。

ansible mysql -m file -a ‘path=/opt/fstab.link src=/opt/fstab.back state=link‘ 

技術分享圖片

#查看鏈接文件
ansible mysql -a ‘ls -l /opt/‘

技術分享圖片
(3)刪除文件/opt/fstab.back

ansible mysql -m file -a "path=/opt/fstab.back state=absent" 

技術分享圖片
(4)創建文件/opt/test。

ansible mysql -m file -a "path=/opt/test state=touch"

技術分享圖片

7.ping模塊

ping,模塊是用來檢測指定主機的連通性。

ansible all -m ping

技術分享圖片

8.shell模塊

shell模塊可以在被管理主機上運行命令,並支持像管道符等功能的復雜命令。

例如,創建用戶使用無交互模式給用戶設置密碼。

#創建用戶user1
ansible mysql -m user -a ‘name=user1‘
#無交互給用戶user1設置密碼
ansible mysql -m shell -a ‘echo abc123|passwd --stdin user1‘

技術分享圖片

9.script模塊

script模塊可以將本地腳本復制到被管理主機上進行運行。需要註意的是,使用相對路徑來指定腳本。

例如,編輯一個本地腳本test.sh,復制到被管理主機上運行。

vi /opt/test.sh
#!/bin/bash
echo "hello ansible from script"> /opt/script.txt

chmod +x /opt/test.sh

ansible mysql -m script -a ‘/opt/test.sh‘

技術分享圖片

#查看腳本實現
ansible mysql -a ‘cat /opt/script.txt‘

技術分享圖片

10.yum模塊

yum模塊復責在被管理主機上安裝與卸載軟件包,其中使用name指定要安裝的軟件包,使用state指定安裝軟件包的狀態,present、latest用來表示安裝,absent表示卸載。

(1)安裝zsh軟件包

ansible mysql -m yum -a ‘name=zsh‘ 

技術分享圖片

#查看是否安裝
ansible mysql -a ‘rpm -q zsh‘

技術分享圖片
(2)卸載zsh軟件包

ansible mysql -m yum -a ‘name=zsh state=absent‘

技術分享圖片
(3)安裝httpd軟件包

ansible webserver -m yum -a ‘name=httpd‘ 

技術分享圖片

11.service模塊

service模塊用來控制管理服務的運行狀態。其中enabled表示是否開機自啟動,取值為true或false,使用name定義服務名稱,使用state指定服務狀態,取值分別為started、stoped、restarted.

(1)啟動httpd服務並設置開機自啟動。

ansible webserver -m service -a ‘enabled=true name=httpd state=started‘

技術分享圖片

(2)查看httpd服務的狀態

ansible webserver -a ‘systemctl status httpd‘

技術分享圖片

12.setup模塊

setup模塊收集、查看被管理主機的facts。每個被管理主機在接並運行管理命令之前,都會將自己的相關信息(操作系統、IP地址)發送給控制主機。

例如,查看mysql組的facts信息。

ansible mysql -m setup 

技術分享圖片
以上皆是Ansible常用的模塊,如果用到其他模塊可以使用ansible-doc工具。

[自動化] 部署Ansible服務及其常用的命令模塊