设为首页 收藏本站
查看: 1038|回复: 0

[经验分享] 我不是九爷 带你了解 ansible

[复制链接]

尚未签到

发表于 2018-7-29 12:46:30 | 显示全部楼层 |阅读模式
<我不是九爷> Ansible
1. 了解什么是ansible
ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:让我们自动化部署APP;自动化管理配置项;自动化的持续交付;自动化的(AWS)云服务管理。  所有的这几个目标本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已。就像我之前有介绍过的Fabric,以及我们基于Fabric开发的自动化应用部署的工具: Essay。都是做了这么个事——批量的在远程服务器上执行命令 。
  那么fabric和ansible有什么差别呢?简单来说fabric像是一个工具箱,提供了很多好用的工具,用来在Remote执行命令,而Ansible则是提供了一套简单的流程,你要按照它的流程来做,就能轻松完成任务。这就像是库和框架的关系一样。
  当然,它们之间也是有共同点的——都是基于 paramiko开发的。这个paramiko是什么呢?它是一个纯Python实现的ssh协议库。因此fabric和ansible还有一个共同点就是不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。
2. 快速安装
  上面简单介绍了下这是个什么东西,怎么安装呢?也很简单,因为ansible是python开发的,因此可以这么安装:
  sudo esay_install ansible
  # 或者
  sudo pip install ansible
  你也可以从github上clone最新版本,然后安装。
  另外需要注意的是,控制服务器(Master)需要安装Python2.6/7,windows上无法使用ansible。被管理的服务器(Managed Node)需要安装Python2.4以上的版本,如果低于2.5,需要安装python-simplejson。
3. 配置
  安装完成之后,先来配置下配置项——.ansible.cfg。ansible执行的时候会按照以下顺序查找配置项:
  * ANSIBLE_CONFIG (环境变量)
  * ansible.cfg (当前目录下)
  * .ansible.cfg (用户家目录下)
  * /etc/ansible/ansible.cfg
  还有一个重要的配置是hosts的配置,所有的远程主机需要在hosts中配置,可以分组。当然hosts也可以执行是指定。先来一个简单的例子,在家目录下新建一个hosts文件:
  # hosts
  [local]
  127.0.0.1
  然后在终端执行:
  $ ansible -i ~/hosts all -a 'who'
  
  # 结果如下:
  127.0.0.1 | success | rc=0 >>
  Guest    console  Feb  1 16:29
  the5fire console  Jan 20 19:50
  the5fire ttys018  Feb 22 15:35  (localhost)
  这是一条ad-hoc命令——临时执行命令,ad-hoc是ansible里的一个概念, 在上面命令中就是 -a ,具体稍后再说。命令中的all是值hoss中的所有服务器,当然也可以通过 ansible -i ~/hosts local -a'who' 这样根据组名指定服务器。
  再说到ansible.cfg的配置,默认ansible执行时会从该配置中加载hosts配置,因此可以通过修改.ansible.cfg来指定默认的hosts文件地址:
  # .ansible.cfg
  [defaults]
  hostfile=/Users/the5fire/hosts
  这样下次执行,就不需要 -i 参数了。
4. Ad-Hoc
  ad hoc——临时的,在ansible中是指需要快速执行,并且不需要保存的命令。说白了就是执行简单的命令——一条命令。对于复杂的命令后面会说playbook。
  那么这个Ad-Hoc命令怎么用呢?上面已经简单的示范了下。在ansible中还有一个Module(模块)的概念,这个模块可以理解为一个库,所有的命令都需要通过模块来执行,比如上面的那个命令: ansible-i ~/hosts all -a 'who' ,其实是调用了默认的command模块: ansible -i ~/hosts all -mcommand -a 'who' ,除了command模块还有其他很多模块,比如你就想ping下这个服务器是不是还存在可以通过ping模块: ansible -i ~/hosts all -m ping 。
  还有几个参数需要记录下:
  -u username  # 指定ssh连接的用户名
  -f 10        # 指定并发数
  --sudo [-K]    #  如果需要root权限执行的话,-K参数是用来输入root密码的
  你可以通过各种模块来批量完成某个包的安装,或者其他什么需要的操作。 更多模块可以看官网文档: modules
  关于Ad-Hoc的更多内容参考这里: intro_adhoc
5. 简单Playbook
  上面的ad hoc是指执行一条临时的不需要保存的命令,那么复杂的命令怎么执行呢?因此也就有了playbook这个命令: ansible-playbook 。
  playbook(剧本),顾名思义,就是需要定义一个脚本或者说配置文件,然后定义好做什么。一个简单的playbook是这样的,把当前用户名输出到whoami.rst文件中:
  # playbook.yml
  ---
  - hosts: local  # hosts中指定
  remote_user: the5fire  # 如果和当前用户一样,则无需指定
  tasks:
  - name: whoami
  shell: 'whoami > whoami.rst'
  执行完这个命令后,你可以在local所代表的服务器的用户目录下发现这么个文件。说道这里,要停一下。这个配置文件是yaml格式的,因此你可能需要去了解下YAML: wiki YAML
  简单解释下上面的playbook,hosts后面根据local是从hosts中读取的,tasks是是关键词,指明了要执行哪些任务;下面的name是任务的名称,shell是前面提到的module(模块),单引号中是命令。
  除了tasks之外,还有一个handlers的命令,handlers是在执行tasks之后服务器发生变化之后可供调用的handler,使用起来如下:
  # playbook.yml
  ---
  - hosts: local  # hosts中指定
  remote_user: the5fire  # 如果和当前用户一样,则无需指定
  tasks:
  - name: whoami
  copy: src=~/hosts dest=~/hosts.dest  #  本地拷贝到远端
  notify:  # 如果copy执行完之后~/hosts.dest文件发送了变化,则执行
  - clear copy  # 调用handler
  handlers:
  - name: clear copy
  shell: 'mv ~/hosts.dest hosts.del'  # 假装删除
  上面只是一个演示,再来一个真实的功能——在local服务器上,从git上clone下来我的blog源码,然后创建虚拟环境,创建数据库,最后运行:
  # deploy-blog-simple.yml
  ---
  - hosts: local  # hosts中指定
  remote_user: the5fire  # 如果和当前用户一样,则无需指定
  tasks:
  - name: check out django_blog
  git: dest=~/demos/django_selfblog repo=https://github.com/the5fire/django_selfblog
  update=yes
  - name: make virtualenv
  shell: 'virtualenv ~/demos'
  - name: install requirements
  pip: requirements=~/demos/django_selfblog/requirements.txt
  virtualenv=~/demos
  - name: init database
  shell: . ./bin/activate && cd django_selfblog/selfblog && ./init_database.sh chdir=~/demos
  - name: run manage.py
  shell: . ./bin/activate && cd django_selfblog/selfblog &&  ./run.sh chdir=~/demos
  如果你已经配置好ssh账户免密码登录之后,直接执行: ansible-playbookdeploy-blog-simple.yml 就可以在你指定的服务器上部署,并启动blog了。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-543064-1-1.html 上篇帖子: ansible.cfg配置详解 下篇帖子: 自动化运维工具ansible源码安装方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表