自動化運維之Ansible劍客參上
阿新 • • 發佈:2018-08-03
p地址 led cfengine res 本地源 -s engine doc abs 自動化運維之Ansible
Asible概述與核心組件
- Ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。
-
Ansible可以看作是基於模塊進行工作的框架結構,批量部署能力就是由Ansible所運行的模塊實現的。簡而言之Ansible是基於“模塊”完成各種“任務”的。Ansible基本構架由六個部分組成:
(1)、連接插件connection plugins:負責和被監控端實現通信;
(2)、host inventory主機清單:指定操作的主機,是一個配置文件裏面定義監控的主機;
(4)、Custom modules自定義模塊:用於完全模塊功能的補成,可借助相關插件完成記錄日誌、發送郵件等功能。
(5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性運行多個任務。
(6)、Asible core核心引擎。
安裝部署Ansible服務
- Ansible自動化運維環境由控制主機與被管理主機組成,由於Ansible是基於SSH協議進行通信的,所以控制主機安裝Ansible軟件後不需要重啟或進行任何程序,被管理主機也不需要安裝和運行任何代理程序。
1、Ansible實驗案例環境
角色 | IP地址 | 組名 |
---|---|---|
控制主機 | 192.168.190.130 | |
被管理主機 | 192.168.190.128 | test01 |
被管理主機 | 1982.168.190.131 | test02 |
2、安裝配置Ansible
yum install -y epel-release #安裝epel源
yum install ansible -y
ansible --version #查看ansible版本
yum install tree -y
tree /etc/ansible/ #樹狀結構展示文件夾
/etc/ansible/ ├── ansible.cfg #ansible的配置文件 ├── hosts #ansible的主倉庫,用於存儲需要管理的遠程主機的相關信息 └── roles #角色
cd /etc/ansible
vim hosts #配置主機清單
[test01]
192.168.190.128
[test02]
192.168.190.131
ssh-keygen -t rsa #基於SSH秘鑰的連接
ssh-copy-id [email protected] #配置秘鑰對驗證
ssh-copy-id [email protected]
ssh-agent bash #免交互代理
ssh-add
Ansible命令基礎
- Ansible的命令行管理工具都是由一系列模塊、參數所支持的,可以在命令後面加上-h或--help獲得幫助。如使用ansible-doc工具可以通過ansible-doc -h 或ansible-doc --help查看其幫助信息。
- ansible-doc是用來查看模塊幫助信息的工具,主要的選項-l用來列出可使用的模塊,-s用來列出某個模塊的描述信息和使用示例。
1、command模塊
- Asible管理工具使用-m選項來指定使用模塊,默認使用command模塊,即-m選項省略是會運行此模塊,用於在被管理主機上運行。
例:在被管理的主機上執行data命令,顯示被管理主機的時間,有三種執行命令的方式去管理寫入主機清單中的主機:
(1)、指定ip執行date
ansible 192.168.192.128 -m command -a ‘date‘
(2)、指定分類執行date
ansible test01 -m command -a ‘date‘
ansible test02 -m command -a ‘date‘
(3)、所有hosts主機執行date命令
ansible all -m command -a ‘date‘
(4)、如果不加-m模塊,則默認運行command模塊
ansible all -a ‘ls /‘
2、cron模塊
- Ansible中的cron模塊用於定義任務計劃。其中有兩種狀態(state):present表示添加(省略狀態時默認使用),absent表示移除。
ansible-doc -s cron #查看cron模塊信息
ansible test01 -m cron -a ‘minute="*/1" job="/bin/echo heihei" name="test cron job"‘ #添加任務計劃
ansible test01 -a ‘crontab -l‘ #查看任務
ansible test01 -m cron -a ‘name="test cron job" state=absent‘ #移除計劃任務,假如該計劃任務沒有取名字,name=None即可可
3、user模塊
- Ansible中的user模塊用於創建新用戶和更改、刪除已存在的用戶。其中name選項用來指明創建用戶的名稱。
ansible test01 -m user -a ‘name="test001"‘ #創建用戶test001
ansible test01 -m command -a ‘tail /etc/passwd‘ #查看添加的用戶
ansible test01 -m user -a ‘name="test01" state=absent‘ #刪除用戶test001
4、group模塊
- Ansible中的group模塊用於對用戶組進行管理。
nsible test01 -m group -a ‘name=mysql gid=306 system=yes‘ #創建mysql組
ansible test01 -a ‘tail /etc/group‘ #查看組
ansible test01 -m user -a ‘name=test001 uid=306 system=yes group=mysql‘ #創建test001用戶添加到mysql組中
ansible test01 -a ‘tail /etc/passwd‘ #查看用戶
ansible test01 -a ‘id test001‘ #查看用戶的屬組
5、copy模塊
- Ansible中的copy模塊用於實現文件復制和批量下發文件。其中src來定義本地源文件路徑,使用dest定義被管理主機文件路徑,使用content則同夥指定信息內容來生成目標文件。
(1)、例:將本地文件/etc/fstab復制到被管理主機的/opt/fstab.back,將所有者設置為root,權限設置為640;
ansible test001 -m copy -a ‘src=/etc/fstab dest=/opt/fstab.back owner=root mode=640‘
ansible test001 -a ‘ls -l /opt‘ #查看詳細信息
ansible test001 -a ‘cat /opt/fstab.back‘ #查看內容
(2)、將“hello heihei!”寫入到/opt/fstab.back文件中;
ansible test001 -m copy -a ‘content="hello heihei!"
dest=/opt/fstab.back‘ #將hello heihei!寫入/opt/fstab.back
ansible test001 -a ‘cat /opt/fstab.back‘ #查看內容
6、file模塊
- 在Ansible中使用file模塊來設置文件屬性。其中使用path指定文件路徑,使用src定義源文件路徑,使用name或dest來替換創建文件的符號鏈接。
ansible test01 -m file -a ‘owner=mysql group=mysql mode=644 path=/opt/fstab.back‘ #設置文件/opt/fstab.back的屬主為mysql,屬組為mysql,權限為644
ansible test01 -m file -a ‘path=/opt/fstab.link src=/opt/fstab.back state=link‘ #設置/opt/fstab.link為/opt/fstab.back的鏈接文件
ansible test01 -m file -a "path=/opt/fstab.back state=absent" #刪除/opt/fstab.back文件
7、ping模塊
- 在Ansible中使用ping模塊來指定主機的連通性。
ansible all -m ping
8、service模塊
- 在Ansible中使用service模塊來控制管理服務的運行狀態。其中,使用enable表示是否開機自動啟動,取值為true或false;使用name定義服務名稱;使用state指定服務狀態,取值分別為started、stopped、restarted。
ansible test02 -a ‘systemctl status httpd‘
#查看test02服務器httpd運行狀態
ansible test02 -m service -a ‘enabled=true name=httpd state=started‘ #啟動httpd服務,並設置為開機自動啟動
9、shell模塊
- Ansible中的shell模塊可以在被管理主機上運行命令,並支持像管道符等功能的復雜命令;
ansible mysql -m shell -a ‘echo abc123|passwd --stdin mysql‘ #創建用戶使用無交互模式給用戶設置密碼
10、script模塊
- Ansible中的script模塊可以將本地腳本復制到被管理主機上進行運行。需要註意的是,使用相對路徑來指定腳本。
例:編寫一個本地腳本test.sh,復制到被管理主機上運行
vim test.sh #編寫腳本
#!/bin/bash
echo "hello ansible from script"> /opt/script.txt
chmod +x test.sh #賦予執行權限
ansible test01 -m script -a ‘test.sh‘ #將腳本復制到test01上
cat /opt/script.txt #到test01上查看
11、yum模塊
- Ansible中的yum模塊負責在被管理主機上安裝或卸載軟件包,但是需要提前在每個節點配置自己的yum倉庫。其中使用name指定要安裝的軟件包,還需要帶上軟件包的版本號,否則安裝最新的軟件包;使用state指定安裝軟件包的狀態,present、latest用來表示安裝,absent表示卸載。
ansible test01 -m yum -a ‘name=zsh‘ #安裝zsh軟件包
ansible test01 -m yum -a ‘name=zsh state=absent‘ #卸載zsh軟件包
12、setup模塊
- 在Ansible中使用setup模塊收集、查看被管理主機的facts(facts是Ansible采集被管理主機設備信息的一個功能)。每個被管理主機在接收並運行管理命令之前,都會將自己的相關信息(操作系統版本、IP地址等)發送給控制主機。
ansible tets01 -m setup //獲取test01組主機的facts信息
自動化運維之Ansible劍客參上