ansible初识

2022-08-12 21:45:08 浏览数 (1)

ansible是什么

ansible是一个配置管理工具,是一个自动化运维工具。

ansible和其他配置管理工具一样,可以帮我们做一写重复的事情,如: 1.给100台服务器安装nginx 2.比如复制1个文件到100个服务器上 3.新的服务器加入,需要安装redis等

当然以上的场景,你会说编写一些脚本就可以完成;但是还是建议使用ansible,因为他有一些特性,如幂等性 幂等性:指操作一次和操作100次结果都是一样的。

ansible中有改变的 输出的信息是黄色的,没有改变的是绿色

代码语言:javascript复制
ansible 192.168.10.55 -m ping 

上面是一个简单的示例 去ping 192.168.10.55 -m ping是指去调用ping模块

ansible有很多模块,实际工作中,是通过调用模块来帮我们完成任务的(我们要学习常见的模块)

代码语言:javascript复制
ansible 192.168.10.55 -m ping 

我们要使用上面这个简单的示例,要满足两个要求: 1.要能通过ssh连接到受官主机 2.受官主机的ip等信息要添加到ansible的“管理清单”(文件在/etc/ansible/hosts

安装ansible(这里使用yum)

1.使用yum安装ansible,需要配置epel源,能帮我们自动解决软件包的依赖关系。

代码语言:javascript复制
rpm -qa|grep epel //检查存不存在epel(不是root用户要sudo) 
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm //安装epel(不是root用户要sudo) 

2.安装ansible

代码语言:javascript复制
yum install ansible 

简单使用

代码语言:javascript复制
//配置受管主机(下面是使用ip 要可以自定义名字 但是自定义名字后就不能使用ip了,除非名字和ip都配置,即配置2条) 
192.168.55.66 ansible_port=22 ansible_user=root ansible_ssh_pass=123456 
//简单调用 
ansible 192.168.55.66 -m ping 

ansible基础配置

使用all可以一次性管理配置清单所有的主机

代码语言:javascript复制
ansible all -m ping 

可以对受管主机进行分组

代码语言:javascript复制
[test] 
192.168.55.100 ansible_port=22 ansible_user=root ansible_ssh_pass=123456 
ansible test -m ping 
//使用yaml 
all: 
hosts: 
192.168.55.23: 
ansible_port: 22 
ansible_user: root 
ansible_ssh_pass: 123456 
test: 
ansible_host: 192.168.55.100 
ansible_port: 22 
ansible_user: root 
ansible_ssh_pass: 123456 

嵌套分组要使用children

代码语言:javascript复制
[proA] 
10.1.1.60 
[proB] 
10.1.1.70 
[pro:children] 
proA 
proB 
//使用yaml 
all: 
children: 
pro: 
children: 
proA: 
hosts: 
10.1.1.60: 
proB: 
hosts: 
10.1.1.70: 

模块的基本使用

ansible都是通过模块来,实现各个任务的。

代码语言:javascript复制
//查看ansible所有的模块 
ansible-doc -l 
//查看具体模块的详情 
ansible-doc -s ping 

fetch 从远程节点抓取文件到本地

使用-a来对模块传递参数

代码语言:javascript复制
ansible test -m fetch -a "src=/root/app/apache-tomcat-8.5.35/conf/web.xml dest=/root" 

copy 将本地文件上传到远程服务器

file 操作文件,创建/删除 文件,目录,修改文件权限

blockinfile 在文件中插入一段文本,默认是文件尾(这段文本会被标记,标记后可以更新删除)

lineinfile 确保某一行文本存在文本中,,确保某一行文本不存在文本中,,替换某一行

find 可以在远程服务器查找符合的文件,跟find一样

replace

command

shell

cron

service

user,group,yum等

问题

代码语言:javascript复制
FAILED => Using a SSH password insteadof a key is not possible because Host Key checking is enabled and sshpass doesnot support this. Please add this host'sfingerprint to your known_hosts file to manage this host. 
解决:在ansible 服务器上使用ssh 登陆下/etc/ansible/hosts 里面配置的服务器。然后再次使用ansible 去管理就不会报上面的错误了!但这样大批量登陆就麻烦来。因为默认ansible是使用key验证的,如果使用密码登陆的服务器,使用ansible的话, 
第一步::要不修改ansible.cfg配置文件的ask_pass = True给取消注释,要不就在运行命令时候加上-k,这个意思是-k, --ask-pass ask for SSH password。 
第二步::再修改:host_key_checking= False即可 

免密登录

代码语言:javascript复制
ansible免密登录 
参考 https://www.jianshu.com/p/fc88132924d5 
all: 
children: 
k8s-master: 
hosts: 
192.168.144.128: 
192.168.144.129: 
ssh-keygen -t rsa -b 2048 -P '' -f /root/.ssh/id_rsa 
ssh-keyscan 192.168.144.128 192.168.144.129 >> /root/.ssh/known_hosts 
- hosts: all 
tasks: 
- name: install ssh key 
authorized_key: user=root 
key="{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" 
state=present 
//密码一样所以加入-k 如果不一样 在hosts文件中要配置各自的密码不需要-k 
ansible-playbook -k -i /etc/ansible/hosts ~/ansible/ssh-addkey.yml 
免密登录就是将管理机的公钥加入被管理机 
第一步 首先在管理机生成密钥对 
ssh-keygen 
第二步 将公钥复制到被管理机 
ssh-copy-id -i /root/.ssh/id_rsa.pub root@xxx.24.xxx.86 
root@xxx.24.xxx.86 被管理机的用户及ip 
第3步 
修改/etc/ansible/ansible.cfg 的 ask_pass 改成false 

0 人点赞