[自動化] 部署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服務及其常用的命令模塊