Ansible入門

第一章 Ansible概述

1.1 Ansible的介紹

  1. 簡單易用的一款工具
  2. 支持多節點發布、遠程任務執行 .
  3. 無代理架構,基於ssh通訊,無需在agent端安裝代理
  4. 可以調用特定的模塊來完成特定任務
  5. 支持自定義模塊功能
  6. 支持playbook劇本,連續任務按前後設置順序完成

1.2 Ansible的必要性

  • [x] 解決不少侷限性環境問題
  • [x] 節省時間,提升工做效率
  • [x] 減小出錯故障
  • [x] 減小重複操做
  • [x] 增強運維部署操做規範性

1.3 Ansible與同類工具的對比

  • ansible:精簡和快速,無需安裝代理
  • saltstack:命令行的工具,不一樣級別主服務器,但系統兼容較差
  • puppet:長久,全面。但使用複雜。

第二章 Ansible的安裝配置與簡單使用

2.1 Ansible的安裝

Ansible的安裝部署很是簡單,其僅依賴於 Python 和 SSH,而系統默認均已安裝。html

Ansible 被 RedHat 紅帽官方收購後,其安裝源被收錄在 epel 中,如已安裝 epel 可直接 yum 安裝。node

經過 pip 和 easy_install 的 Python 第三方包管理器也能夠便捷安裝 Ansible。python

推薦使用yum方式安裝。nginx

2.1.1 yum方式安裝

[root@localhost]# yum install epel-release -y   # 安裝epel源
[root@localhost]# yum install ansible -y        # yum安裝ansible便可,很是簡單方便
[root@localhostins]# ansible --version          # 驗證安裝是否成功
[root@localhost]# ansible help               # help能夠查看ansible的命令參數

2.1.2 pip方式安裝

[root@localhost]# yum install gcc glibc-devel zlib-devel rpm-build openssl-devel -y  # 安裝前確保服務器的gcc、glibc開發環境均已安裝
[root@localhost]# yum install python-pip python-devel -y # 安裝 python-pip 及 python-devel 程序包
[root@localhost]# pip install --upgrade pip # 升級本地 pip 至最新版本 
[root@localhost]# pip install --upgrade ansible # 安裝ansible

2.2 Ansible的配置

配置文件 做用
/etc/ansible/ansible.cfg 主配置文件
/etc/ansible/hosts 機器清單,進行分組管理
/etc/ansible/roles/ 存放角色的目錄
[root@localhost]# vim /etc/ansible/ansible.cfg   # 修改主配置文件
[defaults]
#inventory      = /etc/ansible/hosts                    # 默認主機文件
#library        = /usr/share/my_modules/                # 庫文件存放目錄
#forks          = 5                                     # 默認開啓的併發數
#remote_user = root                                     # 默認palybooks用戶 
#sudo_user      = root                                  # 默認sudo用戶
#ask_sudo_pass = True                                   # 是否須要sudo密碼
#ask_pass      = True                                   # 是否須要密碼
#remote_port    = 22                                    # 默認遠程主機的端口號
#host_key_checking = False                              # 是否檢查host_key,推薦關閉
#deprecation_warnings=False      # 是否開啓「不建議使用」警告,該類型警告大多屬於版本更新方法過期提醒
#command_warnings=False      # 當shell和命令行模塊被默認模塊簡化的時,Ansible 將默認發出警告
#timeout = 10                                           # 鏈接主機的時間
#log_path=/var/log/ansible.log                          # 開啓ansible日誌
#private_key_file = /path/to/file(/root/.ssh/id_rsa)   # 基於密鑰認證的文件
[privilege_escalation]                                  # 默認以root身份運行ansible
become=True
become_method=sudo
become_user=root
become_ask_pass=False
[root@localhost]# vim /etc/ansible/hosts           #修改主機清單配置文件(Inventory)
# Ex 1: Ungrouped hosts, specify before any group headers.  #未分組的主機清單
## green.example.com                                        #定義主機爲主機名
## blue.example.com
## 192.168.100.1                                            #定義主機爲IP
## 192.168.100.10
## [webservers]                                         #組名爲webservers的主機
## alpha.example.org                                    #定義主機爲主機名
## beta.example.org
## 192.168.1.100                                        #定義主機爲IP
## 192.168.1.110
## www[001:006].example.com                             #若主機名有規律,也能夠範圍性的簡寫
## [dbservers]                                          #同上,此組名爲dbserver
## db01.intranet.mydomain.net
## db02.intranet.mydomain.net
## 10.25.1.56
## 10.25.1.57
## db-[99:101]-node.example.com
## [all:vars]                           # 爲全部主機設置變量(可用於首次批量推送密鑰) 
## ansible_ssh_user=wushuaishuai        # 用戶名
## ansible_ssh_pass=123456              # 密碼

https://docs.ansible.com ansible官方首頁可針對性看一些模板和實例web

2.3 Ansible的簡單使用

[root@localhost]# vim /etc/ansible/ansible.cfg    # 修改主配置文件
host_key_checking = False                                 # 關閉host_key檢查
[root@localhost]# vim /etc/ansible/hosts          # 修改主機清單
[test]
10.0.1.7 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22
10.0.1.8 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22
#10.0.1.7                        # 主機IP
#ansible_ssh_user=root           # 主機用戶
#ansible_ssh_pass=123456         # 主機密碼
#ansible_ssh_port=22             # 主機ssh端口
[root@localhost]# ansible test -a  "df -h"          # 批量查看主機的磁盤分區
10.0.1.8 | SUCCESS | rc=0 >>                                # test主機組名稱
Filesystem      Size  Used Avail Use% Mounted on            # -a指定模塊參數
/dev/sda2        30G  2.4G   28G   9% /                     # "df -h" 輸入的命令
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  106M  3.8G   3% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1       497M   81M  417M  17% /boot
/dev/sdb1        40G   49M   38G   1% /mnt/resource
tmpfs           797M     0  797M   0% /run/user/0

10.0.1.7 | SUCCESS | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        30G  3.4G   27G  12% /
devtmpfs        3.4G     0  3.4G   0% /dev
tmpfs           3.4G     0  3.4G   0% /dev/shm
tmpfs           3.4G  330M  3.1G  10% /run
tmpfs           3.4G     0  3.4G   0% /sys/fs/cgroup
/dev/sda1       497M   81M  417M  17% /boot
/dev/sdb1       281G   65M  267G   1% /mnt/resource
tmpfs           696M     0  696M   0% /run/user/0

第三章 Ansible經常使用命令及模塊

3.1 Ansible的命令參數

  • -m:要執行的模塊,默認爲command
  • -a:模塊的參數
  • -u:ssh鏈接的用戶名,默認用root,ansible.cfg中能夠配置
  • -b(-become): 變成某個用戶來執行操做,默認變的方式是sudo,默認變成root
  • --become-user: 指定變成某個用戶
  • -k(--ask-pass):提示輸入ssh登陸密碼,當使用密碼驗證的時候用
  • -s(--sudo):sudo運行
  • -U(--sudo-user):sudo到哪一個用戶,默認爲root
  • -K:提示輸入sudo密碼,當不是NOPASSWD模式時使用
  • -C(--check):只是測試一下會改變什麼內容,不會真正去執行
  • -c:鏈接類型(default=smart)
  • -f(--forks):fork多少進程併發處理,默認爲5個
  • -i:指定hosts文件路徑,默認default=/etc/ansible/hosts
  • -I:指定pattern,對已匹配的主機中再過濾一次
  • --list-host:只打印有哪些主機會執行這個命令,不會實際執行
  • -M:要執行的模塊路徑,默認爲/usr/share/ansible
  • -o:壓縮輸出,摘要輸出
  • --private-key:私鑰路徑
  • -T:ssh鏈接超時時間,默認是10秒
  • -t:日誌輸出到該目錄,日誌文件名以主機命名
  • -v:顯示詳細日誌

3.2 Ansible命令實例

以wushuaishuai sudo至root用戶執行ping存活檢測shell

[root@localhost]# ansible all -m ping -u wushuaishuai -b

以wushuaishuai sudo至junpserver用戶執行ping存活檢測編程

[root@localhost]# ansible all -m ping -u wushuaishuai -b --become-user jumpserver

3.2 Ansible的經常使用模塊

  1. command模塊:使用一種自由格式命令 (爲系統默認,可省略,不支持管道命令和變量等)
  2. shell模塊:調用遠程主機的指令 (執行腳本,管道命令等)
  3. yum模塊:管理程序包
  4. service模塊:管理服務
  5. ping模塊:測試指定主機是否能鏈接
  6. copy、file模塊:文件管理(建立,複製等)
  7. setup模塊:收集遠程主機的信息

第四章 Playbook的介紹

4.1 Playbook介紹

Playbooks (劇本)與 ad-hoc(臨時任務) 相比,是一種徹底不一樣的運用 ansible 的方式,是很是之強大的.vim

Playbooks:是一種簡單的配置管理系統 ,適合管理配置應用及部署複雜的工做。基於易讀的YAML編程語言。centos

4.2 YAML語法介紹

  • [x] 大小寫敏感
  • [x] 使用縮進表示層級關係
  • [x] 縮進時不容許使用Tab鍵,只容許使用空格
  • [x] yaml文件以"---"做爲文檔的開始
  • [x] "#"表示註釋

第五章 playbook應用之ssh密鑰分發

5.1 確認關閉檢查host_key

[root@localhost]# vim /etc/ansible/ansible.cfg
host_key_checking = False

5.2 生成管理主機的私鑰和公鑰

[root@localhost]# ssh-keygen -t rsa -b 2048 -P '' -f /root/.ssh/id_rsa # root用戶
[root@localhost]# ssh-keygen -t rsa -b 2048 -P '' -f /home/wushuaishuai/.ssh/id_rsa # 也但是其餘用戶

5.3 添加主機信息到主機清單中

[root@localhost ansible]# vim /etc/ansible/hosts
# hosts
[web]
192.168.77.129 ansible_ssh_pass=1234567
192.168.77.130 ansible_ssh_pass=123456

5.4 編寫並運行playbook

[root@localhost]# vim ssh-addkey.yml
# ssh-addkey.yml 
---
- hosts: all
  gather_facts: no

  tasks:

  - name: install ssh key
    authorized_key: user=root 
                    key="{{ lookup('file', '/home/wushuaishuai/.ssh/id_rsa.pub') }}" 
                    state=present
[root@localhost]# ansible-playbook -i hosts ssh-addkey.yml

這樣,管理節點的公鑰就會添加到節點的authorized_keys文件中,再把主機清單裏的ansible_ssh_pass去掉,執行ansible all -m ping 就不須要密碼了。服務器

注意:須要切換到你生成密鑰的用戶下才能免密去執行playbook

第六章 playbook應用之部署nginx

6.1 編寫playbook

[root@localhost]# vim nginx.yml
# nginx.yml
---
- hosts: test
  vars:
    hello: Ansible
     
  tasks:
  - name: yum repo 
    yum_repository:
      name: nginx
      description: nginx repo
      baseurl: http://nginx.org/packages/centos/7/$basearch/
      gpgcheck: no
      enabled: 1
  - name: Install nginx
    yum:
      name: nginx
      state: latest
  - name: Copy nginx configuration file
    copy:
      src: /etc/ansible/ansible-playbook/ansible.conf
      dest: /etc/nginx/conf.d/site.conf
  - name: Start nginx
    service:
      name: nginx
      state: started
  - name: Create wwwroot directory
    file:
      dest: /var/www/html
      state: directory
  - name: Create test page index.html
    shell: echo "hello {{hello}}" > /usr/share/nginx/html/index.html

附加:須要建立一個nginx的新配置文件,以下:

[root@localhost]# vim ansible.conf        #在當前目錄下建立nginx新配置文件
server {
    listen 81;
    server_name localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

6.2 添加主機信息到主機清單中

[root@localhost]# vim /etc/ansible/hosts
[test]
10.0.1.7 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22
10.0.1.8 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22

6.3 運行playbook批量安裝nginx

[root@localhost ansible-playbook]# ansible-playbook nginx.yml 

PLAY [test] ***************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************
ok: [10.0.1.8]
ok: [10.0.1.7]

TASK [yum repo] ***********************************************************************************************************************************************
ok: [10.0.1.8]
ok: [10.0.1.7]

TASK [Install nginx] ******************************************************************************************************************************************
changed: [10.0.1.8]
changed: [10.0.1.7]

TASK [Copy nginx configuration file] **************************************************************************************************************************
ok: [10.0.1.8]
ok: [10.0.1.7]

TASK [Start nginx] ********************************************************************************************************************************************
changed: [10.0.1.8]
changed: [10.0.1.7]

TASK [Create wwwroot directory] *******************************************************************************************************************************
ok: [10.0.1.8]
ok: [10.0.1.7]

TASK [Create test page index.html] ****************************************************************************************************************************
changed: [10.0.1.8]
changed: [10.0.1.7]

PLAY RECAP ****************************************************************************************************************************************************
10.0.1.7                   : ok=7    changed=3    unreachable=0    failed=0   
10.0.1.8                   : ok=7    changed=3    unreachable=0    failed=0

到agent端查看,nginx安裝完成,訪問nginx ip:81,頁面顯示hello Ansible !!!

相關文章
相關標籤/搜索