Ansible 独孤九式

2022-05-25 13:58:30 浏览数 (1)

1、前提

ansible是一个配置管理和应用部署工具,功能类似于目前业界的配置管理工具Chef,Puppet,Saltstack。

2、实现功能

  • 自动化部署应用
  • 自动化管理配置
  • 自动化的持续交付
  • 自动化的(AWS)云服务管理。

3、业界产品对比

工具

语言

架构

协议

Puppet

Ruby

C/S

HTTP

Chef

Ruby

C/S

HTTP

Ansible

Python

无Client

SSH

Saltstack

Python

C/S(可无Client)

SSH/ZMQ/RAET

总结

python 入门速度快 有C/S模式支持异步 无client不能使用队列。

所以笔者个人认为 ansible 场景只适合小而美的场景!当然最近有也说Ansible 要出现C/S支持异步操作

4、如何安装ansible

4.1 yum安装(CentOS/Redhat)

代码语言:javascript复制
  yum install http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
  yum install ansible

4.2 apt-get安装(ubuntu)

代码语言:javascript复制
 sudo apt-get install software-properties-common
 sudo apt-add-repository ppa:ansible/ansible
 sudo apt-get update
 sudo apt-get install ansible

5、ansible架构图

5.1 ansible-doc [模块名]

该命令就能列出 cron如何使用 帮助文档

代码语言:javascript复制
ansible-doc -s cron

6、ansible 命令

代码语言:javascript复制
ansible
#--- 单命令执行 ansible----
ansible-doc
# ----- 主要帮助文档----
ansible-playbook
# 自定义组合ansible 流程化执行ansible 
ansible—galaxy
ansible-lint
ansible-pull
ansible-vault

7、Inventory Patterns

7.1 ansible 两个主要配置 文件

代码语言:javascript复制
/etc/ansible/ansible.cfg
/etc/ansible/hosts

7.1.1 /etc/ansible/ansible.cfg

代码语言:javascript复制
[defaults]
# hostfile       = /etc/ansible/hosts
library        = /usr/share/ansible   
remote_tmp     = $HOME/.ansible/tmp
pattern        = *
forks          = 5
poll_interval  = 15
# sudo_user      = ansible
sudo_user      = root
# ask_sudo_pass = True
# ask_pass      = True
transport      = smart
remote_port    = 22
remote_user    = manage
module_lang    = C
deprecation_warnings=False

7.1.2 /etc/ansible/hosts

代码语言:javascript复制
[icp]
10.168.89.200
[mall]
10.251.255.221
[toc]
10.117.36.222

例:[toc] 代表这着组 批量调度的时候引用

8、ansible module

例:AD-HOC

代码语言:javascript复制
ansible 主机或组  -m 模块名 -a '模块参数'  ansible参数

8.1 commands类

代码语言:javascript复制
1、command
2、shell
3、raw
4、script

归纳上面的几个命令的特点

代码语言:javascript复制
raw     模块执行bash的结果在家目录
command 模块不支持管道
Script  模块输出的结果很让人心碎
shell很多地方和RAW类似,更多的地方建议使用shell和command模块。
但是如果是使用老版本python,需要用到raw,又或者是客户端是路由器
因为没有安装python模块,那就需要使用raw模块

8.2 ‘正确’的打开方式

代码语言:javascript复制
command模块 [执行远程命令]
ansible huaishuo -m command -a 'uname -n'

script模块 [在远程主机执行主控端的shell/python脚本 ]  (使用相对路径)
ansible huaishuo -m script -a '/tmp/hello.py'

shell模块 [执行远程主机的shell/python脚本 支持管道新版本支持通配符 元字符]
ansible huaishuo -m shell -a 'ls  /tmp/huaishuo/{a1,a2}/*.log’

raw模块 [类似于command模块、支持管道传递 支持通配符 元字符]
ansible huaishuo -m raw -a "ifconfig eth0 |sed -n 2p |awk '{print $2 }'"

9、Module

代码语言:javascript复制
ping       
yum       
setup       
service       
file       
copy       
cron       
user_group       
mount       
get_url 
fetch  

9.1 常用的命令使用

代码语言:javascript复制
service: 
ansible huaishuo -a 'chkconfig --list'
ansible huaishuo -m service -a 'enabled=true name=httpd state=started'
ansible huaishuo -a 'chkconfig --list'
ansible huaishuo -a 'service httpd status'

cron:
ansible huaishuo -m cron -a 'minute="*/10" hour="0,2,3,4" job="/bin/echo hello ansible" name="test"'

user:
ansible huaishuo -m user -a "name=huaishuo password='123456'";

copy:
ansible huaishuo -m copy -a "src=/tmp/www/ dest=/tmp/www"

fetch
ansible huaishuo -m copy -a "src=/tmp/aaa.txt dest=/data/file/ flat=yes"

yum:
ansible huaishuo -m yum -a "name=git state=latest"
ansible huaishuo -m yum -a "name=git state=absent"

9.2 更多模块

超级全的模块类型及分类

https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

官网

https://www.ansible.com

9.3 ansible-playbook setup_node_vpc.yml

代码语言:javascript复制
- hosts: jichu                ###### 执行组
  remote_user: manage         ###### 用哪个用户运行
  gather_facts: True          ###### 
  tasks:                      ######  任务开启
  - name: create dir          
    shell: mkdir -p /usr/local/services/prometheus_exporters
  - name: scp
    copy: src=/alidata/ansible_yaml/node_exporter-0.14.0.linux-amd64.tar.gz dest=/usr/local/services/prometheus_exporters/node_exporter-0.14.0.linux-amd64.tar.gz owner=root
  - name: unarchive
    unarchive: src=/alidata/ansible_yaml/node_exporter-0.14.0.linux-amd64.tar.gz  dest=/usr/local/services/prometheus_exporters
  - name: run node_exporter
    shell: nohup /usr/local/services/prometheus_exporters/node_exporter-0.14.0.linux-amd64/node_exporter &

分别执行下面三个命令

1、create 目录

2、从ansible服务器 复制文件给 目标机器

3、在目标机器解压

4、在目标机器执行命令

ps

另外推荐一下界面化ansible_tower

0 人点赞