溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何通過使用Ansible自動(dòng)執(zhí)行可重復(fù)的日常任務(wù)

發(fā)布時(shí)間:2021-10-27 16:23:28 來源:億速云 閱讀:152 作者:小新 欄目:系統(tǒng)運(yùn)維

小編給大家分享一下如何通過使用Ansible自動(dòng)執(zhí)行可重復(fù)的日常任務(wù),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!


通過使用 Ansible 自動(dòng)執(zhí)行可重復(fù)的日常任務(wù),提高工作效率并避免錯(cuò)誤。

如果你討厭執(zhí)行重復(fù)性的任務(wù),那么我有一個(gè)提議給你,去學(xué)習(xí) Ansible!

Ansible 是一個(gè)工具,它可以幫助你更輕松、更快速地完成日常任務(wù),這樣你就可以更有效地利用時(shí)間,比如學(xué)習(xí)重要的新技術(shù)。對(duì)于系統(tǒng)管理員來說,它是一個(gè)很好的工具,因?yàn)樗梢詭椭銓?shí)現(xiàn)標(biāo)準(zhǔn)化,并在日?;顒?dòng)中進(jìn)行協(xié)作,包括:

  1. 安裝、配置和調(diào)配服務(wù)器和應(yīng)用程序;

  2. 定期更新和升級(jí)系統(tǒng);

  3. 監(jiān)測(cè)、減輕和排除問題。

通常,許多這些基本的日常任務(wù)都需要手動(dòng)步驟,而根據(jù)個(gè)人的技能的不同,可能會(huì)造成不一致并導(dǎo)致配置發(fā)生漂移。這在小規(guī)模的實(shí)施中可能是可以接受的,因?yàn)槟愎芾硪慌_(tái)服務(wù)器,并且知道自己在做什么。但當(dāng)你管理數(shù)百或數(shù)千臺(tái)服務(wù)器時(shí)會(huì)發(fā)生什么?

如果不小心,這些手動(dòng)的、可重復(fù)的任務(wù)可能會(huì)因?yàn)槿藶榈腻e(cuò)誤而造成延誤和問題,而這些錯(cuò)誤可能會(huì)影響你及你的組織的聲譽(yù)。

這就是自動(dòng)化的價(jià)值所在。而 Ansible 是自動(dòng)化這些可重復(fù)的日常任務(wù)的完美工具。

自動(dòng)化的一些原因是:

  1. 你想要一個(gè)一致和穩(wěn)定的環(huán)境。

  2. 你想要促進(jìn)標(biāo)準(zhǔn)化。

  3. 你希望減少停機(jī)時(shí)間,減少嚴(yán)重事故案例,以便可以享受生活。

  4. 你想喝杯啤酒,而不是排除故障問題!

本文提供了一些系統(tǒng)管理員可以使用 Ansible 自動(dòng)化的日常任務(wù)的例子。我把本文中的劇本和角色放到了 GitHub 上的 系統(tǒng)管理員任務(wù)倉庫 中,以方便你使用它們。

這些劇本的結(jié)構(gòu)是這樣的(我的注釋前面有 ==>)。

[root@homebase 6_sysadmin_tasks]# tree -L 2.├── ansible.cfg ==> 負(fù)責(zé)控制 Ansible 行為的配置文件├── ansible.log├── inventory│   ├── group_vars│   ├── hosts  ==> 包含我的目標(biāo)服務(wù)器列表的清單文件│   └── host_vars├── LICENSE├── playbooks  ==> 包含我們將在本文中使用的劇本的目錄│   ├── c_logs.yml│   ├── c_stats.yml│   ├── c_uptime.yml│   ├── inventory│   ├── r_cron.yml│   ├── r_install.yml│   └── r_script.yml├── README.md├── roles    ==> 包含我們將在本文中使用的角色的目錄│   ├── check_logs│   ├── check_stats│   ├── check_uptime│   ├── install_cron│   ├── install_tool│   └── run_scr└── templates ==> 包含 jinja 模板的目錄    ├── cron_output.txt.j2    ├── sar.txt.j2    └── scr_output.txt.j2

清單類似這樣的:

[root@homebase 6_sysadmin_tasks]# cat inventory/hosts[rhel8]master ansible_ssh_host=192.168.1.12workernode1 ansible_ssh_host=192.168.1.15 [rhel8:vars]ansible_user=ansible ==> 請(qǐng)用你的 ansible 用戶名更新它

這里有五個(gè)你可以用 Ansible 自動(dòng)完成的日常系統(tǒng)管理任務(wù)。

1、檢查服務(wù)器的正常運(yùn)行時(shí)間

你需要確保你的服務(wù)器一直處于正常運(yùn)行狀態(tài)。機(jī)構(gòu)會(huì)擁有企業(yè)監(jiān)控工具來監(jiān)控服務(wù)器和應(yīng)用程序的正常運(yùn)行時(shí)間,但自動(dòng)監(jiān)控工具時(shí)常會(huì)出現(xiàn)故障,你需要登錄進(jìn)去驗(yàn)證一臺(tái)服務(wù)器的狀態(tài)。手動(dòng)驗(yàn)證每臺(tái)服務(wù)器的正常運(yùn)行時(shí)間需要花費(fèi)大量的時(shí)間。你的服務(wù)器越多,你需要花費(fèi)的時(shí)間就越長(zhǎng)。但如果有了自動(dòng)化,這種驗(yàn)證可以在幾分鐘內(nèi)完成。

使用 check_uptime 角色和 c_uptime.yml 劇本:

[root@homebase 6_sysadmin_tasks]# ansible-playbook -i inventory/hosts  playbooks/c_uptime.yml -kSSH password:PLAY [Check Uptime for Servers] ****************************************************************************************************************************************TASK [check_uptime : Capture timestamp] *************************************************************************************************.截?cái)?...PLAY RECAP *************************************************************************************************************************************************************master                     : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  workernode1                : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  [root@homebase 6_sysadmin_tasks]#

劇本的輸出是這樣的:

[root@homebase 6_sysadmin_tasks]# cat /var/tmp/uptime-master-20210221004417.txt----------------------------------------------------- Uptime for  master----------------------------------------------------- 00:44:17 up 44 min,  2 users,  load average: 0.01, 0.09, 0.09-----------------------------------------------------[root@homebase 6_sysadmin_tasks]# cat /var/tmp/uptime-workernode1-20210221184525.txt----------------------------------------------------- Uptime for  workernode1----------------------------------------------------- 18:45:26 up 44 min,  2 users,  load average: 0.01, 0.01, 0.00-----------------------------------------------------

使用 Ansible,你可以用較少的努力以人類可讀的格式獲得多個(gè)服務(wù)器的狀態(tài),Jinja 模板 允許你根據(jù)自己的需要調(diào)整輸出。通過更多的自動(dòng)化,你可以按計(jì)劃運(yùn)行,并通過電子郵件發(fā)送輸出,以達(dá)到報(bào)告的目的。

2、配置額外的 cron 作業(yè)

你需要根據(jù)基礎(chǔ)設(shè)施和應(yīng)用需求定期更新服務(wù)器的計(jì)劃作業(yè)。這似乎是一項(xiàng)微不足道的工作,但必須正確且持續(xù)地完成。想象一下,如果你對(duì)數(shù)百臺(tái)生產(chǎn)服務(wù)器進(jìn)行手動(dòng)操作,這需要花費(fèi)多少時(shí)間。如果做錯(cuò)了,就會(huì)影響生產(chǎn)應(yīng)用程序,如果計(jì)劃的作業(yè)重疊,就會(huì)導(dǎo)致應(yīng)用程序停機(jī)或影響服務(wù)器性能。

使用 install_cron 角色和 r_cron.yml 劇本:

[root@homebase 6_sysadmin_tasks]# ansible-playbook -i inventory/hosts playbooks/r_cron.yml -kSSH password:PLAY [Install additional cron jobs for root] ***************************************************************************************************************************.截?cái)?...PLAY RECAP *************************************************************************************************************************************************************master                     : ok=10   changed=7    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  workernode1                : ok=10   changed=7    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

驗(yàn)證劇本的結(jié)果:

[root@homebase 6_sysadmin_tasks]# ansible -i inventory/hosts all -m shell -a "crontab -l" -kSSH password:master | CHANGED | rc=0 >>1 2 3 4 5 /usr/bin/ls /tmp#Ansible: Iotop Monitoring0 5,2 * * * /usr/sbin/iotop -b -n 1 >> /var/tmp/iotop.log 2>> /var/tmp/iotop.errworkernode1 | CHANGED | rc=0 >>1 2 3 4 5 /usr/bin/ls /tmp#Ansible: Iotop Monitoring0 5,2 * * * /usr/sbin/iotop -b -n 1 >> /var/tmp/iotop.log 2>> /var/tmp/iotop.err

使用 Ansible,你可以以快速和一致的方式更新所有服務(wù)器上的 crontab 條目。你還可以使用一個(gè)簡(jiǎn)單的點(diǎn)對(duì)點(diǎn) Ansible 命令來報(bào)告更新后的 crontab 的狀態(tài),以驗(yàn)證最近應(yīng)用的變化。

3、收集服務(wù)器統(tǒng)計(jì)和 sars

在常規(guī)的故障排除過程中,為了診斷服務(wù)器性能或應(yīng)用程序問題,你需要收集系統(tǒng)活動(dòng)報(bào)告system activity reports(sars)和服務(wù)器統(tǒng)計(jì)。在大多數(shù)情況下,服務(wù)器日志包含非常重要的信息,開發(fā)人員或運(yùn)維團(tuán)隊(duì)需要這些信息來幫助解決影響整個(gè)環(huán)境的具體問題。

安全團(tuán)隊(duì)在進(jìn)行調(diào)查時(shí)非常特別,大多數(shù)時(shí)候,他們希望查看多個(gè)服務(wù)器的日志。你需要找到一種簡(jiǎn)單的方法來收集這些文檔。如果你能把收集任務(wù)委托給他們就更好了。

通過 check_stats 角色和 c_stats.yml 劇本來完成這個(gè)任務(wù):

$ ansible-playbook -i inventory/hosts  playbooks/c_stats.yml PLAY [Check Stats/sar for Servers] *********************************************************************************************************************************** TASK [check_stats : Get current date time] ***************************************************************************************************************************changed: [master]changed: [workernode1].截?cái)?...PLAY RECAP ***********************************************************************************************************************************************************master                     : ok=5    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  workernode1                : ok=5    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

輸出看起來像這樣:

$ cat /tmp/sar-workernode1-20210221214056.txt----------------------------------------------------- sar output for workernode1-----------------------------------------------------Linux 4.18.0-193.el8.x86_64 (node1)     21/02/21        _x86_64_        (2 CPU)21:39:30     LINUX RESTART      (2 CPU)-----------------------------------------------------

4、收集服務(wù)器日志

除了收集服務(wù)器統(tǒng)計(jì)和 sars 信息,你還需要不時(shí)地收集日志,尤其是當(dāng)你需要幫助調(diào)查問題時(shí)。

通過 check_logs 角色和 r_cron.yml 劇本來實(shí)現(xiàn):

$ ansible-playbook -i inventory/hosts  playbooks/c_logs.yml -kSSH password: PLAY [Check Logs for Servers] ****************************************************************************************************************************************.截?cái)?...TASK [check_logs : Capture Timestamp] ********************************************************************************************************************************changed: [master]changed: [workernode1]PLAY RECAP ***********************************************************************************************************************************************************master                     : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  workernode1                : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

為了確認(rèn)輸出,打開轉(zhuǎn)儲(chǔ)位置生成的文件。日志應(yīng)該是這樣的:

$ cat /tmp/logs-workernode1-20210221214758.txt | more----------------------------------------------------- Logs gathered: /var/log/messages for workernode1----------------------------------------------------- Feb 21 18:00:27 node1 kernel: Command line: BOOT_IMAGE=(hd0,gpt2)/vmlinuz-4.18.0-193.el8.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quietFeb 21 18:00:27 node1 kernel: Disabled fast string operationsFeb 21 18:00:27 node1 kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'Feb 21 18:00:27 node1 kernel: x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'Feb 21 18:00:27 node1 kernel: x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'Feb 21 18:00:27 node1 kernel: x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256Feb 21 18:00:27 node1 kernel: x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'compacted' format.

5、安裝或刪除軟件包和軟件

你需要能夠持續(xù)快速地在系統(tǒng)上安裝和更新軟件和軟件包??s短安裝或更新軟件包和軟件所需的時(shí)間,可以避免服務(wù)器和應(yīng)用程序不必要的停機(jī)時(shí)間。

通過 install_tool 角色和 r_install.yml 劇本來實(shí)現(xiàn)這一點(diǎn):

$ ansible-playbook -i inventory/hosts playbooks/r_install.yml -kSSH password:PLAY [Install additional tools/packages] *********************************************************************************** TASK [install_tool : Install specified tools in the role vars] *************************************************************ok: [master] => (item=iotop)ok: [workernode1] => (item=iotop)ok: [workernode1] => (item=traceroute)ok: [master] => (item=traceroute) PLAY RECAP *****************************************************************************************************************master                     : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  workernode1                : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

這個(gè)例子安裝了在 vars 文件中定義的兩個(gè)特定包和版本。使用 Ansible 自動(dòng)化,你可以比手動(dòng)安裝更快地安裝多個(gè)軟件包或軟件。你也可以使用 vars 文件來定義你要安裝的軟件包的版本。

$ cat roles/install_tool/vars/main.yml---# vars file for install_toolins_action: absentpackage_list:  - iotop-0.6-16.el8.noarch  - traceroute

擁抱自動(dòng)化

要成為一名有效率的系統(tǒng)管理員,你需要接受自動(dòng)化來鼓勵(lì)團(tuán)隊(duì)內(nèi)部的標(biāo)準(zhǔn)化和協(xié)作。Ansible 使你能夠在更少的時(shí)間內(nèi)做更多的事情,這樣你就可以將時(shí)間花在更令人興奮的項(xiàng)目上,而不是做重復(fù)的任務(wù),如管理你的事件和問題管理流程。

以上是“如何通過使用Ansible自動(dòng)執(zhí)行可重復(fù)的日常任務(wù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI