自動化運維Ansible實踐(一)

第 1 章 Ansible概述

1.1 IT自動化的好處
1.1.1 團隊影響
• 節省時間,提高工作效率
• 消除重複任務
• 更少的錯誤風險
• 改善協作和工作滿意度
1.1.2 企業影響
• 克服複雜性
• 更多創新資源
• 加強問責制和合規性
1.2 Ansible是什麼
Ansible是一種IT自動化工具。它可以配置系統,部署軟件以及協調更高級的IT任務,例如持續部署,滾動更新。Ansible適用於管理企業IT基礎設施,從具有少數主機的小規模到數千個實例的企業環境。Ansible也是一種簡單的自動化語言,可以完美地描述IT應用程序基礎結構。
1.3 Ansible架構
自動化運維Ansible實踐(一)

2. 第 2 章 Ansible安裝與配置

2.1 Ansible使用要求
2.1.1 服務端要求
• Python2.6/2.7/3.x
• RedHat,Debian,CentOS,OS X等。不支持Windows
2.1.2 被管理端要求
• OpenSSH
• Python2.6/2.7/3.x
2.2 安裝Ansible
• yum install ansible (推薦)
• pip install ansible
https://releases.ansible.com/ansible or https://github.com/ansible/ansible.git
2.3 配置文件
vim /etc/ansible/ansible.cfg --------ansible的主配置文件
[defaults]

inventory = /etc/ansible/hosts

forks = 5

become = root

remote_port = 22

host_key_checking = False

timeout = 10

log_path = /var/log/ansible.log

private_key_file = /root/.ssh/id_rsa
2.4 Inventory(主機清單)
未分組的主機
green.example.com
blue.example.com
192.168.100.1
192.168.100.10

屬於webservers組的主機集合
[webservers]
alpha.example.org
beta.example.org
192.168.1.100
192.168.1.110
www[001:006].example.com

示例3:屬於dbservers組主機集合
[dbservers]
db01.intranet.mydomain.net
db02.intranet.mydomain.net
10.25.1.56
10.25.1.57
db-[99:101]-node.example.com

主機和主機組變量:

[webservers]
192.168.1.10 ansible_ssh_user=root ansible_ssh_pass='123456’ http_port=80
192.168.1.11 ansible_ssh_user=root ansible_ssh_pass='123456’ http_port=80

[webservers:vars]
http_port=8080
server_name=www.ctnrs.com

組變量分解到單個文件:
cat /etc/ansible/group_vars/webservers.yml

http_port: 8080
server_name: www.ctnrs.com

3. 第 3 章 ad-hoc命令

3.1 命令行工具常用選項,可以使用ansible --help查看幫助
格式:ansible <host-pattern> [ options ]

選項:
-a MODULE_ARGS, --args=MODULE_ARGS 模塊參數
-C, --check 運行檢查,不執行任何操作
-e EXTRA_VARS, --extra-vars=EXTRA_VARS 設置附加變量 key=value
-f FORKS, --forks=FORKS 指定並行進程數量,默認5
-i INVENTORY, --inventory=INVENTORY 指定主機清單文件路徑
--list-hosts 輸出匹配的主機列表,不執行任何操作
-m MODULE_NAME, --module-name=MODULE_NAME 執行的模塊名,默認command
--syntax-check 語法檢查playbook文件,不執行任何操作
-t TREE, --tree=TREE 將日誌輸出到此目錄
-v, --verbose 詳細信息,-vvv更多, -vvvv debug
--version 查看程序版本

連接選項:控制誰連接主機和如何連接
-k, --ask-pass 請求連接密碼
--private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE 私鑰文件
-u REMOTE_USER, --user=REMOTE_USER 連接用戶,默認None
-T TIMEOUT, --timeout=TIMEOUT 覆蓋連接超時時間,默認10秒

提權選項:控制在目標主機以什麼用戶身份運行
-b, --become 以另一個用戶身份操作
--become-method=BECOME_METHOD 提權方法,默認sudo
--become-user=BECOME_USER 提權後的用戶身份,默認root
-K, --ask-become-pass 提權密碼
sudo操作實例
ansible webservers -a "ls /root" -u tuwei -k --become -K
需要輸入兩次密碼,一次是連接遠程主機,一次是sudo提權
沒有配置root用戶,連接遠程主機普通用戶
[root@salt-master ansible]# ansible webservers -a "pwd" -u tuwei -k
SSH password:
192.168.132.14 | SUCCESS | rc=0 >>
/home/tuwei

192.168.132.16 | SUCCESS | rc=0 >>
/home/tuwei

3.2 SSH密碼認證
[webservers]
192.168.1.10:22 ansible_ssh_user=root ansible_ssh_pass=’123456’
192.168.1.11:22 ansible_ssh_user=root ansible_ssh_pass=’123456’
3.3 SSH祕鑰對認證
[webservers]
192.168.1.10:22 ansible_ssh_user=root ansible_ssh_key=/root/.ssh/id_rsa
192.168.1.11:22 ansible_ssh_user=root
配置了密碼或者祕鑰認證後,在使用ansible執行命令時無需交互。
主機清單已經配置
例如:[root@salt-master ~]# ansible webservers -a "df -h"
192.168.132.14 | SUCCESS | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 4.5G 41G 11% /
tmpfs 383M 0 383M 0% /dev/shm
/dev/sda1 194M 29M 155M 16% /boot

192.168.132.16 | SUCCESS | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 5.6G 12G 34% /
tmpfs 284M 0 284M 0% /dev/shm
/dev/sda1 190M 82M 99M 46% /boot

4. 第 4 章 Ansible常用模塊

ansible幫助說明可以參考網站https://docs.ansible.com/
4.1 執行shell命令(command和shell)
默認爲command,可以省略。但如果命令中有特殊字符,如<> |等,則需要使用shell模塊,該模塊可以執行所有shell命令
[root@salt-master ~]# ansible webservers -m shell -a "netstat -tnlp|grep httpd"
192.168.132.14 | SUCCESS | rc=0 >>
tcp 0 0 :::80 :::* LISTEN 1384/httpd

192.168.132.16 | SUCCESS | rc=0 >>
tcp 0 0 :::80 :::* LISTEN 1974/httpd

4.2 ping模塊
用來測試主機是否是通的,不涉及參數。
[root@salt-master ~]# ansible webservers -m ping
192.168.132.16 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.132.14 | SUCCESS => {
"changed": false,
"ping": "pong"
}

4.3 script模塊
在目標主機上執行管理端的shell腳本。
ansible 192.168.132.16 -m script -a '/root/test.sh'

4.4 文件傳輸(copy和file)
4.4.1 copy模塊主要是用來複制文件到遠程目標主機。
backup:在覆蓋之前將原文件備份,備份文件包含時間信息。有兩個選項:yes|no
content:用於替代”src”,可以直接設定指定文件的值
dest:必選項。要將源文件複製到的遠程主機的絕對路徑,如果源文件是一個目錄,那麼該路徑也必須是個目錄
directory_mode:遞歸的設定目錄的權限,默認爲系統默認權限
force:如果目標主機包含該文件,但內容不同,如果設置爲yes,則強制覆蓋,如果爲no,
則只有當目標主機的目標位置不存在該文件時,才複製。默認爲yes
others:所有的file模塊裏的選項都可以在這裏使用
src:要複製到遠程主機的文件在本地的地址,可以是絕對路徑,也可以是相對路徑。
如果路徑是一個目錄,它將遞歸複製。在這種情況下,如果路徑使用”/”來結尾,則只複製目錄裏的內容,如果沒有使用”/”來結尾,則包含目錄在內的整個內容全部複製,類似於rsync。
ansible webservers -m copy -a "src=/tools/nagios-3.5.1.tar.gz dest=/tmp"
[root@salt-master tools]# ansible webservers -a "ls /tmp"
192.168.132.16 | SUCCESS | rc=0 >>
VMwareDnD
VMwareTools-10.1.15-6627299.tar.gz
cafenv-appconfig
ansibleztwPs
nagios-3.5.1.tar.gz
test.sh
vmware-root
vmware-tools-distrib

192.168.132.14 | SUCCESS | rc=0 >>
ansible_VohgWG
cmdserver.sock
nagios-3.5.1.tar.gz
test.sh

4.4.2 file模塊主要用於遠程主機上的文件操作,包括以下選項:
force:需要在兩種情況下強制創建軟鏈接

1.源文件不存在但之後會建立的情況下

2.目標軟連接已經存在,需要取消之前的軟鏈接,然後創建新的軟連接,有兩個選項:yes|no

group:定義文件/目標的屬組

mode:定義文件/目錄的權限

owenr:定義文件/目錄的屬主

path:必選項,定義文件/目錄的路徑

recurse:遞歸的設置文件的屬性,只對目錄有效

src:要被鏈接的源文件的路徑,只應用於state=link的情況

dest:被鏈接到的路徑,只應用於state=link的情況

state:directory:如果文件不存在,創建目錄

file:即使文件不存在,也不會被創建

link:創建軟連接

hard:創建硬鏈接

touch:如果文件不存在,則會創建一個新的文件,如果文件或目錄已存在,則更新其最後修改時間

absent:刪除目錄、文件或者取消鏈接文件
實例:
創建目錄
ansible webservers -m file -a "path=/tmp/abc123 state=directory"
創建文件
ansible webservers -m file -a "path=/tmp/abc123 state=touch"

4.5 cron模塊
cron模塊,用來管理計劃任務, 包含如下選項:
backup:對遠程主機上的原任務計劃內容修改之前做備份
cron_file:用來指定一個計劃任務文件,也就是將計劃任務寫到遠程主機上/etc/cron.d目錄下,
創建一個文件對應的計劃任務。 day:日(1-31,<em>,</em>/2,……)
hour:小時(0-23,<em>,</em>/2,……) minute:分鐘(0-59,<em>,</em>/2,……)
month:月(1-12,<em>,</em>/2,……)
weekday:周(0-7,*,……)
job:要執行的任務,依賴於state=present
name:定義定時任務的描述信息
special_time: 特殊的時間範圍,參數:reboot(重啓時),annually(每年),monthly(每月),
weekly(每週),daily(每天),hourly(每小時)
state:確認該任務計劃是創建還是刪除,有兩個值可選,分別是present和absent,present表示創建定時任務,
absent表示刪除定時任務,默認爲present。
user:以哪個用戶的身份執行job指定的任務。

使用示例:
ansible 192.168.132.14 -m cron -a 'name="job for reboot" special_time=reboot job="/data/bootservice.sh"'
ansible 192.168.132.14 -m cron -a 'name="test" weekday="1" minute=40 hour=19 user="root" job="sh /server/scripts/test.sh"'
查看[root@mail scripts]# crontab -l
#Ansible: test
40 19 1 sh /server/scripts/test.sh
ansible 192.168.132.14 -m cron -a 'backup="True" name="autobackup" weekday="6" minute=30 hour=1 user="root" job="/home/ixdba/backup.sh"'
ansible 192.168.132.14 -m cron -a 'name="checkhttp" minute=30 hour=12 user="root" job="/home/ixdba/check_http.sh" cron_file="check_http_for_ansible" '
ansible 192.168.132.14 -m cron -a 'name="yum autoupdate" state=absent'

4.6 service模塊
用於管理遠程主機上的服務,該模塊包含如下選項:
enabled:是否開機啓動 yes|no
name:必選項,服務名稱
pattern:定義一個模式,如果通過status指令來查看服務的狀態時,沒有響應,
就會通過ps指令在進程中根據該模式進行查找,如果匹配到,則認爲該服務依然在運行
sleep:如果執行了restarted,則在stop和start之間沉睡幾秒鐘
state:對當前服務執行啓動,停止、重啓、重新加載等操作(started,stopped,restarted,reloaded)
實例:
ansible 192.168.132.14 -m service -a "name=httpd state=stopped"
關閉httpd服務
ansible 192.168.132.14 -m service -a "name=httpd enabled=yes"

4.7 yum模塊
進行軟件包安裝。
實例:state可以是present,表示指定安裝,或者是latest即安裝最新版
absent表示卸載
ansible 192.168.132.14 -m yum -a "name=lrzsz state=latest"

4.8 user模塊
創建用戶相關
ansible 192.168.132.14 -m user -a "name=test password=123456"新建用戶
ansible 192.168.132.14 -m user -a "name=test password=123456 shell=/sbin/nologin" 創建用戶,不讓登陸

ansible 192.168.132.14 -m user -a "name=test state=absent" 刪除用戶

4.9 git模塊
從源代碼管理系統部署,要使用git,需要目標主機已安裝git
ansible 192.168.132.14 -m git -a "repo=https://github.com/ansible/ansible.git dest=/tmp/ansible"

4.10 setup模塊
ansible 192.168.132.14 -m setup 輸出系統信息,在寫playbook時用到
ansible 192.168.132.14 -m setup -a "filter=ansible_nodename" 利用filter進行輸出信息過濾。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章