Heim > Betrieb und Instandhaltung > Sicherheit > Ansible-Einführung und praktische Betriebsdemonstration

Ansible-Einführung und praktische Betriebsdemonstration

WBOY
Freigeben: 2023-06-09 19:35:44
nach vorne
975 Leute haben es durchsucht

1. Übersicht

Ansible ist ein neues automatisiertes Betriebs- und Wartungstool. Es wurde auf Basis von Python entwickelt und integriert die Vorteile vieler Betriebs- und Wartungstools (Puppe, Cfengine, Chef, Func, Fabric), um die Batch-Systemkonfiguration zu realisieren Programmbereitstellung, Funktionen wie das Ausführen von Befehlen in Stapeln.

Ansible-Funktionen:

  • Einfache Bereitstellung, Sie müssen nur die Ansible-Umgebung auf der Hauptsteuerungsseite bereitstellen und die kontrollierte Seite muss keine Vorgänge ausführen
  • Das SSH-Protokoll wird standardmäßig zur Verwaltung des Geräts verwendet
  • Zentralisierte Master-Slave-Verwaltung
  • Einfache Konfiguration, leistungsstark und skalierbar
  • Unterstützt API und benutzerdefinierte Module, kann problemlos über Python erweitert werden
  • Verwenden Sie Playbooks, um leistungsstarke Konfigurations- und Statusverwaltung anzupassen
  • Hat gute Unterstützung für Cloud-Computing-Plattformen und Big Data

Offizielles Dokument: https://docs.ansible.com/ansible/latest/GitHub-Adresse: https://github.com/ansible/ansible

2 Ansible-Architektur

Ansible 介绍与实战操作演示

Das obige Bild zeigt die grundlegende Architektur von Ansible. Wie Sie auf dem Bild oben sehen können, besteht es aus den folgenden Teilen:

  • Kern: Ansible
  • Kernmodule: Dies sind die Module, die mit Ansible geliefert werden
  • Erweiterungsmodule (benutzerdefinierte Module) : Wenn das Kernmodul nicht ausreicht, um bestimmte Funktionen abzuschließen, können Sie Erweiterungsmodule hinzufügen.
  • Plugins: Eine Ergänzung zur Vervollständigung der Modulfunktion wird automatisch von Ansible ausgeführt
  • Connect-Plug-Ins (Connectior-Plug-Ins): Ansible stellt eine Verbindung zu jedem Host basierend auf Verbindungs-Plug-Ins her. Obwohl Ansible SSH verwendet, um eine Verbindung zu jedem Host herzustellen, unterstützt es auch andere Verbindungsmethoden, sodass ein Verbindungs-Plug-In möglich ist. in ist erforderlich
  • Host-Inventar: Definition Von Ansible verwaltete Hosts
  • 3. Ansible-Arbeitsprinzip

Ansible 介绍与实战操作演示

Aus dem obigen Bild können wir verstehen:

Das Verwaltungsterminal unterstützt drei Methoden Für die Verbindung mit dem verwalteten Terminal wird standardmäßig die SSH-basierte Verbindung verwendet. Dieser Teil entspricht dem Verbindungsmodul im obigen Architekturdiagramm.
  • Host-Inventar kann nach Anwendungstyp und anderen Methoden klassifiziert werden. und der Verwaltungsknoten implementiert entsprechende Vorgänge über verschiedene Module. Die Stapelausführung eines einzelnen Befehls kann als Ad-hoc bezeichnet werden.
  • Der Verwaltungsknoten kann Playbooks verwenden, um eine Sammlung mehrerer Aufgaben zu implementieren, um einen Funktionstyp zu implementieren , wie die Installation und Bereitstellung von Webdiensten, Batch-Backup von Datenbankservern usw. Wir können Playbooks einfach als Konfigurationsdateien verstehen, die das System durch die Kombination mehrerer Ad-hoc-Vorgänge betreibt. 4. Ansible-Installation und Grundkonfiguration 5. Sieben Befehle von Ansible Ansible-Tresor. Hier betrachten wir nur den Verwendungsteil, und der detaillierte Teil kann über die Methode „command -h“ abgerufen werden.
  • 1) ansible

ansible ist der Kernteil des Befehls, der hauptsächlich zum Ausführen von Ad-hoc-Befehlen, also eines einzelnen Befehls, verwendet wird. Standardmäßig müssen die Host- und Optionsteile befolgt werden. Wenn das Modul nicht standardmäßig angegeben ist, wird das Befehlsmodul verwendet. Das standardmäßig verwendete Modul kann jedoch im Befehl /etc/ansible/ansible.cfg #module_name = geändert werden.

yum install epel-release
yum -y install ansible
ansible --version
Nach dem Login kopieren

2) ansible-docAnsible 介绍与实战操作演示

Dieser Befehl wird zum Anzeigen von Modulinformationen verwendet. Die am häufigsten verwendeten Parameter sind -l und -s

# 去掉前面的'#'号
#log_path = /var/log/ansible.log ==> log_path = /var/log/ansible.log
Nach dem Login kopieren

3) ansible-playbook Pässe Führen Sie nach dem Lesen der Playbook-Datei die entsprechende Aktion aus, die später erläutert wird.

4)ansible-galaxy

ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yum、python下的pip或easy_install 。如下示例:

ansible-galaxy install aeriscloud.docker
Nach dem Login kopieren

5)ansible-lint

ansible-lint是对playbook的语法进行检查的一个工具。用法如下:

ansible-lint playbook.yml
Nach dem Login kopieren

6)ansible-pull

该指令使用需要谈到ansible的另一种模式,pull 模式,这和我们平常经常用的push模式刚好相反,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装。

7)ansible-vault

  • ansible-vault 主要应用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。
  • 主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的会是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。
  • 这种playbook文件在执行时,需要加上 --ask-vault-pass参数,同样需要输入密码后才能正常执行。

六、Ansible 主要组成部分

1)ansible 命令执行来源

  • USER,普通用户,即system administrator
  • USER -> ansile playbook -> ansible
  • CMDB,(配置管理数据库)API调用
  • PUBLIC / PRIVATE CLOUD API调用

2)ansible 管理方式

  • Ad-Hoc,即ansible命令,主要用于临时命令使用场景
  • Ansible-playbook​,主要用于长期规划好的,大型项目的场景,需要有前提的规划ansible-playbook(剧本)执行过程:
  • 将已有编排好的任务集写入ansible-playbook
  • 通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行

3)ansible主要操作对象

  • HOSTS:主机
  • NETWORKING:网络设备

注意事项:

  • 执行ansible的主机一般称为主控端,中控,master或堡垒机
  • 主控端python版本需要在2.6或以上
  • 被控端python版本小于2.4需要安装python-simplejson
  • 被控端如开启SELinux需要安装libselinux-python
  • windows不能作为主控端

七、Ansible 连接被控端方式

1)ssh 密钥

# 生成秘钥
ssh-keygen
# 将秘钥拷贝到被管理服务器上
ssh-copy-id-i ~/.ssh/id_rsa.pub -p 22 root@192.168.182.130
Nach dem Login kopieren

2)账号密码

1、命令行配置

# -k:交互式
ansible -uroot -k 192.168.182.130 -m ping
Nach dem Login kopieren

2、配置文件中配置

# 默认主机配置文件:/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
Nach dem Login kopieren

常用的配置参数如下:

Ansible 介绍与实战操作演示

八、Host Inventory(主机清单)

主机清单配置(默认配置文件:/etc/ansible/hosts)

1)添加被管控节点

192.168.182.110
Nach dem Login kopieren

示例:

# -m:指定模块
# -a:指定参数
ansible 192.168.182.110 -m ping
ansible 192.168.182.110 -m shell -a "df -h"
Nach dem Login kopieren

Ansible 介绍与实战操作演示

2)配置主机组

# 定义webservers组
[webservers]
192.168.182.110
192.168.182.112
Nach dem Login kopieren

示例:

# -m:指定模块
# -a:指定参数
ansible webservers -m ping
ansible webservers -m shell -a "df -h"
Nach dem Login kopieren

Ansible 介绍与实战操作演示

3)配置连接用户名和密码

[webservers]
192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456
Nach dem Login kopieren

常用配置参数如下:

Ansible 介绍与实战操作演示

示例:

ansible 192.168.182.130 -m ping
Nach dem Login kopieren

Ansible 介绍与实战操作演示

4)子分组

[web]
192.168.182.130
192.168.182.110
[mysql]
192.168.182.111
# 子分组
[nfs:children]
web
mysql
# 对分组统一定义变量
[nfs:vars]
ansible_ssh_user=root
ansible_ssh_pass=123456
ansible_ssh_port=22
Nach dem Login kopieren

示例:

ansible nfs -m ping
# -o:一行显示
ansible nfs -m ping -o
Nach dem Login kopieren

Ansible 介绍与实战操作演示

5)自定义主机列表文件

cat>hostlist<<EOF
[web]
192.168.182.130
192.168.182.110
[mysql]
192.168.182.111
# 子分组
[nfs:children]
web
mysql
# 对分组统一定义变量
[nfs:vars]
ansible_ssh_user=root
ansible_ssh_pass=123456
ansible_ssh_port=22
EOF
Nach dem Login kopieren

示例:

# -i:指定主机列表文件
ansible -i hostlist nfs -m ping
Nach dem Login kopieren

Ansible 介绍与实战操作演示

九、Ad-Hoc(点对点模式)

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

1)简介

ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令,一般测试调试时用的多,ad-hoc简而言之,就是"临时命令"。

2)常用模块

1、command 模块(默认模块)

默认模块,没有shell强大,基本上shell模块都可以支持command模块的功能。

【1】帮助

ansible-doc command
# 推荐使用下面这个
ansible-doc command -s
Nach dem Login kopieren

【2】参数解释

  • free_form——必须参数,指定需要远程执行的命令。需要说明一点,free_form 参数与其他参数(如果想要使用一个参数,那么则需要为这个参数赋值,也就是name=value模式)并不相同。比如,当我们想要在远程主机上执行 ls 命令时,我们并不需要写成”free_form=ls” ,这样写反而是错误的,因为并没有任何参数的名字是 free_form,当我们想要在远程主机中执行 ls 命令时,直接写成 ls 即可。因为 command 模块的作用是执行命令,所以,任何一个可以在远程主机上执行的命令都可以被称为 free_form。
  • chdir——此参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到 chdir 参数指定的目录中。
  • creates——看到 creates,你可能会从字面上理解这个参数,但是使用这个参数并不会帮助我们创建文件,它的作用是当指定的文件存在时,就不执行对应命令,比如,如果 /testdir/test文件存在,就不执行我们指定的命令。
  • removes——与 creates 参数的作用正好相反,它的作用是当指定的文件不存在时,就不执行对应命令,比如,如果 /testdir/tests 文件不存在,就不执行我们指定的命令,此参数并不会帮助我们删除文件。

【3】示例演示

# 上面命令表示在 web 主机上执行 ls 命令,因为使用的是 root 用户,所以默认情况下,ls 出的结果是 web 主机中 root 用户家目录中的文件列表。
ansible web -m command -a "ls"

# chdir 参数表示执行命令之前,会先进入到指定的目录中,所以上面命令表示查看 web 主机上 /testdir 目录中的文件列表,返回显示有2个文件。
ansible web -m command -a "chdir=/testdir ls"

# 下面命令表示 /testdir/testfile1 文件存在于远程主机中,则不执行对应命令。/testdir/testfile3 不存在,才执行”echo test”命令。
ansible web -m command -a "creates=/testdir/testfile1 echo test"

# 下面命令表示 /testdir/testfile3 文件不存在于远程主机中,则不执行对应命令。/testdir/testfile1 存在,才执行”echo test”命令。
ansible web -m command -a "removes=/testdir/testfile1 echo test"
Nach dem Login kopieren

2、shell 模块

shell模块 [执行远程主机的shell/python等脚本]。

【1】查看帮助

ansible-doc shell -s
Nach dem Login kopieren

【2】示例演示

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

# 查看时间
ansible web -m shell -a 'uptime' -o
Nach dem Login kopieren

3、script 模块

script模块 [在远程主机执行主控端的shell/python等脚本 ]。

【1】查看帮助

ansible-doc script -s
Nach dem Login kopieren

【2】参数解释

  • free_form——必须参数,指定需要执行的脚本,脚本位于 ansible 管理主机本地,并没有具体的一个参数名叫 free_form,具体解释请参考 command 模块。
  • chdir——此参数的作用就是指定一个远程主机中的目录,在执行对应的脚本之前,会先进入到 chdir 参数指定的目录中。
  • creates——使用此参数指定一个远程主机中的文件,当指定的文件存在时,就不执行对应脚本,可参考 command 模块中的解释。
  • removes——使用此参数指定一个远程主机中的文件,当指定的文件不存在时,就不执行对应脚本,可参考 command 模块中的解释。

【3】示例演示

# 下面命令表示 ansible 主机中的 /testdir/testscript.sh 脚本将在 web 主机中执行,执行此脚本之前,会先进入到 web 主机中的 /opt 目录
ansible web -m script -a "chdir=/opt /testdir/testscript.sh"

# 下面命令表示,web主机中的 /testdir/testfile1文件已经存在,ansible 主机中的 /testdir/testscript.sh 脚本将不会在 web 主机中执行。
ansible web -m script -a "creates=/testdir/testfile1 /testdir/testscript.sh"

# 下面命令表示,web 主机中的 /testdir/testfile1 文件存在,ansible 主机中的 /testdir/testscript.sh 脚本则会在 web 主机中执行。
ansible ansible-demo3 -m script -a "removes=/testdir/testfile1 /testdir/testscript.sh"
Nach dem Login kopieren

4、raw 模块

raw模块 [类似于command模块、支持管道传递]。

【1】查看帮助

ansible-doc raw -s
Nach dem Login kopieren

【2】示例演示

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

5、copy 模块

copy 模块 从主控端复制文件到被控端。

【1】查看帮助

ansible-doc copy -s
Nach dem Login kopieren

【2】示例演示

# -a,--args:后面接参数
ansible web -m copy -a 'src=/etc/ansible/hosts dest=/tmp/hosts owner=root group=bin mode=777'

# backup=yes/no:文件存在且文件内容不一样是否备份,默认不备份
ansible web -m copy -a 'src=/etc/ansible/hosts dest=/tmp/hosts owner=root group=bin mode=777 backup=yes'
Nach dem Login kopieren

6、fetch 模块

copy 模块从被控端复制文件到主控端,正好跟copy相反。

【1】查看帮助

ansible-doc fetch -s
Nach dem Login kopieren

【2】示例演示

# 跟copy支持的参数差不多,src:远端主机的目录,dest:主控端目录,其实真正存放的目录在:/tmp/192.168.182.129/tmp/up.sh,会按每台主机分组存放
#This `must' be a file, not a directory:只支持单个文件获取
ansible 192.168.182.129 -m fetch -a "src=/etc/fstab dest=/testdir/ansible/"
Nach dem Login kopieren

7、unarchive 模块(解包模块)

unarchive 模块是解包模块。

【1】查看帮助

ansible-doc unarchive -s
Nach dem Login kopieren

【2】参数解释

  • copy——默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件。
  • src——源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no。
  • dest——远程主机上的目标路径。
  • mode——设置解压缩后的文件权限。

【3】示例演示

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

8、archive模块(打包模块)

unarchive 模块是打包模块。

【1】查看帮助

ansible-doc archive -s
Nach dem Login kopieren

【2】示例演示

# path:主控端目录,format:压缩格式,dest:被控端目录文件'
ansible 192.168.182.129 -m archive -a 'path=/tmp/ format=gz dest=/tmp/tmp/t.tar.gz'
Nach dem Login kopieren

9、user 模块

【1】查看帮助

ansible-doc user -s
Nach dem Login kopieren

【2】示例演示

# 创建用户(present:默认,可以不写)
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'
Nach dem Login kopieren

10、group 模块

【1】查看帮助

ansible-doc group -s
Nach dem Login kopieren

【2】示例演示

# 创建
ansible 192.168.182.129 -m group -a 'name=testgroup system=yes'
# 删除
ansible 192.168.182.129 -m group -a 'name=testgroup state=absent'
Nach dem Login kopieren

11、yum 模块

【1】查看帮助

ansible-doc yum -s
Nach dem Login kopieren

【2】示例演示

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

# 安装apache
ansible web -m yum -a 'name="httpd" state=latest'
Nach dem Login kopieren

12、service 模块

【1】查看帮助

ansible-doc service -s
Nach dem Login kopieren

【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'
Nach dem Login kopieren

13、file 模块

【1】查看帮助

ansible-doc file -s
Nach dem Login kopieren

【2】示例演示

# 创建文件
ansible web -m file -a 'path=/tmp/88.txt mode=777 state=touch'

# 创建目录
ansible web -m file -a 'path=/tmp/99 mode=777 state=directory'

# 删除
ansible web -m file -a 'path=/tmp/99 state=absent'
Nach dem Login kopieren

14、setup 模块

【1】查看帮助

ansible-doc setup -s
Nach dem Login kopieren

【2】示例演示

ansible web -m setup

ansible web -m setup -a 'filter=ansible_all_ipv4_addresses'
Nach dem Login kopieren

15、cron 模块

【1】查看帮助

ansible-doc cron -s
Nach dem Login kopieren

【2】示例演示

# 创建定时任务
ansible 192.168.182.129 -m cron -a 'minute=* weekday=1,3,5,6,7 job="/usr/bin/wall FBI warning" name=warningcron'

# 关闭定时任务
ansible 192.168.182.129 -m cron -a 'disabled=true job="/usr/bin/wall FBI warning" name=warningcron'

# 删除定时任务
ansible 192.168.182.129 -m cron -a ' job="/usr/bin/wall FBI warning" name=warningcron state=absent'
Nach dem Login kopieren

16、hostname 模块

【1】查看帮助

ansible-doc hostname -s
Nach dem Login kopieren

【2】示例演示

ansible 192.168.182.129 -m hostname -a 'name=192.168.182.129'
Nach dem Login kopieren

Ansible 的介绍和简单使用就先到这里了,还有一个ansible-playbook是非常重要,内容也是比较多,就放到下篇文章介绍了。

Das obige ist der detaillierte Inhalt vonAnsible-Einführung und praktische Betriebsdemonstration. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage