未来自动化应是智能、自主的自动化。自动化管理是帮助企业、高质量、高效率完成持续交付的关键。
内容介绍
小黄同学公司接到了一个时间紧、任务碎的小程序项目,吃紧到加班度日、每天抱着电脑在家办公。工作紧张有序,安排穿插互通:需求、开发、测试、部署、上线、运维、验证、新需求…。他跟我说另外一家公司居然已经拿下二十多个省份市场了,我们省内却还未全面推广铺开。我没有过多的议论。但是,我心想:人要有敬畏之心,抱有空杯的心态。技术和业务才是核心,代码只是实现的工具之一。
最近,最喜欢发的表情包就是:除了喝水啃馒头,也要悟其奥妙,取其精髓。
- P1 ansible 参考
- P2 gitlab 完成,私服上架
- P3 jenkins 参考
- P4 docker 参考
- P5 harbor 参考
- P6 k8s 参考
配置自动化
我们企业会用到的,开发、测试、运维整体有效的衔接。运维自动化应用场景
包括了:
- 操作系统预备自动化;
- 配置自动化【本篇重点】;
- 监控自动化[系统与应用监控、日志监控];
- 代码持续集成与代码持续发布自动。
一、配置自动化场景
配置自动化可以帮助企业在大量服务器存在的情况下,快速实现应用部署、软件配置,提高效率等关键利器。通过配置自动化优势在于:
- 提高配置效率 ,服务器太多我们人力有限
- 提高配置的准确性,
- 减低人工参与度,节约成本
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协议进行连接操作。
安装步骤
- 安装epel-release YUM源
yum -y install epel-release
- 安装ansible
yum -y isntall ansible
- 验证
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(用于把本机文件/夹复制到远程主机)
- 配置自动化场景以及好处