1. 程式人生 > >Ansible運維自動化

Ansible運維自動化

一,工具與環境介紹

 

1.1 Ansible簡介

  • 批量管理伺服器的工具。
  • 優點:無需部署agent,沒客戶端,客戶端只要支援Python即可。
  • 通過ssh進行管理,遠端登入管理。
  • 目前github上最流行的自動化運維工具,沒有之一。
 

1.2 Jenkins簡介

  • 視覺化運維(主要用在視覺化部署):能夠把指令碼或者管理工具的一些資訊輸出放在Web介面讓你看,同時還可以看一些歷史的資訊輸出。
  • 可持續構建,和git,svn結合,可以發出指令把開發新寫的程式碼從程式碼倉庫裡直接tar打包傳送到對面伺服器裡同時啟動自動安裝程式。 
    git,svn:一種開發可以存放程式碼的倉庫
  • 與ssh和ansible結合均可實現視覺化運維
 

1.3 環境說明

  • 關閉防火牆
  • 關閉sekinux
 

二, Python3與Ansible的安裝

 

2.1 使用原始碼安裝Python3.5

 

2.1.1 安裝支援包

裝兩個雲yum源: 
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo


安裝支援包: 
yum -y install lrzsz vim net-tools gcc gcc-c++ ncurses ncurses-devel unzip zlib-devel zlib openssl-devel openssl libffi-devel epel-release libselinux-python

 

2.1.2 原始碼包編譯 Python3.5

雲yum下載地址: 
wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz

tar xf Python-3.5.2.tgz -C /usr/src/

 
cd /usr/src/Python-3.5.2/ 
./configure --prefix=/usr/local/python 
image_1csiuqp4v44eane12mh7ga47b9.png-5kB

make && make install 
image_1csj3mavq118iamb2em1idp1350m.png-8.2kB

 

2.1.2 做軟連線

ln -s /usr/local/python/bin/python3 /usr/bin/python3

 

2.1.3 查版本號

python3 -V

 

2.2 使用pip3安裝ansible

 

2.2.1 安裝ansible最新版本

/usr/local/python/bin/pip3 install ansible

 

2.2.2 做軟連線

ln -s /usr/local/python/bin/ansible /usr/local/bin 
which ansible 
ansible --version(檢視版本號)

 

2.3 Ansible檢視幫助

/usr/local/python/bin/ansible-doc -l 檢視總幫助 
/usr/local/python/bin/ansible-doc -s shell 檢視Shell模組的幫助

 

三,使用公鑰實現ssh無密碼登陸

  • 下載SCP
 

3.1 生成金鑰對

ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "" 
``

 

3.2 分發金鑰

  sshpass -p 對方電腦登陸密碼 ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 192.168.200.63"
-o StrictHostKeyChecking=no 不記錄

 

四,Ansible的簡單配置和ping模組

 

4.1 Ansible的配置檔案

通過pip3安裝的ansible是沒有配置檔案的,需要我們自己建立一個

 
  1. mkdir -p /etc/ansible
  2. vim /etc/ansible/hosts
 
  1. cat /etc/ansible/hosts
  2. [nginx] #被管理的主機組名稱
  3. webA ansible_ssh_host=192.168.200.132 ansible_ssh_port=22 ansible_ssh_user=root #第一臺主機
  4. webB ansible_ssh_host=192.168.200.138 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=666666 #第二臺主機
  5. 特別提示:
  6. WebA ===> 主機名
  7. ansible_ssh_host ===>主機IP
  8. ansible_ssh_port ===>ssh的預設埠
  9. ansible_ssh_user ===>ssh的使用者名稱
  10. ansible_ssh_pass ===>ssh的使用者的連線密碼

如果設定了ssh免金鑰,就不需要寫密碼,例如:webA .沒有設定免金鑰,那麼就需要安裝sshpass工具,並在/etc/ansible/hosts檔案裡寫上主機的連線密碼。例如webB

 

下載epel源安裝sshpass

 
  1. 2.[[email protected] python]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  2. 3.[[email protected] python]# yum -y install sshpass
  3. 4.[[email protected] python]# which sshpass
  4. 5./usr/bin/sshpass
 

4.2 進行ansible遠端執行命令測試

 

1.語法:

ansible Web1 -m command -a 'uptime'-->獲取Web1伺服器的平均負載值 
ansible 主機組 -m ansible內建功能模組名 -a 命令

all:代表所有主機 
nginx:模組名,只發nginx模組下的主機 
單發:Web1=主機名 
多發:Web1:Web2 
指定all但不包含web2:all:\ !web1,注意!前需要加轉意符號(\)

 

2.進行命令測試:

 
  1. 1.#進行ping模組的連線測試
  2. 2.[[email protected] python]# ansible nginx -m ping
  3. 3.webB | FAILED! => { #我們發現webB還是沒連結成功,這是因為本機的known_hosts檔案還沒有記錄對方主機的資訊。
  4. 4. "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
  5. 5.}
  6. 6.webA | SUCCESS => { #webA成功
  7. 7. "changed": false,
  8. 8. "ping": "pong"
  9. 9.}
 

4.3 ansible的簡單使用方式

ansible -i /etc/ansible/hosts 主機或主機組 -m 指定模組 -a 命令 
-i:指定配置檔案位置,不指定預設去/etc/ansible/hosts 裡找 
-m : 指定操作模組,後跟模組名 
-a :釋出,後面跟命令

 

4.4 使用ping模組用來檢視伺服器是否連線正常,ping模組不需要-a指定引數

ansible all -m ping

 

操作測試

 
  1. #A
  2. [[email protected] .ssh]# ansible webA -m ping
  3. webA | SUCCESS => {
  4. "changed": false,
  5. "ping": "pong"
  6. }
 
  1. # all
  2. [[email protected] .ssh]# ansible all -m ping
  3. webA | SUCCESS => {
  4. "changed": false,
  5. "ping": "pong"
  6. }
  7. webB | SUCCESS => {
  8. "changed": false,
  9. "ping": "pong"
  10. }
 
  1. #A:B
  2. [[email protected] .ssh]# ansible webA:webB -m ping
  3. webA | SUCCESS => {
  4. "changed": false,
  5. "ping": "pong"
  6. }
  7. webB | SUCCESS => {
  8. "changed": false,
  9. "ping": "pong"
  10. }
 
  1. #\!A
  2. [[email protected] .ssh]# ansible all:\!webA -m ping
  3. webB | SUCCESS => {
  4. "changed": false,
  5. "ping": "pong"
  6. }
 

五,Ansible的三個命令模組

 

5.1 ansible模組command

 

1.command支援直接回顯命令的執行結果

 
  1. [[email protected] ~]# ansible all -m command -a "pwd"
  2. webA | SUCCESS | rc=0 >>
  3. /root
  4. webB | SUCCESS | rc=0 >>
  5. /root

注:command不支援管道符不支援重定向,不建議使用

 

5.2 Ansible模組shell

 

1.shell模組支援管道符

 
  1. [[email protected] ~]# ansible all -m shell -a "echo testansible | grep a"
  2. webA | SUCCESS | rc=0 >>
  3. testansible
  4. webB | SUCCESS | rc=0 >>
  5. testansible
 

2.shell支援重定向

 
  1. [[email protected] ~]# ansible all -m shell -a "echo bb >> /tmp/testansible"
  2. webA | SUCCESS | rc=0 >>
  3. webB | SUCCESS | rc=0 >>

注:如果遇到特殊符號需要加入\轉義,ansible才能正常執行

 

5.3 Ansible模組raw,最原始的方式執行命令(不依賴python,僅通過ssh實現)

 

1.清除yum快取

 
  1. [[email protected] ~]# ansible all -m raw -a "yum -y clean all"
  2. webB | SUCCESS | rc=0 >>
  3. Loaded plugins: fastestmirror
  4. Cleaning repos: c7-media
  5. Cleaning up everything
  6. Shared connection to 192.168.200.63 closed.
  7. webA | SUCCESS | rc=0 >>
  8. Loaded plugins: fastestmirror
  9. Cleaning repos: c7-media epel
  10. Cleaning up everything
  11. Cleaning up list of fastest mirrors
  12. Shared connection to 192.168.200.132 closed.
 

4.建立yum快取

 
  1. [[email protected] ~]# ansible all -m raw -a "yum makecache"
  2. webA | SUCCESS | rc=0 >>
  3. Loaded plugins: fastestmirror
  4. c7-media | 3.6 kB 00:00
  5. Loading mirror speeds from cached hostfile
  6. * c7-media:
  7. Metadata Cache Created
  8. Shared connection to 192.168.200.132 closed.
  9. webB | SUCCESS | rc=0 >>
  10. Loaded plugins: fastestmirror
  11. c7-media | 3.6 kB 00:00
  12. Loading mirror speeds from cached hostfile
  13. * c7-media:
  14. Metadata Cache Created
  15. Shared connection to 192.168.200.138 closed.
 

3.yum裝nmap包

 
  1. ansible all -m raw -a "yum -y install nmap"
 

5.4Ansible的copy模組批量下發檔案或資料夾

 

1. copy模組概述

**copy模組的引數:**ansible 主機組 -m 模組 -a 命令

osrc:指定原始檔或目錄 
odest:指定目標伺服器的檔案或目錄 
obackup:是否要備份 
oowner:拷貝到目標伺服器後,檔案或目錄的所屬使用者 
ogroup:拷貝到目標伺服器後,檔案或目錄的所屬群組 
omode:檔案或目錄的許可權

 

準備工作

 
  1. [[email protected] ~]# mkdir -p /service/scripts
  2. [[email protected] ~]# echo "aaa" > /service/scripts/test.txt
  3. [[email protected] ~]# echo "bbb" > /service/scripts/test2.tx
  4. 所有被管理端節點必須安裝libselinux-python
  5. yum -y install libselinux-python
 

2. copy模組拷貝檔案

特別提示:如果目標路徑不存在會自動建立 : src===>原始檔路徑 dest=目標路徑位置

 
  1. [[email protected] ~]# ansible all -m copy -a "src=/service/scripts/test.txt dest=/service/scripts/"
  2. webB | FAILED! => { #節點未安裝libselinux-python
  3. "changed": false,
  4. "checksum": "972a1a11f19934401291cc99117ec614933374ce",
  5. "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
  6. }
  7. webA | SUCCESS => {
  8. "changed": true,
  9. "checksum": "972a1a11f19934401291cc99117ec614933374ce",
  10. "dest": "/service/scripts/test.txt",
  11. "gid": 0,
  12. "group": "root",
  13. "md5sum": "5c9597f3c8245907ea71a89d9d39d08e",
  14. "mode": "0644",
  15. "owner": "root",
  16. "secontext": "system_u:object_r:svc_svc_t:s0",
  17. "size": 4,
  18. "src": "/root/.ansible/tmp/ansible-tmp-1529035954.8010113-22928023490467/source",
  19. "state": "file",
  20. "uid": 0
  21. }
 
節點安裝libselinux-python後在進行傳送測試
 
  1. [[email protected] ~]# ansible webB -m copy -a "src=/service/scripts/test.txt dest=/service/scripts/"
  2. webB | SUCCESS => { #傳送成功
  3. "changed": true,
  4. "checksum": "972a1a11f19934401291cc99117ec614933374ce",
  5. "dest": "/service/scripts/test.txt",
  6. "gid": 0,
  7. "group": "root",
  8. "md5sum": "5c9597f3c8245907ea71a89d9d39d08e",
  9. "mode": "0644",
  10. "owner": "root",
  11. "secontext": "system_u:object_r:svc_svc_t:s0",
  12. "size": 4,
  13. "src": "/root/.ansible/tmp/ansible-tmp-1529036146.1609693-94270890826089/source",
  14. "state": "file",
  15. "uid": 0
  16. }
 

3. copy模組拷貝資料夾

特別提示: 如果目標路徑裡有與我拷貝的檔案同名檔案的話,會直接覆蓋目標路徑下的檔案

 
1.拷貝/service/scripts/ 目錄下所有內容到dest的路徑下
 
  1. [[email protected] ~]# ansible webA -m copy -a "src=/service/scripts/ dest=/service/scripts/"
  2. webA | SUCCESS => {
  3. "changed": true,
  4. "dest": "/service/scripts/",
  5. "src": "/service/scripts/"
  6. }
 
2.拷貝/service/scripts目錄本身及其內部的所有內容到dest的路徑下
 
  1. [[email protected] ~]# ansible webA -m copy -a "src=/service/scripts dest=/service/scripts/"
  2. webA | SUCCESS => {
  3. "changed": true,
  4. "dest": "/service/scripts/",
  5. "src": "/service/scripts"
  6. }
 

4 copy模組自動備份

特別提示:  
引數:backup=yes ===>意思是,如果目標路徑下,有與我同名但不同內容的檔案時,在覆蓋前,對目標檔案先進行備份

 
  1. [[email protected] ~]# ansible webB -m copy -a "src=/service/scripts/ dest=/service/scripts/ backup=yes"
  2. webB | SUCCESS => {
  3. "changed": true,
  4. "dest": "/service/scripts/",
  5. "src": "/service/scripts/"
  6. }
 

5 copy模組指定使用者和屬主屬組許可權

 
  1. [[email protected] ~]# ansible webA -m copy -a "src=/service/scripts/ dest=/service/scripts/ owner=nobody group=nobody mode=0600"
  2. webA | SUCCESS => {
  3. "changed": true,
  4. "dest": "/service/scripts/",
  5. "src": "/service/scripts/"
  6. }
 

5.5 Ansible的script模組批量執行指令碼

能夠實現遠端伺服器批量執行本地的shell指令碼

 

1.遠端批量分發並自動部署nginx

所有被管理端需要掛載光碟,並建立本地yum配置檔案 
scripts目錄下需要兩個指令碼和解壓包: 
1,自動分安裝指令碼 
2,分發指令碼 
3.nginx-1.10.2.tar.gz #nginx原始碼包

 

1.自動安裝指令碼

 
  1. #!/bin/sh
  2. #nginx install shell scripts
  3. test -d /media/cdrom || mkdir -p /media/cdrom #有沒有目錄
  4. mount /dev/sr0 /media/cdrom &>/dev/null #掛在光碟
  5. yum -y install gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel &>/dev/null #安裝軟體包
  6. test -d /service/scripts || mkdir -p /service/scripts #有沒有目錄沒有建立
  7. cd /service/scripts/ #進入目錄
  8. tar xf nginx-1.10.2.tar.gz -C /usr/src/ #解壓包
  9. cd /usr/src/nginx-1.10.2/ #進入Nginx目錄
  10. ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module &>/dev/null #編譯
  11. make &>/dev/null
  12. make install &>/dev/null #安裝
  13. exit 0
 

2.分發指令碼

 
  1. #!/bin/sh
  2. Group=$1 #對方伺服器位置(主機名或主機組明)
  3. ansible $Group -m copy -a "src=/server/scripts/ dest=/service/scripts/ mode=0755" #分發範圍
  4. ansible $Group -m script -a "/service/scripts/auto_nginx.sh" #遠端啟用
 

3.啟用指令碼

ansible web1:web2 -m script -a "/bin/sh /service/scripts/auto_nginx.sh"

 

六,Ansible-playbook的初步使用

playbook可以把ansible的模組進行組合

 

6.1 作軟連線

ln -s /usr/local/python/bin/ansible-playbook /usr/local/bin/

 

6.2 playbook的簡單shell模組的使用

 
1.playbook的執行模板**
 
  1. --- #開頭三個小-開頭
  2. - hosts: webB
  3. tasks: #任務,標註
  4. - name: test #任務名字
  5. shell: echo "welcome to yunjisaun" >> /tmp/username #模組名:命令
  6. - name: test2
  7. shell: echo "welcome to yunjisuan" >> /tmp/username

模板說明: 
--- #開頭必須有三個小-,頂格寫 
- hosts: #正文配置程式碼的第一級,必須有兩個空格(-佔一個空格位) 
- host: webB #webB是host引數的值,值和hosts:之間要有一個空格 
tasks: #tasks:表示接下來要執行的具體任務 
- name: #相對於tasks再多縮排兩個格(-佔一個空格位),表示屬於tasks的下一級 
- name: test #test只是要執行的具體命令的名字可以隨便寫。name:後還是有一個空格要注意 
shell: #表示呼叫shell模組執行命令相對於tasks仍舊要多縮排兩個空格 
shell: echo "xxx" >> xxx #shell:後邊還是要有個空格,需要注意。

 
2.啟用劇本

ansible-playbook test_shell.yaml

 

相關推薦

Ansible自動化

一,工具與環境介紹   1.1 Ansible簡介 批量管理伺服器的工具。 優點:無需部署agent,沒客戶端,客戶端只要支援Python即可。 通過ssh進行管理,遠端登入管理。 目前github上最流行的自動化運維工具,沒有之一。 &n

ansible自動化之五---roles高階進階

Roles應用場景 複雜場景(建議使用roles) 變更指定主機或主機組 如命名不規範維護和傳承成本大 某些功能需Inlogs.com/blog/675193/201901/675193-20190102225646401-1546983424.png) roles下面每一個目錄是一個

ansible自動化工具安裝

最近管理的機器比較多,每次要重複執行相同命令感覺比較麻煩,最近在github發現ansible專案。目前正在邊學邊用。 1、安裝ansible ansible分為管理主機和託管主機 管理主機安裝 cd ansible & make rpm 2、遇到錯

Ansible 自動化 ( 配置管理工具 )

簡介:當下有許多的運維自動化工具( 配置管理 ),例如:Ansible、SaltStack、Puppet、Fabric 等。Ansible 一種整合 IT 系統的配置管理、應用部署、執行特定任務的開源平臺,是 AnsibleWorks 公司名下的專案,該公司由 Cobbler

自動化工具ansible(模塊使用)

copy fff lin 自動 執行命令 官網 修改 相同 mount 命令格式: ansible hosts -m shell -a ‘uptime‘ 解析: ansible #主命令 hosts #在/etc/ansible/hosts文件中定義的主

自動化工具ansible(安裝)

down 免密鑰 org roo bin package python2 div 5.1 一、安裝 註意:強烈建議升級python版本到2.6以上,不然運行會出錯或者有些功能會沒有,在編譯安裝其他包的時候也會因為兼容問題報錯。 (1)、python2.7安裝 http

自動化ansible

ansible hoc 自動化 運維自動化之ansible項目場景:公司計劃在年底做一次大型市場促銷活動,全面沖刺下交易額,為明年的上市做準備。公司要求各業務組對年底大促做準備,運維部要求所有業務容量進行三倍的擴容,並搭建出多套環境可以共開發和測試人員做測試。技術說明:ansible聚集以上部署和

自動化ansible--(playbook模式)

自動化 ansible playbook 運維自動化之ansible--(playbook模式) 一、Ansible Playbook簡介 playbook是ansible用於配置,部署,和管理被控節點的劇本。 通過playbook的詳細描述,執行其中的一系列tasks,可以讓遠端主機達

自動化-Ansible ( 四 )

變量 not 處理器 book 來講 是不是 運維 cti apache2 模板templates 功能:根據模塊文件動態生成對應的配置文件 ? Jinja2語言,使用字面量,有下面形式 字符串:使用單引號或雙引號 數字:整數,浮點數 列表:[item1, item2, .

自動化工具ansible

apps https idle 目錄 8.4 hang lin 綜合 tor 一、基礎知識: 1. 簡介 ansible基於python開發,集合了眾多運維工具的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於模塊工作的,本身沒有批

自動化工具 Ansible

工作 節點 cannot images ping 使用方法 自定義模塊 config 安裝 一、Ansible介紹 Ansible 簡單的說是一個配置管理系統(configuration management system)。你只需要可以使用 ssh 訪問你的服務器或設備就

自動化工具 Ansible-playbook (一)

handlers chang 配置管理 復雜 賬戶 程序 roc clu host 一、簡介 playbook是一個非常簡單的配置管理和多主機部署系統。可作為一個適合部署復雜應用程序的基礎。playbook可以定制配置,可以按指定的操作步驟有序執行,支持同步和異步方式。p

自動化ANSIBLE(基礎知識)

simple github remote inux 對象 場景 .tar.gz 使用場景 system Ansible發展史 Ansible ??創始人,Michael DeHaan( Cobbler 與 Func 的作者) ??2012-03-09,發布0.0.1版

自動化 Ansible

是什麼 Ansible簡單的說是一個配置管理系統(configuration management system)。你只需要可以使用ssh訪問你的伺服器或裝置就行,它也不同於其他工具,因為它使用推送的方式,而不是像puppet等那樣使用拉取安裝agent的方式。 能做什麼 ansible

自動化ansible saltstack使用對比分析

目前市場上主流的開源自動化配置管理工具有puppet、chef、ansible、saltstack。到底選擇哪一個好? 我為什麼選擇Saltstack,考慮方式很簡單,主要基於如下兩個方面: 第一、語言的選擇(puppet/chef vs ansible/saltstack) 開源技術,不看官網不足以熟練,不

linux學習34-自動化ANSIBLE

運維自動化之ANSIBLE 1. 應用概述 1.1 一些術語 雲端計算的三個分層 基礎設施在最下端,平臺在中間,軟體在頂端,分別是分別是Infrastructure-as-a-Service(IaaS),Platform-as-a-Service(PaaS

tornado+ansible+twisted+mongodb自動化系統開發(三)

又到週末啦~~樓上在裝修!!睡不著了.....你懂得! 索性整理一下思路做一個改進版的運維自動化個工具,希望能夠實現: 控制主機的初始化:如新增ssh金鑰\儲存資料庫的設定\操作使用者和密碼受管主機管理:新增\修改\刪除 新增主機的使用者名稱\密碼\埠 在後臺完成ssh金鑰

自動化ANSIBLE的簡單使用

環境 時間 顯示 pub 命令執行 系列 遠程主機 實驗 特性 實驗主機:Master:192.168.60.36Slave1:192.168.60.46Slave2:192.168.60.56測試環境做實驗、基於gnome環境安裝的centos7、且關閉了iptables

自動化之Saltstack使用詳解

自動化運維 saltstack 概要saltstack是基於Python開發的C/S架構的一款批量管理工具,底層采用動態的連接總線(ZeroMQ消息隊列pub/sub方式通信),使用ssl證書簽發的方式進行認證管理,使其可以用於編配, 遠程執行, 配置管理等等。部署輕松,在幾分鐘內可運行起來,擴展性好

自動化工具ELVES

elvesGitHub:https://github.com/elves-projectGitBooks:https://gy-games.gitbooks.io/elves/部署: https://www.travis-ci.org/elves-project運維自動化工具ELVES