码迷,mamicode.com
首页 > 其他好文 > 详细

ansible使用

时间:2018-11-24 15:17:27      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:进程   des   load   lib   localhost   发布   nec   txt   用户名   

转自   https://www.cnblogs.com/guxiong/p/7218717.html

4  配置ssh登录

 4.1  由于ansible使用的登陆方式是ssh所以,在做实验的两台主机需要配置ssh秘钥对,这样ansible才能正常使用。

服务端:192.168.186.131   客户端:192.168.186.130

 在131的主机上,执行:

#  ssh-keygen -t rsa  直接回车即可,不用设置密钥密码。

  然后将公钥(id_rsa.pub)拷贝到130的机器上:

# ssh-copy-id   -i /root/.ssh/id_rsa.pub 192.168.186.130  这个命令就能生成authorized_keys文件的,没必要一个一个无复制.pub文件,那样反而麻烦容易错误的

本机131也要操作:

# cat  /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

#  chmod  600 /root/.ssh/authorized_keys

  在131和130的机器上关闭selinux

#  setenforce  0

在131的机器测试ssh是否可以登录:

# ssh   192.168.186.130

成功登录130的机器。

4.2  修改ansible的hosts文件

  在131的机器:

#  vim  /etc/ansible/hosts

 在末尾添加:

[testhosts]    #  testhosts 是服务器组的名字,用来统一管理服务器

127.0.0.1

gx.com         #gx.com是192.168.186.130 这台服务器,当然,这里可以直接写IP地址。

 如果写成域名的形式,则需要修改一下dns的指向或者/etc/hosts ,让dns可以找到gx.com的IP指向了哪个服务器。

修改

# vim  /etc/hosts

加入:192.168.186.130 gx.com

4.3  进行远程连接测试

4.3.1  执行w命令,查看服务器的状态:

[root@kube-node3 ~]# ansible testhosts -m command -a w
127.0.0.1 | success | rc=0 >>
 10:50:30 up  1:56,  2 users,  load average: 0.36, 0.51, 0.61
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.0.100    09:21    6.00s  0.73s  0.00s ssh -C -tt -q -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=/root/.ansible/cp/ansible-ssh-%h-%p-%r -o Port=22 -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 192.168.0.73 /bin/sh -c LANG=C LC_CTYPE=C /usr/bin/python /root/.ansible/tmp/ansible-tmp-1538448630.09-277626884223308/command; rm -rf /root/.ansible/tmp/ansible
root     pts/3    localhost        10:50    0.00s  0.10s  0.01s w

192.168.0.73 | success | rc=0 >>
 10:50:30 up  1:57,  2 users,  load average: 0.95, 1.08, 1.11
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.0.100    09:47   19:26   0.06s  0.03s -bash
root     pts/1    kube-node3       10:50    0.00s  0.10s  0.01s w




4.3.2  ansible拷贝文件或者目录

在服务端创建文件

# vi  /tmp/test.sh

  #!/bin/bash

  echo `date` > /tmp/ansible_test.txt

利用ansible可以方便地将本地的目录或者文件同步到远程服务器,具体命令:

#  ansible testhosts -s -m copy -a src=/tmp/test.sh dest=/tmp/test.sh mode=0755

复制结果:

[root@kube-node3 ~]# ansible testhosts -s -m copy -a src=/tmp/test.sh dest=/tmp/test.sh mode=0755
192.168.0.73 | success >> {
    "changed": false, 
    "dest": "/tmp/test.sh", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "8dabdb8b0f1ce4b8979260a7a84efb4b", 
    "mode": "0755", 
    "owner": "root", 
    "path": "/tmp/test.sh", 
    "size": 50, 
    "state": "file", 
    "uid": 0
}

127.0.0.1 | success >> {
    "changed": false, 
    "dest": "/tmp/test.sh", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "8dabdb8b0f1ce4b8979260a7a84efb4b", 
    "mode": "0755", 
    "owner": "root", 
    "path": "/tmp/test.sh", 
    "size": 50, 
    "state": "file", 
    "uid": 0
}



然后,可以批量执行该脚本:

[root@kube-node3 ~]# ansible testhosts -m shell -a /tmp/test.sh
192.168.0.73 | success | rc=0 >>


127.0.0.1 | success | rc=0 >>

已经创建了/tmp/ansible_test.txt文件了,并在该文件中成功写入了结果。测试成功



4.3.3  ansible实现远程任务执行

利用ansible的cron模块,给远程的服务器批量增加任务计划

每个星期天都重新创建一个文件/tmp/day.txt

[root@kube-node3 ~]# ansible testhosts -m cron -a "name=‘testday cron‘ job=‘/bin/touch /tmp/day.txt‘ weekday=6"
127.0.0.1 | success >> {
    "changed": true, 
    "jobs": [
        "testday cron"
    ]
}

192.168.0.73 | success >> {
    "changed": true, 
    "jobs": [
        "testday cron"
    ]
}


如果想要删除任务计划,只需增加state=absent,如下图,已经将刚刚添加的任务删除了

[root@kube-node3 ~]# ansible testhosts -m cron -a "name=‘testday cron‘ state=absent"
127.0.0.1 | success >> {
    "changed": true, 
    "jobs": []
}

192.168.0.73 | success >> {
    "changed": true, 
    "jobs": []
}




生产环境中jenkins主机ansible配置如下:

[defaults]

hostfile       = ./hosts

library        = /usr/share/ansible

remote_tmp     = $HOME/.ansible/tmp

pattern        = *

transport      = smart

remote_port    = 22

log_path = /home/jenkins/ansible/ansible.log

pipelining = True

module_lang    = C

gathering = implicit

host_key_checking = False

sudo_exe = sudo

timeout = 10

ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}

action_plugins     = /usr/share/ansible_plugins/action_plugins

callback_plugins   = /usr/share/ansible_plugins/callback_plugins

connection_plugins = /usr/share/ansible_plugins/connection_plugins

lookup_plugins     = /usr/share/ansible_plugins/lookup_plugins

vars_plugins       = /usr/share/ansible_plugins/vars_plugins

filter_plugins     = /usr/share/ansible_plugins/filter_plugins

[paramiko_connection]

[ssh_connection]

[accelerate]

accelerate_port = 5099

accelerate_timeout = 30

accelerate_connect_timeout = 5.0

accelerate_daemon_timeout = 30

主要配置项有:

hostfile:指定ansible inventory文件路径,默认路径为/etc/ansible/hosts,生产环境Jenkins主机已修改为./hosts,也可以在使用ansible或ansible-playbook命令时通过-i参数指定其路径。

log_path:指定日志文件。

remote_port:指定连接远程主机的默认端口。

4 ansible使用

Ansible常用命令有三个:ansible  ansible-playbook  ansible-doc

4.1 ansible用法

首先是集群hosts列表的配置。如下:

root@localhost[/home/centos/ansible-demo]cat hosts

[bpm:children]

bpm57

bpm58

[bpm57]

192.168.100.57 ansible_ssh_user=bpm  ansible_ssh_pass=******Zhang

[bpm58]

192.168.100.58 ansible_ssh_user=bpm  ansible_ssh_pass=*******Zhang

[110]

192.168.100.110 ansible_ssh_user=yangsw ansible_ssh_pass=bs bsP********

[64]

192.168.100.64:2202 ansible_ssh_user=yangsw ansible_ssh_pass=bsP********

其中,中括号(类似[110])表示一个节点组,下面每行表示一个节点,一个节点组可以包括多个节点,也可以通过指定children节点组(类似[bpm:children])将多个节点组组成一个新的组,hosts文件中每行需要指定的有ip:port(端口也可以通过ansible_ssh_port=22来指定,默认为配置文件中remote_port的值) 远程主机用户名 远程主机密码(配置为免密登陆则不用指定)。

密码中如果包含$ ” ‘ \ 字符时,需要进行转义。

Ansible命令:ansible  host_clluster -m 模块 -a 命令

-m:指定模块

-a:指定模块参数

-i:指定inventory路径(hosts文件位置)

-e:指定变量

-f :指定并行进程数,默认5

root@localhost[/home/centos/ansible-demo]ansible bpm -m shell -a"pwd"  

192.168.100.58 | SUCCESS | rc=0 >>

/home/bpm

 

192.168.100.57 | SUCCESS | rc=0 >>

/home/bpm

 

Ansible 常用模块有file shell command copy template fetch script croon ping等

可以使用ansible-doc -l查看ansible都有哪些模块及各个模块功能,模块具体用法可以使用ansible-doc命令查看,如file模块可以使用ansible-doc file查看。

 

4.2 ansible-playbook

playbook简单的说就是定义一个配置文件,文件中写入你需要安装的服务,配置文件,变量等信息,使他们可以按照事先定义好的机制完成一个任务。Playbook使用YAML语法结构,所以配置阅读起来都比较简单。

Playbooks常用参数:

hosts:指定远程主机组

vars:定义所用到的变量,可以使用变量名:变量值的方式,也可使用var_files指定存放变量的文件。

Ansible变量命名规则:变量由字母、数字、下划线组合而成,且必须以字母开头。

roles: ansible的roles用于层次性、结构化地组织palybook。roles能够根据层次型结构自动装载变量文件、tasks及handlers等。

tasks:指定要执行的任务列表。

如下为mzone发布的一个简单的playbook:

 

Playbook文件一般命名成.yml形式,hosts指定要操作的远程主机组,可以用变量表示,ansible中以双花括号{{ }}的形式表示变量,变量值可以在执行命令时通过-e参数指定,如:ansilbe-playbook deploy_mzone.yml -e”host_cluster=web”

Tasks表示要执行的操作,-name指定执行playbook该语句时在屏幕上显示的信息,为提示信息。copy 以及 shell 为要执行的模块,冒号后面跟模块所需指定的参数。

Ansible-playbook常用到的还有template模块,用法与copy模块相似,不同的是template模块可以使用变量,其与copy模块的区别在于,拷贝到远程可以替换src文件中变量的值。

 

ansible使用

标签:进程   des   load   lib   localhost   发布   nec   txt   用户名   

原文地址:https://www.cnblogs.com/effortsing/p/10012079.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!