Ansible的原理與配置

鏡像下載、域名解析、時間同步請點(diǎn)擊 阿里云開源鏡像站

Ansible原理

Ansible 是一款開源自動化平臺。它是一種簡單的自動化語言,能夠在** Ansible Playbook** 中完美地描述 IT 應(yīng)用基礎(chǔ)架構(gòu)。它也是一個自動化引擎,可運(yùn)行 Ansible Playbook。

Ansible 可以管理強(qiáng)大的自動化任務(wù),而且能夠適應(yīng)許多不同的工作流和環(huán)境。同時,Ansible 新用戶可以非??焖俚乩盟鼇硖岣吖ぷ餍省?/p>

說白了就是批量化部署(控制)其他主機(jī),控制的主機(jī)叫做控制節(jié)點(diǎn)(master),被控制的主機(jī)受控節(jié)點(diǎn)(node)

控制節(jié)點(diǎn)主機(jī)可以是:Linux、Unix

受控節(jié)點(diǎn)主機(jī)可以是:Linux、Unix、Windows

Ansible Playbook 像是任務(wù)書,它采用 YAML 文本文件編輯,易于閱讀

當(dāng)你需要使用 Ansible 時,只需要在控制節(jié)點(diǎn)上下載 ansiblepython,受控節(jié)點(diǎn)上只需下載 python 即可(python 的版本要求:python27+ / python35+

控制節(jié)點(diǎn)上還需要編寫 **Ansible清單 **和 Ansible配置文件,清單為受控節(jié)點(diǎn)分組,配置文件指定了清單的路徑、SSH連接的用戶和連接細(xì)節(jié)等等

我們還需要為 SSH 連接做一些相關(guān)配置,比如發(fā)送公鑰,便于我們免密登錄
為了方便起見,我們?yōu)槭芸毓?jié)點(diǎn)的用戶配置 免密sudo

環(huán)境搭建

基礎(chǔ)配置

基礎(chǔ)配置主要是一些簡單的配置,為了方便我們做實驗也做了統(tǒng)一規(guī)定

為了方便我們做實驗,我們選用三臺不同版本的 操作系統(tǒng) 來做實驗,分別是:

[root@master:~]$ cat /etc/redhat-release
Rocky Linux release 8.5 (Green Obsidian)

[root@node12:~]$ cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)

[root@node13:~]$ cat /etc/redhat-release
CentOS Stream release 8

當(dāng)然還可以是其他版本,下載官網(wǎng)有:網(wǎng)易開源鏡像站、清華大學(xué)開源鏡像站、阿里巴巴開源鏡像站

選擇了版本,再將其 主機(jī)名 命名如下,以區(qū)分控制節(jié)點(diǎn)與受控節(jié)點(diǎn):

[root@master:~]$ hostname
master

[root@node12:~]$ hostname
node12

[root@node13:~]$ hostname
node13

為其配置 IP,主機(jī)位分別為:11、1213

[root@master:~]$ ip address show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:67:de:22 brd ff:ff:ff:ff:ff:ff
    inet 192.168.32.11/24 brd 192.168.32.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe67:de22/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

[root@node12:~]$ ip address show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:b1:4a:7d brd ff:ff:ff:ff:ff:ff
    inet 192.168.32.12/24 brd 192.168.32.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::10eb:4b68:b809:f62f/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

[root@node13:~]$ ip address show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:b1:6e:60 brd ff:ff:ff:ff:ff:ff
    inet 192.168.32.13/24 brd 192.168.32.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feb1:6e60/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

DNS解析 分別寫入各自的 /etc/hosts 文件(這里以 master 為例展示)

[root@master:~]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.32.11 master
192.168.32.12 node12
192.168.32.13 node13

ping 命令測試

file

為各自 添加用戶,每臺主機(jī)添加student用戶,控制節(jié)點(diǎn)額外添加 class 用戶

[root@master:~]$ id student
uid=1000(student) gid=1000(student) groups=1000(student)
[root@master:~]$ id class
uid=1001(class) gid=1001(class) groups=1001(class)

[root@node12:~]$ id student
uid=1000(student) gid=1000(student) groups=1000(student)

[root@node13:~]$ id student
uid=1000(student) gid=1000(student) groups=1000(student)

為每個 student 用戶配置免密sudovim /etc/sudoers

file

SSH:控制節(jié)點(diǎn)生成公私鑰,將公鑰傳給受控節(jié)點(diǎn)的 student 用戶

##用class用戶生成
# 生成密鑰
ssh-keygen
# 傳公鑰
ssh-copy-id student@master
ssh-copy-id student@node12
ssh-copy-id student@node13
file

查看各自家目錄

[class@master:~]$ ll /home/class/.ssh/
total 12
-rw------- 1 class class 2602 Feb 19 19:58 id_rsa
-rw-r--r-- 1 class class  566 Feb 19 19:58 id_rsa.pub
-rw-r--r-- 1 class class  364 Feb 19 19:58 known_hosts
[root@master:~]$ ll /home/student/.ssh/
total 4
-rw------- 1 student student 566 Feb 19 19:58 authorized_keys

[root@node12:~]$ ll /home/student/.ssh/
total 4
-rw------- 1 student student 566 Feb 19 19:59 authorized_keys

[root@node13:~]$ ll /home/student/.ssh/
total 4
-rw------- 1 student student 566 Feb 19 19:59 authorized_keys

環(huán)境配置

環(huán)境配置主要是軟件包的下載

三臺主機(jī)我們統(tǒng)一下載 python36:yum install pyton36 /yum module install python36

file

接下來就是控制節(jié)點(diǎn) 安裝 Ansible
在安裝之前,我們需要寫 yum 源:vim /etc/yum.repos.d/epel.repo

[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64/
gpgcheck=0

接下來安裝:yum install ansible -y

file

查看版本:ansible --version

[root@master:~]$ ansible --version
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Nov  9 2021, 14:44:26) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]

編寫文件

我們一共需要編寫兩個文件(不包括 Ansible Playbook):清單、配置文件

配置文件一共有三類:

./ansible.cfg                       # 優(yōu)先級最高,在工作目錄下
~/.ansible.cfg                      # 優(yōu)先級第二,在家目錄下,是個隱藏文件
/etc/ansible/ansible.cfg            # 優(yōu)先級最低

那么我們就新建一個目錄為工作目錄,在其下編寫配置文件并執(zhí)行 Ansible 命令

在哪里使用 ansible命令,那里就是工作目錄

# 如下則為配置文件的內(nèi)容
[defaults]
inventory = ./inventory         ; 指定了清單的路徑
remote_user = student           ; 指定遠(yuǎn)程控制哪個用戶
ask_pass = false                ; 設(shè)置為不需要密碼的登錄
# 上面的等號兩邊要有空格,且下面留出空行

[privilege_escalation]
become=true                     ; 登錄到受控主機(jī)后是否變?yōu)槠渌脩?become_method=sudo              ; 以 sudo 方式變?yōu)槠渌脩簦╯udo、su)
become_user=root                ; 變?yōu)?root 用戶
become_ask_pass=false           ; sudo 時無需密碼
file

在工作目錄下編寫清單:vim ./work/inventory
清單的默認(rèn)路徑在 /etc/ansible/hosts,但是我們一般不使用它

node12
node13

# 以下為分組
[webservers]
master
node12

[dbservers]
node12
node13

# 這個寫法是將兩個組和為一個組
[servers:children]
webservers
dbservers
file

測試:ansible 組名或主機(jī)名 --list-hosts[ -vvv]

必須在工作目錄下執(zhí)行,否則就會按照優(yōu)先級加載配置文件;我們可以在后面跟上選項-v,它會根據(jù) v的個數(shù)給出逐漸詳細(xì)的過程

file

實驗

1、以 all 主機(jī)組為目標(biāo)執(zhí)行 id 命令

2、使用 copy模塊 修改所有主機(jī)上的 /etc/motd 文件內(nèi)容為 welcome to ansible

3、使用 command模塊 查看 /etc/motd 文件的內(nèi)容

4、 使用 user模塊 創(chuàng)建用戶 xiaoming,uid 為 2000

先創(chuàng)建一個工作目錄,并在其下編輯清單和配置文件

file

1、以 all主機(jī)組為目標(biāo)執(zhí)行 id命令:ansible all -m command -a id

file

2、使用 copy模塊 修改所有主機(jī)上的 /etc/motd文件內(nèi)容為 welcome to ansibleansible sons -m copy -a 'content="welcome to ansible\n" dest=/etc/motd'

file

3、使用·command模塊 查看/etc/motd文件的內(nèi)容:ansible sons -m command -a 'cat /etc/motd'

file

4、使用 user模塊 創(chuàng)建用戶 xiaoming,uid 為 2000:ansible sons -m user -a 'name=xiaoming uid=2000 state=present'

file

補(bǔ)充

Ansible 的用法是:ansible host-pattern -m module [-a 'module arguments'] [-i inventory]

這是它的臨時命令,通常我們將這些指令寫在 Ansible Playbook 中

它的返回值有三種,一種是上面出現(xiàn)的 CHANGED,表示執(zhí)行成功并且已做出改變;還有一種就是** SUCCESS**,表示執(zhí)行成功,檢查到已經(jīng)是該狀態(tài)故沒有做出改變;最后一種就是 FAILED,就是執(zhí)行錯誤。相應(yīng)的,他們的顏色也有所不同

file

本文轉(zhuǎn)自:https://blog.csdn.net/SuichI314/article/details/123020414

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容