ansible入門

ansible 是一款自動(dòng)化運(yùn)維工具磕瓷,由Red Hat公司出品的,能夠解決我們?cè)趇t工作中念逞,一遍又一遍執(zhí)行相同任務(wù)困食。利用它,我們可以只解決一次問題翎承,然后自動(dòng)化運(yùn)行我們的解決方案硕盹。 目前,數(shù)以千計(jì)的公司正在使用簡(jiǎn)單但功能強(qiáng)大的it自動(dòng)化引擎叨咖,我相信它可以幫我們加速完成DevOps計(jì)劃瘩例。

特性:
  • 模塊化:調(diào)用特定的模塊啊胶,完成特定的任務(wù)。
  • 有 Paramiko垛贤、PyYAML焰坪、Jinjia2(模板語言)三個(gè)關(guān)鍵模塊。
  • 支持自定義模塊聘惦。
  • 基于 Python 語言實(shí)現(xiàn)某饰。
  • 部署簡(jiǎn)單,基于 python 和 SSH(默認(rèn)已安裝)善绎,agentless黔漂。
  • 安全,基于 OpenSSH禀酱。
  • 支持 playbook 編排任務(wù)炬守。
  • 冪等性:一個(gè)任務(wù)執(zhí)行1遍和執(zhí)行n遍效果一樣,不因重復(fù)執(zhí)行帶來意外情況比勉。
  • 無需代理不依賴PKI(無需 ssl)
  • 可使用任何編程語言寫模塊劳较。
  • YAML格式驹止,編排任務(wù)浩聋,支持豐富的數(shù)據(jù)結(jié)構(gòu)。
  • 較強(qiáng)大的多層解決方案臊恋。
框架結(jié)構(gòu):
ansible架構(gòu).png
安裝(此處為pip安裝):
# pip 升級(jí)
?  ~ sudo pip3 install --upgrade pip
# 安裝 ansible
?  ~ pip3 install ansible
# 安裝指定版本的 ansible
?  ~ pip3 install ansible==2.1.1
# 查看 pip 安裝 ansible 的詳情
?  ~ pip3 show ansible
Name: ansible
Version: 2.9.10
Summary: Radically simple IT automation
Home-page: https://ansible.com/
Author: Ansible, Inc.
Author-email: info@ansible.com
License: GPLv3+
Location: /Users/jiaflu/Library/Python/3.7/lib/python/site-packages
Requires: PyYAML, cryptography, jinja2
Required-by: 
# 為 ansible 建立軟鏈接
?  ~ ln -s /Users/jiaflu/Library/Python/3.7/bin/ansible /usr/local/bin/
# 驗(yàn)證 ansible 是否安裝成功
?  ~ ansible --version 
ansible 2.9.10
  config file = None
  configured module search path = ['/Users/jiaflu/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/jiaflu/Library/Python/3.7/lib/python/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.7.3 (default, Apr 24 2020, 18:51:23) [Clang 11.0.3 (clang-1103.0.32.62)]
鏈接方式:

(1)基于密碼連接

[root@ansible ~]# vim /etc/ansible/hosts
# 方法一 主機(jī)+端口+密碼
[webserver]
192.168.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
192.168.1.32 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
192.168.1.33 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"
192.168.1.36 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"


# 方法二 主機(jī)+端口+密碼
[webserver]
192.168.1.3[1:3] ansible_ssh_user=root ansible_ssh_pass="123456"


# 方法二 主機(jī)+端口+密碼
[webserver]
192.168.1.3[1:3]
[webserver:vars]
ansible_ssh_pass="123456"

(2)基于秘鑰連接

基于秘鑰連接需要先創(chuàng)建公鑰和私鑰衣洁,并發(fā)送給被管理機(jī)器。

  • 生成公私鑰
[root@ansible ~]# ssh-keygen
[root@ansible ~]# for i in {1,2,3,6}; do ssh-copy-id -i 192.168.1.3$i ; done
  • 配置連接
[root@ansible ~]# vim /etc/ansible/hosts
# 方法一 主機(jī)+端口+密鑰
[webserver]
192.168.1.31:22
192.168.1.32
192.168.1.33
192.168.1.36

# 方法一 別名主機(jī)+端口+密鑰
[webserver]
node1 ansible_ssh_host=192.168.1.31 ansible_ssh_port=22
node2 ansible_ssh_host=192.168.1.32 ansible_ssh_port=22
node3 ansible_ssh_host=192.168.1.33 ansible_ssh_port=22
node6 ansible_ssh_host=192.168.1.36 ansible_ssh_port=22
簡(jiǎn)單使用
  • 列出文件列表
[root@localhost ~]# ansible test -a "ls "
10.225.20.231 | CHANGED | rc=0 >>
password

10.225.20.237 | CHANGED | rc=0 >>
password
  • 測(cè)試機(jī)器是否通
[root@localhost ~]# ansible test -m ping
10.225.20.237 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
10.225.20.231 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
  • 其他命令
# 執(zhí)行遠(yuǎn)程命令
# ansible test -m command -a 'uptime'

# 執(zhí)行主控端腳本
# ansible test -m script -a '/etc/ansible/script/test.sh'

# 執(zhí)行遠(yuǎn)程主機(jī)的腳本
# ansible test -m shell -a 'ps aux|grep zabbix'

# 類似shell
# ansible test -m raw -a "ps aux|grep zabbix|awk '{print \$2}'"

# 創(chuàng)建軟鏈接
# ansible test -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"

# 刪除軟鏈接
# ansible test -m file -a "path=/tmp/resolv.conf state=absent"

# 復(fù)制文件到遠(yuǎn)程服務(wù)器
# ansible test -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"
使用 playbook

playbook 是一種與 adhoc 任務(wù)執(zhí)行模式完全不同的方式抖仅,而且特別強(qiáng)大坊夫。 簡(jiǎn)單地說,playbook 是一個(gè)非常簡(jiǎn)單的配置管理和多機(jī)器部署系統(tǒng)的基礎(chǔ)撤卢,不同于任何已經(jīng)存在的配置系統(tǒng)环凿,而且非常適合部署復(fù)雜應(yīng)用程序。

playbook的核心元素:

  • Hosts:主機(jī)

  • Tasks:任務(wù)列表

  • Variables

  • Templates:包含了模板語法的文本文件

  • Handlers:由特定條件出發(fā)的任務(wù)

  • 任務(wù)分為 service放吩、command智听、shell等

tasks:
  - name: make sure apache is running
    service: name=httpd state=started
    
tasks:
  - name: enable selinux
    command: /sbin/setenforce 1
    
tasks:
  - name: run this command and ignore the result
    shell: /usr/bin/somecommand || /bin/true
    
tasks:
  - name: run this command and ignore the result
    shell: /usr/bin/somecommand
    ignore_errors: True
    
tasks:
    - name: restart everything
      command: echo "this task will restart the web services"
      notify: "restart web services"
  • 例子:使用 playbook 安裝 nginx

寫安裝 nginx 的 sh 腳本 nginx-install.yml

- hosts: test
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: copy nginx-install.sh to client
    copy: src=nginx-install.sh dest=/tmp/nginx-install.sh
  - name: chomd a+x
    shell: chmod +x /tmp/nginx-install.sh
  - name: install nginx
    shell: /tmp/nginx-install.sh

執(zhí)行 ansible-playbook

[shaolei@localhost ~]# ansible-playbook nginx-install.yml 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市渡紫,隨后出現(xiàn)的幾起案子到推,更是在濱河造成了極大的恐慌,老刑警劉巖惕澎,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莉测,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡唧喉,警方通過查閱死者的電腦和手機(jī)捣卤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門忍抽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人董朝,你說我怎么就攤上這事梯找。” “怎么了益涧?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵锈锤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我闲询,道長(zhǎng)久免,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任扭弧,我火速辦了婚禮阎姥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸽捻。我一直安慰自己呼巴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布御蒲。 她就那樣靜靜地躺著衣赶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厚满。 梳的紋絲不亂的頭發(fā)上府瞄,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音碘箍,去河邊找鬼遵馆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛丰榴,可吹牛的內(nèi)容都是我干的货邓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼四濒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼换况!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起峻黍,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤复隆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后姆涩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挽拂,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年骨饿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了亏栈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片台腥。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖绒北,靈堂內(nèi)的尸體忽然破棺而出黎侈,到底是詐尸還是另有隱情,我是刑警寧澤闷游,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布峻汉,位于F島的核電站,受9級(jí)特大地震影響脐往,放射性物質(zhì)發(fā)生泄漏休吠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一业簿、第九天 我趴在偏房一處隱蔽的房頂上張望瘤礁。 院中可真熱鬧,春花似錦梅尤、人聲如沸柜思。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赡盘。三九已至,卻和暖如春矾湃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背邀跃。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛙紫,地道東北人拍屑。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓坑傅,卻偏偏與公主長(zhǎng)得像僵驰,于是被迫代替她去往敵國和親唁毒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒜茴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345