Ansible配置部署
运维工程师核心职能
平台架构组建: 搭建运维平台架构,负责架构设计的合理性和可维护性
日常运营保障: 负责保障运维软件稳定运行,对期间出现的问题快速定位并解决
性能优化: 使用自动化程序提升工程效率,优化程序性能
企业实际应用场景
Dev开发环境: 程序员的开发测试环境,部署开发软件
测试环境: QA测试工程师测试软件的功能和性能,判断是否达到项目的预期目标,生成测试报告
预发布环境: 使用和生产环境一样的数据库,缓存服务等配置,测试是否正常
发布环境: 由代码发布机或堡垒机发布代码至生产环境
生产环境: 对用户提供服务,由运维工程师负责
灰度环境: 为保险起见先让部分用户体验功能,没有重大问题的时候,再全量发布至所有服务器
程序发布过程:
1. 在调度器上下线一批主机(标记为maintenance 状态)
2. 关闭服务
3. 部署新版本的应用程序
4. 启动服务
5. 在调度器上启用这一批服务器
自动化运维应用场景
文件传输
应用部署
配置管理
任务流编排
Ansible 特性
Ansible: 通过ssh协议,实现对远程主机的配置管理、应用部署、任务执行等功能
模块化: 调用特定的模块完成特定任务
基于python语言实现
安全性: 基于openssh
幂等性: 一个任务执行一次和多次效果一样,不因重复执行带来意外情况
支持playbook 编排任务,以YAML格式
Ansible注意事项与文件
执行Ansible的主机一般称为主控端,中控,堡垒机
主控端python版本需要2.6以上
被控端Python版本小于2.4,需要安装python-simplejson
windows不能成为主控端
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
[defaults]
#inventory=/etc/ansible/hosts #主机列表配置文件
#remote_tmp=$HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp=$HOME/.ansible/tmp #本机的临时命令执行目录
#forks=5 #默认并发数
#sudo_user=root #默认sudo 用户
#ask_sudo_pass=True #每次执行ansible命令是否询问ssh密码
#ask_pass=True
#remote_port=22
host_key_checking = False #检查对应服务器的host_key,建议取消注释
log_path=/var/log/ansible.log #日志文件,建议启用
module_name = shell #默认模块,可以修改为shell模块
/etc/ansible/hosts 主机列表
#注: 目标主机使用了非默认的SSH端口,需要使用冒号加端口号来标明
[appsrvs]
10.0.0.[1:100] #表示1-100的值
192.168.57.130
192.168.57.133
Ansible安装
基于epel源安装
vim /etc/yum.repos.d/epel.repo
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
yum install ansible
编译安装
yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible
pip安装
pip 是安装Python包的管理器
yum install python-pip python-devel
yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel
pip install --upgrade pip
pip install ansible --upgrade
Ansible命令
ansible 主程序,通过ssh协议,实现对远程主机的配置管理,应用部署,任务执行等功能
#建议: 使用ansible之前,先完成对所有远程主机的key验证
key验证: ssh-keygen
ssh-copy-id 10.0.0.8
ansible命令
格式: ansible 主机组 选项 参数
选项:
-v 显示过程,vvv更加详细
-m 指定模块
--list-host 显示主机列表
-C 检查,并不真正执行
-k 输入ssh连接密码
主机组:
ansible dbser -m ping 对dbser的主机
ansible all -m ping 全部主机
ansible 'dbser:!webser' -m ping 在dbser组中的,但不在webser组中的主机
ansible 'dbser:&webser' –m ping 在dbser组中的,并且在webser组中的主机
ansible命令执行过程
1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg
2. 加载自己对应的模块文件,如:command
3. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器
4. 给文件+x执行
5. 执行并返回结果
6. 删除临时py文件,退出
执行状态提示:
绿色:执行成功并且不需要做修改的操作
黄色:执行成功并且对目标主机做修改
红色:执行失败
ansible其他相关工具
ansible-doc 查看模块帮助
ansible-doc -l #显示所有模块
ansible-doc ping #查看模块帮助
ansible-doc -s ping #简单查看模块帮助
ansible-galaxy 此工具会连接https://galaxy.ansible.com下载相应的roles
ansible-galaxy list #列出所有已安装的galaxy
ansible-galaxy install geerlingguy.redis #安装galaxy
ansible-galaxy remove geerlingguy.redis #删除galaxy
ansible-vault 加密解密yaml文件
ansible-vault encrypt hello.yml #加密
ansible-vault decrypt hello.yml #解密
ansible常用模块
Command模块
功能:在远程主机执行shell命令,此为默认模块
ansible dbser -a 'hostname'
ansible dbser -m command -a 'hostname'
Shell模块
功能:和command模块一样,支持变量
ansible dbser -m shell -a 'echo $PATH'
将shell模块代替command模块
vim /etc/ansible/ansible.cfg
module_name=shell
script模块
功能:在远程主机上运行ansible主机的脚本
ansible all -m script -a '/root/y.sh'
Copy模块
功能:从ansible主机复制文件到远程主机
ansible all -m copy -a 'src=/root/y.sh dest=/data/'
fetch模块
功能:从远程主机提取文件到ansible主机
ansible all -m fetch -a 'src=/etc/redhat-release dest=/data/'
ls /data/
10.0.0.18 10.0.0.28 10.0.0.8
hostname模块
功能:修改主机名
ansible 10.0.0.8 -m hostname -a 'name=c8'
file模块
功能:文件管理
ansible srv -m file -a 'path=/data/test.txt state=touch' #创建文件
ansible srv -m file -a 'path=/data/test.txt state=absent' #删除文件
yum模块
功能:管理rpm软件包
ansible all -m yum -a 'name=httpd state=present' #安装
ansible all -m yum -a 'name=httpd state=absent' #卸载
service模块
功能:服务管理
ensible dbser -m service -a 'name=httpd state=started enabled=yes'#开启服务
ansible dbser -m service -a 'name=httpd state=stopped' #停止服务
ansible dbser -m service -a 'name=httpd state=restarted' #重启服务
ansible srv -m shell -a "sed -i 's/^Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf" #修改服务端口号
user模块
功能:用户管理
ansible all -m user -a 'name=yunge uid=2020 home=/home/yunge group=root create_home=yes shell=/bin/bash' #创建用户
ansible all -m user -a 'name=yunge state=absent remove=yes' #删除用户
group模块
功能:组管理
ansible all -m group -a 'name=yunge gid=99' #创建组
ansible all -m group -a 'name=yunge state=absent' #删除组
setup模块
功能:收集系统信息
ansible all -m setup