`
maosheng
  • 浏览: 565221 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自动化运维 Ansible 安装部署

 
阅读更多
一、概述

Ansible 实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible 是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块,
Ansible只是提供一种框架。

Ansible 采用parmiko 协议库,通过SSH或者ZeroMQ 等连接主机。Ansible在控制主机将Ansible模块通过SSH协议推送到被管节点执行,执行完之后自动删除。

控制主机与被控节点之间支持local、SSH、ZeroMQ三种连接方式,默认使用基于SSH 的连接。

Ansible 提供了一个在线 playbook 分享平台,地址:https://galaxy.ansible.com/


二、Ansible安装

CentOS 7.0,自带python 2.7.5

1、rpm 包安装:

##安装相应的基础模块,建议使用yum直接安装
# yum  install  python26 python26-PyYAML  python26-paramiko  python26-jinja2   python-simplejson  -y

# yum install -y ansible

或者如下

2、tar 包安装:

##下载ansible(http://releases.ansible.com/ansible/)可在改页面选择相应的版本进行下载

# tar -zvxf ansible-2.9.9.tar.gz
# cd ansible-2.9.9
# python setup.py build
# python setup.py install
# mkdir /etc/ansible
# cp -r examples/* /etc/ansible

# ansible --version
# ansible --help

3、设置SSH无密码登录(推荐方法)
为了避免ansible下发指令时输入被管理主机的密码,可以通过证书签名达到SSH无密码登录的效果,使用ssh-keygen产生一对密匙,使用ssh-copy-id来下发生成的公匙
关闭主机与被管理服务器的防火墙

#systemctl stop firewalld.service

# setenforce 0
setenforce: SELinux is disabled

生成密钥:

    ssh-keygen -t rsa   ##有询问直接按回车键即可,将在/root/.ssh/下生成一对密钥,其中id_rsa为私钥,id_rsa.pub为公钥
    使用ssh-copy-id命令来复制Ansible公钥到节点,下发密钥就是控制主把公钥id_rsa.pub下发到被管节点上用户下的.ssh目录,并重命名成authorized_keys,且权限值为400。
    ssh-copy-id  root@节点ip 


# ssh-keygen -t rsa                  ##生产一对密钥
# ssh-copy-id root@192.101.11.159    ##下发生产的公钥
# ssh-copy-id root@192.101.11.160    ##下发生产的公钥
# ssh-copy-id root@192.101.11.161    ##下发生产的公钥

SSH访问测试验证:

# ssh 192.101.11.159
# ssh 192.101.11.160
# ssh 192.101.11.161


4、配置文件
在运行Ansible命令时,命令将会按照预先设定的顺序查找配置文件
1)ANSIBLE_CONFIG:首先,Ansible命令会检查环境变量,及这个环境变量将指向的配置文件
2)~ /.snsible.cfg:再次,将会检查当前用户home目录下的.ansible.cfg配置文件
3)/etc/ansible/ansible.cfg:最后,将会检查在用软件包管理工具安装Ansible 时自动产生的配置文件

ansible主要相关配置文件在/etc/ansible目录下

# cd /etc/ansible/
总用量 24
-rw-r--r--. 1 root root 20269 10月  9 09:34 ansible.cfg            #配置文件
-rw-r--r--. 1 root root  1016 10月  9 09:34 hosts                  #管控主机文件
drwxr-xr-x. 2 root root    6 10月  9 09:34 roles
# pwd
/etc/ansible
# ls
ansible.cfg  hosts  scripts

5、Ansible默认安装好后有一个配置文件/etc/ansible/ansible.cfg,该配置文件中定义了ansible的主机的默认配置部分,如默认是否需要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否开启log功能、默认端口、key文件位置等等,默认的都是关闭,现在需要开启remote_port和private_key_file两个配置。
Ansible命令都是并发执行的,默认的并发数目由ansible.cfg中的forks值来控制。

# vi ansible.cfg
remote_port    = 22                         ####用于连接远程ssh的端口
private_key_file = /root/.ssh/id_rsa_web    ####第三步第一种方式使用,用于免密码登陆的


6、定义hosts主机组(被控制主机)
##ansible通过读取默认主机清单/etc/ansible/hosts文件,修改主机与组配置后,可同时连接到多个被管理主机上执行任务。具体配置如下:

# vi hosts
#[web]                 #被管理主机分类
#192.168.180.4
#192.168.180.5
#[db]                 #被管理主机分类
#192.168.180.2
[k8s]            #被管理主机分类
192.101.11.159
192.101.11.160
192.101.11.161

主机清单/etc/ansible/hosts 定义模式:
[web]                 #被管理主机分类
192.168.180.4  ansible_ssh_pass='123456'  ##定义了SSH登录密码
192.168.180.5  ansible_ssh_pass='123456'  ##定义了SSH登录密码
[docker]
172.17.33.10[1:8]  ## 172.17.33.101 ~  172.17.33.108
[docker:vars]
ansible_ssh_pass='123456'  ##针对docker组使用inventory内置变量定义了SSH登录密码


三、Ansible 使用

# cd /home/ansible-2.9.9/bin/
# ./ansible --version

到此,ansible的环境就部署完成了。
用来测试远程主机的运行状态

######只测试k8s组的主机
# ./ansible k8s -m ping
192.101.11.159 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
192.101.11.160 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
192.101.11.161 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}


[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default, this will change, but still be user configurable on
deprecation. This feature will be removed in version 2.10. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details


######只测试web组的主机 负载(uptime)
# ./ansible k8s -m command -a 'uptime'  
192.101.11.160 | CHANGED | rc=0 >>
23:57:09 up 63 days,  2:11,  3 users,  load average: 0.34, 0.38, 0.39
192.101.11.161 | CHANGED | rc=0 >>
00:00:59 up 19 days,  7:18,  3 users,  load average: 0.19, 0.26, 0.26
192.101.11.159 | CHANGED | rc=0 >>
23:57:09 up 63 days,  2:11,  3 users,  load average: 0.23, 0.25, 0.30


######测试所有的主机
# ./ansible  all -m command -a 'uptime'                            
192.101.11.160 | CHANGED | rc=0 >>
23:56:00 up 63 days,  2:10,  3 users,  load average: 0.62, 0.40, 0.39
192.101.11.161 | CHANGED | rc=0 >>
23:59:50 up 19 days,  7:16,  3 users,  load average: 0.24, 0.29, 0.27
192.101.11.159 | CHANGED | rc=0 >>
23:56:00 up 63 days,  2:10,  3 users,  load average: 0.14, 0.24, 0.30



#####查看该主机模块中所定义的主机的IP地址
# ./ansible k8s --list-hosts
# ./ansible k8s --list            ##简写

-------------------------------------------------------------------------------------------------------------------------------------------------------
获取帮助信息
(http://docs.ansible.com/)

# ansible-doc -h
# ansible-doc -l
# ansible-doc -s yum    ##ansible-doc 直接加模块名称,将显示该模块的描述和使用示例

ansible 命令格式:

# ansible 主机清单中IP或分组名称 -m 模块 -a "参数"

1、ansible ping 命令模块使用:

# ansible 主机清单中IP或分组名称 -m ping

# ./ansible k8s -m ping
# ./ansible k8s -m ping -v
# ./ansible k8s -m ping -vv
# ./ansible k8s -m ping -vvv

2、ansible cron 命令模块使用:

# ansible 主机清单中IP或分组名称 -m cron -a "参数"

# ./ansible 192.101.11.159 -m cron -a 'name="test cron1" job="ntpdate time1.aliyun.com" minute=0 hour=*/1'  ##每小时与时钟源同步一次

##远程主机结果
# crontab -l

3、ansible copy 命令模块使用:

# ansible 主机清单中IP或分组名称 -m copy -a "参数"

# ./ansible 192.101.11.159 -m copy -a "src=/etc/hosts dest=/etc/hosts backup=yes owner=root group=root mode=644" -o

帮助文档:
https://docs.ansible.com/ansible/latest/modules/copy_module.html#copy-module

主控端

被控端

# ./ansible all -m command -a 'df -h'
等同于
# ./ansible all -a 'df -h'

查看目录:
# ./ansible all -a 'ls /data'

添加用户:
# ./ansible all -a 'useradd test1'

查询用户
# ./ansible all -a 'getent passwd test1'

修改密码:
# ./ansible all -m shell -a 'test1|passwd --stdin Ycyt@14#uat'

查询密码
# ./ansible all -a 'getent shadow test1'

显示hostname
# ./ansible all -m shell  -a 'echo $HOSTNAME'

查询enforce状态
# ./ansible all -a 'getenforce'

抓取文件
# ./ansible all -m fetch -a 'src=/var/log/messages dest=/data'

创建空文件f3:
# ./ansible all -m file -a 'name=/data/f3 state=touch'

删除文件f3:
# ./ansible all -m file -a 'name=/data/f3 state=absent'

创建文件夹:
# ./ansible all -m file -a 'name=/data/dir1 state=directory'

删除文件夹:
# ./ansible all -m file -a 'name=/data/f3 state=absent'

创建软连接:
# ./ansible all -m file -a 'src=/etc/fstab dest=/data/fstab.link state=link'

删除软连接:
# ./ansible all -m file -a 'dest=/data/fstab.link state=absent'

修改主机名
# ./ansible 192.101.11.159 -m hostname -a 'name=node1'

创建计划任务
# ./ansible all -m cron -a 'minute=* weekday=1,3,5 job="/usr/bin/wall FBI warning" name=warningcron'
查看计划任务
# crontab -e
禁用计划任务(参数job、name必须有,disabled=true或者yes;false或者no)
# ./ansible all -m cron -a 'disabled=true job="/usr/bin/wall FBI warning" name=warningcron'
启用计划任务(参数job、name必须有)
# ./ansible all -m cron -a 'disabled=false job="/usr/bin/wall FBI warning" name=warningcron'
删除计划任务(参数job、name必须有)
# ./ansible all -m cron -a 'job="/usr/bin/wall FBI warning" name=warningcron state=absent'

yum 管理包
安装
# ./ansible all -m yum -a 'name=httpd state=latest'

# ./ansible all -m copy -a 'src=/opt/filebeat-7.11.2-x86_64.rpm dest=/opt/'
# ./ansible all -m yum -a 'name=/opt/filebeat-7.11.2-x86_64.rpm state=latest'
卸载
# ./ansible all -m yum -a 'name=httpd state=absent'

service 管理服务
# ./ansible all -m service -a 'name=filebeat state=started enabled=yes'

user 用户管理
首先通过openssl命令来生成一个密码,因为ansible user的password参数需要接受加密后的值
# echo ansible | openssl passwd -1 -stdin

# ansible docker -m user -a 'name=ansible password="*********"' -f 10 -o

查看机器的所有facts信息
# ansible 172.17.42.107 -m setup
# ansible 172.17.42.107 -m facter

创建用户
# ./ansible all -m user -a 'name=nginx shell=/sbin/nologin system=yes home/var/nginx groups=root,bin'
删除用户
# ./ansible all -m user -a 'name=nginx state=absent remove=yes'

group 组管理
创建组
# ./ansible all -m group -a 'name=nginx system=yes'
删除组
# ./ansible all -m group -a 'name=nginx state=absent'

playbook 编写:playbook1.yml
---
- host: websrvs
  remote_user: root
 
  tasks:
    - name: create new file
  file: name=/data/newfile state=touch
- name: create new user
      user: name=test2 systme=yes shell=/sbin/nologin
    - name: install package
      yum: name=httpd
    - name: copy file
      copy: src=/var/www/html/index.html dest=/var/www/html/
    - name: start service
      service: name=httpd state=started enabled=yes

# ./ansible-playbook -C playbook.yml ##检查

# ./ansible-playbook playbook.yml  --list-tasks    ##列出任务

# ./ansible-playbook playbook.yml  --list-hosts    ##列出运行任务主机

# ./ansible-playbook playbook.yml    ##执行  

# ./ansible websrvs -a 'ls /data -l'

# ./ansible websrvs -a 'getent passwd test2'

# ./ansible websrvs -m shell -a 'ss -tln|grep :80'

playbook 编写:playbook2.yml
---
- host: websrvs
  remote_user: root
 
  tasks:
    - name: install package
      yum: name=httpd
  tags: inshttpd
    - name: copy file
      copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
  notify: restart service           ##对应下面的handlers中的name
    - name: start service
      service: name=httpd state=started enabled=yes
  tags: sthttpd
 
  handlers:
    - name: restart service
      service: name=httpd state=restarted


# ./ansible-playbook -C playbook2.yml ##检查

# ./ansible-playbook playbook2.yml  --list-tasks    ##列出任务

# ./ansible-playbook playbook2.yml  --list-hosts    ##列出运行任务主机

# ./ansible-playbook playbook2.yml    ##执行

# ./ansible-playbook playbook2.yml  --list-tags    ##列出标签tags

# ./ansible-playbook -t inshttpd playbook2.yml    ##执行tags指定的任务

# ./ansible-playbook -t sthttpd playbook2.yml     ##执行tags指定的任务

# ./ansible-playbook -t inshttpd,sthttpd playbook2.yml    ##执行tags指定的任务


playbook 编写:playbook3.yml,变量使用
---
- host: websrvs
  remote_user: root
 
  tasks:
    - name: install package
      yum: name={{pkgname}}
  tags: inshttpd
    - name: copy file
      copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
  notify: restart service           ##对应下面的handlers中的name
    - name: start service
      service: name={{pkgname}} state=started enabled=yes
  tags: sthttpd
 
  handlers:
    - name: restart service
      service: name={{pkgname}} state=restarted


# ./ansible-playbook -C playbook3.yml ##检查

# ./ansible-playbook playbook3.yml  --list-tasks    ##列出任务

# ./ansible-playbook playbook3.yml  --list-hosts    ##列出运行任务主机

# ./ansible-playbook -e 'pkgname=httpd' playbook3.yml    ##执行


playbook 编写:nginx.yml,Nginx安装
---
- host: nginx
  remote_user: root
 
  tasks:
    - name: install ngnix package
      yum: name=nginx state=present
  tags: inshttpd
    - name: copy nginx.conf file
      template: src=./nginx.conf.j2 dest=/etc/nginx/nginx.conf owner=root group=root mode=0644 validate='nginx -t -c %s'
  notify: restart nginx service           ##对应下面的handlers中的name
 
  handlers:
    - name: restart nginx service
      service: name=nginx state=restarted


# cat nginx.conf.j2
----------------此处省略N行------------------------
worker_processed {{ansible_processor_cores}};
----------------此处省略N行------------------------

# ./ansible-playbook -C nginx.yml ##检查

# ./ansible-playbook nginx.yml  --list-tasks    ##列出任务

# ./ansible-playbook nginx.yml  --list-hosts    ##列出运行任务主机

# ./ansible-playbook nginx.yml    ##执行











分享到:
评论

相关推荐

    自动化运维工具Ansible详细部署_自动化运维管理

    文件中的内容似乎没有完全提供,但根据标题和描述,我们可以推断这篇文档将详细阐述自动化运维工具Ansible的部署和管理。Ansible是一款强大的自动化工具,尤其在IT基础设施的配置管理、应用程序部署以及任务自动化等...

    自动化运维工具ansible学习笔记

    Ansible是一个简单的自动化运维管理工具,可以用来自动化部署应用、配置、编排task(持续交付、无宕机更新等)。Ansible基于Pythonparamiko开发,分布式,无需客户端,轻量级,配置语法使用YMAL及Jinja2模板语言,更...

    Linux自动化运维ansible概述与常用模块

    Linux自动化运维ansible概述与常用模块 Linux自动化运维是当前IT行业中非常热门的技术方向,Ansible是自动化运维工具之一,下面我们将对Ansible的概述和常用模块进行详细介绍。 1. 自动化运维的概念 自动化运维是...

    自动化运维工具 Ansible 详细部署

    ### 自动化运维工具 Ansible 详细部署 #### 基础介绍 ##### 简介 Ansible 是一款先进的自动化运维工具,采用 Python 编程语言开发而成。相较于其他传统工具如 Puppet、Chef 和 CFEngine 等,它具备更为便捷的操作...

    运维自动化之ANSIBLE.pdf

    与其他自动化运维工具相比,Ansible 以其易用性和广泛支持的平台脱颖而出。例如,SaltStack 提供更高的执行效率但可能需要部署 agent,Puppet 功能强大但相对复杂,适用于大型环境,而 Fabric 和 Chef 也是无代理的...

    Ansible自动化运维实践

    持续集成与持续部署是Ansible自动化运维的另一个优势,Ansible可以自动化构建、测试、部署代码的过程,实现快速响应需求变化,提高生产环境的可用性和稳定性。 Ansible自动化运维还支持多种架构与平台,易于集成和...

    ⾃动化运维ansible的⽤法

    自动化运维Ansible的使用 Ansible是一个自动化运维工具,主要用于配置和管理IT infrastructure。Ansible的核心程序是Host Lnventory,它记录了每一个由Ansible管理的主机信息,包括ssh端口、root账号密码、ip地址...

    自动化运维工具Ansible详细部署.docx

    Ansible是一款强大的自动化运维工具,它使用Python语言开发,整合了其他运维工具如Puppet、Chef、Func和Fabric等的优点,使得系统配置、程序部署和命令执行等任务能够批量处理。Ansible的核心特点包括它的轻量级设计...

    自动化运维工具Ansible详细部署.pdf

    Ansible 是一款强大的自动化运维工具,它以Python为基础,提供了高效、简洁的方式来管理多台服务器。Ansible 的设计思想是“简单易用”,无需在被管理的主机上安装额外的客户端,仅需通过SSH连接就能实现批量配置、...

    一招让你熟悉自动化运维工具Ansible详细部署

    ### Ansible自动化运维工具详解及部署 #### 一、基础介绍 ##### 1.1 简介 Ansible是一款新兴的自动化运维工具,由Red Hat公司开发并维护,广泛应用于IT系统的部署、配置管理和应用发布等场景。它基于Python语言...

    Ansible自动化运维详细安装及使用.doc

    Ansible是一款强大的自动化运维工具,2013年由Ansible公司推出,后来在2015年被Red Hat收购。它的核心是基于Python语言构建,主要功能包括批量配置操作系统、批量部署应用以及批量执行命令。Ansible的一大特点是无须...

    运维自动化之ANSIBLE_ansible运维_

    **运维自动化之ANSIBLE——基于Python的高效运维框架** Ansible是一款开源的自动化工具,尤其...通过学习和熟练掌握Ansible,运维人员可以更好地实现自动化运维,提高工作效率,降低出错率,让运维工作变得更加轻松。

    自动化运维工具ansible学习笔记.pdf

    ### Ansible自动化运维工具详解与实践 #### 一、Ansible简介 Ansible是一款非常流行的自动化运维工具,它主要用于简化日常运维工作中的重复性任务,提高运维效率。Ansible使用Python语言开发,其最大的特点之一...

    银行数据中心自动化运维设计实施及Ansible应用最佳实践.docx

    "银行数据中心自动化运维设计实施及Ansible应用最佳实践" 自动化运维的概念和背景:随着 IT 技术的快速发展,IT 系统的运维复杂度不断增加,IT 部门的体量不断扩大,传统的人工操作和借助管理流程的方式已不能满足...

    ansible自动化运维实践

    本课程重点围绕“ansible自动化运维实践”,旨在帮助学习者掌握Ansible的安装、部署及其在实际运维中的应用。 首先,让我们从Ansible的基础开始。Ansible是一款开源的配置管理工具,它采用无代理的架构,通过SSH...

    顶级自动化运维工具Ansible教材与笔记

    Ansible是一款广受欢迎的自动化运维工具,它以其简洁的配置语法和无代理的特性,在IT行业中赢得了极高赞誉。本教材与笔记将深入探讨Ansible在自动化运维中的应用,帮助读者理解并掌握其核心概念和实践技巧。 首先,...

    基于Ansible自动化运维系统批量部署LAMP架构的设计与实现.pdf

    在测试中,使用Ansible自动化运维系统批量部署LAMP架构的方法不仅大大缩短了部署时间,而且由于减少了人为操作的环节,有效降低了部署过程中的错误率。这一点对于需要管理大量服务器的企业来说尤为重要。随着服务器...

    Ansible自动化运维技术与实践PDF书.zip

    本书《Ansible自动化运维技术与实践》深入浅出地介绍了Ansible的使用方法和最佳实践,对于想要掌握自动化运维的IT从业者来说,是一本不可多得的资源。 在学习Ansible时,首先要理解它的核心概念。Ansible基于代理...

    Ansible自动化运维

    总结,《Ansible自动化运维》这本书将引导读者深入了解Ansible的各个方面,通过实例学习如何编写有效的Playbook,实现高效的自动化运维。无论是初学者还是经验丰富的运维工程师,都能从中受益,提升自己的IT基础设施...

Global site tag (gtag.js) - Google Analytics