天天看點

ansible基礎實踐

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:基于文本獨立與語言的輕量級資料交換格式

輕量級:隻有字典和集合兩種格式

繼續閱讀