自动化系列-ansible配置自动化

未来自动化应是智能、自主的自动化。自动化管理是帮助企业、高质量、高效率完成持续交付的关键。

内容介绍

小黄同学公司接到了一个时间紧、任务碎的小程序项目,吃紧到加班度日、每天抱着电脑在家办公。工作紧张有序,安排穿插互通:需求、开发、测试、部署、上线、运维、验证、新需求…。他跟我说另外一家公司居然已经拿下二十多个省份市场了,我们省内却还未全面推广铺开。我没有过多的议论。但是,我心想:人要有敬畏之心,抱有空杯的心态。技术和业务才是核心,代码只是实现的工具之一。

最近,最喜欢发的表情包就是:除了喝水啃馒头,也要悟其奥妙,取其精髓。

配置自动化

我们企业会用到的,开发、测试、运维整体有效的衔接。运维自动化应用场景
包括了:

  • 操作系统预备自动化;
  • 配置自动化【本篇重点】;
  • 监控自动化[系统与应用监控、日志监控];
  • 代码持续集成与代码持续发布自动。

一、配置自动化场景

配置自动化可以帮助企业在大量服务器存在的情况下,快速实现应用部署、软件配置,提高效率等关键利器。通过配置自动化优势在于:

  • 提高配置效率 ,服务器太多我们人力有限
  • 提高配置的准确性,
  • 减低人工参与度,节约成本

ansible的优点

  • 容易上手,学习门槛低,安装执行快,不需要安装agent
  • 可进行批量命令和模块扩展,操作完全依赖ssh
  • 基于Python语言,编程基础易学且简单
  • 可读性强(采用YAML格式)
  • ansible结合Docker、Mesos、Puppet、Vagrant、Saltstack等系统可以构建出非常好的自动化运维平台。

ansible的缺点

  • 没有依赖管理功能
  • 被管理的服务器达到一定数量时,执行效率会大大降低。(task任务是串行运行,多台设备同时运行一个task,有并发数限制)
  • 对win系统的目前不支持(服务端无法安装在win)

二、配置自动化产品

序号 工具 描述
1 ansible 开箱即用,使用ssh协议
2 saltstack 需要agent端配合,配置部署速度快
3 puppet 老牌配置自动化工具,需要agent端配置

三、ansible介绍

ansible概括:无主无从架构,开箱即用个,用完即走。

3.1 工作原理图

3.2 ansible安装

ansible只需要在ansible controller节点(操作机)安装即可,其他节点可以通过SSH协议进行连接操作。

安装步骤

  1. 安装epel-release YUM源
yum -y install epel-release
  1. 安装ansible
yum -y isntall ansible
  1. 验证
rpm -qa | grep ansible

3.3 主机清单

3.3.1 主机清单作用

ansible controller在对主机进行操作时,仅认主机清单中定义的主机列表,即从主机清单中读取到主机列表时,才可以进行配置

  • 用于ansible controller配置主机读取主机清单列表
  • 实现主机分组

3.3.2 主机清单定义方法

主机清单存储位置

vi /etc/ansible/hosts

方法一

直接在主机清单文件中写入主机IP地址或主机名(需要能够解析)

192.xx.xx.11
#或
web1

方法二

在主机清单文件中添加主机分组,然后把主机IP或者主机名写入分组内即可。

[webgroup]
192.xx.xx.11

#或
[webgroup]
web1

四、ansible应用案例

4.1 使用ansible ping模块实现测试主机互通性

场景

通过工单系统接到运维经理下发的任务:准备三台服务器用于开发人员项目上线使用。当准备好3台服务器后,现需要了解主机之间的连通性是否正确,想到使用ansible模块对主机之间的连通性进行测试。那么应该如何实现呢?

步骤

第1步:实现多主机之间免密登录

#在ansible controller生产密钥
[root@lucky ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ''
[root@lucky ~]# ls /root/.ssh/
authorized_keys  id_rsa  id_rsa.pub
#实现密钥同步
[root@lucky ~]# ssh-copy-id 远程主机名称

Number of key(s) added: 1

Now try logging into the machine, with: “ssh ‘47.xxx.xx.118’”
and check to make sure that only the key(s) you wanted were added.

验证是否成功,通过ssh,退出exit回到原来服务器上

[root@lucky ~]#  ssh 47.xxx.xx.118
Last login: Thu Feb 13 20:04:44 2020 from 183.xxx.xxx.201

Welcome to Alibaba Cloud Elastic Compute Service !

[root@blockgo ~]# exit
logout
Connection to 47.xxx.xxx.118 closed.
[root@lucky ~]# 

第2步:定义主机清单

#主机清单文件存储位置
/etc/ansible/hosts

#主机清单文件中添加主机
[root@lucky ~]# cat /etc/ansible/hosts
192.168.0.1

第3 步:ping模块使用

#ansible 命令格式

[root@lucky ~]# ansible 主机清单中IP或分支名称 -m 模块

#ping模块应用

[root@lucky ~]# ansible 47.xxx.xx.118 -m ping

#输出结果
47.xxx.xx.118 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

4.1 使用ansible cron模块实现配置多主机时间同步

场景

在实现多主机互通测试后,考虑到可能需要对服务器进行时间同步的操作,以避免开发人员上线项目后因主机间时间不同步,导致的应用不可用的情况发生,决定使用ansible cron模块对主机进行时间周期性同步。

步骤

第1步:选择时钟源服务器

  • 国内建议使用阿里时钟源 time1.aliyun.com
  • 国际建议使用微软时钟源 time.windows.com
[root@lucky ~]# ntpdate time1.aliyun.com
13 Feb 20:31:15 ntpdate[18724]: the NTP socket is in use, exiting

第2步:cron模块使用

#ansible 命令格式

[root@lucky ~]# ansible 主机清单中IP或分组名称 -m 模块 -a "参数"

#cron模块应用

[root@lucky ~]# ansible 47.xxx.xx.118 -m cron -a 'name="test cron1" job="ntpdate time1.aliyun.com" minute=0 hour=*/1'
#每小时与时钟源同步一次,返回结果:
47.xx.xx.118 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "test cron1"
    ]
}


#远程主机结果,原先是no crontab for root,上面执行之后,出现test cron1
[root@blockgo ~]#  crontab -l
no crontab for root
[root@blockgo ~]# crontab -l
#Ansible: test cron1
0 */1 * * * ntpdate time1.aliyun.com

4.2 使用ansible copy模块实现多主机配置文件同步

场景

对上述主机进行时间同步后,接运维经理工单下发任务特别强调,上述准备的先运行在公司内部网络中,待稳定性测试后,再转至托管机房,因此需要在项目上线测试时,提供项目中域名解析工作,为为简化运维复杂度,建议直接使用主机本地解析文件来完成域名解析工作。

步骤

第1步:准备本地域名解析文件

[root@lucky ~]# cat /opt/my_test.txt
hello test_ansible file copy service 2

第2步:copy模块使用

#ansible 命令格式

[root@lucky ~]# ansible 主机清单中IP或分组名称 -m 模块 -a "参数"

#copy模块应用
[root@lucky opt]# ansible 47.xxx.xx.118 -m copy -a "src=/opt/my_test.txt dest=/opt/my_test.txt"
47.105.58.118 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "3d1457c06b921a6x6101d7aa6b567ddfe1b6f9cd", 
    "dest": "/opt/my_test.txt", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "2bb17552a9de314c44x5dbd34a93e37b", 
    "mode": "0644", 
    "owner": "root", 
    "size": 40, 
    "src": "/root/.ansible/tmp/ansible-tmp-1581598446.04-46400555525003/source", 
    "state": "file", 
    "uid": 0
}

#远程主机验证
[root@blockgo opt]# cat my_test.txt 

hello test_ansible file copy service 2

五、笔记总结

  • 配置自动化总结
    • 配置自动化场景以及好处
      • 场景:大量应用部署时
      • 好处:提高效率、提高准确性、减低用工成本
    • 配置自动化产品
      • ansible:无主无从架构;开箱即用,用完即走;ssh;
      • saltstack:agent
      • puppet:agent
    • ansible
      • 工作原理:模块、主机清单
      • 安装:epel-release;ansible
      • 主机清单:直接录入IP或主机名;主机分组再录入
      • 应用案例:ping(用于实现主机联通性测试);cron(用于定义周期性计划任务);copy(用于把本机文件/夹复制到远程主机)
发布了83 篇原创文章 · 获赞 24 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/u010638673/article/details/104349548