日常的运维工作任务

系统安装(物理机、虚拟机) --> 程序包安装、配置、服务启动 --> 批量操作 --> 程序发布 --> 监控


OS Provisioning

    物理机:PXE(预引导程序)、Cobbler

    PXE(网卡支持网络引导、dhcp、filename、next-server、tftp-server(UDP69端口监听))

        -->pxelinux.0

        -->vmlinux、initrd.img

        -->menu.c32

        -->pxelinux.cfg/default

    虚拟机:Image Templates

Configration

    程序包、用户管理、配置文件、服务管理、cron任务等

    puppet (ruby研发的)

    saltstack (python研发)

    chef

    cfengine(C/C++研发)

    管理完成配置的安装和批量的管理

Command and Control

    fabric

    func


进入正题:

    

ansiable自动化运维工具

①ansible优点:

1、configuration:(cfengine、chef、puppet)  服务的配置

2、Deployment(Capistrano、Fabric)  应用程序的部署

3、Ad-Hoc Tasks(Func)  批量命令执行

4、Multi-Tier ORCHEHESTRATION 多层次的任务编排

②ansible特性:

上手方便简单

NO bootstrapping

No DAG ordering 

NO agent

No server 

No additional PKL

模块化,调用特定的模块,完成特定的任务

基于Python语言实现由Paramiko、Pyyaml(标记语言)jinja2三个关键模块

部署简单,agenless

支持自定义模块

支持Playbook

幂等性:允许重复执行多次


③ansible -playbooks的核心元素

->Tasks任务

->Variables变量

->Templates模板

->Handlers处理器

->Roles角色


④配置文件:

/etc/ansible/ansible.cgf  角色列表

/etc/ansible/hosts  主机清单


⑤ansible 源码安装配置

解决依赖:

    yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto

克隆到主机:

    git clone git://github.com/ansible/ansible.git --recursive

安装文件:

    source ./ansible/hacking/env-setup   

创建配置文件:

    mkdir -p /etc/ansible

    cp ./examples/ansible.cfg /etc/ansible/

    cp ./examples/hosts /etc/ansible/

创建公钥传递给要管理的主机:

    ssh-keygen -t rsa -P ''   ##一路回车

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

    ssh IP 'ifconfig'  ##测试是否连通

    ansible all -m ping



⑥ansible的模块:

查看doc帮助文档

ansible-doc -s command

command
    -a 'command'
ansible all -m command -a 'echo Centos | passwd --stdin Centos'  赋予Centos用户密码但是这
样是只打印出整体
user
    -a 'name= state={present|absent} system= uid='
    ansible 主机名 -m user -a 'name=cluster state=present '
group
    -a 'name= gid= state= system='
cron
    -a 'name= minute= hour= day= month= job= user= state='
    ansible 主机名 -m cron -a 'name="sync time from ntpserver" state=present minute=*/10 
    job="/sbin/ntpdate 要同步的主机IP &>/dev/null"'
ansible all -m cron -a 'name="sync time from ntpserver" state=absent' 删除计划
copy
    -a 'src= dest= mode='
    ansible 主机名 -m copy -a 'src=/etc/fstab dest=/tmp/fstab.tmp mode=600'
file
    -a 'path= mode= owner= group= state={directory|link|present|absent} src= force=ture|
    flase'
    ansible 主机名 -m file -a 'path=绝对路径 state= scr=目标IP的路径'
ping
    没有参数
yum 
    -a 'name= state={present|latest|absent}'
    ansible all -m yum -a 'name=httpd state=latest'
service
    -a 'name= state={started|stoped|restarted}'
shell
    -a 'COMMAND'
    ansible all -m shell -a "echo Centos|passwd --stdin Centos"
script
    运行脚本在各个主机上执行
setup
    收集主机所有信息