zoukankan      html  css  js  c++  java
  • Ansible

    1、关于ansible

    1)什么是ansible

    Ansible是一个开源部署工具
    开发语言:Python
    特点:SSH协议通讯,全平台,无需编译,模块化部署管理
    作用:推送Playbook进行远程节点快速部署

    2)Ansible与Chef,Saltstack的不同

    Chef

    Ruby语言编写,C/S架构,配置需要Git依赖,Recipe脚本编写规范,需要编程经验;

    Saltstack

    Python语言编写,C/S架构,模块化配置管理,YAML脚本编写规范,适合大规模集群部署;

    Ansible

    Python语言编写,无Client(现在是openssh,以前是paramiko),模块化配置管理,Playbook脚本编写规范,易于上手,适合中小规模快速部署;

    3)Ansible的优势和应用场景

    轻量级无客户端(Agentless);
    开源免费,学习成本低,快速上手;
    使用Playbook作为核心配置架构,统一的脚本格式批量化部署;

    完善的模块化扩展,支持目前主流的开发场景;
    强大的稳定性和兼容性;
    活跃的官方社区问题讨论,方便Trubleshooting与DEBUG问题;

    2、Ansible配合virtualenv安装配置

    Ansible的两种安装模式(CentOS7)
          1.Yum包管理安装
              #yum-y install ansible
          2.Git源代码安装[推荐]
              #git clone https://github.com/ansible/ansible.git

    安装python3.5

    tar xf Python-3.6.5.tar.xz 
    
    cd Python-3.6.5
    
    [root@ansible Python-3.6.5]# ./configure --prefix=/usr/local --with-ensurepip=install --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
    
    [root@ansible Python-3.6.5]# make && make altinstall
    
    [root@ansible Python-3.6.5]# which pip3.6
    /usr/local/bin/pip3.6
    
    [root@ansible Python-3.6.5]# ln -s /usr/local/bin/pip3.6 /usr/local/bin/pip

    安装virtualenv和ansible:

    [root@ansible Python-3.6.5]# pip install -i https://pypi.douban.com/simple virtualenv
    
    [root@ansible Python-3.6.5]# yum -y install git nss curl
    
    [root@ansible ~]# useradd deploy
    
    [root@ansible ~]# su - deploy
    
    [deploy@ansible ~]$ virtualenv -p /usr/local/bin/python3.6 .py3-a2.5-env
    
    [deploy@ansible ~]$ cd .py3-a2.5-env/
    
    [deploy@ansible .py3-a2.5-env]$ git clone https://github.com/ansible/ansible.git
    
    [deploy@ansible .py3-a2.5-env]$ source /home/deploy/.py3-a2.5-env/bin/activate
    
     (.py3-a2.5-env) [deploy@ansible .py3-a2.5-env]$ pip install paramiko PyYAML jinja2
    
    # 切换ansible版本到2.5
    (.py3-a2.5-env) [deploy@ansible .py3-a2.5-env]$ cd ansible/
    (.py3-a2.5-env) [deploy@ansible ansible]$ git checkout stable-2.5
    上面这条命令如果报错了,就执行先下面两条命令,再执行git checkout:
    (.py3-a2.5-env) [deploy@ansible ansible]$ git add .
    (.py3-a2.5-env) [deploy@ansible ansible]$ git stash
     
    # 在虚拟环境下加载ansible2.5
    (.py3-a2.5-env) [deploy@ansible ansible]$ source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q
     
    #验证是否加载完成
    (.py3-a2.5-env) [deploy@ansible ansible]$ ansible --version

    3、Ansible playbooks入门和编写规范

    1)Playbooks框架与格式

    image

    详细目录testenv

    image

    主任务文件main.yml

    image

    任务入口文件deploy.yml

    image

    2)ssh免密认证

    Ansible服务器端创建SSH本地秘钥
           #ssh-keygen-trsa
    Ansible服务器端建立与目标部署机器的秘钥认证
           #ssh-copy-id-i/home/deploy/.ssh/id_rsa.pub root@test.example.com

    3)执行Playbooks

    image

    4、编写Ansible playbooks

    test_playbooks

    (.py3-a2.5-env) [deploy@ansible ~]$ pwd
    /home/deploy
    
    #--
    (.py3-a2.5-env) [deploy@ansible ~]$ mkdir test_playbooks
    (.py3-a2.5-env) [deploy@ansible ~]$ cd test_playbooks/
    (.py3-a2.5-env) [deploy@ansible test_playbooks]$ mkdir inventory
    (.py3-a2.5-env) [deploy@ansible test_playbooks]$ mkdir roles
    (.py3-a2.5-env) [deploy@ansible test_playbooks]$ cd inventory/
    
    #--
    (.py3-a2.5-env) [deploy@ansible inventory]$ vim testenv
    [testservers]
    test.example.com
    
    [testservers:vars]
    server_name=test.example.com
    user=root
    output=/root/test.txt
    
    #--
    (.py3-a2.5-env) [deploy@ansible inventory]$ cd ..
    (.py3-a2.5-env) [deploy@ansible test_playbooks]$ cd roles/
    (.py3-a2.5-env) [deploy@ansible roles]$ mkdir testbox
    (.py3-a2.5-env) [deploy@ansible roles]$ cd testbox/
    (.py3-a2.5-env) [deploy@ansible testbox]$ mkdir tasks
    (.py3-a2.5-env) [deploy@ansible testbox]$ cd tasks/
    
    #--
    (.py3-a2.5-env) [deploy@ansible tasks]$ vim main.yml
    - name: Print server name and user to remote testbox
      shell: "echo 'Currently {{ user }} is logining {{ server_name }}' > {{ output }}"
    
    #--
    (.py3-a2.5-env) [deploy@ansible test_playbooks]$ pwd
    /home/deploy/test_playbooks
    
    #--
    (.py3-a2.5-env) [deploy@ansible test_playbooks]$ vim deploy.yml
    - hosts: "testservers"
      gather_facts: true
      remote_user: root
      roles:
        - testbox

    5、ssh免密认证

    这里是又新开了一台虚拟机:192.168.3.250

    ansible主机是:192.168.3.201

    在ansible主机上:

    [root@ansible ~]# vim /etc/hosts
    192.168.3.250 test.example.com
    (.py3-a2.5-env) [deploy@ansible ~]$ ssh-keygen -t rsa
    
    (.py3-a2.5-env) [deploy@ansible ~]$ ssh-copy-id -i /home/deploy/.ssh/id_rsa.pub root@test.example.com

    6、执行playbooks

    (.py3-a2.5-env) [deploy@ansible test_playbooks]$ ansible-playbook -i inventory/testenv ./deploy.yml
    
    # 去测试机上查看
    [root@localhost ~]# ls
    anaconda-ks.cfg  test.txt
    
    [root@localhost ~]# cat test.txt 
    Currently root is logining test.example.com
  • 相关阅读:
    MySQL2
    MySQL1
    并发编程三
    并发编程二
    并发编程一
    网络基础知识
    反射和单例
    Spring mvc文件上传实现
    SpringMVC系列之SpringMVC快速入门 MVC设计模式介绍+什么是SpringMVC+ SpringMVC的作用及其基本使用+组件解析+注解解析
    java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/12624079.html
Copyright © 2011-2022 走看看