ansible做为目前批量linux机器远控工具的老大、其易用性、管理成本低等远远超过了同类的Fabric等工具。html
准备测试机器,这里就拿已有的kubernetes的机器作测试,机器和ip分配参考:java微服务 k8s生产环境搭建, 注意下面案例中的k8s机器的ip段已经改为 192.168.10,机器列表以下java
机器 | ip |
---|---|
K8s-ha-deploy | 192.168.10.140 |
K8s-ha-master1 | 192.168.10.130 |
K8s-ha-master2 | 192.168.10.131 |
K8s-ha-master3 | 192.168.10.132 |
K8s-ha-node1 | 192.168.10.135 |
K8s-ha-node2 | 192.168.10.136 |
K8s-ha-node3 | 192.168.10.137 |
执行下面的命令在部署机上安装ansiblenode
pip install pip --upgrade -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install --no-cache-dir ansible -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
复制代码
也能够使用docker一键启动python
alias ansible="docker run --rm --name ansible -v ${HOME}/.ssh/config:/home/ansible/.ssh/config:ro -v ${HOME}/.ssh/known_hosts:/home/ansible/.ssh/known_hosts:ro -it williamyeh/ansible:alpine3 ansible"
ansible --version
复制代码
查看效果: linux
ansible会从当前目录的hosts配置文件中读取被操控的机器的ip 把6台想要操控的机器ip写入hosts文件,以下docker
[kube-master]
192.168.10.130
192.168.10.131
192.168.10.132
[kube-node]
192.168.10.135
192.168.10.136
192.168.10.137
复制代码
ansible所在的主机要求可以使用密钥登陆全部被操控的机器,这样效率就很高了,无需输入密码的交互了 在ansible所在主机先使用下面的命令生成密钥shell
ssh-keygen -t rsa -b 2048
复制代码
而后执行ssh-copy-id命令把密钥复制到全部须要被ansible操控的机器markdown
ssh-copy-id 192.168.10.130
ssh-copy-id 192.168.10.131
ssh-copy-id 192.168.10.132
ssh-copy-id 192.168.10.135
ssh-copy-id 192.168.10.136
ssh-copy-id 192.168.10.137
ssh-copy-id 192.168.10.140
复制代码
而后就能够使用ansible, ansible-playbook等命令操控机器了ssh
查看配置的主机是否在线ide
ansible all -m ping
复制代码
查看效果
能够看到配置的6台机器都是在线的
在远程机器上执行任意命令使用指令ansible all -m command -a '这里写须要执行的命令'
好比在远程机器上执行hostname获取机器名
ansible all -m command -a 'hostname'
复制代码
查看执行效果:
这个ansible指令虽然方便可是每次只能执行一个指令,而且不能像文件那样对指令进行管理
下面使用ansible提供的playbook功能利用文件来组织管理这些须要在远程机器执行指令
playbook使用yml格式保存文件内容,yml格式参考:yaml.org/
把这个ansible指令ansible all -m command -a 'hostname'
转成playbook以下 给这个playbook起个文件名好比:myplaybook.yml
- hosts: all become: root tasks: - name: "查看主机名称" command: hostname 复制代码
而后使用命令ansible-playbook myplaybook.yml
,可是ansible-playbook默认不会把这个hostname命令的直接输出的,这里要查看输出结果能够添加-v参数或者使用debug模块,命令以下
ansible-playbook myplaybook.yml -v
复制代码
查看执行效果以下:
这样就能够在文件里长期对命令进行维护了
ansible内置了不少模块替代编写原始shell命令来提升效率,全部可用的模块参考:Module Index
当被管理的playbook项目愈来愈大时,单靠playbook也会难以维护,这个时候就能够使用ansible提供的include和roles功能了
python的pip包能够使用阿里云的镜像,这样能够提升包的安装速度
这个ansible命令只能临时使用,对命令长期维护建议使用playbook