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