Ansible入门

自动化运维常识

运维工作

  系统安装   物理机、虚拟机

  程序包  安装、配置、服务启动

  批量操作

  程序发布

  监控

 

运维层次

  OS previsioning

    物理机 PXE、Cobbler(选择多版本操作系统)

    虚拟机 Image Templates

  Configuration

    puppet (ruby)

    saltstack (python)

    chef

    cfengine

  Command and Control

    fabric

 

预发布验证

  新代码先发布到测试服务器上(配置和生产环境相同,未接入调度器)

 

程序发布

  不能影响用户体验

  系统不能停机

  不能导致系统故障或造成系统不可用

 

灰度发布

/webapp/shopping-1.1
/webapp/app/shopping 链接文件指向shopping*

/webapp/shopping-1.2
/webapp/app/shopping

如果1.2版本有问题,修改链接指向1.1,版本回滚

step1:

    在调度器上关闭一批服务器,更改主机模式为maintanance模式(用户Session不会第一时间被调度到其它Real Server上)

step2:

    关闭服务

step3:

    部署新版本的应用程序

step4:

    启动服务

step5:

    在调度器上启用着一批服务器

工具使用

    自动化灰度发布的脚本、平台

 

运维工具分类

  agent

    puppet

    func

  agentless

    ansible

    fabric

 

Ansible初识

集合众多开源工具功能

Configuration 

    cfengine

    Chef

    Puppet

Deployment

    Capistrano

    Fabirc    

Ad-Hoc Tasks 

    Func

Multi-Tier Orchestration

    Juju

    sort of

 

开发语言python

  核心模块
    paramiko SSH客户端API

    PyYAML 模块编排

    Jinja2 模板语言

 

核心组件

 

 

SSH协议认证或密码认证

  基于密钥认证

  在inventor中明文指定用户名密码

支持主从模式

  master

    ansible is a ssh client

  salve

    ssh server

支持自定义模块

  Playbook

    细致化安装流

 

Ansible简单使用

安装

yum源安装

1 yum install -y ansible

 

编译安装

# 解决依赖

yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto tar -xvzf ansible-2.4.2.tar.gz cd ansible-2.4.2 python setup.py build python setup.py install mkdir /etc/ansible cp -r examples/* /etc/ansible

 

简介

Name        : ansible
Arch        : noarch
Version     : 2.4.2.0
Release     : 2.el7
Size        : 38 M
Repo        : installed
From repo   : extras
Summary     : SSH-based configuration management, deployment, and task execution system
URL         : http://ansible.com
License     : GPLv3+
Description : 
            : Ansible is a radically simple model-driven configuration management,
            : multi-node deployment, and remote task execution system. Ansible works
            : over SSH and does not require any software or daemons to be installed
            : on remote nodes. Extension modules can be written in any language and
            : are transferred to managed machines automatically.

 

文件解析

主配置文件

    /etc/ansible/ansible.cfg

主机清单

    /etc/ansible/hosts

角色配置

    /etc/ansible/roles

剧本文件

    /usr/bin/ansible-playbook

卫星主机

    /usr/bin/ansible-galaxy
    /usr/bin/ansible-galaxy-2
    /usr/bin/ansible-galaxy-2.7

使用文档

    /usr/bin/ansible-doc
    /usr/bin/ansible-doc-2
    /usr/bin/ansible-doc-2.7

 

查看模块及功能参数

ansible-doc -l (非常多,就不列出了)

ansible-doc -s <MODULE_NAME>

 

简单语法分析

# 语法 ansible <host-pattern> [options]

-f FORKS, --forks FORKS  # 并发执行的线程数,一个线程对应一个HOST

-m MODULE_NAME, --module-name MODULE_NAME  # 指定以哪个模块运行

-a MODULE_ARGS, --args MODULE_ARGS  # 指定模块特有的参数

 

常用模块

command 远程执行一条命令

cron 添加一条计划任务

    name 每条任务最好指定以个名字
    
    day hour minute month weekday

    job 指定运行的命令

    state 指定命令是生效还是移除 present absent

    user 指定以哪个用户身份执行任务

    ...

    -a 'name=root ... '

user 用户管理

group 组管理

copy 文件复制

    ansible-doc -s copy

    content 指定的内容将被输出到目标文件中,与src不能同时使用

    src 指定原文件or目录

    desc 远程主机的绝对路径

    ... 

file 文件管理

    链接文件

        ansible all -m file -a 'path=/tmp/fatab.link src=/etc/fstab state=link'

ping 测试连通性

    ansible all -m ping

service 服务管理

    enabled 开机启动

    name 服务名

    state started stopped restarted

    ansible webserver -m service -a 'enabled=true name=httpd state=started'

shell 执行命令

    # ansible all -m command -a 'echo redhat | passwd --stdin admin' 执行成功但未生效,-a 参数不识别管道符,变量

    ansible all -m shell -a 'echo redhat | passwd --stdin admin'

script 执行脚本

    # 将本地的脚本发送到远程主机执行,脚本文件以相对路径指定

    ansible all -m script -a 'xxx.sh'

yum 软件包安装

    安装 ansible all -m yum -a 'name=httpd'

    卸载 ansible all -m yum -a 'name=httpd state=absent'

setup 收集facts信息

    # 每个被管理节点在接受命令前,会将当前主机的相关信息(操作系统、IP地址、MAC地址等)报告给ansible主机

    ansible all -m setup 

 

Ansible简单实例

1个控制端 + 3个被控制端

  Control 192.168.180.128

  Client1 192.168.180.130

  Client2 192.168.180.131

  Client3 192.168.180.132

step1:

    # ansible 通过ssh实现配置管理、应用部署、任务执行等功能,因此,事先配置ansible端基于密钥认证于个被管理节点通信

    ssh-keygen -r rsa -P ''

    ssh-copy-id -i ~/.ssh/id_rsa.pub root@127.0.0.1

    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.180.130

    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.180.131

    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.180.132

step2:

    # 指定主机清单

    备份一下hosts文件

        cd /etc/ansible/

        cp hosts {,.backup}

    vim hosts

    # 把原文配置删除,自己指定host清单

        :.,$d

        [webserver]

        192.168.180.130

        192.168.180.131

        [dbserver]

        192.168.180.132

step3:

    # 测试主机清单是否生效

    # 是否可以管理远程主机

    ansible all -m command -a 'ip addr'

    ansible webserver -a 'ip addr'

    ansible 192.168.180.130  -a 'ip addr'

 

 

posted @ 2018-04-07 10:48  前路~  阅读(233)  评论(0编辑  收藏  举报