ansible : 批量配置管理軟體,基于Python語言實作(paramiko/PyYAML/Jinja2),簡單來了解它就是一個指令。
playbook:腳本
ansible的兩個集合:hosts和tasks
應用場景:不同主機執行相同指令。
安裝:ansible
ansible 源碼包可以從華為開源鏡像站官網下載下傳:https://mirrors.huaweicloud.com/
1建立yum源
createrepo --update . //在原有yum源上進行更新加選項--update
2 建立6台虛拟機 2cpu, 1.5G以上記憶體,10G 以上硬碟,1塊網卡(VBR)
192.168.1.10 ansible
192.168.1.11 web1
192.168.1.12 web2
192.168.1.21 db1
192.168.1.22 db2
192.168.1.33 cache
2 建立yum源(真機)
拷貝ansible相關軟體到ftp目錄
到軟體目錄下執行 : createrepo .
3 在 192.168.1.10安裝ansible, 配置yum源
ansible --version
4 ansible ad-hoc 指令
ansible 主機分組名稱,或主機名稱【指令集合】
–list-hosts
-m 子產品名稱 -a 子產品參數
子產品真的多,需要用到再檢視文檔:
[[email protected] .ssh]# ansible-doc -l //列出所有
[[email protected] .ssh]# ansible-doc 子產品名稱 //檢視某個子產品用法
5 非互動生成公鑰私鑰對
[[email protected] ~]# ssh-keygen -t rsa -b 2048 -N ''
-t 指定密鑰類型用
-b bits指定密鑰長度。對于RSA密鑰,最小要求768位,預設是2048位。DSA密鑰必須恰好是1024位(FIPS186-2 标準的要求)。
-N:是指密碼為空;
-q:指靜默模式, 不輸出顯示
6 使用ansible将公鑰批量部署到目标主機
[[email protected] ~]# ansible all -m authorized_key -a "user=root exclusive=true manage_dir=true key='$(< /root/.ssh/id_rsa.pub)'" -k
ansible all ##所有主機
user=root ##使用者
exclusive=true ###強行寫入
manage_dir=true ###目标主機若沒有存在,則建立,若存在,則追加覆寫
key= 密鑰
7 關于常用的子產品
添加使用者練習
1)shell 子產品
要求在 web1 ,db2 主機上添加使用者nb,設定nb的密碼是123,要求nb第一次登入要修改密碼。
[[email protected] ~]# ansible web1,db2 -m shell -a "useradd nb"
[[email protected] ~]# ansible web1 ,db2 -m shell -a "echo 123 | passwd --stdin nb"
[[email protected] ~]# ansible web1,db2 -m shell -a "chage -d 0 nb"
2)script子產品
要求所有web上,添加使用者wk,且wk和nb不能同時出現在同一台主機上,添加使用者wk要求和nb一樣。
[[email protected] ~]# vim user.sh
#!/bin/bash
id nb > /dev/null
if [ $? != 0 ];then
useradd wk
echo 123 | passwd --stdin wk
chage -d 0 wk
fi
[[email protected] ~]# ansible web -m script -a ‘user.sh’
3)copy子產品
若需要修改叢集檔案都是相同的内容,可以将叢集檔案拷貝到ansible進行修改,再拷貝回去。
[[email protected] ~]# ansible all -m copy -a 'src=/etc/resolv.conf dest=/etc/resolv.conf'
若叢集檔案的内容不一樣,用以下兩個子產品
4)lineinfile 子產品:用法類似sed,
path :要修改的檔案
regexp :要修改的行
line :修改以後的樣子
[[email protected] ~]# ansible cache -m lineinfile -a 'path=/etc/sysconfig/network-scripts/ifcfg-eth0 regexp="^GATEWAY" line="GATEWAY\"192.168.1.1\""'
5)replace 子產品 :類似awk
path :要修改的檔案
regexp:要修改的位置
replace:修改以後的樣子
[[email protected] ~]# ansible cache -m replace -a 'path=/etc/sysconfig/network-scripts/ifcfg-eth0 regexp="1\.1" replace="1.254"'
6)yum 子產品
name 包名,使用逗号分隔
state 動作,installed removed
[[email protected] ~]# ansible db -m yum -a 'name=mariadb-server state=installed'
7)service 子產品
name : 服務名
state : 動作 started , stopped, restarted, enabled yes | no
[[email protected] ~]# ansible db -m service -a 'name=mariadb state=started enabled=yes'
[[email protected] ~]# systemctl is-enabled mariadb //檢視是否啟動開機自啟
8)setup 子產品:擷取用戶端主機資訊,作用是在編寫ansible腳本時,可以進行判斷
json:基于文本獨立與語言的輕量級資料交換格式
輕量級:隻有字典和集合兩種格式