Ansible管理工具
ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能
ansible基於ssh來和遠程主機通訊的,所以不需要在遠程主機上安裝client/agents
ansible特點:1.部署簡單,只需在主控端部署Ansible環境,被控端無需做任何操作
2.默認使用SSH協議對設備進行管理
3.有大量常規運維操作模塊,可實現日常絕大部分操作
4.配置簡單、功能強大、擴展性強
5.支持API及自定義模塊,可通過Python輕鬆擴展
6.通過Playbooks來定製強大的配置、狀態管理
7.輕量級,無需在客戶端安裝agent,更新時,只需在操作機上進行一次更新即可
8.提供一個功能強大、操作性強的Web管理界面和REST API接口——AWX平臺
Ansible基本架構
Ansible:Ansible核心程序
Host Inventory:記錄由Ansible管理的主機信息(默認是在Ansible的hosts配置文件中定義被管理主機),包括端口、密碼、ip等
Playbooks:“劇本”YAML格式文件,多個任務定義在一個文件中,定義主機需要調用哪些模塊來完成的功能
Core Modules:核心模塊,主要操作是通過調用核心模塊來完成管理任務
Custom Modules:自定義模塊,完成核心模塊無法完成的功能,支持多種語言
Connection Plugins:連接插件,Ansible和Host通信使用
安裝配置Ansible
1.安裝依賴包和ansible
yum -y install epel-release
yum -y install ansible
配置文件目錄:/etc/ansible
執行文件目錄:/usr/bin
Lib庫依賴目錄:/usr/lib/pythonX.X/site-packages/ansible
Help文檔目錄:/usr/share/doc/ansible-X.X.X
Man文檔目錄:/usr/share/man/man1
2.配置主機清單:vim /etc/hosts
比如格式如下:
[webserver]
192.168.11.26
[dbserver]
192.168.11.27
3.配置無密碼登陸
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa [email protected]
ssh-copy-id -i /root/.ssh/id_rsa [email protected]
ansible常用模塊命令格式
基礎命令選項
-h:來查看幫助,下面我們列出一些比較常用的選項,並解釋其含義:
-a:MODULE_ARGS#模塊的參數,如果執行默認COMMAND的模塊,即是命令參數,如: “date”,“pwd”等等
-k:--ask-pass:#ask for SSH password,登錄密碼,提示輸入SSH密碼而不是假設基於密鑰的驗證
--ask-su-pass:#ask for su password,su切換密碼
-K:--ask-sudo-pass #ask for sudo password,提示密碼使用sudo,sudo表示提權操作
--ask-vault-pass#ask for vault password,假設我們設定了加密的密碼,則用該選項進行訪問
-B:SECONDS#後臺運行超時時間
-C:#模擬運行環境並進行預運行,可以進行查錯測試
-c:CONNECTION#連接類型使用
-f:FORKS#並行任務數,默認爲5
-i:INVENTORY #指定主機清單的路徑,默認爲/etc/ansible/hosts
--list-hosts:#查看有哪些主機組
-m:MODULE_NAME#執行模塊的名字,默認使用 command 模塊,所以如果是隻執行單一命令可以不用 -m參數
-o:壓縮輸出,嘗試將所有結果在一行輸出,一般針對收集工具使用
-S:用su命令
-R:SU_USER#指定 su 的用戶,默認爲 root 用戶
-s:用sudo命令
-U:SUDO_USER#指定 sudo 到哪個用戶,默認爲 root 用戶
-T:TIMEOUT#指定 ssh 默認超時時間,默認爲10s,也可在配置文件中修改
-u:REMOTE_USER#遠程用戶,默認爲 root 用戶
-v:查看詳細信息,同時支持-vvv,-vvvv可查看更詳細信息
查看模塊:ansible-doc -l
查看具體模塊的信息:ansbile-doc -s command
1.command模塊(用於在被管理主機上運行命令)
ansible webserver -m command -a 'date'
2.cron模塊(用於在被管理主機上管理計劃任務)
persent:添加、absent:移除,其使用的語法跟我們的crontab文件中的語法一致,同時,可以指定以下選項:
day:日應該運行的工作( 1-31, , /2, )
hour:小時 ( 0-23, , /2, )
minute:分鐘( 0-59, , /2, )
month:月( 1-12, *, /2, )
weekday:周 ( 0-6 for Sunday-Saturday,, )
job:指明運行的命令是什麼
name:定時任務描述
ansible dbserver -m cron -a 'name="host reboot" minute="30" hour="22" job="/usr/sbin/reboot"'
3.user模塊(創建用戶)
ansible all -m user -a 'name="test"'
4.group模塊(創建組)
ansible all -m group -a 'name=test'
5.copy模塊(複製本地文件到管理的服務器)
ansible all -m copy -a 'src=/etc/fstab dest=/home/fstab.test owner=root mode=744'
6.file模塊(修改文件屬性)
ansible all -m file -a 'owner=test group=test mode=644 path=/home/fstab.test'
7.ping模塊(ping測試)
ansible all -m ping
8.service模塊(設置修改服務狀態)
ansible webserver -m service -a 'enabled=true name=httpd state=started
9.shell模塊(shell模塊可以在遠程主機上調用shell解釋器運行命令)
ansible dbserver -m shell -a 'echo 123456 | passwd --stdin zhangsan'
10.script模塊(將本地腳本複製到被管理主機進行運行)
ansible webserver -m script -a '/root/ping.sh'
11.yum模塊(yum安裝軟件)
ansible webserver -m yum -a 'name=httpd state=present'
12.setupt模塊(該模塊主要用於收集信息,是通過調用facts組件來實現的)
比如查看內存:ansible webserver -m setup -a 'filter="*mem*"'
13.fetch 模塊(該模塊用於從遠程某主機獲取(複製)文件到本地)
ansible webserver -m fetch -a 'src=/data/hello dest=/data'
playbook的使用
playbooks是 一個不同於使用Ansible命令行執行方式的模式,其功能更強大靈活,主要可以用來多機部署,你可以把它理解成一種腳本,可以一次性運行一系列操作
1.使用playbook遠程安裝httpd
vim installhttpd.yaml
---
- hosts: webserver
remote_user: root
tasks:
- name: install Apache
yum:
name: httpd
state: installed
- lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '^Listen '
line: 'Listen 8080'
- replace:
path: /etc/httpd/conf/httpd.conf
regexp: '^#(ServerName).*'
replace: '\1 localhost'
- service:
name: httpd
enabled: yes
state: restarted
- name: Create wwwroot directory
file:
dest: /var/www/html
state: directory
- copy:
src: /root/index.html
dest: /var/www/html/index.html
運行playbook直接遠程管理安裝
ansible-playbook installhttpd.yaml
2.使用playbook遠程安裝nginx
vim installnginx.yaml
---
tasks:
- name: add repo
yum_repository:
name: nginx
description: nginx repo
baseurl: http://nginx.org/packages/centos/7/$basearch/
gpgcheck: no
enabled: 1
- name: install centos plungins
shell: yum -y install zlib zlib-devel openssl openssl-devel pcre-devel wget gcc gcc++ autoconf automake
- name: Install nginx
yum:
name: nginx
state: installed
- name: Copy nginx configuration file
copy:
src: /root/nginx.conf
dest: /etc/nginx/nginx.conf
- name: Create wwwroot directory
file:
dest: /var/www/nginx
state: directory
- name: Create test page index.html
shell: echo "<h1>Congratulations on the successful installation of Nginx!!!</h1>" > /var/www/nginx/index.html
- name: Start nginx
service:
name: nginx
state: started
運行playbook直接遠程管理安裝
ansible-playbook installnginx.yaml