>  기사  >  운영 및 유지보수  >  Ansible 소개 및 실제 운영 시연

Ansible 소개 및 실제 운영 시연

WBOY
WBOY앞으로
2023-06-09 19:35:44892검색

1. 개요

Ansible은 Python을 기반으로 개발되었으며 다양한 운영 및 유지 관리 도구(puppet, cfengine, Chef, func, fabric)의 장점을 통합하여 배치 시스템 구성, 배치를 실현하는 새로운 자동화 운영 및 유지 관리 도구입니다. 프로그램 배포, 일괄 명령 실행 등의 기능.

Ansible 기능:

  • 배포가 쉽고, 주 제어 측에만 Ansible 환경을 배포하면 되며, 제어 측에서는 어떤 작업도 수행할 필요가 없습니다.
  • SSH 프로토콜은 기본적으로 장치 관리에 사용됩니다.
  • 마스터-슬레이브 중앙 집중식 관리
  • 간단한 구성, 강력하고 확장 가능
  • API 및 사용자 정의 모듈 지원, Python을 통해 쉽게 확장 가능
  • 플레이북을 사용하여 강력한 구성 및 상태 관리 사용자 정의
  • 클라우드 컴퓨팅 플랫폼 및 빅데이터

공식 문서: https://docs.ansible.com/ansible/latest/GitHub 주소: https://github.com/ansible/ansible

2. Ansible 아키텍처

Ansible 介绍与实战操作演示

위 사진 위 그림에서 볼 수 있듯이 ansible의 기본 아키텍처는 다음과 같은 부분으로 구성됩니다.

  • Core: ansible
  • Core Modules: ansible과 함께 제공되는 모듈입니다.
  • Extension 모듈(Custom Modules) : 핵심 모듈이 완료하기에 충분하지 않은 경우 특정 기능의 경우 확장 모듈을 추가할 수 있습니다.
  • 플러그인: 모듈 기능을 완성하기 위한 보충 자료
  • 스크립트(플레이북): 스크립트에서 여러 작업을 정의하는 ansible의 작업 구성 파일 및 ansible
  • Connect 플러그인(Connectior Plugins)에 의해 자동으로 실행됩니다. ansible은 연결 플러그인을 기반으로 각 호스트에 연결하지만, ansible은 ssh를 사용하여 각 호스트에 연결하지만 다른 연결 방법도 지원하므로 연결 플러그인은 다음과 같습니다. in이 필요합니다.
  • 호스트 인벤토리: ansible에 의해 관리되는 호스트 정의

3. Ansible 작동 원리

Ansible 介绍与实战操作演示

위 그림에서 이해할 수 있습니다.

  • 관리 터미널은 세 가지 방법을 지원합니다. 관리되는 터미널에 연결하기 위한 local, ssh 및 zeromq에서는 기본적으로 ssh 기반 연결이 사용됩니다. 이 부분은 위 아키텍처 다이어그램의 연결 모듈에 해당합니다.
  • 호스트 인벤토리는 애플리케이션 유형 등에 따라 분류될 수 있습니다. 관리 노드는 다양한 모듈을 통해 해당 작업을 구현합니다. 단일 명령의 일괄 실행은 임시라고 할 수 있습니다.
  • 관리 노드는 플레이북을 사용하여 일종의 기능을 구현하는 여러 작업을 구현할 수 있습니다. , 웹 서비스 설치 및 배포, 데이터베이스 서버 일괄 백업 등 플레이북은 단순히 여러 임시 작업을 결합하여 시스템이 작동하는 구성 파일로 이해할 수 있습니다.

4. Ansible 설치 및 기본 구성

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

Ansible 介绍与实战操作演示

1) 로깅 켜기

구성 파일: /etc/ansible/ansible.cfg

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

2) 첫 번째 연결 제거 SSH 확인 요청

# 第一种(推荐)
vi /etc/ansible/ansible.cfg
# 其实就是把#去掉
# host_key_checking = False==> host_key_checking = False

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

Ansible 介绍与实战操作演示

5. Ansible의 7가지 명령

ansible을 설치한 후 ansible이 총 7가지 명령(ansible, ansible-doc, ansible-galaxy, ansible-lint, ansible-playbook, ansible-pull)을 제공한다는 사실을 발견했습니다. 앤서블 볼트. 여기서는 사용법 부분만 살펴보았으며, 자세한 부분은 "command -h" 방법을 통해 알 수 있다.

1) ansible

ansible은 명령의 핵심 부분으로 주로 ad-hoc 명령, 즉 단일 명령을 실행하는 데 사용됩니다. 기본적으로 호스트와 옵션 부분을 따라야 하며, 기본적으로 모듈을 지정하지 않은 경우에는 명령 모듈을 사용합니다. 단, 기본적으로 사용되는 모듈은 /etc/ansible/ansible.cfg #module_name = command에서 수정할 수 있습니다.

ansible 192.168.182.130 -a 'date'

2) ansible-doc

이 명령은 모듈 정보를 보는 데 사용됩니다. 일반적으로 사용되는 매개 변수는 -l 및 -s입니다.

#列出所有已安装的模块ansible-doc-l
ansible-doc-l
#查看具体某模块的用法,这里如查看command模块
ansible-doc-s command

3) ansible-playbook

ansible-playbook 명령이 가장 일반적으로 사용됩니다. 통과 플레이북 파일을 읽은 후 해당 작업을 수행하는데, 이에 대해서는 나중에 중점적으로 다루겠습니다.

4)ansible-galaxy

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

ansible-galaxy install aeriscloud.docker

5)ansible-lint

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

ansible-lint playbook.yml

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

2)账号密码

1、命令行配置

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

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

常用的配置参数如下:

Ansible 介绍与实战操作演示

八、Host Inventory(主机清单)

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

1)添加被管控节点

192.168.182.110

示例:

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

Ansible 介绍与实战操作演示

2)配置主机组

# 定义webservers组
[webservers]
192.168.182.110
192.168.182.112

示例:

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

Ansible 介绍与实战操作演示

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

[webservers]
192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456

常用配置参数如下:

Ansible 介绍与实战操作演示

示例:

ansible 192.168.182.130 -m ping

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

示例:

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

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

示例:

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

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

【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"

2、shell 模块

shell模块 [执行远程主机的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模块 [在远程主机执行主控端的shell/python等脚本 ]。

【1】查看帮助

ansible-doc script -s

【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"

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 模块 从主控端复制文件到被控端。

【1】查看帮助

ansible-doc copy -s

【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'

6、fetch 模块

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

【1】查看帮助

ansible-doc fetch -s

【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/"

7、unarchive 模块(解包模块)

unarchive 模块是解包模块。

【1】查看帮助

ansible-doc unarchive -s

【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/'

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】示例演示

# 创建用户(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'

10、group 模块

【1】查看帮助

ansible-doc group -s

【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'

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】示例演示

# 创建文件
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'

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】示例演示

# 创建定时任务
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'

16、hostname 模块

【1】查看帮助

ansible-doc hostname -s

【2】示例演示

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

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

위 내용은 Ansible 소개 및 실제 운영 시연의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제