日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自动化运维工具Ansible

發布時間:2023/11/27 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自动化运维工具Ansible 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ansible簡介:

??????? ansible是新出現的自動化運維工具,基于Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。

ansible是基于模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:

  • 連接插件connection plugins:負責和被監控端實現通信;
  • host inventory:指定操作的主機,是一個配置文件里面定義監控的主機;
  • 各種模塊核心模塊、command模塊、自定義模塊;
  • 借助于插件完成記錄日志郵件等功能;
  • playbook:劇本執行多個任務時,非必需可以讓節點一次性運行多個任務。

圖形介紹:

  • 優點:
  • no agents:不需要在被控主機上安裝任何客戶端;
  • no server:無服務器端,使用時直接運行命令即可;
  • modules in any languages:基于模塊工作,可使用任意語言開發模塊;
  • yaml,not code:使用yaml語言定制劇本playbook;
  • ssh by default:基于ssh工作;
  • strong multi-tier solution:可實現多級指揮。
  • 輕量級,無需在客戶端安裝agent,更新時,只需在操作機上進行一次更新即可;
  • 批量任務執行可以寫成腳本,而且不用分發到遠程就可以執行;
  • 使用python編寫,維護更簡單,ruby語法過于復雜;

?

實驗環境

redhat6.5???????????

test1:172.25.254.11????????? ansible服務器端???????????? 安裝python2.7模塊 ?? ?? ansible

test2:172.25.254.12????????? 客戶端????????????????????????????? 安裝python2.7模塊

官網:https://www.ansible.com

server端與client端安裝python模塊:

[root@test1 ~]# yum install -y gcc zlib zlib-devel openssl-devel openssl

[root@test1 ~]# ls?????????? //提前下載好python軟件包,可打開網頁進行下載:https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz

Python-2.7.8.tgz

[root@test1 ~]# cd Python-2.7.8
[root@test1 Python-2.7.8]# ./configure --prefix=/usr/local
[root@test1 Python-2.7.8]# make && make install
?

到這里一定要注意,由于我們只是做實驗,所以為了虛擬機之后的正常使用,請提前備份/usr/bin/python* ,實驗做完之后刪除/usr/bin/python* ,然后將備份后的東西還原回去。[root@test1 Python-2.7.8]# mkdir /tmp/python            //創建一個備份文件[root@test1 Python-2.7.8]# cp -a /usr/bin/python* /tmp/python            //備份原來的python文件 

[root@test1 Python-2.7.8]# cp -a /usr/local/include/python2.7/* /usr/local/include/
[root@test1 Python-2.7.8]# cd /usr/bin/
[root@test1 bin]# ln -s /usr/local/bin/python2.7 /usr/local/bin/python
[root@test1 bin]# rm -f /usr/bin/python
[root@test1 bin]# cp /usr/local/bin/python2.7 /usr/bin/python

僅server端安裝ansible:

接下來安裝setuptools模塊

[root@test1 ~]# ls?????????????????? //下載鏈接: http://ftp.leg.uct.ac.za/pub/packages/macports/distfiles/py-setuptools/

Python-2.7.8.tgz
setuptools-7.0.tar.gz

[root@test1 setuptools-7.0]# python setup.py install

安裝pycrypto模塊

[root@test1 ~]# cd

[root@test1 ~]# ls?????????????????????????//下載鏈接:https://www.dlitz.net/software/pycrypto/

pycrypto-2.6.1.tar.gz
Python-2.7.8
Python-2.7.8.tgz
setuptools-7.0
setuptools-7.0.tar.gz?????????????????????

[root@test1 ~]# tar zxf pycrypto-2.6.1.tar.gz
[root@test1 ~]# cd pycrypto-2.6.1
[root@test1 pycrypto-2.6.1]# python setup.py install

安裝PyYAML模塊:

[root@test1 ~]# ls????????????????????????????????????//下載鏈接:https://pyyaml.org/download/pyyaml/

pycrypto-2.6.1
pycrypto-2.6.1.tar.gz
Python-2.7.8
Python-2.7.8.tgz
PyYAML-3.11.tar.gz
setuptools-7.0
setuptools-7.0.tar.gz

[root@test1 ~]# tar zxf PyYAML-3.11.tar.gz
[root@test1 ~]# cd PyYAML-3.11
[root@test1 PyYAML-3.11]# python setup.py install


安裝Jinja2模塊:

//下載鏈接:https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.3.tar.gz

[root@test1 ~]# tar zxf MarkupSafe-0.9.3.tar.gz??????
[root@test1 ~]# cd MarkupSafe-0.9.3
[root@test1 MarkupSafe-0.9.3]# python setup.py install

[root@test1 ~]# tar zxf Jinja2-2.7.3.tar.gz???????????????? //下載鏈接:https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.7.3.tar.gz
[root@test1 ~]# cd Jinja2-2.7.3
[root@test1 Jinja2-2.7.3]# python setup.py install?????????

安裝paramiko模塊:

[root@test1 ~]# tar zxf ecdsa-0.11.tar.gz??????????????????? https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.11.tar.gz
[root@test1 ~]# cd ecdsa-0.11
[root@test1 ecdsa-0.11]# python setup.py install

[root@test1 ~]# tar zxf paramiko-1.15.1.tar.gz??????????? https://pypi.python.org/packages/source/p/paramiko/paramiko-1.15.1.tar.gz

[root@test1 ~]# cd paramiko-1.15.1
[root@test1 paramiko-1.15.1]# python setup.py install?????? ?

安裝simplejson模塊

[root@test1 ~]#? tar zxf simplejson-3.6.5.tar.gz ? ? ? ? ?? https://pypi.python.org/packages/source/s/simplejson/simplejson-3.6.5.tar.gz
[root@test1 ~]# cd simplejson-3.6.5
[root@test1 simplejson-3.6.5]# python setup.py install

最后安裝ansible

[root@test1 ~]# tar zxf ansible-1.7.2.tar.gz?????????? https://github.com/ansible/ansible/archive/v1.7.2.tar.gz
[root@test1 ~]# cd ansible-1.7.2
[root@test1 ansible-1.7.2]# python setup.py install??

到此ansible就配置完畢啦!!!

接下來繼續進行server端配置

[root@test1 ansible-1.7.2]# cd examples/
[root@test1 examples]# ls
ansible.cfg? DOCUMENTATION.yml? hosts? issues? playbooks? scripts
[root@test1 examples]# mkdir /etc/ansible
[root@test1 examples]# cp hosts ansible.cfg /etc/ansible/
1、SSH免密鑰登錄設置

[root@test1 ~]# ssh-keygen??????????? //生成公私鑰對

[root@test1 ~]# cd /root/.ssh
[root@test1 .ssh]# ls??????????????????? //可以看到生成的公私鑰對
id_rsa? id_rsa.pub? known_hosts
[root@test1 .ssh]# ssh-copy-id 172.25.254.11

[root@test1 .ssh]# cd ..
[root@test1 ~]# scp -r .ssh/ 172.25.254.12:/root/????????????????????? //將公私鑰對以及剛生成的認證發送給test2
root@172.25.254.12's password:
known_hosts???????????????????????????????????????????????????????????????????????????????????????????????????????? 100% 1970???? 1.9KB/s?? 00:00?? ?
id_rsa.pub????????????????????????????????????????????????????????????????????????????????????????????????????????? 100%? 392???? 0.4KB/s?? 00:00?? ?
authorized_keys???????????????????????????????????????????????????????????????????????????????????????????????????? 100%? 392???? 0.4KB/s?? 00:00?? ?
id_rsa????????????????????????????????????????????????????????????????????????????????????????????????????????????? 100% 1675???? 1.6KB/s?? 00:00?? ?
[root@test1 ~]# ssh 172.25.254.12????????????? //登陸test2,可以看到是免密登陸,即不需要輸入test2的root密碼就可以登陸test2的主機

當然test2登陸test1也是免密的

[root@test2 ~]# ssh 172.25.254.11

[root@test1 ~]# vim /etc/ansible/hosts???????????? //修改配置文件

#[dbservers]

#db01.intranet.mydomain.net
#db02.intranet.mydomain.net
#10.25.1.56
#10.25.1.57

# Here's another example of host ranges, this time there are no
# leading 0s:

#db-[99:101]-node.example.com
172.25.254.12

[root@test1 ~]# ansible all -m ping

[root@test1 ~]# vim /etc/ansible/ansible.cfg???????????????????

?? //讓ansible連接加速配置

?????? //開啟日志

???? //關閉每次執行ansible時的檢查

[root@test1 ~]# vim /etc/ansible/hosts????????????? //這里需要注意hosts文件里面的testhosts對應的主機必須已經下載過python2.7

????????????? //其他內容都注釋掉

[root@test1 ~]# ansible testhosts -m command -a 'w'

[root@test1 ~]# ansible all -m command -a 'uptime'

作為自動化運維工具,ansible當然可以批量的做一些事情

例如:通過ansible可以將本地文件/目錄同步到想要發送的客戶端

[root@test1 ~]# vim /var/www/html/index.html

? [root@test1 ~]# ansible testhosts -s -m copy -a 'src=/var/www/html/index.html dest=/mnt/index.html mode=0755'

發送成功,接下來看看test1和test2是否同步過去文件

[root@test1 tmp]#
[root@test1 tmp]# cd /mnt/???????????
[root@test1 mnt]# ls??????????????????? //可以看到文件已經推送過來
default.conf? honeyd-1.5c.tar-2.gz? index.html?
[root@test1 mnt]# cat index.html
<h1>we are family</h1>

[root@test2 tmp]# cd /mnt/
[root@test2 mnt]# ls
index.html? index.php? keepalived-2.0.6
[root@test2 mnt]# cat index.html
<h1>we are family</h1>

接下來講一些ansible常用的模塊及命令等

1、setup???????????????? //用來查看遠程主機的一些信息

[root@test1 ~]# ansible all -m setup

2、ping?????????????????? //查看遠程主機的運行狀態

3、file???????????????????????? //設置文件的屬性,例如:

[root@test1 ~]# ansible all -m file -a "src=/var/www/html/index.html dest=/tmp/index.html state=link"

具體詳解:

backup在覆蓋遠程服務器前將遠程服務器的源文件進行備份,備份文件包含時間信息
content用于替代 'src' ,可以直接設定制定文件的值
src被鏈接的本地文件,可以是絕對路徑也可以是相對路徑,如果路徑是目錄,則它將遞歸復制。若路徑是用/結尾,則只復制目錄里的內容,若沒有用/則復制目錄里面的所有內容包括時間權限等,類似于rsync,只應用于state=link的情況
dest(必選項)被鏈接到的路徑,要將源文件復制到的(遠程主機的絕對路徑),只應用于state=link的情況
link創建軟鏈接
hard創建硬鏈接
mode定義文件/目錄的權限(四位數,如:mode=0755)
group定義文件/目錄的屬組
owner定義文件/目錄的屬主
path必選項,定義文件/目錄的路徑
recurse遞歸設置文件的屬性,只對目錄有效
directory?如果目錄不存在,就創建目錄
file即使文件不存在也不被創建
touch如果文件不存在,則會創建一個新的文件,如果文件/目錄已存在,則更新其最后修改時間
absent刪除目錄、文件或者取消鏈接文件
force兩種情況下需要強制創建軟鏈接,1、源文件不存在,但之后會建立的情況下;2、目標軟鏈接已存在,需要先取消之前的軟鏈接,然后創建新的軟鏈

如:???

[root@test1 etc]# ansible all -m command -a "ls -al /etc/passwd" ? ? ? ? ? ? ? ? //遠程文件信息查看

[root@test1 ~]# ansible all -m file -a "src=/etc/passwd dest=/mnt/passwd state=link"???? //文件鏈接成功,此時/mnt下有文件passwd

[root@test1 mnt]# ansible all -m command -a "ls -al /mnt/passwd"??????????? //此時查看文件存在

[root@test1 mnt]# ansible all -m file -a "path=/mnt/passwd state=absent"???????? //刪除文件

[root@test1 mnt]# ansible all -m command -a "ls -al /mnt/passwd"???????????????????? //查看時報錯,說明已經刪除

4、copy?????????????? //復制文件到遠程主機

5、command???????????????????? //在遠程主機上執行命令

參數有:

creates:一個文件名,當該文件存在,則該命令不執行

free_form:要執行的linux指令

chdir:在執行指令之前,先切換到該目錄

removes:一個文件名,當該文件不存在,則該選項不執行

executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑

ansible就介紹到這!!!

?

如果要還原虛擬機原本的狀態不影響yum等命令,可以將之前的文件再還原回去,如下:

[root@test1 ~]# cd? /usr/bin/
[root@test1 bin]# ls python*
python????? python2???? python2.6?? python.old?
[root@test1 bin]# rm -rf python*

[root@test1 bin]# mv /tmp/python/* .

test2和test1的步驟一樣,這里就不再贅述。

試一下看虛擬機是否正常可以用:

[root@test1 bin]# yum repolist??????????????????? //若出現這樣的報錯,可以執行下面的命令
-bash: /usr/bin/yum: /usr/bin/python2.4: bad interpreter: No such file or directory

[root@test1 bin]# ls python*
python? python2? python2.6

[root@test1 bin]# mv python python2.4

總結

以上是生活随笔為你收集整理的自动化运维工具Ansible的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:自动化运维工具Ansible