Ansible的原理與配置

哈哈哈hh發表於2022-03-04

映象下載、域名解析、時間同步請點選  阿里雲開源映象站

Ansible原理

Ansible 是一款 開源自動化平臺。它是一種簡單的自動化語言,能夠在 Ansible Playbook 中完美地描述 IT 應用基礎架構。它也是一個自動化引擎,可執行 Ansible Playbook。

Ansible 可以管理強大的自動化任務,而且能夠適應許多不同的工作流和環境。同時,Ansible 新使用者可以非常快速地利用它來提高工作效率。

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

控制節點主機可以是:Linux、Unix

受控節點主機可以是:Linux、Unix、Windows

Ansible Playbook 像是任務書,它採用 YAML 文字檔案編輯,易於閱讀

當你需要使用 Ansible 時,只需要在控制節點上下載  ansible 和  python,受控節點上只需下載  python 即可( python 的版本要求: python27+ /  python35+

控制節點上還需要編寫  Ansible清單和  Ansible配置檔案,清單為受控節點分組,配置檔案指定了清單的路徑、SSH連線的使用者和連線細節等等

我們還需要為 SSH 連線做一些相關配置,比如傳送公鑰,便於我們免密登入
為了方便起見,我們為受控節點的使用者配置  免密 sudo

環境搭建

基礎配置

基礎配置主要是一些簡單的配置,為了方便我們做實驗也做了統一規定

為了方便我們做實驗,我們選用三臺不同版本的  作業系統 來做實驗,分別是:

[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

當然還可以是其他版本,下載官網有:網易開源映象站、清華大學開源映象站、阿里巴巴開源映象站

選擇了版本,再將其  主機名 命名如下,以區分控制節點與受控節點:

[root@master:~]$ hostname
master
[root@node12:~]$ hostname
node12
[root@node13:~]$ hostname
node13

為其配置  IP,主機位分別為: 111213

[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

為各自 新增使用者,每臺主機新增 student使用者,控制節點額外新增 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:控制節點生成公私鑰,將公鑰傳給受控節點的 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

環境配置

環境配置主要是軟體包的下載

三臺主機我們統一下載 python36: yum install pyton36 / yum module install python36

file

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

[epel]
name=epel
baseurl=
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						# 優先順序最高,在工作目錄下
~/.ansible.cfg						# 優先順序第二,在家目錄下,是個隱藏檔案
/etc/ansible/ansible.cfg			# 優先順序最低

那麼我們就新建一個目錄為工作目錄,在其下編寫配置檔案並執行 Ansible 命令

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

# 如下則為配置檔案的內容
[defaults]
inventory = ./inventory			; 指定了清單的路徑
remote_user = student			; 指定遠端控制哪個使用者
ask_pass = false				; 設定為不需要密碼的登入
# 上面的等號兩邊要有空格,且下面留出空行
[privilege_escalation]
become=true						; 登入到受控主機後是否變為其他使用者
become_method=sudo				; 以 sudo 方式變為其他使用者(sudo、su)
become_user=root				; 變為 root 使用者
become_ask_pass=false			; sudo 時無需密碼

file

在工作目錄下編寫清單: vim ./work/inventory
清單的預設路徑在  /etc/ansible/hosts,但是我們一般不使用它

node12
node13
# 以下為分組
[webservers]
master
node12
[dbservers]
node12
node13
# 這個寫法是將兩個組和為一個組
[servers:children]
webservers
dbservers

file

測試: ansible 組名或主機名 --list-hosts[ -vvv]

必須在工作目錄下執行,否則就會按照優先順序載入配置檔案;我們可以在後面跟上選項 -v,它會根據  v的個數給出逐漸詳細的過程

file

實驗

1、以 all 主機組為目標執行 id 命令

2、使用 copy模組 修改所有主機上的 /etc/motd 檔案內容為 welcome to ansible

3、使用 command模組 檢視 /etc/motd 檔案的內容

4、 使用 user模組 建立使用者 xiaoming,uid 為 2000

先建立一個工作目錄,並在其下編輯清單和配置檔案

file

1、以  all主機組為目標執行  id命令: ansible all -m command -a id

file

2、使用  copy模組 修改所有主機上的  /etc/motd檔案內容為  welcome to ansibleansible sons -m copy -a 'content="welcome to ansible\n" dest=/etc/motd'

file

3、使用· command模組 檢視 /etc/motd檔案的內容: ansible sons -m command -a 'cat /etc/motd'

file

4、使用 user模組 建立使用者 xiaoming,uid 為 2000: ansible sons -m user -a 'name=xiaoming uid=2000 state=present'

file

補充

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

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

它的返回值有三種,一種是上面出現的  CHANGED,表示執行成功並且已做出改變;還有一種就是** SUCCESS**,表示執行成功,檢查到已經是該狀態故沒有做出改變;最後一種就是  FAILED,就是執行錯誤。相應的,他們的顏色也有所不同

file

本文轉自:https://blog.csdn.net/SuichI314/article/details/123020414


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70003733/viewspace-2864526/,如需轉載,請註明出處,否則將追究法律責任。

相關文章