Ansible基礎概述

一、Ansible簡介

?????? Ansible基于Python語言實現,由paramiko和PyYAML兩個關鍵模塊構建。Ansible的編排引擎可以出色地完成配置管理,流程控制,資源部署等多方面工作。Ansible公司負責Ansible開源軟件的維護,管理。一般軟件的更新大概每2個月發布一次(目前版本在2.4)Ansible主要承擔的工作有以下幾種:

  1. 配置管理
  2. 服務即時開通
  3. 應用部署
  4. 流程編排
  5. 監控告警
  6. 日志記錄

?? AnsibleSaltstack最大的區別是Ansible無需在被控主機部署任何客戶端代理,默認直接通過SSH通道進行遠程命令執行或下發配置:相同點是都具備功能強大、靈活的系統管理、狀態配置,兩者都提供豐富的模板及API,對云計算平臺、大數據都有很好的支持。

?特點:

  • 部署簡單,只需在主控端部署Ansible環境,被控端無需做任何操作;
  • 默認使用SSH協議對設備進行管理;
  • 主從集中化管理;
  • 配置簡單、功能強大、擴展性強;
  • 支持API及自定義模塊,可通過Python輕松擴展;
  • 通過Playbooks來定制強大的配置、狀態管理;
  • 對云計算平臺、大數據都有很好的支持;
  • 提供一個功能強大、操作性強的Web管理界面和REST API接口——AWX平臺。
  • 冪等性:一種操作重復多次結果相同
簡評:
(1)、輕量級,無需在客戶端安裝agent,更新時,只需在操作機上進行一次更新即可;
(2)、批量任務執行可以寫成腳本,而且不用分發到遠程就可以執行;
(3)、使用python編寫,維護更簡單,ruby語法過于復雜;
(4)、支持sudo。

?

、Ansible架構及組件說明

1、架構圖:

2、Ansible核心組件說明:

  • Ansible:Ansible的核心程序
  • Host Lnventory:記錄了每一個由Ansible管理的主機信息,信息包括ssh端口,root帳號密碼,ip地址等等。可以通過file來加載,可以通過CMDB加載

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

  • Core Modules:Ansible執行任何管理任務都不是由Ansible自己完成,而是由核心模塊完成;Ansible管理主機之前,先調用core Modules中的模塊,然后指明管理Host Lnventory中的主機,就可以完成管理主機。

  • Custom Modules:自定義模塊,完成Ansible核心模塊無法完成的功能,此模塊支持任何語言編寫。

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

3、ansible任務執行流程
Ansible針對Ansible服務器對執行操作服務器的操作方式,分為兩種執行模式:

  1. ad-hoc:這個模式支持執行單個模塊,支持批量執行單條命令。
  2. playbook:這個可以理解成為面向對象的編程,就像上面舉例那樣可以把多個你想要執行的任務放到一個playbook當中,當然多個任務在事物邏輯上最好是有上下聯系的。通過這多個任務可以完成一個總體的目標,這就是playbook。

?

三、Ansible部署及密鑰分發

1、通過epel原安裝ansible

[root@Node3 yum.repos.d]# rpm Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm   //安裝epel源
[root@Node3 yum.repos.d]# yum -y install ansible                          //安裝ansible
Loaded plugins: fastestmirror, langpacks
extras                                                                                                                        | 3.4 kB  00:00:00     
Loading mirror speeds from cached hostfile* base: mirrors.aliyun.com* epel: mirrors.tongji.edu.cn* extras: mirrors.163.com* updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
.........省略中間部分.........
Installed:ansible.noarch 0:2.4.2.0-1.el7                                                                                                                     Dependency Installed:(安裝依賴程序包)PyYAML.x86_64 0:3.10-11.el7                    libtomcrypt.x86_64 0:1.17-26.el7             libtommath.x86_64 0:0.42.0-6.el7                     libyaml.x86_64 0:0.1.4-11.el7_0                python-babel.noarch 0:0.9.6-8.el7            python-cffi.x86_64 0:1.6.0-5.el7                     python-enum34.noarch 0:1.0.4-1.el7             python-httplib2.noarch 0:0.9.2-1.el7         python-idna.noarch 0:2.4-1.el7                       python-ipaddress.noarch 0:1.0.16-2.el7         python-jinja2.noarch 0:2.7.2-2.el7           python-keyczar.noarch 0:0.71c-2.el7                  python-markupsafe.x86_64 0:0.11-10.el7         python-paramiko.noarch 0:2.1.1-2.el7         python-ply.noarch 0:3.4-11.el7                       python-pycparser.noarch 0:2.14-1.el7           python2-crypto.x86_64 0:2.6.1-15.el7         python2-cryptography.x86_64 0:1.7.2-1.el7_4.1        python2-jmespath.noarch 0:0.9.0-3.el7          python2-pyasn1.noarch 0:0.1.9-7.el7          sshpass.x86_64 0:1.06-2.el7                          Complete!

?2、SSH免密鑰登錄設置

[root@Node3 yum.repos.d]# ssh-keygen -t rsa -P ''   //生成公鑰和私鑰
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:nmuEMSEBMJF2uZXpE4EBfowEuKm504OkS+8Urwrq2TA root@Node3.contoso.com
The key's randomart image is:
+---[RSA 2048]----+
|B*oo=o+          |
|=oo+.=.          |
|.=.o+...         |
|o .. oo          |
|.. .  .+S        |
|o.  o ....       |
|+E . . .o        |
|O X .   ..       |
|+*o*   ..        |
+----[SHA256]-----+
[root@Node3 yum.repos.d]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@Node1     //分發公鑰至Node1節點
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@node1's password: 
Permission denied, please try again.
root@node1's password: 

Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'root@Node1'"  
and check to make sure that only the key(s) you wanted were added.
[root@Node3 yum.repos.d]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@Node2 //分發公鑰至Node2節點

?

三、Ansible命令介紹及配置文件

1、常用命令介紹及配置文件
  /usr/bin/ansible: Ansibe AD-Hoc 臨時命令執行工具,常用于臨時命令的執行
  /usr/bin/ansible-doc: Ansible 模塊功能查看工具
  /usr/bin/ansible-galaxy: 下載/上傳優秀代碼或Roles模塊的官網平臺,基于網絡的
  /usr/bin/ansible-playbook: Ansible 定制自動化的任務集編排工具
  /usr/bin/ansible-pull: Ansible遠程執行命令的工具(使用較少,海量機器時使用,對運維的架構能力要求較高)
  /usr/bin/ansible-vault:? Ansible 文件加密工具
  /usr/bin/ansible-console:? Ansible基于Linux Consoble界面可與用戶交互的命令執行工具

  /usr/share/ansible_plugins:Ansible高級自定義插件目錄(需要python基礎)
  /etc/ansible/ansible.cfg:配置文件
  /etc/ansible/hosts:主機清單

2、/etc/ansible/ansible.cfgansible.cfg配置文件

1)[defaults] #inventory      = /etc/ansible/hosts  # 主機列表配置文件#library        = /usr/share/my_modules/ # 庫文件存放目錄 #remote_tmp     = $HOME/.ansible/tmp  # 生成的臨時py命令文件存放在遠程主機的目錄#local_tmp      = $HOME/.ansible/tmp # 本機的臨時命令執行目錄#forks          = 5   # 默認并發數#poll_interval  = 15   # 默認的線程池#sudo_user      = root  # 默認sudo 用戶#ask_sudo_pass = True#ask_pass      = True#transport      = smart#remote_port    = 22#module_lang    = C#module_set_locale = Falsehost_key_checking = False  ### 檢查對應服務器的host_key2)[privilege_escalation]
(3)[paramiko_connection]
(4)[ssh_connection]
(5)[accelerate]
(6)[selinux]
(7)[colors]

?

?3、Ansible主機清單(/etc/ansible/hosts)

  • ?Hosts部分中經常用到的變量部分:
    ansible_ssh_host ? ? #用于指定被管理的主機的真實IP
    ansible_ssh_port ? ? #用于指定連接到被管理主機的ssh端口號,默認是22
    ansible_ssh_user ? ? #ssh連接時默認使用的用戶名
    ansible_ssh_pass ? ? #ssh連接時的密碼
    ansible_sudo_pass ? ? #使用sudo連接用戶時的密碼
    ansible_sudo_exec ? ? #如果sudo命令不在默認路徑,需要指定sudo命令路徑
    ansible_ssh_private_key_file ? ? #秘鑰文件路徑,秘鑰文件如果不想使用ssh-agent管理時可以使用此選項
    ansible_shell_type ? ? #目標系統的shell的類型,默認sh
    ansible_connection ? ? #SSH 連接的類型: local , ssh , paramiko,在 ansible 1.2 之前默認是 paramiko ,后來智能選擇,優先使用基于 ControlPersist 的 ssh (支持的前提)
    ansible_python_interpreter ? ? #用來指定python解釋器的路徑,默認為/usr/bin/python 同樣可以指定ruby 、perl 的路徑
    ansible_*_interpreter ? ? #其他解釋器路徑,用法與ansible_python_interpreter類似,這里"*"可以是ruby或才perl等其他語
    示列如下:
    [test]
    192.168.10.1 ansible_ssh_user=root ansible_ssh_pass='P@ssw0rd'
    192.168.10.2 ansible_ssh_user=tony ansible_ssh_pass='123456'
    192.168.10.3 ansible_ssh_user=tom ansible_ssh_port=3022 ansible_ssh_pass='456789'
    上面的示例中指定了三臺主機,三臺主機的用密碼分別是P@ssw0rd、123456、45789,指定的ssh連接的用戶名分別為root、tony、tom,ssh 端口分別為22、22、3022 ,這樣在ansible命令執行的時候就不用再指令用戶和密碼等了

    ?

  • 簡單的主機和組
    ? ? [webservers]
    ??? web1.contoso.com
    ??? web2.contoso.com
    ??? [dbservers]
    ??? db1.contoso.com
    ??? db2.contoso.com
    a、中括號中的名字代表組名,可以根據自己的需求將龐大的主機分成具有標識的組,如上面分了兩個組webservers和dbservers組;
    b、主機(hosts)部分可以使用域名、主機名、IP地址表示;當然使用前兩者時,也需要主機能反解析到相應的IP地址,一般此類配置中多使用IP地址;

?、Ansible使用

1、定義主機清單(/etc/ansible/hosts)

[root@Node3 ansible]# tail -5 /etc/ansible/hosts ## db-[99:101]-node.example.com
[Webservers]                  //定義Web組
172.17.21.206
172.17.21.207

2、使用ping模塊測試主機是否在線

[root@Node3 ansible]# ansible all -m ping        //測試所有主機是否在線
172.17.21.206 | SUCCESS => {"changed": false, "ping": "pong"
}
172.17.21.207 | SUCCESS => {"changed": false, "ping": "pong"
}

3、ansible命令的使用說明

常用選項

  • ansible -m MOD_NAME -a MOD_ARGS 表示調用什么模塊,使用模塊的那些參數
  • ansible-doc -l?獲取模塊信息
  • ansible-doc -s MOD_NAME?獲取指定模塊的使用幫助
  • ?ansible -h
    [root@Node3 ansible]# ansible -h
    Usage: ansible <host-pattern> [options]
    Options:-a MODULE_ARGS, --args=MODULE_ARGS    模塊的參數,如果執行默認COMMAND的模塊,即是命令參數,如:“date”,"pwd"等等module arguments    模塊參數-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, --background=SECONDS     后臺運行超時時間run asynchronously, failing after X seconds(default=N/A)-C, --check           don't make any changes; instead, try to predict some    只是測試一下會改變什么內容,不會真正去執行;相反,試圖預測一些可能發生的變化
                            of the changes that may occur-c CONNECTION, --connection=CONNECTION   連接類型使用。可能的選項是paramiko(SSH),SSH和地方。當地主要是用于crontab或啟動。connection type to use (default=smart)-f FORKS, --forks=FORKS   并行任務數。NUM被指定為一個整數,默認是5specify number of parallel processes to use(default=5)-h, --help            show this help message and exit   打開幫助文檔API-i INVENTORY, --inventory-file=INVENTORY    指定庫存主機文件的路徑,默認為/etc/ansible/hostsspecify inventory host file(default=/etc/ansible/hosts)-l SUBSET, --limit=SUBSET    進一步限制所選主機/組模式  --limit=192.168.91.135 只對這個ip執行further limit selected hosts to an additional pattern--list-hosts          outputs a list of matching hosts; does not executeanything else-m MODULE_NAME, --module-name=MODULE_NAME   執行模塊的名字,默認使用 command 模塊,所以如果是只執行單一命令可以不用 -m參數module name to execute (default=command)-M MODULE_PATH, --module-path=MODULE_PATH    要執行的模塊的路徑,默認為/usr/share/ansible/specify path(s) to module library(default=/usr/share/ansible/)-o, --one-line        condense output      壓縮輸出,摘要輸出.嘗試一切都在一行上輸出。-P POLL_INTERVAL, --poll=POLL_INTERVAL    調查背景工作每隔數秒。需要- bset the poll interval if using -B (default=15)--private-key=PRIVATE_KEY_FILE    私鑰路徑,使用這個文件來驗證連接use this file to authenticate the connection-S, --su              run operations with susu 命令-R SU_USER, --su-user=SU_USER      指定SU的用戶,默認是root用戶run operations with su as this user (default=root)-s, --sudo            run operations with sudo (nopasswd)    -U SUDO_USER, --sudo-user=SUDO_USER    sudo到哪個用戶,默認為 root  desired sudo user (default=root)-T TIMEOUT, --timeout=TIMEOUT    指定SSH默認超時時間,  默認是10Soverride the SSH timeout in seconds (default=10)-t TREE, --tree=TREE  log output to this directory     將日志內容保存在該輸出目錄,結果保存在一個文件中在每臺主機上。-u REMOTE_USER, --user=REMOTE_USER    遠程用戶, 默認是root用戶connect as this user (default=root)--vault-password-file=VAULT_PASSWORD_FILE  vault password file-v, --verbose         verbose mode (-vvv for more, -vvvv to enable    詳細信息connection debugging)--version             show program's version number and exit   輸出ansible的版本
  • ansible-doc -h
    [root@Node3 ansible]# ansible-doc  -h
    Usage: ansible-doc [options] [module...]
    Show Ansible module documentation     顯示Ansible模塊文檔
    Options:--version             show program's version number and exit    顯示ansible-doc的版本號-h, --help            show this help message and exit  顯示命令參數API文檔-M MODULE_PATH, --module-path=MODULE_PATH   查詢模塊,--module-path=MODULE_PATH  指定模塊的路徑Ansible modules/ directory-l, --list            List available modules   顯示已存在的所有模塊列表-s, --snippet         Show playbook snippet for specified module(s)   顯示playbook制定模塊的用法-v                    Show version number and exit   顯示ansible-doc的版本號

    ?


?

?

?

轉載于:https://www.cnblogs.com/cloudos/p/8322151.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251061.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251061.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251061.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

selenium瀏覽器驅動下載地址整理

今天把手頭有的一些關于selenium測試的資源整理了一下&#xff0c;分享出來。 1. 所有版本chrome下載 是不是很難找到老版本的chrome&#xff1f;博主收集了幾個下載chrome老版本的網站&#xff0c;其中哪個下載的是原版的就不得而知了。 http://www.slimjet.com/chrome/google…

DOM-12 【模擬桌面待講評】鼠標事件深入、點擊與拖拽分離、雙擊事件

鼠標事件深入 點擊事件 mousedown mouseupposition: absolute 會將內聯元素變為塊級&#xff08;比如a&#xff09;a標簽的協議限定符&#xff08;偽協議&#xff0c;防止跳轉和刷新&#xff0c;讓href不生效&#xff09;&#xff0c;javascript:;&#xff0c;可以讓點擊和拖…

scrapy的操作

轉載于:https://www.cnblogs.com/mengqingjian/p/8337772.html

http --- HTTPS是在安全的傳輸層上發送的HTTP

HTTPS: // HTTPS是最常見的HTTP安全版本 // 是在安全的傳輸層上發送的HTTP// 將HTTP報文發送給TCP之前,先將其發送給了一個安全層(通過SSL協議實現),對其進行加密.然后再發送給TCP // 在服務器端,通過提取商量好的密鑰進行解密HTTPS方案: // 對Web服務器發起請求時,需要有一種…

Devexpress xaf針對某個用戶登錄后在面板中設置導航無效的解決方法

Devexpress xaf框架生成的項目默認情況下導航欄是顯示在左側&#xff0c;有時候我們用某個賬戶登錄后&#xff0c;發現導航欄無法顯示在左側&#xff0c;操作十分不方便。我們可以去數據庫刪除當前登錄用戶的自定義布局 解決方法如下: 1、查詢PermissionPolicyUser用戶表&#…

DOM-13 【實戰】輸入及狀態改變事件、京東搜索框

模塊化 IIFE window.onload function () {init() }function init() {keySearch()others() // 多人開發的模塊 }var keySearch (function () {var searchKw document.getElementById(J_search_kw),autoKw document.getElementById(J_autoKw),recomKw JSON.parse(document…

吳恩達“機器學習”——學習筆記二

定義一些名詞 欠擬合&#xff08;underfitting&#xff09;&#xff1a;數據中的某些成分未被捕獲到&#xff0c;比如擬合結果是二次函數&#xff0c;結果才只擬合出了一次函數。 過擬合&#xff08;overfitting&#xff09;&#xff1a;使用過量的特征集合&#xff0c;使模型過…

Http 概述

Http是可靠的數據傳輸協議。資源Web服務器是Web資源&#xff08;resource&#xff09;的宿主。包括靜態文件以及動態的內容。 媒體類型Http對每種需要由web傳輸的對象都打上了名為MIME類型的數據格式標簽。主要的mime類型: text/htmltext/plainimage/jpegimage/gifvideo/quickt…

DOM-14 【實戰】解決事件代理和鼠標移動事件的窘態

鼠標的滑入滑出 案例 事件現象應用場景mouseover/mouseout綁定在父元素時&#xff0c;對她的所有子元素&#xff0c;事件都生效dom結構簡單mouseenter/mouseleave只對她綁定的元素有效&#xff0c;對window綁定無效dom結構簡單mousemove長觸發dom結構復雜// 綁定在父元素上 /…

項目開發的一般流程

項目開發的一般流程 確定項目需求&#xff1a;拿下一個項目編寫《需求說明書》&#xff1a;使用文字和圖片的形式將業務表現清楚。不涉及技術&#xff0c;只涉及業務需求。這個環節要和客戶反復溝通。編寫《概要設計說明書》&#xff1a; 涉及技術的的宏觀性的內容&#xff0c;…

獲取日期的區間數組

Date.prototype.Format function (fmt) { //author: meizz var o { "M": this.getMonth() 1, //月份 "d": this.getDate(), //日 "h": this.getHours(), //小時 "m": this.getMinutes(), //分 "s": this.getSeconds(), /…

javascript --- 再讀作用域和閉包

執行環境: // 定義了變量或函數有權訪問的其他數據,決定了它們各自的行為 // 每個執行環境都有一個與之關聯的變量對象 // 執行環境中定義的所有變量和函數都保存在這個變量中執行環境與函數: // 每個函數都有自己的執行環境,當執行流進入一個函數時,函數的環境就會被推入一個…

DOM-15/16【實戰】鼠標行為預測技術

鼠標預測行為動作復雜&#xff0c;使用事件代理得不償失&#xff0c;在數量有限的情況下&#xff0c;使用循環綁定更好用戶從menu斜著向右下角滑入時&#xff0c;可能是進入main&#xff0c;也可能是要選擇子菜單&#xff0c;在判斷前先做延遲如何判斷用戶進入main的意圖&#…

SQLMAP命令詳解

1.基礎信息 python sqlmap/sqlmap.py -u "http://url/news?id1" --current-user #獲取當前用戶名稱 python sqlmap/sqlmap.py -u "http://www.xxoo.com/news?id1" --current-db #獲取當前數據庫名稱 python sqlmap/sqlmap.py -u "http://www.xxoo.…

Nginx命令大全

sudo nginx #打開 nginx nginx -s reload|reopen|stop|quit #重新加載配置|重啟|停止|退出 nginx nginx -t #測試配置是否有語法錯誤nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]-?,-h : 打開幫助信息 -v : 顯示版本信…

ES6-1 ES6版本過渡歷史

一 歷史 HTML HTML 1, HTML 2, HTML 3 1991-1997 IETF(the Internet Engineering Task Force) 國際互聯網工程任務組1997.1 HTML3.2 W3C JavaScript 1995 liveScript(后改名為JavaScript1996年改名)1996 javascript 1.0 1.1;1997 Jscript1997.6 ECMAScript 1.01998.6 ECMAS…

oracle 數據庫查詢 COALESCE字符函數

功能&#xff1a;返回其參數中的第一個非空表達式&#xff0c;當你要在n個字段中選取某一個非空值 coalesce函數返回參數&#xff08;列名&#xff09;中第一個非NULL的字段值&#xff0c;注意不是為空 select COALESCE(t1.a ,t2.a) as a from table_a t1left join table_b t2…

Django-model進階

知識預覽 QuerySet中介模型查詢優化extra整體插入回到頂部QuerySet 可切片 使用Python 的切片語法來限制查詢集記錄的數目 。它等同于SQL 的LIMIT 和OFFSET 子句。 1>>> Entry.objects.all()[:5] # (LIMIT 5)>>> Entry.objects.all()[5:10] # (OFFSE…

vue --- 修飾符.lazy、.number、.trim

.lazy: 會在轉變為change事件中同步 <div id"app"><input type"text" v-model.lazy"message"><p>{{ message }}</p> </div> <script>const app new Vue({el:#app,data: {message: }}) </script> //…

ES6-2 塊級作用域與嵌套、let、暫行性死區

注意&#xff0c;寫在開頭 function test(x 1) {var x // 不報錯console.log(x) } function test1(x 1) {let x 10 // 報錯console.log(x) }let的變量名不可以和參數中的名稱相同。而var并不限制&#xff0c;說白了就是希望你規范使用變量名。 形參原則上數組函數內部的臨…