1、Ansible簡介node
Ansible基於Python語言實現,由paramiko和PyYAML兩個關鍵模塊構建。Ansible的編排引擎能夠出色地完成配置管理,流程控制,資源部署等多方面工做。Ansible公司負責Ansible開源軟件的維護,管理。通常軟件的更新大概每2個月發佈一次(目前版本在2.4)Ansible主要承擔的工做有如下幾種:python
Ansible
與Saltstack
最大的區別是Ansible無需在被控主機部署任何客戶端代理,默認直接經過SSH通道進行遠程命令執行或下發配置:相同點是都具有功能強大、靈活的系統管理、狀態配置,二者都提供豐富的模板及API,對雲計算平臺、大數據都有很好的支持。linux
特色:web
二、Ansible架構及組件說明
shell
一、架構圖:編程
二、Ansible核心組件說明:ruby
Host Lnventory:記錄了每個由Ansible管理的主機信息,信息包括ssh端口,root賬號密碼,ip地址等等。能夠經過file來加載,能夠經過CMDB加載服務器
Playbooks:YAML格式文件,多個任務定義在一個文件中,使用時能夠統一調用,「劇本」用來定義那些主機須要調用那些模塊來完成的功能.babel
Core Modules:Ansible執行任何管理任務都不是由Ansible本身完成,而是由核心模塊完成;Ansible管理主機以前,先調用core Modules中的模塊,而後指明管理Host Lnventory中的主機,就能夠完成管理主機。網絡
Custom Modules:自定義模塊,完成Ansible核心模塊沒法完成的功能,此模塊支持任何語言編寫。
Connection Plugins:鏈接插件,Ansible和Host通訊使用
三、ansible任務執行流程
Ansible針對Ansible服務器對執行操做服務器的操做方式,分爲兩種執行模式:
3、Ansible部署及密鑰分發
一、經過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!
二、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: 1 Now 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節點
3、Ansible命令介紹及配置文件
一、經常使用命令介紹及配置文件
/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:主機清單
二、/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 = False host_key_checking = False ### 檢查對應服務器的host_key (2)[privilege_escalation] (3)[paramiko_connection] (4)[ssh_connection] (5)[accelerate] (6)[selinux] (7)[colors]
三、Ansible主機清單(/etc/ansible/hosts)
四、Ansible使用
一、定義主機清單(/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
二、使用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" }
三、ansible命令的使用說明
經常使用選項
[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被指定爲一個整數,默認是5 specify number of parallel processes to use (default=5) -h, --help show this help message and exit 打開幫助文檔API -i INVENTORY, --inventory-file=INVENTORY 指定庫存主機文件的路徑,默認爲/etc/ansible/hosts specify 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 execute anything 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 調查背景工做每隔數秒。須要- b set 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 su 用 su 命令 -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默認超時時間, 默認是10S override 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的版本
[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的版本號