自動化運維——Ansible管理工具

Ansible管理工具

ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能

ansible基於ssh來和遠程主機通訊的,所以不需要在遠程主機上安裝client/agents

ansible特點:1.部署簡單,只需在主控端部署Ansible環境,被控端無需做任何操作

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

                        3.有大量常規運維操作模塊,可實現日常絕大部分操作

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

                        5.支持API及自定義模塊,可通過Python輕鬆擴展
    
                        6.通過Playbooks來定製強大的配置、狀態管理

                        7.輕量級,無需在客戶端安裝agent,更新時,只需在操作機上進行一次更新即可

                        8.提供一個功能強大、操作性強的Web管理界面和REST API接口——AWX平臺

Ansible基本架構

Ansible:Ansible核心程序

Host Inventory:記錄由Ansible管理的主機信息(默認是在Ansible的hosts配置文件中定義被管理主機),包括端口、密碼、ip等

Playbooks:“劇本”YAML格式文件,多個任務定義在一個文件中,定義主機需要調用哪些模塊來完成的功能

Core Modules:核心模塊,主要操作是通過調用核心模塊來完成管理任務

Custom Modules:自定義模塊,完成核心模塊無法完成的功能,支持多種語言

Connection Plugins:連接插件,Ansible和Host通信使用

安裝配置Ansible

1.安裝依賴包和ansible

yum -y install epel-release

yum -y install ansible

配置文件目錄:/etc/ansible

執行文件目錄:/usr/bin

Lib庫依賴目錄:/usr/lib/pythonX.X/site-packages/ansible

Help文檔目錄:/usr/share/doc/ansible-X.X.X

Man文檔目錄:/usr/share/man/man1

2.配置主機清單:vim /etc/hosts

比如格式如下:

[webserver]
192.168.11.26
[dbserver]
192.168.11.27

3.配置無密碼登陸

ssh-keygen -t rsa

ssh-copy-id -i /root/.ssh/id_rsa [email protected]

ssh-copy-id -i /root/.ssh/id_rsa [email protected]

ansible常用模塊命令格式

基礎命令選項

-h:來查看幫助,下面我們列出一些比較常用的選項,並解釋其含義:

-a:MODULE_ARGS#模塊的參數,如果執行默認COMMAND的模塊,即是命令參數,如: “date”,“pwd”等等

-k:--ask-pass:#ask for SSH password,登錄密碼,提示輸入SSH密碼而不是假設基於密鑰的驗證

--ask-su-pass:#ask for su password,su切換密碼

-K:--ask-sudo-pass #ask for sudo password,提示密碼使用sudo,sudo表示提權操作

--ask-vault-pass#ask for vault password,假設我們設定了加密的密碼,則用該選項進行訪問

-B:SECONDS#後臺運行超時時間

-C:#模擬運行環境並進行預運行,可以進行查錯測試

-c:CONNECTION#連接類型使用

-f:FORKS#並行任務數,默認爲5

-i:INVENTORY #指定主機清單的路徑,默認爲/etc/ansible/hosts

--list-hosts:#查看有哪些主機組

-m:MODULE_NAME#執行模塊的名字,默認使用 command 模塊,所以如果是隻執行單一命令可以不用 -m參數

-o:壓縮輸出,嘗試將所有結果在一行輸出,一般針對收集工具使用

-S:用su命令

-R:SU_USER#指定 su 的用戶,默認爲 root 用戶

-s:用sudo命令

-U:SUDO_USER#指定 sudo 到哪個用戶,默認爲 root 用戶

-T:TIMEOUT#指定 ssh 默認超時時間,默認爲10s,也可在配置文件中修改

-u:REMOTE_USER#遠程用戶,默認爲 root 用戶

-v:查看詳細信息,同時支持-vvv,-vvvv可查看更詳細信息

查看模塊:ansible-doc -l

查看具體模塊的信息:ansbile-doc -s  command

1.command模塊(用於在被管理主機上運行命令)

ansible webserver -m command -a 'date'

2.cron模塊(用於在被管理主機上管理計劃任務)

persent:添加、absent:移除,其使用的語法跟我們的crontab文件中的語法一致,同時,可以指定以下選項:

day:日應該運行的工作( 1-31, , /2, )

hour:小時 ( 0-23, , /2, )   

minute:分鐘( 0-59, , /2, )

month:月( 1-12, *, /2, )

weekday:周 ( 0-6 for Sunday-Saturday,, )

job:指明運行的命令是什麼

name:定時任務描述    

ansible dbserver -m cron -a 'name="host reboot" minute="30" hour="22" job="/usr/sbin/reboot"'    

3.user模塊(創建用戶)

ansible all -m user -a 'name="test"'

4.group模塊(創建組)

ansible all -m group -a 'name=test'

5.copy模塊(複製本地文件到管理的服務器)

ansible all -m copy -a 'src=/etc/fstab dest=/home/fstab.test owner=root  mode=744'

6.file模塊(修改文件屬性)

ansible all -m file -a 'owner=test group=test mode=644 path=/home/fstab.test'

7.ping模塊(ping測試)

ansible all -m ping

8.service模塊(設置修改服務狀態)

ansible webserver -m service -a 'enabled=true name=httpd state=started

9.shell模塊(shell模塊可以在遠程主機上調用shell解釋器運行命令)

ansible dbserver -m shell -a 'echo 123456 | passwd --stdin zhangsan'

10.script模塊(將本地腳本複製到被管理主機進行運行)

ansible webserver -m script -a '/root/ping.sh'

11.yum模塊(yum安裝軟件)

ansible webserver -m yum -a 'name=httpd state=present'

12.setupt模塊(該模塊主要用於收集信息,是通過調用facts組件來實現的)

比如查看內存:ansible webserver -m setup -a 'filter="*mem*"'

13.fetch 模塊(該模塊用於從遠程某主機獲取(複製)文件到本地)

ansible webserver -m fetch -a 'src=/data/hello dest=/data'

playbook的使用

playbooks是 一個不同於使用Ansible命令行執行方式的模式,其功能更強大靈活,主要可以用來多機部署,你可以把它理解成一種腳本,可以一次性運行一系列操作

1.使用playbook遠程安裝httpd

vim installhttpd.yaml

---
- hosts: webserver
  remote_user: root
  tasks:
    - name: install Apache
      yum:
        name: httpd
        state: installed
    - lineinfile:
        path: /etc/httpd/conf/httpd.conf
        regexp: '^Listen '
        line: 'Listen 8080'
    - replace:
        path: /etc/httpd/conf/httpd.conf
        regexp: '^#(ServerName).*'
        replace: '\1 localhost'
    - service:
        name: httpd
        enabled: yes
        state: restarted
    - name: Create wwwroot directory
      file:
        dest: /var/www/html
        state: directory
    - copy:
        src: /root/index.html
        dest: /var/www/html/index.html

運行playbook直接遠程管理安裝

ansible-playbook installhttpd.yaml

2.使用playbook遠程安裝nginx

vim installnginx.yaml

---
  tasks:
  - name: add repo
    yum_repository:
      name: nginx
      description: nginx repo
      baseurl: http://nginx.org/packages/centos/7/$basearch/
      gpgcheck: no
      enabled: 1
  - name: install centos plungins
    shell: yum -y install zlib zlib-devel openssl openssl-devel pcre-devel wget gcc gcc++ autoconf automake
  - name: Install nginx
    yum:
      name: nginx
      state: installed
  - name: Copy nginx configuration file
    copy:
      src: /root/nginx.conf
      dest: /etc/nginx/nginx.conf
  - name: Create wwwroot directory
    file:
      dest: /var/www/nginx
      state: directory
  - name: Create test page index.html
    shell: echo "<h1>Congratulations on the successful installation of Nginx!!!</h1>" > /var/www/nginx/index.html
  - name: Start nginx
    service:
      name: nginx
      state: started

運行playbook直接遠程管理安裝

ansible-playbook installnginx.yaml

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章