1. 程式人生 > >自動化運維之Ansible安裝及基本模塊應用

自動化運維之Ansible安裝及基本模塊應用

監控 bdc host water none ssh mark date命令 開發

ansible簡介

  • Ansible可以同時管理Redhat系的Linux,Debian系的Linux,以及Windows主機。管理節點只在執行腳本時與遠程主機連接,沒有特別的同步機制,所以斷電等異常一般不會影響ansbile。
    技術分享圖片
  • 2.ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:
    ? ?? ???(1)、連接插件connection plugins:負責和被監控端實現通信;

    ? ?? ???(2)、host inventory:指定操作的主機,是一個配置文件裏面定義監控的主機;
    ? ?? ???(3)、各種模塊核心模塊、command模塊、自定義模塊;
    ? ?? ???(4)、借助於插件完成記錄日誌郵件等功能;
    ? ?? ???(5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性運行多個任務。

  • ?3.ansible的架構:連接其他主機默認使用ssh協議
    技術分享圖片
    實驗環境介紹:
主機名 IP地址 操作系統
ansible管理端 192.168.195.147 CentOS7
被管理端1 192.168.195.162 CentOS7
被管理端2 192.168.195.163 CentOS7

安裝部署
首先在管理主機上安裝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 #角色

修改ansible配置文件hosts,添加被管理主機清單
cd /etc/ansible
vi hosts //配置主機清單
[webserver]
192.168.195.162
[mysql]
192.168.195.163
設置SSH密鑰對,並將公鑰推送給被管理主機
ssh-keygen -t rsa #生成密鑰
ssh-copy-id [email protected]
ssh-copy-id [email protected] //配置密鑰對驗證

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

---------免交互代理--------------
ssh-agent bash
ssh-add

技術分享圖片
ansible命令行模塊
1,------command模塊------

命令格式:ansible [主機] [-m 模塊] [-a args]
ansible-doc -l //列出所有已安裝的模塊 註:按q退出

技術分享圖片

ansible-doc -s yum //-s列出yum模塊描述信息和操作動作

技術分享圖片

ansible 192.168.195.162 -m command -a ‘date‘ //指定ip執行date
ansible webserver -m command -a ‘date‘ //指定分類執行date
ansible mysql -m command -a ‘date‘

技術分享圖片

ansible all -m command -a ‘date‘ //所有hosts主機執行date命令

技術分享圖片

ansible all -a ‘ls /‘ 如果不加-m模塊,則默認運行command模塊

技術分享圖片

2,-----cron模塊------

兩種狀態(state):present表示添加(可以省略),absent表示移除。
ansible-doc -s cron //查看cron模塊信息
ansible webserver -m cron -a ‘minute="/1" job="/bin/echo heihei" name="test cron job"‘
ansible webserver -a ‘crontab -l‘
ansible webserver -m cron -a ‘name="test cron job" state=absent‘ //移除計劃任務,假如該計劃任務沒有取名字,name=None即可

技術分享圖片
技術分享圖片
3,-----user模塊------

user模塊是請求的是useradd, userdel, usermod三個指令
ansible-doc -s user //查看user模塊的用法

技術分享圖片

ansible mysql -m user -a ‘name="test01"‘ //創建用戶test01
ansible mysql -m command -a ‘tail /etc/passwd‘

技術分享圖片

ansible mysql -m user -a ‘name="test01" state=absent‘ //刪除用戶test01

技術分享圖片
4,-----group模塊-----

group模塊請求的是groupadd, groupdel, groupmod 三個指令。
ansible-doc -s group //查看group模塊的用法

技術分享圖片

ansible mysql -m group -a ‘name=mysql gid=306 system=yes‘ //創建組為mysql
ansible mysql -a ‘tail /etc/group‘ //查看新創建的組mysql

技術分享圖片

ansible mysql -m user -a ‘name=test01 uid=306 system=yes group=mysql‘ //創建test01用戶,並指定組為mysql,
ansible mysql -a ‘tail /etc/passwd‘ //查看創建的用戶test01

技術分享圖片

ansible mysql -a ‘id test01‘ //查看用戶test01的信息

技術分享圖片
5,------copy模塊--------

ansible-doc -s copy
ansible mysql -m copy -a ‘src=/etc/fstab dest=/opt/fstab.back owner=root mode=640‘ //文件復制,將fstab復制到/opt下命名為fstab.back,並設置權限為640,指定所有者為root
ansible mysql -a ‘ls -l /opt‘ //查看/opt目錄下的文件,是否有新文件產生
ansible mysql -a ‘cat /opt/fstab.back‘ //查看復制的文件內容

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

ansible mysql -m copy -a ‘content="hello heihei!" dest=/opt/fstab.back‘ //將hello heihei!寫入/opt/fstab.back 也可以創建新文件
ansible mysql -a ‘cat /opt/fstab.back‘ //再次查看其內容,發生替換

技術分享圖片

6,------file模塊--------

ansible-doc -s file
首先創建一個測試用戶mysql,並加入mysql組中
ansible mysql -m user -a ‘name=mysql system=yes‘
ansible mysql -m group -a ‘name=mysql system=yes‘

技術分享圖片

ansible mysql -m file -a ‘owner=mysql group=mysql mode=644 path=/opt/fstab.back‘ //修改文件的屬主屬組權限等
ansible mysql -m file -a ‘path=/opt/fstab.link src=/opt/fstab.back state=link‘ //設置/opt/fstab.link為/opt/fstab.back的鏈接文件

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

ansible mysql -m file -a "path=/opt/fstab.back state=absent" //刪除一個文件
ansible mysql -m file -a "path=/opt/test state=touch" 創建一個文件

技術分享圖片技術分享圖片
7,-----ping模塊-------

ansible all -m ping //測試被管理主機是否在線

技術分享圖片
8,-----yum模塊-----

ansible-doc -s yum
ansible mysql -m yum -a ‘name=httpd‘ //yum安裝httpd
[root@ac ~]# rpm -q httpd

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

ansible mysql -m yum -a ‘name=httpd state=absent‘ //卸載httpd

9,-----service模塊--------

ansible-doc -s service
[root@localhost ~]# yum -y install httpd
ansible webserver -m service -a ‘enabled=true name=httpd state=started‘ //啟動httpd服務
[root@ab ~]# systemctl status httpd //在webserver上查看httpd是否開啟

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

10,------shell模塊-----

ansible-doc -s shell
ansible mysql -m shell -a ‘echo abc123|passwd --stdin mysql‘ //創建用戶使用無交互模式給用戶設置密碼

技術分享圖片
11,------script模塊---------

ansible-doc -s script //在ansible管理端編輯一個簡單的shell腳本
vi test.sh
#!/bin/bash
echo "hello ansible from script"> /opt/script.txt

chmod +x test.sh //賦予執行權限
ansible mysql -m script -a ‘test.sh‘ //使用script模塊,將腳本在mysql上執行

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

[root@ac ~]# cat /opt/script.txt //在mysql上查看腳本執行結果

技術分享圖片
12,-----setup模塊-------

ansible-doc -s setup
ansible mysql -m setup //獲取mysql組主機的facts信息

技術分享圖片

ansible作為一個自動化運維工具還有很多模塊,本篇文章只是介紹一些常用的模塊。

自動化運維之Ansible安裝及基本模塊應用