#基本概述
ansible是一款开源自动化工具,基于python paramiko模块开发,分布式,无需客户端
官网网址:https://www.ansible.com
官方文档:https://docs.ansible.com/ansible/latest/user_guide/become.html
#应用场景
批量执行和分发任务
#如:同时在1000台服务器上安装apache服务,并在安装后启动服务
#如:将某一个文件一次性拷贝到1000台服务器上
#特点
部署简单,只需要在ansible控制端部署
默认使用SSH协议进行管理主从集中化管理配置简单,扩展性强支持API及自定义模块,可通过python扩展通过playbooks剧本来定制强大的配置
#架构图
#安装
1.设置epel仓库(ansible仓库默认不在yum仓库中,所以要启用epel仓库)
yum install epel-release -y
2.使用yum进行安装
yum install ansible -y
3.查看版本
Ansible --version
#ansible命令参数
- ansible - Define and run a single task 'playbook' against a set of hosts
- #针对一组主机定义并运行单个任务“剧本”
- ansible命令语法:ansible [-i:主机文件] [-f:批次] [组名] [-m 模块名称] [-a:模块参数]
#ansible常用参数
- -v,–verbose # 详细模式,如果命令执行成功,输出详细的结果 (-vv –vvv -vvvv)
- -i PATH, -inventory=PATH # 指定 host 文件的路径,默认是在 /etc/ansible/hosts inventory [ˈɪnvəntri] 库存 -f NUM,-forks=NUM # NUM 是指定一个整数,默认是 5 ,指定 fork 开启同步进程的个数。
- -m NAME,-module-name=NAM # 指定使用的 module 名称,默认使用 command模块
- -a,MODULE_ARGS #指定 module 模块的参数
- -k,-ask-pass #提示输入 ssh 的密码,而不是使用基于 ssh 的密钥认证 -sudo # 指定使用 sudo 获得 root 权限 -K,-ask-sudo-pass #提示输入 sudo 密码,与 -sudo 一起使用 -u USERNAME,-user=USERNAME # 指定移动端的执行用户 -C,–check #测试此命令执行会改变什么内容,不会真正的去执行
#ansible查看帮助
- ansible-doc -l #列出所有的模块列表
- ansible-doc -s 模块名 #查看指定模块的参数
- ansible-doc 模块名 #查看指定模块的详细参数
- #示例:ansible-doc yum | ansible-dco firewalld
#基本使用
#实验拓扑图
一:定义主机清单(有两种方式:一种基于端口,用户名密码,一种基于SSH密钥)
1、基于端口、用户名、密码定义清单
- 格式:ansible_ssh_port:指定ssh端口 ansible_ssh_user:指定用户 ansible_ssh_pass:指定密码 ssh_sudo_pass:指明sudo时候的密码
2、基于SSH密钥来访问定义清单
- 在ansible服务端生成秘钥,并且复制公钥到节点中
- #ssh-keygen 一直回车#一键生成 ssh-keygen -f ~/.ssh/id_rsa -P '' -q
- 使用ssh-copy-id命令复制ansible公钥到节点 ssh-copy-id root@192.168.186.142
- #使用sshpass批量分发密钥到服务器[root@game scripts]# cat scp_isa.sh
- #!/bin/baship=(130 131 132 133)
- for i in ${ip[@]}
- do
- sshpass -p"Skills39" ssh-copy-id -i /root/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" root@192.168.228.$i
- done#服务端查看效果[root@game ~]# cat /root/.ssh/known_hosts
- 192.168.228.130 ecdsa-sha2-nistp256 AAAAE2VjZHNhL.....AuHi+n9iVPC0Of9D/MKK8lWuGHg=
- 192.168.228.131 ecdsa-sha2-nistp256 AAAAE2VjZHNh...d8FX4mqoYCp43E2knM9t8YAZGg/k08=
- 192.168.228.132 ecdsa-sha2-nistp256 AAAAE2VjZHNhL....y6U2tCs+SU/Sg+rGR8E76lqC316Q=
- 192.168.228.133 ecdsa-sha2-nistp256 AAAAE2....iTuiJ+0VNOYrhh2gqW36XJVlW1+p6pj2dbo=
- #服务端测试面密钥登录ssh 192.168.228.130
- #配置清单#/etc/ansible/hosts [db-server] 192.168.186.142
- 192.168.186.135
- #网段范围写法 [all] 192.168.228.[130:133]
- #如果写主机名,需要在/etc/hosts里面写 [a] k8s-master#/etc/hosts[root@game ~]# cat /etc/hosts
- 192.168.228.130 k8s-master
二:在ansible服务端运行命令
- #提示:
- #首次运行如果不进行什么修改的话会提出警告,可以按照将deprecation改为False[DEPRECATION WARNING]: The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default,
- this will change, but still be user configurable on deprecation. This feature will be removed in version 2.10. Deprecation
- warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
- [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
- #[root@k8s-master ~]# vim /etc/ansible/ansible.cfg
- deprecation_warnings=False
1、使用ping检查k8s-node节点机器的连通性
- [root@k8s-master ~]# ansible k8s-node -m ping
- #提示:也可以指定hosts文件,但是默认就是读取那个文件,所以不指定也是可以的 # ansible -i /etc/ansible/hosts k8s-node -m ping192.168.86.133 | SUCCESS => {
- "ansible_facts": {
- "discovered_interpreter_python": "/usr/bin/python"
- }, "changed": false,
- "ping": "pong"
- }192.168.86.132 | SUCCESS => {
- "ansible_facts": {
- "discovered_interpreter_python": "/usr/bin/python"
- }, "changed": false,
- "ping": "pong"
- }
2、检查ansible节点的运行时间
- [root@k8s-master ~]# ansible k8s-node -m command -a 'uptime'
- 192.168.86.133 | CHANGED | rc=0 >>
- 23:16:34 up 5 min, 2 users, load average: 0.00, 0.03, 0.03
- 192.168.86.132 | CHANGED | rc=0 >>
- 23:16:34 up 31 min, 2 users, load average: 0.00, 0.01, 0.04
3、检查节点的内核版本
- [root@k8s-master ~]# ansible k8s-node -a 'uname -r'
- 192.168.86.132 | CHANGED | rc=0 >>
- 3.10.0-1062.el7.x86_64
- 192.168.86.133 | CHANGED | rc=0 >>
- 3.10.0-1062.el7.x86_64