Ansible은 Python을 기반으로 개발되었으며 다양한 운영 및 유지 관리 도구(puppet, cfengine, Chef, func, fabric)의 장점을 통합하여 배치 시스템 구성, 배치를 실현하는 새로운 자동화 운영 및 유지 관리 도구입니다. 프로그램 배포, 일괄 명령 실행 등의 기능.
Ansible 기능:
공식 문서: https://docs.ansible.com/ansible/latest/GitHub 주소: https://github.com/ansible/ansible
위 사진 위 그림에서 볼 수 있듯이 ansible의 기본 아키텍처는 다음과 같은 부분으로 구성됩니다.
위 그림에서 이해할 수 있습니다.
yum install epel-release yum -y install ansible ansible --version
구성 파일: /etc/ansible/ansible.cfg
# 去掉前面的'#'号 #log_path = /var/log/ansible.log ==> log_path = /var/log/ansible.log
# 第一种(推荐) vi /etc/ansible/ansible.cfg # 其实就是把#去掉 # host_key_checking = False==> host_key_checking = False # 第二种 vi /etc/ssh/ssh_config StrictHostKeyChecking ask==> StrictHostKeyChecking no
ansible을 설치한 후 ansible이 총 7가지 명령(ansible, ansible-doc, ansible-galaxy, ansible-lint, ansible-playbook, ansible-pull)을 제공한다는 사실을 발견했습니다. 앤서블 볼트. 여기서는 사용법 부분만 살펴보았으며, 자세한 부분은 "command -h" 방법을 통해 알 수 있다.
ansible은 명령의 핵심 부분으로 주로 ad-hoc 명령, 즉 단일 명령을 실행하는 데 사용됩니다. 기본적으로 호스트와 옵션 부분을 따라야 하며, 기본적으로 모듈을 지정하지 않은 경우에는 명령 모듈을 사용합니다. 단, 기본적으로 사용되는 모듈은 /etc/ansible/ansible.cfg #module_name = command에서 수정할 수 있습니다.
ansible 192.168.182.130 -a 'date'
이 명령은 모듈 정보를 보는 데 사용됩니다. 일반적으로 사용되는 매개 변수는 -l 및 -s입니다.
#列出所有已安装的模块ansible-doc-l ansible-doc-l #查看具体某模块的用法,这里如查看command模块 ansible-doc-s command
ansible-playbook 명령이 가장 일반적으로 사용됩니다. 통과 플레이북 파일을 읽은 후 해당 작업을 수행하는데, 이에 대해서는 나중에 중점적으로 다루겠습니다.
ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yum、python下的pip或easy_install 。如下示例:
ansible-galaxy install aeriscloud.docker
ansible-lint是对playbook的语法进行检查的一个工具。用法如下:
ansible-lint playbook.yml
该指令使用需要谈到ansible的另一种模式,pull 模式,这和我们平常经常用的push模式刚好相反,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装。
注意事项:
# 生成秘钥 ssh-keygen # 将秘钥拷贝到被管理服务器上 ssh-copy-id-i ~/.ssh/id_rsa.pub -p 22 root@192.168.182.130
# -k:交互式 ansible -uroot -k 192.168.182.130 -m ping
# 默认主机配置文件:/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
常用的配置参数如下:
主机清单配置(默认配置文件:/etc/ansible/hosts)
192.168.182.110
示例:
# -m:指定模块 # -a:指定参数 ansible 192.168.182.110 -m ping ansible 192.168.182.110 -m shell -a "df -h"
# 定义webservers组 [webservers] 192.168.182.110 192.168.182.112
示例:
# -m:指定模块 # -a:指定参数 ansible webservers -m ping ansible webservers -m shell -a "df -h"
[webservers] 192.168.182.130 ansible_ssh_user=root ansible_ssh_pass=123456
常用配置参数如下:
示例:
ansible 192.168.182.130 -m ping
[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
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
官方文档:https://docs.ansible.com/ansible/latest/command_guide/intro_adhoc.html
ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令,一般测试调试时用的多,ad-hoc简而言之,就是"临时命令"。
默认模块,没有shell强大,基本上shell模块都可以支持command模块的功能。
【1】帮助
ansible-doc command # 推荐使用下面这个 ansible-doc command -s
【2】参数解释
【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"
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
script模块 [在远程主机执行主控端的shell/python等脚本 ]。
【1】查看帮助
ansible-doc script -s
【2】参数解释
【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"
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}'"
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'
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/"
unarchive 模块是解包模块。
【1】查看帮助
ansible-doc unarchive -s
【2】参数解释
【3】示例演示
ansible 192.168.182.129 -m unarchive -a 'src=/testdir/ansible/data.tar.gz dest=/tmp/tmp/'
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'
【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'
【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'
【1】查看帮助
ansible-doc yum -s
【2】示例演示
# 升级所有包 ansible web -m yum -a 'name="*" state=latest' # 安装apache ansible web -m yum -a 'name="httpd" state=latest'
【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'
【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'
【1】查看帮助
ansible-doc setup -s
【2】示例演示
ansible web -m setup ansible web -m setup -a 'filter=ansible_all_ipv4_addresses'
【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'
【1】查看帮助
ansible-doc hostname -s
【2】示例演示
ansible 192.168.182.129 -m hostname -a 'name=192.168.182.129'
Ansible 的介绍和简单使用就先到这里了,还有一个ansible-playbook是非常重要,内容也是比较多,就放到下篇文章介绍了。
위 내용은 Ansible 소개 및 실제 운영 시연의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!