草庐IT

Ansible 自动化运维

 :T 2024-05-15 原文

一、 Ansible:开源的运维自动化工具,可以提高运维工程师的效率,减少人为失误。操作简单,功能丰富。

     特点:1)基于python开发,易于二次开发 2)丰富的内置模块,基本可以满足一切要求  3)管理模式非常简单 4)无客户端模式,底层通过ssh通信,也不需要代理程序  5)可以应用在大公司环境下。

二、Ansile的角色:

    1、使用者:如何使用Ansible(与Ansible的交互方式)

       CMDB:直接下发指令调用Ansibe工具集完成任务目标

       PUBLIC/PRIVATE:以API调用的方式

       Ad-hoc命令集:通过Ad-hoc命令集调用Ansible工具集完成任务

       Playbooks:根据预先编写好的Ansible Playbooks按序执行任务

    2、Ansible工具集:包含invertory,modules,plugins和API。

       Ansible plakbooks:任务脚本,编排定义Ansible任务集的配置文件,一般为json格式的yml文件

       inventory:管理Ansible设备列表,通过分组管理主机。

       modules: 执行命令的各种模块,任务通过模块执行

       plugins: 附加功能,是模块功能的补充

       API:供第三方调用的应用程序编程接口,便于二次开发

       Ansible:组合上述工具的命令工具,为核心的执行工具

    3、作用对象:linux、windows、各类PUBLIC/PRIVATE网络设施

三、Ansible的配置:inventory是Ansible管理主机信息的配置文件,相当于系统hosts文件的功能,默认存放在/etc/ansible/hosts.可以用-i选项指定在其他文件。在hosts文件中通过分组来组织设备。设备列表支持ip地址和主机名,通过ssh(22端口)管理设备。

四、Ansible命令:

    ansible:大多数维护命令以ansible开头。执行结果有:红色表示执行过程异常、橘黄色代表目标有状态变化、绿色代表执行成功且没有对目标修改

      格式:ansible  主机组  命令选项

          主机组:必须是hosts文件定义的设备组,或者单个ip,all代表所有

          主要选项:-m 指定执行使用的模块   -a 指定模块参数  -l(--limit) 限制运行主机    --list 列出符合条件的主机

     ansible-playbook命令:执行任务的脚本。根据预先编好的yml格式的playbook文件实现集中处理任务。文件中存放执行的任务代码。

        格式:ansible-playbook    .yml文件

五、Ansible的主要模块:

    1、command模块:在远程主机执行命令,不支持管道、重定向特性

    2、shell模块:与command命令相同,可以支持管道和重定向

    3、copy模块:复制指定主机文件到远程主机的指定位置

    4、hostname模块:管理远程主机的主机名

    5、yum模块:基于yum对远程主机管理程序包

    6、service模块:管理远程主机的服务

    7、user模块:管理远程主机的用户账号

六、Playbook配置文件:放置所有任务代码,使用yaml语法,扩展名为.yml或.yaml.可以实现自动化运维,类似任务脚本

    语法通过缩进来展示,通过-来代表项冒号:来分隔键和值,整个文件以- - -开头以...结束。

    playbook文件中可以配置触发器:需要触发才能执行的任务。即之前定义的tasks任务执行成功后触发 handlers(触发器)里的触发任务。

    playbook的tasks文件集中存放在某个目录下,则该目录就是角色。角色一般存放在/etc/ansible/roles中,目录下可以由自定义的各个子目录比如files存放模块调用的文件,tasks存放任务,handlers存放触发器等等

ansible批量管理服务意义
    01. 提高工作的效率
    02. 提高工作准确度
    03. 减少维护的成本
    04. 减少重复性工作
    ansible批量管理服务功能
    01. 可以实现批量系统操作配置
    02. 可以实现批量软件服务部署
    03. 可以实现批量文件数据分发
    04. 可以实现批量系统信息收集

复制代码
①. 管理服务器创建私钥和公钥(密钥对)

②. 将公钥文件远程传送复制到被管理服务器相应用户~/.ssh/id_dsa.pub下,并修改.ssh目录权限为700

③. 修改公钥文件文件名称为authorized_keys,授权权限为600

④. 利用ssh服务配置文件的配置参数,进行识别公钥文件authorized_keys

⑤. 进而实现基于密钥远程登录服务器(免密码登录/非交互方式登录)

 

 

Yum仓库配置:

[name]

name=ggg

baseurl=file:///media/cdrom

enabled=1

gpgcheck=0

[ansible]

name=ldsakl

baseurl=file:///root/ansiblerepo

enabled=1

gpgcheck=0

yum -y install ansible

ansible –version

[root@xiao---tong ~]# createrepo /root/ansiblerepo/

Spawning worker 0 with 108 pkgs

Workers Finished

Saving Primary metadata

Saving file lists metadata

Saving other metadata

Generating sqlite DBs

Sqlite DBs complete

[root@xiao---tong ~]# cd /etc/ansible/

[root@xiao---tong ansible]# ls

ansible.cfg  hosts  roles

[root@xiao---tong ansible]# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Created directory '/root/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:q+vs+wqRtL6WD6C88bcKdfpn4SkeuinNFBt5KWRvMD4 root@xiao---tong

The key's randomart image is:

+---[RSA 2048]----+

|                 |

|   =             |

|  + * .          |

|   E B           |

|  ..%.  S        |

|...=o. . .       |

|.++.+o. +        |

| .=o*B.*         |

| ..B*B#=.        |

+----[SHA256]-----+

[root@xiao---tong ansible]# ls /root/.ssh/

id_rsa  id_rsa.pub

[root@xiao---tong ansible]# ssh-copy-id root@192.168.10.20

[root@xiao---tong ansible]# ssh-copy-id root@192.168.10.30

[root@xiao---tong ansible]# ssh 192.168.10.20

[root@xiao---tong ansible]# ssh 192.168.10.30
vim /etc/ansible/hosts

[gzs]

192.168.10.20

[gao]

192.168.10.30

[root@xiao---tong ansible]# ansible all –m ping

[root@xiao---tong ansible]# ansible gzs –m ping

[root@xiao---tong ansible]# ansible all -f 5 -m ping

[root@xiao---tong ansible]# ansible all –list

[root@xiao---tong ansible]# ansible gzs -m command -a "df -hT"

192.168.10.20 | SUCCESS | rc=0 >>

文件系统                类型      容量  已用  可用 已用% 挂载点

/dev/mapper/centos-root xfs        50G  3.6G   47G    8% /

devtmpfs                devtmpfs  897M     0  897M    0% /dev

tmpfs                   tmpfs     912M     0  912M    0% /dev/shm

tmpfs                   tmpfs     912M   18M  895M    2% /run

tmpfs                   tmpfs     912M     0  912M    0% /sys/fs/cgroup

/dev/sda1               xfs      1014M  179M  836M   18% /boot

/dev/mapper/centos-home xfs        47G   33M   47G    1% /home

tmpfs                   tmpfs     183M  4.0K  183M    1% /run/user/42

tmpfs                   tmpfs     183M   44K  183M    1% /run/user/0

/dev/sr0                iso9660   4.3G  4.3G     0  100% /media/cdrom

IP地址

[root@xiao---tong ansible]# ansible 192.168.10.20 -m command -a "ifconfig ens33"

yum仓库:

[root@xiao---tong ansible]# ansible all -m command -a "cat /etc/yum.repos.d/benet.repo"

更改主机名:

[root@xiao---tong ansible]# ansible 192.168.10.30 -m command -a "hostname AAA"

[root@xiao---tong ansible]# ansible 192.168.10.30 -m command -a "hostname " 查看

root@xiao---tong ansible]# ansible-doc –l

cat /etc/hostname

shell模块:

ansible web -m shell -a 'echo "heelo" >> /tmp/hello.txt'

     ssh 192.168.10.30 cat /tmp/hello.txt

Copy模块:

      ansible web -m copy -a "src=/etc/hosts dest=/tmp mode=777 owner=nobody group=root"

     ssh 192.168.10.30 ls -l /tmp/hosts

     Hostname 模块:

ansible 192.168.10.20 -m hostname -a "name=demo

yum 模块:"

ansible web -m yum -a "name=httpd state=present"

ssh 192.168.10.30 rpm -qa | grep httpd

Service 模块:

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

ansible ssh -m service -a "name=httpd state=started enabled=yes"

ansible gzs -m user -a 'name=user1 system=yes uid=501 group=root groups=sshd shell=/sbin/nologin home=/home/user1 password=user1 comment="test user"'

ssh 192.168.10.20 tail -l /etc/passwd

  ansible web -m user -a 'name=user1 system=yes uid=501 group=root groups=sshd shell=/sbin/nologin home=/home/user1 password=user1 comment="test user"'

[root@demo ~]# vim /etc/ansible/hosts

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftp

grep -v "^#" /etc/vsftpd/vsftpd.ccc > /etc/vsftpd/vsftpd.conf

有关Ansible 自动化运维的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  3. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  4. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  5. ruby - 在 ruby​​ 中使用自动创建插入数组 - 2

    我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?

  6. 【自动驾驶环境感知项目】——基于Paddle3D的点云障碍物检测 - 2

    文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3

  7. ruby-on-rails - 自动完成搜索的 Rails 实现 - 2

    我不确定如何为我的搜索功能添加自动完成表单。"get"do%>nil%>我有一个具有自定义操作的Controllerdefquery@users=Search.user(params[:query])@article=Search.article(params[:query])end模型如下:defself.user(search)ifsearchUser.find(:all,:conditions=>['first_nameLIKE?',"%#{search}%"])elseUser.find(:all)endenddefself.article(search)ifsearchArt

  8. ruby - 如何设置自动测试以仅重新运行失败的 rspec 示例 - 2

    我对自动测试的工作方式的印象(基于cucumbergithubwiki和其他在线内容)是它应该重新运行红色示例,直到它们通过。我的问题是它会重新运行规范文件中找到失败示例的所有示例,包括通过的示例。我不想浪费时间在修复失败示例的同时重新运行通过的示例。是否可以配置自动测试以便仅运行失败的示例? 最佳答案 您需要rspec-retrygem。以下是文档中有关如何实现它的一些示例:将它应用到覆盖整个测试套件的configureblock中...RSpec.configuredo|config|config.verbose_retry=t

  9. ruby - 在多个线程中引用类方法会导致自动加载循环依赖崩溃 - 2

    代码:threads=[]Thread.abort_on_exception=truebegin#throwexceptionsinthreadssowecanseethemthreadseputs"EXCEPTION:#{e.inspect}"puts"MESSAGE:#{e.message}"end崩溃:.rvm/gems/ruby-2.1.3@req/gems/activesupport-4.1.5/lib/active_support/dependencies.rb:478:inload_missing_constant':自动加载常量MyClass时检测到循环依赖稍加研究后,

  10. ruby - 自动将院子文档框架添加到现有的 Rails 遗留代码中 - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭4年前。Improvethisquestion我希望能够将模板化的YARD文档样式注释插入到我现有的Rails遗留应用程序中。目前它的评论很少。我想要具有指定参数的类header和方法header(通过从我假定的方法签名中提取)和返回值的占位符。在PHP代码中,我有一些工具可以检查代码并在适当的位置创建插入到代码中的文档header注释。在带有Ducktyping等的Ruby中,我确信诸如@params等类型之类

随机推荐