Linux ansible 服務

                  Linux ansible 服務

Ansible

  

運維工具的分類:

agent:基于專用的agent程序完成管理功能,puppet, func, zabbix, …

agentless:基于ssh服務完成管理,ansible, fabric, …

    使用agentless基于ssh服務管理時,最好使用ssh密鑰對進行認證連接。

 

ansible架構:

Ansible Coreansible主架構;

Modules:模塊;

Core Modules:核心(標準模塊)

Customed Modules:自定義模塊

Host Iventory:主機清單(要管理的主機);

Files:通過文件加載要管理的主機

CMDB:通過外部設備進行管理主機

PlayBooks:劇本;

Hosts

roles:定義要完成的任務功能

Connection Plugins:連接插件,連接至各被管控的主機,完成并發連接,ansible默認一次管控5臺主機;

 

ansible特性:

模塊化:調用特定的模塊,完成特定的任務;

基于Python語言研發,由Paramiko, PyYAMLJinja2三個核心庫實現;

部署簡單:agentless基于ssh服務完成管理;

支持自定義模塊,使用任意編程語言;

強大的playbook機制;

冪等性;

 

安裝及程序環境:

程序:

 ansible

 ansible-playbook

 ansible-doc

配置文件:

  /etc/ansible/ansible.cfg

主機清單:

  /etc/ansible/hosts

插件目錄:

      /usr/share/ansible_plugins/

 

ansible管理獲取模塊:

獲取模塊列表:ansible-doc -l

    獲取模塊列表幫助:ansible-doc -h

獲取指定模塊的使用幫助:ansible-doc -s MOD_NAME

 

基本使用入門:

ansible命令格式:

Usage: ansible <host-pattern> [options]  

常用選項:

-m MOD_NAME  -a MOD_ARGS

 

配置Host Inventory

/etc/ansible/hosts

[group_id]:配置主機清單組;

HOST_PATTERN1

HOST_PATTERN2

 

示例:

  ansible主機清單中定義服務組:

blob.png

blob.png

ansible常用模塊:

ping:探測目標主機是否存活;

 示例:

blob.png

command模塊:在遠程主機執行命令;

shell模塊:在遠程主機上調用shell解釋器運行命令,支持shell的各種功能,例如管道等 ;

注意:commandshell模塊的核心參數直接為命令本身;而其它模塊的參數通常為“key=value”格式;

示例:

   在遠端主機執行hostname命令:

blob.png

示例:

  在遠程各個主機上創建分別創建centos用戶:

blob.png

 為在各個遠程主機上創建的centos用戶設置密碼:

blob.png

copy模塊:拷貝文件到遠端主機上:

  用法:

(1) 復制文件

-a "src=  dest=  "

(2) 給定內容生成文件

-a "content=  dest=  "

     content:直接給定內容;

     mode:設置權限;

其它參數:mode, owner, group, …

示例:

  拷貝content=remote  到各個遠程被控主機websrvs組的/tmp/remote.ansible;

  websrvs組中的主機:192.168.3.2  192.168.3.8

blob.png

blob.png

驗證:copywebsrvs組主機其中192.168.3.2中的內容:

blob.png

file模塊:設置文件屬性

   用法:

state:定義文件目標狀態;

absent:刪除指定的文件;

director:創建目錄;

link:定義鏈接文件;

(1) 創建目錄:

  -a "path=  state=directory"

(2) 創建鏈接文件:

      -a "path=  src=  state=link"

(3) 刪除文件:

 -a "path=  state=absent

      absent:缺席的;在此意為:刪除;

示例:

 在遠端主機上創建目錄:

blob.png

在遠端主機上刪除創建的目錄:

blob.png

在遠端主機上創建鏈接文件:

blob.png

blob.png

驗證遠端主機上的link文件:

blob.png

fetch模塊從遠程某一臺主機拉取文件;

blob.png

cron模塊管理周期性任務計劃  

    -a ""

minute=

hour=

day=

month=

weekday=

job=

name=

user=

state={present|absent}

示例:

  使用ansible給各遠程主機設置周期性計劃任務:

blob.png

  刪除各遠程主機上的周期性計劃任務可以使用 state=absent

blob.png

blob.png

hostname模塊管理遠端主機的主機名

name=

示例:

為遠端主機192.168.3.2主機設置hostname主機名:

blob.png

去遠端主機192.168.3.2主機上驗證主機名是否設置成功:

blob.png

yum模塊:管理遠程主機使用yum模塊安裝程序包:

   注意:在遠端主機上需先配置好yum倉庫;

    -a ""

(1) name=  安裝所指定的服務程序包。

  state={present|latest} 默認為:present

      state=absent 刪除指定的程序包。

conf_file

disable_gpg_check

disablerepo

list

name=

state

update_cache

示例:

 使用ansibleyum模塊為遠端主機安裝最新版的httpd服務:

blob.png

service模塊:管理遠端主機服務`started'/`stopped' `restarted'

-a ""

name=

state=

started

stopped

restarted

enabled= 定義遠端主機開機是否自啟動;

runlevel= 定義遠端主機在那些運行級別下可以開機自啟動;

示例:

  使用ansible控制遠程主機httpd服務啟動,并設置為開機自啟動:

blob.png

group模塊:在遠程主機上添加/刪除組:

-a ""

name=

state=

system=

gid=

示例:

 使用ansible為各遠程主機創建test組:

blob.png

使用ansible刪除各遠程主機上的test組:

blob.png

user模塊:在遠端主機上創建/刪除用戶:  

    -a ""

name= 指定要創建的用戶名

group= 指定基本組

groups= 指定附加組

comment= 備注

uid=    指定uid

system=  指定為系統用戶

shell= 指定新建用戶使用的shell

expires= 指定過期時長

home=  指定家目錄

示例:

  使用ansible為各個遠端主機創建一個用戶haha

blob.png

  使用ansible刪除各個遠端主機上的用戶haha

blob.png

setup模塊:從指定的遠端主機上獲取遠端主機詳細的配置參數:

示例:

  從遠端主機192.168.3.2上獲取詳細的配置參數:

blob.png

YAMLYAML是一個人類易讀的數據序列化格式設計的腳本語言。

YAML is a data serialization format designed for human readability and  interaction with scripting languages.

數據結構:

key:value

– item1

– item2

– item3

{name:jerry, age:21}

 

ansible-playbook

核心元素:

Tasks:任務,由模塊定義的操作的列表;

Variables:變量

Templates:模板,即使用了模板語法的文本文件;

Handlers:由特定條件觸發的Tasks;

Roles:角色;

playbook的基礎組件:

Hosts:運行指定任務的目標主機;

remote_user:在遠程主機以哪個用戶身份執行;

sudo_user:非管理員需要擁有sudo權限;

tasks:任務列表

模塊,模塊參數:

格式:

(1) action: module arguments

(2) module: arguments

 

ansible-playbook:用法

  Usage: ansible-playbook [options] playbook.yml

  options

-C, –check:測試playbook任務,但不真正的執行;

–list-hosts:列出playbook任務影響到的主機;

–list-tasks:列出playbook要執行的任務;

 

運行playbook,使用ansible-playbook命令

(1) 檢測語法

ansible-playbook  –syntax-check  /path/to/playbook.yaml

(2) 測試運行

ansible-playbook -C /path/to/playbook.yaml

–list-hosts

–list-tasks

–list-tags

(3) 運行

ansible-playbook  /path/to/playbook.yaml

-t TAGS, –tags=TAGS 指明要運行的任務標簽

–skip-tags=SKIP_TAGS 指明要跳過的任務標簽

–start-at-task=START_AT 指明要從哪個任務標簽開始運行

blob.png

blob.png

示例:

 定義一個playbook,創建用戶和組及安裝htpd服務并啟動:

blob.png

blob.png

檢查playbook user.yaml劇本語法:

blob.png

為遠端主機192.168.3.7安裝httpd服務,復制配置文件并啟動服務:

注:提供的配置文件監聽的端口為:8080

blob.png

blob.png

handlers:由特定條件觸發的Tasks;

調用及定義方式:

tasks

– name: TASK_NAME

 module: arguments

 notify: HANDLER_NAME

handlers:

– name: HANDLER_NAME

 module: arguments

示例:

  在復制一份httpd服務監聽80端口的主配置文件到遠端主機192.168.3.2上,然后使其觸發handlers

blob.png

blob.png

或執行reload服務:

blob.png

blob.png

測試:

blob.png

測試:

blob.png

tags:給指定的任務定義一個調用標識;

– name: NAME

 module: arguments

 tags: TAG_ID

多個任務可以使用同一個標簽;

執行時也可以一次調用多個任務;

示例:

blob.png

blob.png

指明要在遠端主機上要執行的任務標簽:

blob.png

Variables

類型:

內建:

(1) facts

自定義:

(1) 命令行傳遞;

-e VAR=VALUE

(2) hosts Inventory中為每個主機定義專用變量值;

   (a) 向不同的主機傳遞不同的變量 ;

IP/HOSTNAME variable_name=value

(b) 向組內的所有主機傳遞相同的變量 ;

[groupname:vars]

variable_name=value

(3) playbook中定義

vars:

– var_name: value

– var_name: value

注意:variables變量在host inventoryplaybook中都可以定義。

   

           (4) Inventory還可以使用參數:

用于定義ansible遠程連接目標主機時使用的屬性,而非傳遞給playbook的變量;

ansible_ssh_host

ansible_ssh_port

ansible_ssh_user

ansible_ssh_pass

ansible_sudo_pass

    …

          (5) 在角色調用時傳遞參數

roles:

–  { role: ROLE_NAME, var: value, …}

示例:

blob.png

變量調用:

   {{ var_name }}

 

示例:

  playbook中定義變量名安裝vsftpd服務:

blob.png

blob.png

這時我們可以使用命令行給playbook中的pkgname變量傳遞變量值,讓其在遠端主機上安裝vsftpd服務:

blob.png

注意:命令行 -e 選項給定的變量名變量值要比playbook中給定的變量名變量值要優先使用。

我們也可以在playbook中定義變量名和變量名來安裝vsftpd服務:

blob.png

blob.png

示例:

 hosts Inventory中為每個主機定義專用變量值:

blob.png

blob.png

或者向組內的所有主機傳遞相同的變量 ;

blob.png

blob.png

playbook中定義任務:

blob.png

blob.png

Templates:模板

文本文件,內部嵌套有模板語言腳本(使用模板語言編寫)

 

 注意:此模板不能在命令行使用,而只能用于playbook;

 

Jinja2 is a template engine written in pure Python.  It provides a  Django inspired non-XML syntax but supports inline expressions and an optional sandboxed environment.

  語法:

字面量:

字符串:使用單引號或雙引號;

數字:整數、浮點數;

列表:[item1, item2, …]

元組:(item1, item2, …)

字典:{key1:value1, key2:value2, …}

布爾型:true/false

 

算術運算

+, -, *, /, //, %, **

 

比較操作:

==, !=, >, <, >=, <=

邏輯運算:and, or, not

執行模板文件中的腳本,并生成結果數據流,需要使用template模塊;

template

-a ”“

src=

dest=

mode=

onwer=

group=

 

示例:

  使用template模板為websrvs組的遠端主機安裝配置nginx服務:

 1)拷貝本機ansible上的nginx.conf的主配置文件到/root目錄下并制定后綴名為j2

blob.png

 2)編輯/root/nginx.conf.j2 文件,使nginxworker_processes進程調用ansiblecpu個數內鍵變量來生成worker進程數:

blob.png

blob.png

3)編輯ansiblehost inventory配置文件 :

blob.png

blob.png

4)編輯playbook

blob.png

blob.png

注意:此playbook需要在遠端主機上的/root目錄下先準備好rpm格式的軟件包。如果沒有可以使用wget下載。

測試:

blob.png

blob.png

blob.png

when條件測試:

     when語句:在tasks中使用,Jinja2的語法格式;

  示例:

條件測試centos6、centos7 nginx服務啟動:

編寫playbook

blob.png

blob.png

循環:迭代,需要重復執行的任務;

   對迭代項的引用,固定變量名為"item”,使用with_items屬性給定要迭代的元素;

   元素:列表

         字符串

         字典

示例:

  基于字符串列表給出元素,安裝服務:

blob.png

blob.png

示例:

  基于字典列表給出元素,創建用戶和組:

blob.png

blob.png

刪除用戶和組:

blob.png

blob.png

roles角色:

以特定的層級目錄結構進行組織的tasks、vars、handlerstemplates、files等;

role_name/

files/:存儲由copyscript等模塊調用的文件;

tasks/:此目錄中至少應該有一個名為main.yml的文件,用于定義各task;其它的文件需要由main.yml進行“包含”調用;

handlers/:此目錄中至少應該有一個名為main.yml的文件,用于定義各handler;其它的文件需要由main.yml進行“包含”調用;

vars/:此目錄中至少應該有一個名為main.yml的文件,用于定義各variable;其它的文件需要由main.yml進行“包含”調用;

templates/:存儲由template模塊調用的模板文本;

meta/:此目錄中至少應該有一個名為main.yml的文件,定義當前角色的特殊設定及其依賴關系;其它的文件需要由main.yml進行“包含”調用;

default/:此目錄中至少應該有一個名為main.yml的文件,用于設定默認變量;

 

playbook中調用角色的方法:

  – hosts: HOSTS

  remote_user: USERNAME

  roles:

  – ROLE1

  – ROLE2

 -{ role: ROLE3, VARIABLE: VALUE, …}

 – { role: ROLE4, when: CONDITION }

 

實驗測試nginx使用角色調用:

 

/etc/ansible/roles目錄下創建特定的目錄角色(roles):

blob.png

blob.png

拷貝nginx安裝包到/etc/ansible/nginx/file/目錄下:

blob.png

拷貝ansible本機nginx的主配置模板和默認配置模板到/etc/ansible/roles/nginx/templates/目錄下并添加后綴名為XXXX.j2

blob.png

blob.png

更改nginx模板的主配置文件

blob.png

blob.png

更改nginx的模板默認配置文件:

blob.png

blob.png

編輯/etc/ansible/roles/nginx/tasks/main.yml文件:

tasks任務中定義了,拷貝nginx安裝包到遠程主機、定義了在遠程主機上安裝nginx程序包、定義了拷貝ansible主機上的nginx主配置文件和默認配置文件的template模板文件到遠程主機上、定義了在遠程主機上啟動nginx服務并開機自啟動。

blob.png

blob.png

編輯/etc/ansible/roles/nginx/handlers/main.yml文件:

blob.png

blob.png

編輯/etc/ansible/roles/nginx/vars/main.yml

blob.png

blob.png

playbook中調用nginx角色:

blob.png

blob.png

測試/etc/ansible/nginx.yml語法:

blob.png

測試:

blob.png

blob.png

playbook使用字典調用nginx角色:

blob.png

blob.png

原創文章,作者:zhengyibo,如若轉載,請注明出處:http://www.www58058.com/60052

(0)
zhengyibozhengyibo
上一篇 2016-11-18
下一篇 2016-11-19

相關推薦

  • Memcached + MSM 實現Tomcat Session保持

    Memcached + MSM 實現Tomcat Session保持 tomcat memcached 前言 Memcached介紹 MSM介紹 實驗拓撲 實驗環境 實驗步驟 安裝配置Tomcat 安裝配置Nginx負載均衡 安裝配置Memcached + MSM 總結 前言 上篇文章我們實現了session sticky和session clus…

    2016-04-22
  • 深入理解java嵌套類和內部類

    一、什么是嵌套類及內部類   可以在一個類的內部定義另一個類,這種類稱為嵌套類(nested classes),它有兩種類型:靜態嵌套類和非靜態嵌套類。靜態嵌套類使用很少,最重要的是非靜態嵌套類,也即是被稱作為內部類(inner)。嵌套類從JDK1.1開始引入。其中inner類又可分為三種:  其一、在一個類(外部類)中直接定義的內部類;  其二、在一個方法…

    Linux干貨 2015-04-07
  • linux網絡管理

    Linux網絡配置 摘要:Linux 對網絡的管理分為 靜態指定和動態管理。 靜態指定 靜態指定ip一般有命令              ifconfig       &…

    Linux干貨 2016-04-05
  • 小型網站MYSQL問題一:MyISAM轉Innodb的方法

    故事背景:之前公司的數據庫存儲引擎全部為MyISAM,數據量和訪問量都不是很大,也一直沒有什么問題。我最近接手一些運維工作,兼DBA,因為業務上面涉及到錢,所以決定換成支持事物的innodb。下面將操作步驟記錄以下。 1、導出mydb數據庫的表結構 mysqldump -d -uxxx -p mydb &gt…

    Linux干貨 2015-12-19
  • awk學習筆記

    一、linux的文本處理器三劍客   文本過濾器:grep、egrep、fgrep   行編輯器:sed(模式空間;保持空間)   報表生成器:awk(格式化文本輸出)gawk awk的工作流程: 從文本中讀取一行內容,根據指定的分隔符;將讀入的一行內容分隔成字段,然后格式化輸出指定的字段 二、awk的命令相關的參數及用法 &n…

    Linux干貨 2015-06-23
  • rsyslog同步history日志

    前言   由于公司業務是由公司內部開人員及外包團隊共同開發,所以需要使用rsyslog對history日志做收集、審計。雖然搭建及配置非常簡單,但是在日常運維工作中很實用,所以記錄下,方便日后快速搭建。如果有錯誤,望大神指正。 syslog簡介 syslog是Linux系統默認的日志守護進程。默認的syslog配置文件是/etc/sysl…

    Linux干貨 2015-04-03
欧美性久久久久