ansible自動化運維平臺部署
目錄
二、驗證ansible是否安裝成功 ansible -m ping group1
#安裝ansible有原始碼安裝和yum源安裝
yum install ansible -y
#備份ansible組態檔
cd /etc/ansible/hosts && cp hosts hosts.default
#修改hosts檔案,ansible在執行任務的時候,會去讀取該檔案
vim /etc/ansible/hosts
[group1]
192.168.161.80
192.168.161.90
192.168.161.100
#ansible命令語法
ansible 機器 -m 模組 -a ‘模組參數’
#檢視ansible現有的模組
ansible-doc -l
#給80機器設定主機名
ansible 192.168.161.80 -m hostname -a "name=tyschool"
4.1 hostname模組:修改主機名
ansible 192.168.161.80 -m hostname -a "name=node1"
4.2 file模組:遠端主機上檔案操作
參數說明:
group:定義檔案/目錄的屬組
mode:定義檔案/目錄的許可權(注意:檔案許可權爲4位元數,第一位爲uid/gid,後面表示ugo許可權)
owner:定義檔案/目錄的屬主
path:必選項,定義檔案/目錄的路徑
recurse:遞回的設定檔案的屬性,只對目錄有效
src:要被鏈接的原始檔的路徑,只應用於state=link的情況
dest:被鏈接到的路徑,只應用於state=link的情況
state: (link|hard|touch|absent)
link:建立軟鏈接
hard:建立硬鏈接
touch:如果檔案不存在,則會建立一個新的檔案,如果檔案或目錄已存在,則更新其最後修改時間
absent:刪除目錄、檔案或者取消鏈接檔案
directory:建立的是目錄
實操案例:
1、建立檔案
ansible group1 -m file -a "path=/tmp/ansible.txt state=touch"
2、檔案刪除
ansible group1 -m file -a "path=/tmp/ansible.txt state=absent"
3、檔案鏈接
3.1 軟連線
ansible group1 -m file -a "src=/tmp/ansible.txt path=/tmp/ansible.ggg state=link"
3.2 硬鏈接
ansible group1 -m file -a "src=/tmp/ansble.txt path=/tmp/ansible_hard state=hard"
4、修改使用者屬主和屬組,許可權
ansible 192.168.161.80 -m file -a "path=/tmp/ansible.txt owner=bob group=bob mode=0600"
5、建立目錄
ansible group1 -m file -a "path=/tmp/ansible state=directory"
6.目錄刪除
ansible group1 -m file -a "path=/tmp/ansible state=absent"
7、遞回
recurse :yes /no
4.3 copy模組:本地檔案拷貝到目標機器上
常用參數說明:
src :檔案源路徑
dest :目標路徑
content :指定檔案的內容複製到遠端機器檔案內
force : 強制 yes/no
backup : 是否備份有衝突的原始檔 yes/no
checksum:拷貝完整性校驗
owner : 目標檔案所有者
group :目標檔案所屬組
mode :目標檔案許可權
案例:
1、拷貝本地檔案到業務機器
ansible group1 -m copy -a "src=/tmp/huangshi.txt dest=/tmp/"
2、拷貝目錄
ansible group1 -m copy -a "src=/etc/yum.repos.d/ dest=/tmp" #加/,是拷貝的目錄下的檔案
ansible group1 -m copy -a "src=/etc/yum.repos.d dest=/tmp" #拷貝的是資料夾
4.4 fetch模組(節點檔案拷貝到本地)
ansible group1 -m fetch -a "src=/etc/passwd dest=/tmp" #管理機器目錄中建立節點機器的ip目錄中存放
注意:因爲業務節點有多個,當從業務節點獲取到檔案到管理節點後,會在目的目錄生成業務機器ip目錄,業務節點對應的檔案存放在該ip目錄中
4.5 user模組:主要用於操作系統使用者、組、許可權、密碼等操作
常用參數:
name
password 指定密碼,密碼必須爲密文 (注意:在終端先生成金鑰對:echo 123456 |openssl passwd -1 -stdin)
state=absent|present 刪除或建立
system=yes|no 是否爲系統使用者
shell="" 指定登錄shell
group= 使用者組
create_home=yes|no 是否建立家目錄
remove=yes|no 刪除家目錄
案例:
ansible group1 -m user -a "name=tianxian password=$1$1iBVoy.z$EB79SOJQ/u3HM.d98q7vV/ uid=4423 create_home=yes shell=/bin/bash state=present"
4.6 group模組 :建立組
案例:ansible group1 -m group -a "name=admin system=yes state=present"
4.7 cron模組:給節點機器管理週期性的時間任務
參數:
name 計劃任務名稱 (爲了刪除的時候方便去指定)
user 執行計劃任務使用者
job 計劃任務命令
minute
hour
day
month
week
state=absent 刪除計劃任務
注意:不指定user的話,預設就是root(你在管理端執行建立的使用者)
案例:
ansible group1 -m cron -a "name=test user=root job='echo haha >/tmp/test.txt' minute=12 hour=23"
4.8 yum_repository模組:yum_repository模組用於設定yum倉庫
name 倉庫名 name.repo
description 描述
baseurl 下載路徑
gpgcheck=1|0
enabled=yes|no
state=absent 刪除源
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/
案例:給業務機增加清華園的yum
ansible group1 -m yum_repository -a "name=qinghua baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/ description='qinghua yum repo' gpgcheck=0 enabled=yes"
4.9 yum模組:用來使用yum命令實現軟體包的安裝和解除安裝,只能安裝單個包, 安裝多個包需要使用playbook
參數
name 需要安裝軟體包的名稱
list=installd,updates,available repos 列出已經安裝、需要更新、可獲得、和yum源
state=absent/removed installed present latest 刪除,移除、安裝確認,安裝最新版
ansible group1 -m yum -a "name=vsftpd state=latest"
4.10 service模組:用於控制服務的啓動、關閉、開機自啓動等
參數:
name 服務名稱
state=reloaded restarted started stopped 服務管理
enabled yes|no 開機是否啓動
案例:設定vsftp開機自啓動並啓動服務
ansible group1 -m service -a "name=vsftpd state=started enabled=yes"
4.11 script模組:用於在遠端機器上執行本地指令碼
備註:只有一個參數,指定指令碼路徑,不用給許可權
案例:ansible group1 -m script -a "/root/haha.sh"
4.12 ansible command 和shell模組
兩個模組都歐式用於執行Linux命令
shell模組和command模組差不多,但是command模組不能執行一些類似$HOME < > |等符號,但是shell可以
shell模組和command模組都只只能執行非互動式命令互動式命令無法執行,例如:vim
4.13 setup模組:收集遠端主機的基本資訊(操作系統型別,主機名、ip、cpu、記憶體資訊等)
常用的過濾條件:
ansible_all_ipv4_address:顯示ipv4的資訊
ansible_devices:顯示磁碟裝置資訊
ansible_distribution_major_version:顯示系統主版本
ansible_distribution_version:顯示系統版本
ansible_machine:顯示系統型別
ansible_lvm:顯示lvm相關資訊
ansible_memtotal_mb:顯示系統總記憶體
ansible_memfree_mb:顯示系統可用記憶體
ansible_swaptotal_mb:顯示總的swap記憶體
ansible_swapfree_mb:顯示swap記憶體的可用記憶體
ansible_processor:顯示cpu個數
ansible_mounts:顯示系統磁碟掛載情況
ansible用來設定,部署、和管理控制節點的劇本
使用格式爲yaml格式,包括elk、docker等都會使用yaml格式
簡單來說:playbook是ansible格式的指令碼,將需要執行的操作按照ansible的程式設計語法,放到檔案中執行
替代方案:1、完全可以使用shell指令碼來替代playbook,shell中使用ansible模組
2、使用ansible+shell指令碼,使用script模組
yaml格式規則
1、檔案的第一行必須以'---'開始,表示這是yaml檔案的開始,...表示結束,單個文件可以省略
2、#號爲註釋
3、列表中所有成員都開始於相同的縮排級別,並且使用一個- 作爲開頭(一個橫槓和一個空格)
4、一個字典是由一個簡單的鍵:值的形式組成(這個冒號後面必須是一個空格)
子集兩個空格縮排
5、注意:寫yaml檔案不要使用tab鍵,都使用空格
yaml數據結構
1、標量--》相當於數據型別
2、序列--》陣列和列表 - + 單個空格表示單個列表項 []表示一組數據
3、鍵值對--》相當於map :+ 空格表示單個鍵值對
playbook批次安裝Apache過程分析:
1.安裝Apache並啓動
需要模組:1、yum模組 2、service模組來啓動 3、copy模組來把本地修改好的Apache組態檔複製過去
2、建立過程
1、建立playbook指令碼目錄
2、修改好Apache組態檔
3、編寫playbook指令碼
playbook基礎元件:
hosts:任務執行的遠端目標主機
remote_user:在遠端主機上執行任務的使用者
tasks:需要在遠端主機上執行的任務列表
variables:變數,變數可以在hosts中定義,可以在playbook中定義,也可以直接使用setup模組獲取變數內容
handlers:任務處理器,當滿足某些條件時纔會觸發任務操作
templates:使用模組語言的文字檔案
tags:playbook中一般有多個任務,我們可以給每個任務打上標籤,當我們只需執行某個任務時,執行的時候
ansible-playbook install_nginx -t tag3
那麼,將只會執行第三個任務
如果一個hosts執行任務失敗,整個tasks都會做回滾,重新修改playbook,重新執行即可
測試playbook指令碼是否有錯誤:
ansible-playbook -C apache_init.yml
andlers也是一些task的列表,和一般的task並沒有什麼區別。
是由通知者進行的notify,如果沒有被notify,則Handlers不會執行,假如被notify了,則Handlers被執行
不管有多少個通知者進行了notify,等到play中的所有task執行完成之後,handlers也只會被執行一次
playbook案例一:重新啓動sshd服務
#restart sshd
--- #開始
- hosts: group1 #指定hosts業務機
remote_user: root #指定遠端操作使用者
tasks: #任務列表
- name: restart sshd
command: 'systemctl restart sshd' #使用的模組
#備註:一定要注意對齊方式
案例二:安裝Apache服務並初始化
---
#install and init apache
#date:2020-08-13
- hosts: group1
remote_user: root
tasks:
#第一步:建立執行Apache服務的使用者
- name: create user for httpd
user: name=tyschool state=present
#安裝Apache
- name: yum install httpd
yum: name=httpd state=latest
#複製組態檔
- name: copy httpd configure
copy: src=/etc/ansible/playbook/httpd.conf dest=/etc/httpd/conf/
#啓動服務
- name: start httpd
service: name=httpd state=started enabled=yes
案例三:對Apache劇本進行進一步加深,新增notice和handler
---
#install and init apache
#date:2020-08-13
- hosts: group1
remote_user: root
tasks:
- name: create user for httpd
user: name=tyschool state=present
- name: yum install httpd
yum: name=httpd state=latest
- name: copy httpd configure
copy: src=/etc/ansible/playbook/httpd.conf dest=/etc/httpd/conf/
notify: #當Apache組態檔修改時,會觸發handler,執行handler任務
- restart httpd
- name: start httpd
service: name=httpd state=started enabled=yes
handlers:
- name: restart httpd
service: name=httpd state=restarted