Neurohazard
暮雲煙月,皓首窮經;森羅萬象,如是我聞。

自动化运维与 Ansible 初步

wpadmin~August 5, 2018 /System Management

自动化运维与 Ansible 初步

常见自动化运维工具

Ansible
Puppet (Ruby)
Saltstack (Python) 2011
Chef
Cfengine
Fabric
func

现代流行

Ansible 2012
Puppet
Saltstack (正在逐步替代 Puppet)

Ansible 的特点

Agentless
Stupied Simple
SSH by default
YAML no code

Ansible 的使用场景

若干环境

1 Dev 研发测试环境
使用者 R&A, SDE
功能
管理者 研发
2 测试环境
使用者 QA
功能
备注
(1) 测试环境有多套,多产品线并发,多个版本同步测试
(2) 测试环境满足测试功能即可,不宜过多
管理者 运维
3 发布环境 (代码发布机/堡垒机)
使用者 运维
功能 发布代码至生产环境
管理者 运维
备注
通常系统有2台发布机(主备)
4 生产环境
使用者 运维 特殊情况下允许开发访问
功能 对外提供服务
5 灰度环境 (生产环境的一部分)
使用者 运维
功能 α/β 测试, A/B 测试, 灰度测试
案例 有 100 台服务器, 先发布 10 台服务器, 这 10 台即为 灰度服务器。

发布流程

1 git init
2 git pull
3 周边模块加载
4 打包
5 分发
6 备份 DB
7 更新
8 restart 服务

Ansible 基本架构

优势 Agentless

Core Modules
Custom Modules
Connector Plugins
Plugins # Email, logging
Playbook (剧本)

远程连接
ssh
zeromq/0mq

安装

# epel
sudo yum install -y ansible
# 查看安装的文件
rpm -ql ansible

# 被管理主机列表
/etc/ansible/hosts

基本使用

ansible -i /etc/ansible/hosts <group_name> -u root -m command -a "ls -al /home" -k
ansible -i /etc/ansible/hosts all -u root -m command -a "ls -al /home" -k
ansible -i /etc/ansible/hosts webserver -u root -m command -a "ls -al /home" -k

# -i 被管理主机列表
# -u 用户
# -m module
# -a module arguments
# -k 提示输入密码

# 核心命令
ansible
ansible-doc
ansible-console
ansible-console all --step
ansible-galaxy search tomcat
ansible-galaxy install alexanderjardim.tomcat
ansible-playbook

# 查看所有模块
ansible-doc -l 
# 查看模块具体参数
ansible-doc -s <module_name>
ansible-doc -s command

简单说明一下配置文件 host inventory

# /etc/ansible/hosts
[test]
172.10.5.201
172.10.5.[202:299]
172.10.5.301 ansible_ssh_user=root ansible_ssh_port=65422


[production]
wwwa.company.com
wwwb.company.com
db.company.com
172.10.16.138
ansible_ssh_private_key_file=/home/fred/.ssh/id_rsa bastion

[mfs:children]
mfs_master
mfs_logger
mfs_node
mfs_client

[mfs_master]
172.10.5.201

[mfs_logger]
172.10.5.202

[mfs_node]
172.10.5.203
172.10.5.204
172.10.5.205

[mfs_client]
172.10.5.206
172.10.5.207

[all:vars]
ansible_ssh_pass=ansible_test

建议使用 ssh_key 认证

常用模块


ansible icbm -m setup -k ansible icbm -m ping ansible all -m ping -k -o ansible all -m ping -k --list-hosts ansible test -a 'hostname' -k -vvvv # file ansible-doc -s file # 创建软链接 ansile test -m file -a "src=/etc/fstab dest=/tmp/fastab state=link" # 删除文件 ansile test -m file -a "path=/tmp/fstab state=absent" # 创建文件 ansile test -m file -a "path=/tmp/test state=touch" # 创建目录 ansible mfs_node -m file -a "path=/tmp/dir_test state=directory owner=root group=root mode=777" # copy ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=root group=root mode=755 backup=yes" # command ansible test -m command -a # 相比于 command , 更多的支持了 pipe ansible-doc -s shell ansible mfs_node -m shell -a "ps -ef | grep rpcbind" ansible mfs_node -m raw -a "ps -ef | grep rpcbind" # service ansible mfs_node -m service -a 'name=nginx state=started enable=yes' # cron ansible all -m cron -a 'name="reboot system" hour=2 user=root job="/sbin/reboot"' sudo ansible all -m cron -a 'name="reboot system" hour=2 user=root job="/sbin/reboot"' -k ansible all -m command -a 'crontab -l' sudo ansible all -m command -a 'crontab -l' -k ansible all -m cron -a 'name="reboot system" hour=2 user=root job="/sbin/reboot" state=absent' sudo ansible all -m cron -a 'name="reboot system" hour=2 user=root job="/sbin/reboot" state=absent' -k # yum # 远程部署 yum 源 ansible all -m copy -a "src=/etc/yum.repos.d/163.repo dest=/etc/yum.repos.d/163.repo" ansible all -m yum -a "name=httpd state=installed" ansible all -m service -a "name=httpd state=started"

参考资料

自动化运维-Ansible视频课程
http://edu.51cto.com/course/2220.html
http://edu.51cto.com/center/course/lesson/index?id=42068
http://edu.51cto.com/center/course/lesson/index?id=42065

【Ansible自动化】7小时带领你使用Ansible自动化一切操作
https://www.bilibili.com/video/av25424954/?p=3

Ansible 常用模块
http://blog.51cto.com/breezey/1555530

Introduction to Ansible Playbooks (and demonstration)

Leave a Reply

Your email address will not be published. Required fields are marked *