前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ansible学习小记

ansible学习小记

作者头像
渴望飞翔的猪
发布2022-07-17 10:49:49
3520
发布2022-07-17 10:49:49
举报
文章被收录于专栏:葵花宝典007

明天游戏就要上线咯,由于之前的测试都是几台机器,纯手动部署就ok了,现在正式上线十多台机器,要是再一个个手动部署就gg了 ,所以需要一个自动化部署的工具,也就是使用ansbile. 话不多说,也就是看了几天,只能是略了解 ,重点是能把部署的工程自动化跑起来,至于方法好不好的问题,不在讨论范围了,毕竟也不是专业的运维人员

安装

  • 首先安装,关于安装的问题提醒大家一般在网上搜的话,最好看下日期,一般选择比较接近现在的时间的文章参考比较好,我一开始就是按照某篇安装的ansible,步骤很多,现在知道那个全都是手动安装。结果是成功了,但是后来操作发现一个奇怪的错误,网上一堆也找不到解决,一番功夫发现有个人也遇到,结果他安装了2.0的版本发现就没有这个问题了!!!瞬间秒看了自己的安装的版本果然是1.7的老版本,于是怒删之,重新安装,话说有这一番折腾真是把人的耐心磨没了都,后来我是参考了公司另外一个人写的read_me才发现原来安装贼方便。。。
  • 由于系统默认的python2.6是不行的,ansible需要python2.7以上的,所以先安装python 并且处理好yum的配置。
  • python2.7 下载

tar -zxvf Python-2.7.14.tgz ./configure make all make install make clean make distclean 建立软链接,使系统默认的python指向python2.7 mv /usr/bin/python /usr/bin/python2.6.6 ln -s /usr/local/bin/python2.7 /usr/bin/python python -V – 这样就看到已经是python2.7了 因为yum是不兼容 Python 2.7的,所以yum不能正常工作,我们需要指定 yum 的Python版本 vim /usr/bin/yum 将头行指定的解释器 /usr/bin/python 修改为/usr/bin/python2.6.6

  • ansible安装有多种方式,在此是pip安装足够方便了(看到别人使用yum install epel-release -y yum install ansible -y 不过我没试过哈) 安装pip 下载 可以直接右键网页另存为get-pip.py 安装python get-pip.py
  • 安装sshpass下载 这个是为了ssh直接不用密码确认登录的 cd sshpass-1.06/ ./configure make && make install
  • 到这一步就可以直接使用pip安装ansible啦 (看到别人也可以使用yum install epel-release -y yum install ansible -y) pip install ansible

这里ansible就安装完啦,是不是so easy~ 然后在建立一个/etc/ansilbe/hosts文件进行测试咯 其实这是ansible默认读取的位置,后续可以加参数指定hosts文件的。

代码语言:javascript
复制
[test_server]
192.168.0.231 ansible_ssh_user=root ansible_ssh_pass=123456

其中test_server为组,下面那些就是机器节点 组可以用多个 同一个机器节点,可以属于不同的组

根据以上配置,就可以开始测试啦

[root@localhost python]# ansible server -a ‘uptime’ 192.168.0.231 | SUCCESS | rc=0 >> 18:54:26 up 2:51, 3 users, load average: 0.32, 0.26, 0.20 ansible all -m ping也有很多教程都是用这个测试的,all 就是代表所有组,在此可以换成test_server

常用模块

  • command:执行某命令,不能用管道之类的东西,因为其不是用shell执行的,没有shell的那种特性
    • ansible all -m command -a ‘uptime’:所有的机器执行uptime命令
    • ansible all -m command -a ‘chdir /data/ ls’:所有机器执行ls命令,ls的目录是/data

    由于其是默认的模块,是以以上命令也可以简写成ansible all -a 'uptime'

  • shell:使用机器的shell执行
    • ansible all -m shell -a ‘uptime’:所有的机器执行uptime命令
    • ansible all -m shell -a ‘ps -ef|grep nginx’:所有机器执行ps -ef|grep nginx命令
    • *
  • script:到对象节点上执行本地脚本
    • ansible all -m script -a /data/set.sh
  • ping:看看机器能否ping通
    • ansible all -m ping
  • setup:获取机器的配置
    • ansible all -m setup:获取所有机器的配置信息
    • ansible all -m setup –tree /path/to/save:获取机器的配置信息,并且写入到目录path/to/save
  • yum:和机器的yum一样(不要给控制机也yum,否则会报错)
    • ansible all -m yum -a ‘name=nc’:为所有机器yum一个nc
    • ansible all -m yum -a “name=nc state=present”:立刻为所有机器yum一个nc

    调用此命令时候,不要yum中安装有ansilble机器(即ansible控制机),否则会报以下错误 192.168.0.231 | FAILED! => { “changed”: false, “msg”: “python2 bindings for rpm are needed for this module. python2 yum module is needed for this module” }

原因估计ansible这样执行的,/usr/bin/python /usr/bin/yum XXXXX 所以只要是其他机器安装了ansible的,或者修改了/usr/bin/python的版本就会报上面这个错误

  • copy:复制命令
    • ansible all -m copy -a “src=/data/src.txt dest=/data/dest.txt”:将本地的/data/src.txt文件拷贝到所有机器的/data/dest.txt文件中,此处,其会对比文件是否相同,若是相同,则比较文件是否有修改,若是没有修改,则不做事,若是修改,则覆盖之
    • ansible all -m copy -a “src=/data/src.txt dest=/data”:将本地的/data/src.txt文件拷贝到所有机器的/data/文件夹中
    • ansible all -m copy -a “src=/data/ dest=/data”:将本地的/data/目录拷贝到所有机器的/data/文件夹中(文件在路径/data/data/目录里面)

    调用此命令时候,不要将文件也copy到自己的机器(即ansible控制机),否则会报以下错误(尽管你已经安装了libselinux-python) 192.168.0.231 | FAILED! => { “changed”: false, “checksum”: “956f6c7150dcecba1103ecd14c42c5aab83bdd98”, “msg”: “Aborting, target uses selinux but python bindings (libselinux-python) aren’t installed!” }

playbook

实例1
代码语言:javascript
复制
#dep.yml
---
- name: dep
  hosts: all
  remote_user: root
  tasks:
  - name: install zip
    yum : name=zip
    tags:
    - tag1
    - tag2
  - name: install unzip
    yum : name=unzip
  - name: install nc
    yum : name=nc
  - name: install lrzsz
    yum : name=lrzsz

* 运行指令ansible-playbook dep.yml:在所有的机器上面,执行所有tasks * 运行指令ansible-playbook dep.yml -i bitch.hosts:在所有的机器上面,执行所有tasks,其host文件不用默认的/etc/ansible/hosts,而是用bitch.hosts这个hosts文件 * 运行指令ansible-playbook dep.yml --tags tag1,tag2:在所有的机器上面,执行带有tags标志为tag1或者tag2的tasks * hosts: 那些组的机器(即配置文件/etc/ansible/hosts里面的配置) * remote_user:执行远程命令的用户 * tasks:任务,是一个列表 * name:任务名称 * yum:即模块名称,参考上面说的常用模块 * tags:标志,是一个列表,可配置多个

实例2

代码语言:javascript
复制
#include_example.yml
---
- name: bitch
  hosts: all
  remote_user: root
  gather_facts: true
  tasks:
  - name: say hi
    tags: foo
    shell: echo "hi..."

- include: dep.yml #此文件问实例1中的文件
  • 运行指令ansible-playbook include_example.yml:在所有的机器上面,执行所有tasks(包括dep.yml里面的)

实例3

代码语言:javascript
复制
#var_example.yml
---  
- name: copyfile
  hosts: server
  remote_user: root
  vars:
  - ddir: '/data/test_ansible'
  tasks:
  - name: depzip
    yum : name=zip
  - name: newdir
    file: path="{{ddir}}" state=directory
  • 运行指令ansible-playbook var_example.yml:在所有的机器上面,执行所有tasks
  • vars:定义变量ddir,使用方法在{{ddir}}

实例4

  • 文件vars_files_conf.yml

代码语言:javascript
复制
zip_src_file: 'cn.zip'
zip_dest_dir: '/data'

代码语言:javascript
复制
#scp_scheme.yml
---
- name: scp_scheme
  hosts: all
  remote_user: root
  vars_files:
    - vars_files_conf.yml

  tasks:

  - name: scp scheme
    copy: src="{{zip_src_file}}" dest="{{dest_dir}}"
  • 运行指令ansible-playbook scp_scheme.yml:在所有的机器上面,执行所有tasks
  • 通过在一个文件中定义变量,到处使用
  • vars_files:里面定义了两个变量zip_src_file,zip_dest_dir

由于ansible默认的gather_facts 收集主机信息是开的,当批量运行的时候会导致很慢,所以一般把它关掉,执行速度快些。

代码语言:javascript
复制
---
- name: dep_agent
  hosts: '{{host}}'
  user: root
  gather_facts: false
  vars_files:
    - var_conf.yml
  tasks:
  - name: tar
    unarchive: src={{agent_file}} dest={{dest_agent_dir}}
  - name: seq
    script:
         /data/ansible/set_host.sh {{host}}
  - name: start agent
    shell: "nohup /data/agent/bin/falcon-agent -c /data/agent/config/cfg.json > /dev/null 2>&1 &"
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 常用模块
    • playbook
      • 实例1
    • 实例2
      • 实例3
        • 实例4
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档