偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Ansible 介紹與實(shí)戰(zhàn)操作演示

運(yùn)維
Ansible是新出現(xiàn)的自動化運(yùn)維工具,基于Python開發(fā),集合了眾多運(yùn)維工具(puppet、cfengine、chef、func、fabric)的優(yōu)點(diǎn),實(shí)現(xiàn)了批量系統(tǒng)配置、批量程序部署、批量運(yùn)行命令等功能。

一、概述

Ansible是新出現(xiàn)的自動化運(yùn)維工具,基于Python開發(fā),集合了眾多運(yùn)維工具(puppet、cfengine、chef、func、fabric)的優(yōu)點(diǎn),實(shí)現(xiàn)了批量系統(tǒng)配置、批量程序部署、批量運(yùn)行命令等功能。

Ansible 特點(diǎn):

  • 部署簡單,只需要在主控端部署Ansible環(huán)境,被控端無需作任何操作
  • 默認(rèn)使用SSH協(xié)議對設(shè)備進(jìn)行管理
  • 主從集中化管理
  • 配置簡單、功能強(qiáng)大、擴(kuò)展性強(qiáng)
  • 支持API及自定義模塊、可以通過Python輕松擴(kuò)展
  • 通過Playbooks來定制強(qiáng)大的配置、狀態(tài)管理
  • 對云計(jì)算平臺、大數(shù)據(jù)都有很好的支持

官方文檔:https://docs.ansible.com/ansible/latest/GitHub地址:https://github.com/ansible/ansible

二、Ansible 架構(gòu)

圖片

上圖為ansible的基本架構(gòu),從上圖可以了解到其由以下部分組成:

  • 核心:ansible
  • 核心模塊(Core Modules):這些都是ansible自帶的模塊
  • 擴(kuò)展模塊(Custom Modules):如果核心模塊不足以完成某種功能,可以添加擴(kuò)展模塊
  • 插件(Plugins):完成模塊功能的補(bǔ)充
  • 劇本(Playbooks):ansible的任務(wù)配置文件,將多個任務(wù)定義在劇本中,由ansible自動執(zhí)行
  • 連接插件(Connectior Plugins):ansible基于連接插件連接到各個主機(jī)上,雖然ansible是使用ssh連接到各個主機(jī)的,但是它還支持其他的連接方法,所以需要有連接插件
  • 主機(jī)清單(Host Inventory):定義ansible管理的主機(jī)

三、Ansible 工作原理

圖片

從上面的圖上可以了解到:

  • 管理端支持local 、ssh、zeromq 三種方式連接被管理端,默認(rèn)使用基于ssh的連接,這部分對應(yīng)上面架構(gòu)圖中的連接模塊;
  • 可以按應(yīng)用類型等方式進(jìn)行Host Inventory(主機(jī)清單)分類,管理節(jié)點(diǎn)通過各類模塊實(shí)現(xiàn)相應(yīng)的操作,單個模塊,單條命令的批量執(zhí)行,我們可以稱之為ad-hoc;
  • 管理節(jié)點(diǎn)可以通過playbooks 實(shí)現(xiàn)多個task的集合實(shí)現(xiàn)一類功能,如web服務(wù)的安裝部署、數(shù)據(jù)庫服務(wù)器的批量備份等。playbooks我們可以簡單的理解為,系統(tǒng)通過組合多條ad-hoc操作的配置文件 。

四、Ansible 安裝與基礎(chǔ)配置

yum install epel-release
yum -y install ansible
ansible --version

圖片

1)開啟記錄日志

配置文件:/etc/ansible/ansible.cfg

# 去掉前面的'#'
#log_path = /var/log/ansible.log ==> log_path = /var/log/ansible.log

2)去掉第一次連接ssh ask確認(rèn)

# 第一種(推薦)
vi /etc/ansible/ansible.cfg
# 其實(shí)就是把#去掉
# host_key_checking = False ==> host_key_checking = False

# 第二種
vi /etc/ssh/ssh_config
StrictHostKeyChecking ask ==> StrictHostKeyChecking no

圖片

五、Ansible 的七個命令

安裝完ansible后,發(fā)現(xiàn)ansible一共為我們提供了七個指令:ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault。這里我們只查看usage部分,詳細(xì)部分可以通過 "指令 -h" 的方式獲取。

1)ansible

ansible是指令核心部分,其主要用于執(zhí)行ad-hoc命令,即單條命令。默認(rèn)后面需要跟主機(jī)和選項(xiàng)部分,默認(rèn)不指定模塊時,使用的是command?模塊。不過默認(rèn)使用的模塊是可以在/etc/ansible/ansible.cfg? 中進(jìn)行修改的#module_name = command。

ansible 192.168.182.130 -a 'date'

2)ansible-doc

該指令用于查看模塊信息,常用參數(shù)有兩個-l 和 -s

#列出所有已安裝的模塊ansible-doc  -l
ansible-doc -l
#查看具體某模塊的用法,這里如查看command模塊
ansible-doc -s command

3)ansible-playbook

ansible-playbook 命令是使用最多的指令,其通過讀取playbook 文件后,執(zhí)行相應(yīng)的動作,這個后面會做為一個重點(diǎn)來講。

4)ansible-galaxy

ansible-galaxy 指令用于方便的從https://galaxy.ansible.com/ 站點(diǎn)下載第三方擴(kuò)展模塊,我們可以形象的理解其類似于centos下的yum、python下的pip或easy_install 。如下示例:

ansible-galaxy install aeriscloud.docker

5)ansible-lint

ansible-lint是對playbook的語法進(jìn)行檢查的一個工具。用法如下:

ansible-lint playbook.yml

6)ansible-pull

該指令使用需要談到ansible的另一種模式,pull 模式,這和我們平常經(jīng)常用的push模式剛好相反,其適用于以下場景:你有數(shù)量巨大的機(jī)器需要配置,即使使用非常高的線程還是要花費(fèi)很多時間;你要在一個沒有網(wǎng)絡(luò)連接的機(jī)器上運(yùn)行Anisble,比如在啟動之后安裝。

7)ansible-vault

  • ansible-vault 主要應(yīng)用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以幫你加密/解密這個配置文件,屬高級用法。
  • 主要對于playbooks里比如涉及到配置密碼或其他變量時,可以通過該指令加密,這樣我們通過cat看到的會是一個密碼串類的文件,編輯的時候需要輸入事先設(shè)定的密碼才能打開。
  • 這種playbook文件在執(zhí)行時,需要加上 --ask-vault-pass參數(shù),同樣需要輸入密碼后才能正常執(zhí)行。

六、Ansible 主要組成部分

1)ansible 命令執(zhí)行來源

  • USER,普通用戶,即system administrator
  • USER -> ansile playbook -> ansible
  • CMDB,(配置管理數(shù)據(jù)庫)API調(diào)用
  • PUBLIC / PRIVATE CLOUD API調(diào)用

2)ansible 管理方式

  • Ad-Hoc,即ansible命令,主要用于臨時命令使用場景
  • Ansible-playbook?,主要用于長期規(guī)劃好的,大型項(xiàng)目的場景,需要有前提的規(guī)劃ansible-playbook(劇本)執(zhí)行過程:
  • 將已有編排好的任務(wù)集寫入ansible-playbook
  • 通過ansible-playbook命令分拆任務(wù)集至逐條ansible命令,按預(yù)定規(guī)則逐條執(zhí)行

3)ansible主要操作對象

  • HOSTS:主機(jī)
  • NETWORKING:網(wǎng)絡(luò)設(shè)備

注意事項(xiàng):

  • 執(zhí)行ansible的主機(jī)一般稱為主控端,中控,master或堡壘機(jī)
  • 主控端python版本需要在2.6或以上
  • 被控端python版本小于2.4需要安裝python-simplejson
  • 被控端如開啟SELinux需要安裝libselinux-python
  • windows不能作為主控端

七、Ansible 連接被控端方式

1)ssh 密鑰

# 生成秘鑰
ssh-keygen
# 將秘鑰拷貝到被管理服務(wù)器上
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 root@192.168.182.130

2)賬號密碼

1、命令行配置

# -k:交互式
ansible -uroot -k 192.168.182.130 -m ping

2、配置文件中配置

# 默認(rèn)主機(jī)配置文件:/etc/ansible/hosts
192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456

[web]
192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456

常用的配置參數(shù)如下:

圖片

八、Host Inventory(主機(jī)清單)

主機(jī)清單配置(默認(rèn)配置文件:/etc/ansible/hosts)

1)添加被管控節(jié)點(diǎn)

192.168.182.110

示例:

# -m:指定模塊
# -a:指定參數(shù)
ansible 192.168.182.110 -m ping
ansible 192.168.182.110 -m shell -a "df -h"

圖片

2)配置主機(jī)組

# 定義webservers組
[webservers]
192.168.182.110
192.168.182.112

示例:

# -m:指定模塊
# -a:指定參數(shù)
ansible webservers -m ping
ansible webservers -m shell -a "df -h"

圖片

3)配置連接用戶名和密碼

[webservers]
192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456

常用配置參數(shù)如下:

圖片

示例:

ansible 192.168.182.130 -m ping

圖片

4)子分組

[web]
192.168.182.130
192.168.182.110
[mysql]
192.168.182.111
# 子分組
[nfs:children]
web
mysql
# 對分組統(tǒng)一定義變量
[nfs:vars]
ansible_ssh_user=root
ansible_ssh_pass=123456
ansible_ssh_port=22

示例:

ansible nfs -m ping
# -o:一行顯示
ansible nfs -m ping -o

圖片

5)自定義主機(jī)列表文件

cat>hostlist<<EOF
[web]
192.168.182.130
192.168.182.110
[mysql]
192.168.182.111
# 子分組
[nfs:children]
web
mysql
# 對分組統(tǒng)一定義變量
[nfs:vars]
ansible_ssh_user=root
ansible_ssh_pass=123456
ansible_ssh_port=22
EOF

示例:

# -i:指定主機(jī)列表文件
ansible -i hostlist nfs -m ping

圖片

九、Ad-Hoc(點(diǎn)對點(diǎn)模式)

官方文檔:https://docs.ansible.com/ansible/latest/command_guide/intro_adhoc.html

1)簡介

ad-hoc 命令是一種可以快速輸入的命令,而且不需要保存起來的命令,一般測試調(diào)試時用的多,ad-hoc簡而言之,就是"臨時命令"。

2)常用模塊

1、command 模塊(默認(rèn)模塊)

默認(rèn)模塊,沒有shell強(qiáng)大,基本上shell模塊都可以支持command模塊的功能。

【1】幫助

ansible-doc command
# 推薦使用下面這個
ansible-doc command -s

【2】參數(shù)解釋

  • free_form——必須參數(shù),指定需要遠(yuǎn)程執(zhí)行的命令。需要說明一點(diǎn),free_form 參數(shù)與其他參數(shù)(如果想要使用一個參數(shù),那么則需要為這個參數(shù)賦值,也就是name=value模式)并不相同。比如,當(dāng)我們想要在遠(yuǎn)程主機(jī)上執(zhí)行 ls 命令時,我們并不需要寫成”free_form=ls” ,這樣寫反而是錯誤的,因?yàn)椴]有任何參數(shù)的名字是 free_form,當(dāng)我們想要在遠(yuǎn)程主機(jī)中執(zhí)行 ls 命令時,直接寫成 ls 即可。因?yàn)?command 模塊的作用是執(zhí)行命令,所以,任何一個可以在遠(yuǎn)程主機(jī)上執(zhí)行的命令都可以被稱為 free_form。
  • chdir——此參數(shù)的作用就是指定一個目錄,在執(zhí)行對應(yīng)的命令之前,會先進(jìn)入到 chdir 參數(shù)指定的目錄中。
  • creates——看到 creates,你可能會從字面上理解這個參數(shù),但是使用這個參數(shù)并不會幫助我們創(chuàng)建文件,它的作用是當(dāng)指定的文件存在時,就不執(zhí)行對應(yīng)命令,比如,如果 /testdir/test文件存在,就不執(zhí)行我們指定的命令。
  • removes——與 creates 參數(shù)的作用正好相反,它的作用是當(dāng)指定的文件不存在時,就不執(zhí)行對應(yīng)命令,比如,如果 /testdir/tests 文件不存在,就不執(zhí)行我們指定的命令,此參數(shù)并不會幫助我們刪除文件。

【3】示例演示

# 上面命令表示在 web 主機(jī)上執(zhí)行 ls 命令,因?yàn)槭褂玫氖?root 用戶,所以默認(rèn)情況下,ls 出的結(jié)果是 web 主機(jī)中 root 用戶家目錄中的文件列表。
ansible web -m command -a "ls"

# chdir 參數(shù)表示執(zhí)行命令之前,會先進(jìn)入到指定的目錄中,所以上面命令表示查看 web 主機(jī)上 /testdir 目錄中的文件列表,返回顯示有2個文件。
ansible web -m command -a "chdir=/testdir ls"

# 下面命令表示 /testdir/testfile1 文件存在于遠(yuǎn)程主機(jī)中,則不執(zhí)行對應(yīng)命令。/testdir/testfile3 不存在,才執(zhí)行”echo test”命令。
ansible web -m command -a "creates=/testdir/testfile1 echo test"

# 下面命令表示 /testdir/testfile3 文件不存在于遠(yuǎn)程主機(jī)中,則不執(zhí)行對應(yīng)命令。/testdir/testfile1 存在,才執(zhí)行”echo test”命令。
ansible web -m command -a "removes=/testdir/testfile1 echo test"

2、shell 模塊

shell模塊 [執(zhí)行遠(yuǎn)程主機(jī)的shell/python等腳本]。

【1】查看幫助

ansible-doc shell -s

【2】示例演示

# -o:一行顯示
# 安裝httpd
ansible web -m shell -a 'yum -y install httpd' -o

# 查看時間
ansible web -m shell -a 'uptime' -o

3、script 模塊

script模塊 [在遠(yuǎn)程主機(jī)執(zhí)行主控端的shell/python等腳本 ]。

【1】查看幫助

ansible-doc script -s

【2】參數(shù)解釋

  • free_form——必須參數(shù),指定需要執(zhí)行的腳本,腳本位于 ansible 管理主機(jī)本地,并沒有具體的一個參數(shù)名叫 free_form,具體解釋請參考 command 模塊。
  • chdir——此參數(shù)的作用就是指定一個遠(yuǎn)程主機(jī)中的目錄,在執(zhí)行對應(yīng)的腳本之前,會先進(jìn)入到 chdir 參數(shù)指定的目錄中。
  • creates——使用此參數(shù)指定一個遠(yuǎn)程主機(jī)中的文件,當(dāng)指定的文件存在時,就不執(zhí)行對應(yīng)腳本,可參考 command 模塊中的解釋。
  • removes——使用此參數(shù)指定一個遠(yuǎn)程主機(jī)中的文件,當(dāng)指定的文件不存在時,就不執(zhí)行對應(yīng)腳本,可參考 command 模塊中的解釋。

【3】示例演示

# 下面命令表示 ansible 主機(jī)中的 /testdir/testscript.sh 腳本將在 web 主機(jī)中執(zhí)行,執(zhí)行此腳本之前,會先進(jìn)入到 web 主機(jī)中的 /opt 目錄
ansible web -m script -a "chdir=/opt /testdir/testscript.sh"

# 下面命令表示,web主機(jī)中的 /testdir/testfile1文件已經(jīng)存在,ansible 主機(jī)中的 /testdir/testscript.sh 腳本將不會在 web 主機(jī)中執(zhí)行。
ansible web -m script -a "creates=/testdir/testfile1 /testdir/testscript.sh"

# 下面命令表示,web 主機(jī)中的 /testdir/testfile1 文件存在,ansible 主機(jī)中的 /testdir/testscript.sh 腳本則會在 web 主機(jī)中執(zhí)行。
ansible ansible-demo3 -m script -a "removes=/testdir/testfile1 /testdir/testscript.sh"

4、raw 模塊

raw模塊 [類似于command模塊、支持管道傳遞]。

【1】查看幫助

ansible-doc raw -s

【2】示例演示

ansible web -m raw -a "ifconfig eth0 |sed -n 2p |awk '{print \$2}' |awk -F: '{print \$2}'"

5、copy 模塊

copy 模塊 從主控端復(fù)制文件到被控端。

【1】查看幫助

ansible-doc copy -s

【2】示例演示

# -a,--args:后面接參數(shù)
ansible web -m copy -a 'src=/etc/ansible/hosts dest=/tmp/hosts owner=root group=bin mode=777'

# backup=yes/no:文件存在且文件內(nèi)容不一樣是否備份,默認(rèn)不備份
ansible web -m copy -a 'src=/etc/ansible/hosts dest=/tmp/hosts owner=root group=bin mode=777 backup=yes'

6、fetch 模塊

copy 模塊從被控端復(fù)制文件到主控端,正好跟copy相反。

【1】查看幫助

ansible-doc fetch -s

【2】示例演示

# 跟copy支持的參數(shù)差不多,src:遠(yuǎn)端主機(jī)的目錄,dest:主控端目錄,其實(shí)真正存放的目錄在:/tmp/192.168.182.129/tmp/up.sh,會按每臺主機(jī)分組存放
# This `must' be a file, not a directory:只支持單個文件獲取
ansible 192.168.182.129 -m fetch -a "src=/etc/fstab dest=/testdir/ansible/"

7、unarchive 模塊(解包模塊)

unarchive 模塊是解包模塊。

【1】查看幫助

ansible-doc unarchive -s

【2】參數(shù)解釋

  • copy——默認(rèn)為yes,當(dāng)copy=yes,那么拷貝的文件是從ansible主機(jī)復(fù)制到遠(yuǎn)程主機(jī)上的,如果設(shè)置為copy=no,那么會在遠(yuǎn)程主機(jī)上尋找src源文件。
  • src——源路徑,可以是ansible主機(jī)上的路徑,也可以是遠(yuǎn)程主機(jī)上的路徑,如果是遠(yuǎn)程主機(jī)上的路徑,則需要設(shè)置copy=no。
  • dest——遠(yuǎn)程主機(jī)上的目標(biāo)路徑。
  • mode——設(shè)置解壓縮后的文件權(quán)限。

【3】示例演示

ansible 192.168.182.129 -m unarchive -a 'src=/testdir/ansible/data.tar.gz dest=/tmp/tmp/'

8、archive模塊(打包模塊)

unarchive 模塊是打包模塊。

【1】查看幫助

ansible-doc archive -s

【2】示例演示

# path:主控端目錄,format:壓縮格式,dest:被控端目錄文件'
ansible 192.168.182.129 -m archive -a 'path=/tmp/ format=gz dest=/tmp/tmp/t.tar.gz'

9、user 模塊

【1】查看幫助

ansible-doc user -s

【2】示例演示

# 創(chuàng)建用戶(present:默認(rèn),可以不寫)
ansible web -m user -a 'name=test state=present'

# 刪除用戶(absent)
ansible web -m user -a 'name=test state=absent'

# 修改密碼
# 步驟一、生成加密密碼
echo '777777'|openssl passwd -1 -stdin

# 步驟二、修改秘密
ansible web -m user -a 'name=test password="$1$Jo5FD9Jr$2QB.BuybbtR35ga4O5o8N."'

# 修改shell
ansible web -m user -a 'name=test shell=/sbin/noglogin append=yes'

10、group 模塊

【1】查看幫助

ansible-doc group -s

【2】示例演示

# 創(chuàng)建
ansible 192.168.182.129 -m group -a 'name=testgroup system=yes'
# 刪除
ansible 192.168.182.129 -m group -a 'name=testgroup state=absent'

11、yum 模塊

【1】查看幫助

ansible-doc yum -s

【2】示例演示

# 升級所有包
ansible web -m yum -a 'name="*" state=latest'

# 安裝apache
ansible web -m yum -a 'name="httpd" state=latest'

12、service 模塊

【1】查看幫助

ansible-doc service -s

【2】示例演示

ansible web -m service -a 'name=httpd state=started'

ansible web -m service -a 'name=httpd state=started enabled=yes'

ansible web -m service -a 'name=httpd state=stopped'

ansible web -m service -a 'name=httpd state=restarted'

ansible web -m service -a 'name=httpd state=started enabled=no'

13、file 模塊

【1】查看幫助

ansible-doc file -s

【2】示例演示

# 創(chuàng)建文件
ansible web -m file -a 'path=/tmp/88.txt mode=777 state=touch'

# 創(chuàng)建目錄
ansible web -m file -a 'path=/tmp/99 mode=777 state=directory'

# 刪除
ansible web -m file -a 'path=/tmp/99 state=absent'

14、setup 模塊

【1】查看幫助

ansible-doc setup -s

【2】示例演示

ansible web -m setup

ansible web -m setup -a 'filter=ansible_all_ipv4_addresses'

15、cron 模塊

【1】查看幫助

ansible-doc cron -s

【2】示例演示

# 創(chuàng)建定時任務(wù)
ansible 192.168.182.129 -m cron -a 'minute=* weekday=1,3,5,6,7 job="/usr/bin/wall FBI warning" name=warningcron'

# 關(guān)閉定時任務(wù)
ansible 192.168.182.129 -m cron -a 'disabled=true job="/usr/bin/wall FBI warning" name=warningcron'

# 刪除定時任務(wù)
ansible 192.168.182.129 -m cron -a ' job="/usr/bin/wall FBI warning" name=warningcron state=absent'

16、hostname 模塊

【1】查看幫助

ansible-doc hostname -s

【2】示例演示

ansible 192.168.182.129 -m hostname -a 'name=192.168.182.129'

Ansible 的介紹和簡單使用就先到這里了,還有一個ansible-playbook是非常重要,內(nèi)容也是比較多,就放到下篇文章介紹了。

責(zé)任編輯:武曉燕 來源: 大數(shù)據(jù)與云原生技術(shù)分享
相關(guān)推薦

2023-01-26 23:59:24

Ansibleplaybook列表

2023-09-05 07:02:25

開源工具應(yīng)用程序

2023-03-27 07:43:35

2010-07-01 14:52:42

Linux grep命

2023-08-07 01:25:39

2024-03-12 09:50:27

Raft協(xié)議KRaft

2022-08-30 15:29:51

crictlnerdctl命令

2013-11-14 10:27:54

2010-12-24 14:12:00

umask命令

2009-11-16 10:49:43

PHP上傳文件代碼

2009-11-09 13:12:14

WCF事物操作

2023-02-03 08:18:01

2023-08-08 00:11:57

命令行工具查詢

2012-10-11 17:03:32

IBMdw

2022-11-22 13:00:38

2022-12-13 09:01:50

云原生組件數(shù)據(jù)

2010-06-02 13:22:18

MySQL定時任務(wù)

2010-06-04 09:33:28

連接MySQL數(shù)據(jù)庫

2010-09-13 17:45:37

2010-06-02 14:42:57

MySQL四舍五入
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號