一、使用自動化運維工具 Ansible 集中化管理服務器 (集成化工具)


1.ansible 概述和運行機制

1.1  ansible 概述

         Ansible 是一款為類 Unix 系統開發的自由開源的配置和自動化工具。它用 Python 寫成,類似於 saltstack 和 Puppet。(集成化工具)。但是有一個不同和優點是我們不需要在節點中安裝任何客戶端。它使用 SSH 來和節 點進行通信。Ansible 基於 Python paramiko 開發,分布式,無需客戶端,輕量級,配置語法使 用 YMAL 及 Jinja2 模板語言,更強的遠程命令執行操作。

     官方網站:https://www.ansible.com/

1.2 ansiblle 具有如下特點:

      1、部署簡單,只需在主控端部署 Ansible 環境,被控端無需做任何操作;

      2、默認使用 SSH 協議對設備進行管理;

      3、主從集中化管理;

      4、配置簡單、功能強大、擴展性強;

      5、支持 API 及自定義模塊,可通過 Python 輕松擴展;

 

      6、通過 Playbooks 來定制強大的配置、狀態管理

      7、對雲計算平台、大數據都有很好的支持;

1.3   Ansible 工作機制

      Ansible 在管理節點將 Ansible 模塊通過 SSH 協議推送到被管理端執行,執行完之后自動刪除,可以 使用 SVN 等來管理自定義模塊及編排。

       

     由上面的圖可以看到 Ansible 的組成由 5 個部分組成:

      Ansible : ansible 核心

      Modules : 包括 Ansible 自帶的核心模塊及自定義模塊

      Plugins : 完成模塊功能的補充,包括連接插件、郵件插件等

      Playbooks : 劇本;定義 Ansible 多任務配置文件,由 Ansible 自動執行

      Inventory : 定義 Ansible 管理主機的清單 [ˈɪnvəntri] 清單

      connection  Plugins:可以理解為ssh

2.實戰-安裝並配置 Ansible

2.1初始化環境

     主機名:                   IP 地址:                      角色:

   djw1.cn                    172.16.254.182                  控制端

   djw2.cn                    172.16.254.186                  被控端

   djw3.cn                    172.16.254.188                 被控端

2.2相關環境初始化准備

[root@djw1 ~]# useradd -d /home/djw -m djw ;echo "123456" |passwd --stdin djw 

[root@djw2 ~]# useradd -d /home/djw -m djw ;echo "123456" |passwd --stdin djw

[root@djw3 ~]# useradd -d /home/djw -m djw ;echo "123456" |passwd --stdin djw

[root@djw1 ~]#  echo "djw ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers 

[root@djw3 ~]#  echo "djw ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

[root@djw2 ~]# echo "djw ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

 

[root@djw1 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

 

172.16.254.182 djw1.cn djw1
172.16.254.186 djw2.cn djw2
172.16.254.188 djw3.cn djw3

[djw@djw1 ~]$ ssh-keygen
[djw@djw1 ~]$ ssh-copy-id -i .ssh/id_rsa.pub djw@djw1.cn
[djw@djw1 ~]$ ssh-copy-id -i .ssh/id_rsa.pub djw@djw2.cn
[djw@djw1 ~]$ ssh-copy-id -i .ssh/id_rsa.pub djw@djw3.cn

2.3安裝ansible

Ansible 倉庫默認不在 yum 倉庫中,因此我們需要使用下面的命令啟用 epel 倉庫。

 [root@djw1 ~]#  yum install epel-release -y

 [root@djw1 ~]# yum install -y ansible

安裝完成后,檢查 ansible 版本:

[root@djw1 ~]# ansible --version

ansible 2.9.21
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 21 2019, 19:31:34) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]

2.4 ansible的配置 

        Ansible 的配置文件存在優先級問題,默認狀態下會使用/etc/ansible/ansible.cfg具體優先級關系 如下:

最高優先級:

      當前目錄下

     ./ansible.cfg

     用戶家目錄,如果在當前目錄下未找到配置文件則查找用戶家目錄是否存在配置文件。

      ~/.ansible.cfg

     以上位置找不到配置文件就會選擇默認值

      /etc/ansible/ansible.cfg

     需要說明的是 ansible 並沒有服務的概念,修改配置文件后立即生效。

2.4.1創建第一個ansible

[root@djw1 ~]# mkdir djw
[root@djw1 ~]# cd djw/
[root@djw1 djw]# vim ansible.cfg
[default]
inventory = ./hosts

[root@djw1 djw]# vim hosts
[gdjw]
djw2.cn
djw3.cn

[djw@djw1 djw]$ ansible all --list
hosts (2):
djw2.cn
djw3.cn
[djw@djw1 djw]$ ansible gdjw --list
hosts (2):
djw2.cn
djw3.cn

使用 ping 模塊檢測節點是否在線。這里的 ping 命令不是我們 ansible 服務器去 ping 每一台主機, 是通過 ping 模塊讓列表中的機器 ping 服務端。-m 參數執行模塊

[djw@djw1 djw]$ ansible all -m ping
djw3.cn | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
djw2.cn | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}

3.ansible 基礎命令介紹以及模塊操作

  ansible-doc -l   #列出所有的模塊列表

  ansible-doc -s 模塊名   #查看指定模塊的參數

3.1ansible 用戶提權操作

我們使用 become 進行提權操作。當然所有的提權都是我們前面配置好的 sudo 權限。

[djw@djw1 djw]$ ansible all -m command  -a "id"

 

 

 

修改配置文件進行提權操作,可以看到都為root了。

[djw@djw1 djw]$ vim ansible.cfg 

 

 

 

 

 3.2ansible 模塊操作

   shell 模塊:使用 shell 模塊,在遠程命令通過/bin/sh 來執行;所以,我們在終端輸入的各種命 令方式,都可以使用。

  [djw@djw1 djw]$ ansible all -m shell -a 'ps -aux|grep sshd'

   

 

 

   scripts 模塊也就是腳本模塊,可以遠程執行 ansible 服務器上的腳本。

  [xuegod@xuegod63 xuegod]$ vim net.sh

   #!/bin/bash

    date

  hostname

  [xuegod@xuegod63 xuegod]$ ansible all -m script -a "net.sh"

 

 

 copy 模塊:實現主控端向目標主機拷貝文件,類似 scp 功能

 把 ansible 主機上的/etc/hosts 文件復制到所有節點中

[djw@djw1 djw]$ ansible all -m copy -a 'src=/etc/hosts dest=/etc/hosts'

 

 

  file 模塊設置文件屬性。

   [djw@djw1 djw]$ ansible all -m file -a 'dest=/home/djw/sss.txt state=touch owner=root group=root mode=777'

 

 

 驗證:[djw@djw1 djw]$ ansible all -m shell -a 'ls -l /home/djw/'

 

 

 get_url 模塊實現遠程主機下載指定 url 到本地,支持 sha256sum 文件校驗。

[xuegod@xuegod63 xuegod]$ ansible all -m get_url -a "url=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm dest=/tmp/ mode=0440 force=yes"

 

 如果 force=yyum 模塊 linux 平台軟件包管理es,當下載文件時,如果所下的內容和原目錄下的文件內容不一樣,則替換原文件,如 果一樣,就不下載了。

yum 模塊 linux 平台軟件包管理

name 參數:必須參數,用於指定需要管理的軟件包,比如 nginx。

state 參數:用於指定軟件包的狀態 ,默認值為。present,表示確保軟件包已經安裝,除了。present, 其他可用值有 installed、latest、absent、removed,其中 installed 與 present 等效,latest 表示 安裝 yum 中最新的版本,absent 和 removed 等效,表示刪除對應的軟件包。

[djw@djw1 djw]$ ansible all -m yum  -a 'name=httpd state=lastest' 

 

 

 cron 模塊遠程主機 crontab 配置。

  例如:增加每 30 分鍾執行 ls /tmp

[djw@djw1 djw]$ ansible all -m cron -a "name='ls dir' minute='*/30' job='ls /tmp'"

 

 

 

 驗證:[djw@djw1 djw]$ ansible all -m shell -a 'crontab -l'

 

 

 

 計划任務有一個需要注意的問題就是參數值如果存在空格需要使用單引號進行定界,

service 模塊遠程主機系統服務管理。

例如:遠程啟動 Apache 服務

[xuegod@xuegod63 xuegod]$ ansible all -m service -a "name=httpd state=restarted"

[djw@djw1 djw]$ ansible all -m shell -a 'systemctl status httpd'

 

 user 模塊遠程主機用戶管理

使用 user 模塊設置密碼存在一個問題,必須使用加密后的密碼進行設置。這里先不講命令行中怎么 設置密碼,因為明文密碼的使用存在安全隱患,后期我們通過 ansible-vault 對密碼進行加密來解決安全 問題。

[djw@djw1 djw]$ ansible all -m user -a 'name=mk state=present uid=1080 home=/home/mk'

[djw@djw1 djw]$ ansible all -a "id mk"

 

后續查看文檔:(擴展)

 1.指定inventory的兩種方式(用於動態主機清單中, -i參數腳本)

 2.vim ~/.vimrc set ts=2 ai
 3.remote_user:xuegod


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM