Ansible介紹、配置與主機清單

toc

Ansible介紹

AnsibleSaltStackPuppet 等都是配置管理系統(configuration management system)
AnsibleSaltStack 都是 Python 編譯的自動化運維工具,都是使用模塊管理。不一樣的是Ansible沒有客戶端(使用的 SSH 通道傳輸)而 SaltStack 有客戶端(雖然 SaltStack 也能夠用 SSH通道,但和 Ansible 相比就是個笑話),這方面各有優勢吧,有客戶端的更穩定,沒有客戶端的更靈活可移植性強
相比 Puppet 來講 Ansible 沒有客戶端(使用的 SSH 通道傳輸)、簡單易用和日誌集中控管python

Ansible 能夠幫助咱們完成一些批量任務,或者完成一些須要常常重複的工做。
好比:同時在100臺服務器上安裝 NFS 服務,並在安裝後啓動服務。
好比:將某個文件一次性拷貝到100臺服務器上。
好比:每當有新服務器加入工做環境時,你都要爲新服務器部署某個服務,也就是說你須要常常重複的完成相同的工做。
這些場景中咱們均可以使用到 Ansibleweb

Ansible 特色shell

  1. Ansible 不須要單獨安裝客戶端,SSH 至關於 Ansible 客戶端。
  2. Ansible 能夠在配置文件裏面記錄 SSH 帳號密碼方式也可使用密鑰對方式鏈接。
  3. Ansible 不須要啓動任何服務,僅需安裝對應工具便可。
  4. Ansible 依賴大量的 Python 模塊來實現批量管理。

Ansible 架構
Ansible 是用模塊來管理的,而模塊是 Python 寫的,這就須要控制端和受控端都須要有 Python,這對於 LInux 不是問題
vim

  • 主機清單(HostInventory):記錄由Ansible管理的主機信息,包括端口、密碼、ip等。並進行邏輯上分組。
  • Ab-Hoc(命令行):經過命令行調用模塊管理受控端
  • Playbooks(劇本):YAML格式文件,多個任務定義在一個文件中,定義主機須要調用哪些模塊來完成的功能
  • CoreModules(核心模塊):主要操做是經過調用核心模塊來完成管理任務
  • CustomModules(自定義模塊):完成核心模塊沒法完成的功能,支持多種語言
  • plugins(插件):完成模塊功能的補充
  • ConnectionPlugins(鏈接插件):用於鏈接主機,用來鏈接被管理端

Ansible配置

YUM 安裝 Ansiblecentos

Ansible 包在 epel 庫,部分依賴在 base緩存

[root@Ansible ~]# yum install ansible -y
## 查看Ansible版本信息(版本號低的,看看epel源有嗎)
[root@Ansible ~]# ansible --version
ansible 2.7.10
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]

上面指定了 Ansible 的配置文件位置,不過 Ansible 爲了方便,也爲了可移植性,配置文件不是固定的,下面根據前後順序讀取:bash

  • 變量 $ANSIBLE_CONFIG 信息
  • 當前目錄 ansible.cfg 文件
  • 當前用戶的家目錄 ansible.cfg 文件
  • /etc/ansible/ansible.cfg 文件

經常使用配置服務器

[defaults] #通用默認配置
inventory      /etc/ansible/hosts #被控制端IP或者DNS列表
library = /usr/share/my_modules/ ##默認搜尋模塊的位置
remote_tmp = ~/.ansible/tmp #遠程執行臨時文件
local_tmp = ~/.ansible/tmp
plugin_filters_cfg = /etc/ansible/plugin_filters.yml
forks = 5 ##並行線程數
poll_interval = 15 ##回頻率或輪詢間隔時間
sudo_user = root ##sudo遠程執行用戶名
ask_sudo_pass = True ##使用sudo,是否須要輸入密碼
ask_pass = True ##是否須要輸入密碼
transport = smart ##通訊機制
remote_port = 22 ##遠程SSH端口
module_lang = C ##模塊和系統之間通訊的語言
module_set_locale = False
gathering = implicit ##控制默認facts收集(遠程系統變量)
gather_subset = all
gather_timeout = 10
roles_path = /etc/ansible/roles ##使用playbook搜索Ansible roles
host_key_checking = False ##是否檢查遠程公鑰指紋
sudo_exe = sudo ##sudo遠程執行命令
sudo_flags = -H -S -n ##傳遞sudo以外的參數
timeout = 10 ##SSH超時時間
remote_user = root ##遠程登陸用戶名
log_path = /var/log/ansible.log ##日誌文件存放路徑
module_name = command ##Ansible命令默認執行的模塊
executable = /bin/sh ##執行的shell環境,用戶shell模塊
hash_behaviour = replace ##特定的優先級覆蓋變量
jinja2_extensions = jinja2.ext.do,jinja2.ext.i18 ##容許開啓jinja2擴展模塊
private_key_file = /path/to/file ##私鑰文件存儲位置
display_skipped_hosts = True ##顯示跳過任何任務的狀態
system_warnings = True ##禁用系統運行Ansible潛在問題警告
deprecation_warnings = True ##PlayBook輸出禁用「不建議使用」警告
command_warnings = False ##command模塊Ansible默認發出警告
nocolor = 1 ##輸出帶上顏色區別,0表示開啓,1表示關閉
pipelining = False ##開啓pipe SSH通道優化

[accelerate] ##accelerate緩存加速
accelerate_port = 5099 ##加速鏈接端口5099
accelerate_timeout = 30 ##命令執行超過期間,單位爲s
accelerate_connect_timeout = 5.0 ##上一個活動鏈接的時間,單位爲min
accelerate_daemon_timeout = 30 ##容許多個私鑰被加載到daemon
accelerate_multi_key = yes ##任何客戶端想要鏈接daemon都要開啓這個選項

主機清單

## 添加客戶主機信息,client清單下兩臺主機(IP,用戶,密碼,端口)
[root@Ansible ~]# vim /etc/ansible/hosts
[client]
192.168.1.2 ansible_ssh_user='root' ansible_ssh_pass='redhat' ansible_ssh_port='22'
192.168.1.3 ansible_ssh_user='root' ansible_ssh_pass='redhat' ansible_ssh_port='22'

驗證 Ansible
能夠把配置文件中 host_key_checking = False 註釋去掉,防止第一次 SSH 連通須要公鑰指紋致使的 Ansible 的連通失敗架構

## 用ping模塊測試主機是否連通
[root@Ansible ~]# ansible client -m ping
192.168.1.2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
192.168.1.3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
## -m:調用什麼模塊。-a:執行什麼動做
[root@Ansible ~]# ansible client -m command -a "df -h"
192.168.1.2 | CHANGED | rc=0 >>
文件系統 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root 17G 3.1G 14G 18% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.8M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 173M 842M 18% /boot
tmpfs 98M 0 98M 0% /run/user/0
192.168.1.3 | CHANGED | rc=0 >>
文件系統 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root 17G 3.1G 14G 18% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 173M 842M 18% /boot
tmpfs 98M 0 98M 0% /run/user/0

使用密鑰對鏈接app

## 建立密鑰對
[root@Ansible ~]# ssh-keygen -t rsa
## 發送到相應的主機上
[root@Ansible ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.2
[root@Ansible ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.3
## 刪除配置文件IP後面的帳號密碼
[root@Ansible ~]# vim /etc/ansible/hosts
[client]
192.168.1.2
192.168.1.3
## 鏈接測試
[root@Ansible ~]# ansible client -m command -a "hostname"
192.168.1.3 | CHANGED | rc=0 >>
Client2
192.168.1.2 | CHANGED | rc=0 >>
Client1

組能夠包括其餘組

## 從新定義主機清單(組調用其餘組在組名後面加上:children)
[root@Ansible ~]# vim /etc/ansible/hosts
[web]
192.168.1.2

[nfs]
192.168.1.3

[local]
localhost ansible_connection=local

[hosts:children]
web
nfs
local
## 執行命令測試連通性
[root@Ansible ~]# ansible web --list-host
  hosts (1):
    192.168.1.2
[root@Ansible ~]# ansible nfs --list-host
  hosts (1):
    192.168.1.3
[root@Ansible ~]# ansible local --list-host
  hosts (1):
    localhost
[root@Ansible ~]# ansible hosts --list-host
  hosts (3):
    192.168.1.2
    192.168.1.3
    localhost
## Ansible自帶一個all組,爲所有主機
[root@Ansible ~]# ansible all --list-host
  hosts (3):
    192.168.1.2
    192.168.1.3
    localhost

用別名代替IP

## 編輯文件
[root@Ansible ~]# vim /etc/ansible/hosts
[web]
web1 ansible_ssh_host=192.168.1.2

[nfs]
nfs1 ansible_ssh_host=192.168.1.3

[local]
localhost ansible_connection=local

[hosts:children]
web
nfs
local
## 列出全部主機
[root@Ansible ~]# ansible hosts --list-host
  hosts (3):
    web1
    localhost
    nfs1

-i 指定文件

[root@Ansible ~]# vim hosts
[client]
192.168.1.2
192.168.1.3
[root@Ansible ~]# ansible client -m command -a "w" -i ./hosts
192.168.1.2 | CHANGED | rc=0 >>
 20:08:04 up 14:03, 2 users, load average: 0.00, 0.04, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.1 20:08 0.00s 0.14s 0.00s w
root pts/1 192.168.1.254 14:04 6:28 0.38s 0.38s -bash
192.168.1.3 | CHANGED | rc=0 >>
 20:08:04 up 14:02, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.1 20:08 0.00s 0.14s 0.00s w
root pts/1 192.168.1.254 14:42 1:06m 0.43s 0.43s -bash
相關文章
相關標籤/搜索