天天看點

自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

Ansible

  • 一、概述
    • 1.1 特點
    • 1.2 優點
  • 二、服務搭建
    • 2.1 準備工作
    • 2.2 ansible端設定
  • 三、ansible 指令行子產品
    • 3.1 command 子產品
      • 概述
      • 指令使用
      • 常用參數
    • 3.2 shell 子產品
      • 概述
      • 指令
    • 3.3 cron 子產品
      • 概述
      • 常用參數指令
    • 3.4 user 子產品
      • 概述
      • 常用參數指令
    • 3.5 group 子產品
      • 概述
      • 指令
    • 3.6 copy 子產品
      • 概述
      • 常用參數指令
    • 3.7 file 子產品
      • 概述
      • 指令
    • 3.8 hostname 子產品
      • 概述
      • 指令
    • 3.9 ping 子產品
      • 概述
      • 指令
    • 3.10 yum 子產品
      • 概述
      • 指令
    • 3.11 service/systemd 子產品
      • 概述
      • 常用參數指令
    • 3.12 script 子產品
      • 概述
      • 指令
    • 3.13 setup 子產品
      • 概述
      • 指令

一、概述

1.1 特點

  • Ansible 是一個基于 Python 開發的配置管理和應用部署工具,融合了衆多老牌運維工具的優點, Pubbet 和 saltstack 能實作的功能,Ansible 基本上都可以實作
  • Ansible 能批量配置、部署、管理上千台主機。比如以前需要切換到每個主機上執行的一或多個操作,使用 Ansible 隻需在固定的一台 Ansible 控制節點上去完成所有主機的操作
  • Ansible 是基于子產品工作的,它隻是提供了一種運作架構,它本身沒有完成任務的能力,真正執行操作的是 Ansible 的子產品
  • Agentless,即無 Agent 的存在,它就像普通指令一樣, 并非C/S軟體,也隻需在某個作為控制節點的主機上安裝一次 Ansible 即可,通常它基于 ssh 連接配接來控制遠端主機,遠端主機上不需要安裝Ansible或其它額外的服務
  • 使用者在使用時,在伺服器終端輸入指令或者playbooks.會通過預定好的規則将playbook拆解為play.再組織成ansible可以識别的任務,調用子產品和插件,根據主機清單通過SsH将臨時檔案發給遠端的用戶端執行并傳回結果,執行結束後自動删除
  • Ansible的另一個比較鮮明的特性是它的絕大多數子產品都具備幕等性(idempotence)…所謂幂等性,指的是多次操作或多次執行對系統資源的影響是一緻的。比如執行systemctl stop xxx指令來停止服務,當發現要停止的目标服務已經處于停止狀态,它什麼也不會做,是以多次停止的結果仍然是停止,不會改變結果,它是幂等的,而systemctl restart xxx是非幂等的。
  • Ansible的很多子產品在執行時都會先判斷日标節點是否要執行任務,是以,可以放心大膽地讓Ansible去執行任務,重複執行某個任務絕大多數時候不會産生任何副作用。

1.2 優點

  • 輕量級,更新時,隻需要在操作機上進行一次更新即可
  • 采用 SSH 協定
  • 不需要去用戶端安裝 agent
  • 批量任務執行可以寫成腳本,而且不用分發到遠端就可以執行
  • 使用 python 編寫的,維護更簡單
  • 支援 sudo 普通使用者指令
  • 去中心化管理

二、服務搭建

管理者(ansible):192.168.253.11

被管理者:192.168.253.22

被管理者:192.168.253.33

2.1 準備工作

安裝ansible(管理端)

yum -y install epel-release		#需要先行安裝epel源

yum -y install ansible
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
  • tree /etc/ansible/
    • ansible的目錄結構
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

2.2 ansible端設定

配置主機清單

  • cd /etc/ansible/
  • vim hosts
    自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

生成密鑰對

  • ssh-keygen -t rsa
    自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
sshpass -p '123456' ssh-copy-id [email protected]
sshpass -p '123456' ssh-copy-id [email protected]
           

三、ansible 指令行子產品

指令格式:

ansible <組名> -m <子產品> -a <參數清單>

  • ansible-doc -l
    • 檢視已安裝的子產品,q退出
      自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

3.1 command 子產品

概述

在遠端主機執行指令,不支援管道、重定向等shell部分的特性

-s表示列出指定子產品的描述資訊和操作動作
ansible-doc -s command
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

指令使用

#all表示全部,標明全部主機執行date指令
ansible all -m command -a 'date'

#也可以選擇IP來執行
ansible 192.168.253.22 -m command -a 'date'

#組名同樣可以
ansible webservers -m command -a 'date'

#不選擇-m預設運作的就是command這個子產品
ansible all -a 'ls /'
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

常用參數

  • chdir
    • 在遠端主機上運作指令前提前進入目錄
  • creates
    • 在指令運作時建立一個檔案,如果檔案存在,則不會建立任務
  • removes
    • 在指令運作時移除一個檔案, 如果檔案不存在,則不會執行移除任務
  • executeble
    • 指明運作指令的shell程式
ansible all -m command -a "chdir=/opt ls ./"
檢視所有主機的opt目錄
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

3.2 shell 子產品

概述

在遠端主機執行指令,相當于調用遠端主機的shell程序,然後在該shell下打開一個shell運作指令(這個支援管道符合功能)

  • ansible-doc -s shell
  • 列出子產品的資訊和操作動作
    自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

指令

檢視webservers遠端主機的ip
ansible webservers -m shell -a 'ifconfig ens33 | awk "/init/{print $2}"'
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

3.3 cron 子產品

概述

在遠端主機定義任務計劃,有兩種狀态(state):present表示添加、absent表示移除

  • ansible-doc -s cron
    自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

常用參數指令

  • minute/hour/day/mouth/weekday
    • 分/時/日/月/周
  • job
    • 任務計劃執行的指令
  • name
    • 任務計劃的名稱
#在webservers主機内設定計劃任務,時間為每分鐘,内容是輸出“haha”,任務名是test01
ansible webservers -m cron -a 'minute="*/1" job="/usr/bin/echo haha" name="test01"'

#移除這個計劃任務
ansible webservers -m cron -a 'name=test01 state=absent'

#可以遠端檢視計劃任務内已經移除
ansible webservers -a 'crontab -l'
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

PS:如果任務沒有取名字,删除的時候直接使用 name=None 就行

3.4 user 子產品

概述

使用者管理的子產品

  • ansible-doc -s user
    自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

常用參數指令

參數 定義
name 使用者名:必選參數
state=present l absent 建立賬号或者删除賬号,present 表示建立,absent 表示删除
system=yes I no 是否為系統賬号
uid 使用者uid
group 使用者基本組
shell 預設使用的shell
move_home=yse l no 如果設定的家日錄已經存在,是否将已經存在的家目錄進行移動
password 使用者的密碼,建議使用加密後的字元串
comment 使用者的注釋資訊
remove=yes I no 當state=absent時,是否删除使用者的家目錄
#在web主機建立使用者cc200
ansible webservers -m user -a 'name="cc200"'

#使用指令檢視是否建立成功
ansible webservers -m command -a 'cat /etc/passwd'

#删除該使用者
ansible webservers -m user -a 'name="cc200" state=absent'
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

3.5 group 子產品

概述

使用者組管理的子產品

請求的是 groupadd、groupdel、groupmod子產品

  • ansible-doc -s group
    自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

指令

#建立mysql組
ansible webservers -m group -a 'name=mysql gid=1234 system=yes'

#檢視是否建立
ansible webservers -a 'cat /etc/group'

#建立test01使用者,添加到mysql組内
ansible webservers -m user -a 'name=test01 uid=111 system=yes group=mysql'

#檢視是否建立
ansible webservers -a 'cat /etc/passwd'

#檢視是否在組内
ansible webservers -a 'id test01'
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

3.6 copy 子產品

概述

用于複制指定主機内的檔案到遠端主機裡

  • ansible-doc -s copy
    自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

常用參數指令

參數 定義
dest 指出複制檔案的目标及位置,使用絕對路徑,如果是源目錄,指目标也要是目錄,如果目标檔案已經存在會覆寫原有的内容
src 指出源檔案的路徑。可以使用相對路徑或絕對路徑。支援直接指定目錄。如果源是日錄則日标也要是日錄
mode 指出複制時,目标檔案的權限
owner 指出複制時,目标檔案的屬主
group 指出複制時,日标檔案的屬組
content 指出複制到目标主機上的内容,不能與src一起使用
#複制本機檔案到遠端主機
ansible webservers -m copy -a 'src=/etc/fstab dest=/opt/123.txt owner=root mode=640'

#檢視是否成功
ansible webservers -a 'ls -l /opt'

#遠端添加檔案内容進去
ansible webservers -m copy -a 'content="webservers" dest=/opt/123.txt'

#檢視
ansible webservers -a 'cat /opt/123.txt'
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

3.7 file 子產品

概述

設定檔案屬性

  • ansible-doc -s file
    自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

指令

#修改123.txt檔案的屬主屬組權限
nsible webservers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/123.txt'

#建立新檔案111.txt
ansible webservers -m file -a 'path=/opt/111.txt state=touch'

#删除111.txt
ansible webservers -m file -a 'path=/opt/111.txt state=absent'
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

3.8 hostname 子產品

概述

用于管理遠端主機的主機名

指令

#更改webservers遠端主機的名字
ansible webservers -m hostname -a 'name=webservers'
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

3.9 ping 子產品

概述

檢測遠端主機是否線上

指令

#測試所有主機
ansible all -m ping

#指定測試
ansible webservers -m ping
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

3.10 yum 子產品

概述

在遠端主機上安裝解除安裝軟體包

  • ansible-doc -s yum
    自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

指令

#安裝
ansible webservers -m yum -a 'name=httpd'

#解除安裝
ansible webservers -m yum -a 'name=httpd state=absent'
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

3.11 service/systemd 子產品

概述

用于管理遠端主機的管理服務的運作狀态

  • ansible-doc -s service
    自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

常用參數指令

項目 Value
name 被管理的服務名稱
state=started I stopped I restarted 動作包含啟動關閉或者重新開機
enabled=yes | no 表示是否設定該服務開機自啟
runlevel 如果設定了enabled開機自啟去,則要定義在哪些運作目标下自啟動
#開啟服務
ansible webservers -m service -a 'enabled=true name=httpd state=started'

#檢視服務狀态
ansible webservers -a 'systemctl status httpd'
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

3.12 script 子產品

概述

可以實作遠端批量運作本主機的shell腳本

  • ansible-doc -s script
    自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

指令

本地建立腳本

  • vim test.sh
#!/bin/bash
echo "haha" > /opt/cc.txt
           
  • chmod +x test.sh

遠端使用

#在webservers主機運作
ansible webservers -m script -a 'test.sh'

#檢視
ansible webservers -a 'cat /opt/cc.txt'
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

3.13 setup 子產品

概述

facts 元件用來收集被管理節點資訊

setup 子產品可以擷取這些資訊

  • ansible-doc -s setup
    自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

指令

#擷取全部的facts資訊
ansible webservers -m setup

#filter篩選需要的資訊
ansible webservers -m setup -a 'filter=*ipv4'
           
自動化運維—Ansible工具的使用一、概述二、服務搭建三、ansible 指令行子產品

繼續閱讀