1.ansible概述安装定义主机组
一.ansible批量管理服务概述
1.1 ansible批量功能 -- 并行
01. 可以实现批量系统操作配置
02. 可以实现批量软件服务部署
03. 可以实现批量文件数据分发
04. 可以实现批量系统信息收集
1.2 ansible批量管理服务意义
01. 提高工作的效率(部署综合架构)
02. 提高工作准确度
03. 减少维护的成本
04. 减少重复性工作
ansible软件安装部署 saltstack自动化批量管理软件 (复杂(安装 配置 应用)) 软件服务比较重
特点:
1. 没有配置文件(不需要配置)
2. 不需要启动服务
3. 客户端没有需要部署任务
缺点
执行yaml后服务器的状态发生了改变 没有办法回滚 只能写yaml来对服务器的状态进行恢复
2.配置server端:
第一个历程:安装ansible软件
yum install -y ansible -- epel
rpm -qc ansible
/etc/ansible/ansible.cfg ansible的配置文件
/etc/ansible/hosts 主机清单文件 inventory
2.1配置ansible配置文件ansible.cfg
#inventory = /etc/ansible/hosts 路径重新定义
#inventory = ./hosts 路径重新定义
#library = /usr/share/my_modules/
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp
#local_tmp = ~/.ansible/tmp
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks = 5 调整并行的主机数量
#host_key_checking = False 不对秘钥进行检查
#roles_path = /etc/ansible/roles
2.1.1 ansible.cfg配置文件的优先级
配置文件的优先级:
# nearly all parameters can be overridden in ansible-playbook
# or with command line flags. ansible will read ANSIBLE_CONFIG,
# ansible.cfg in the current working directory, .ansible.cfg in
# the home directory or /etc/ansible/ansible.cfg, whichever it
# finds first
第一步读取:ANSIBLE_CONFIG
第二步读取:当前项目目录下的ansible.cfg
第三步读取:当前用户家目录下的 .ansible.cfg
第四步读取: /etc/ansible/ansible.cfg
ANSIBLE_CONFIG变量的验证
[root@manager ~]# export ANSIBLE_CONFIG=/tmp/ansible.cfg
[root@manager ~]# touch /tmp/ansible.cfg
[root@manager ~]# ansible --version
ansible 2.9.25
config file = /tmp/ansible.cfg
[root@manager ~]# unset ANSIBLE_CONFIG # 取消
为项目单独定义配置文件,非常的重要;
[root@manager ~]# mkdir project1
[root@manager ~]# cd project1/
[root@manager project1]# touch ansible.cfg
[root@manager project1]# ansible --version
ansible 2.9.25
config file = /root/project1/ansible.cfg
为当前执行的用户家目录植入一个配置文件;
[root@manager ~]# touch ~/.ansible.cfg
[root@manager ~]# ansible --version
ansible 2.9.25
config file = /root/.ansible.cfg
默认的配置文件加载路径,优先级是最低的
[root@manager project1]# rm -f ~/.ansible.cfg
[root@manager ~]# ansible --version
ansible 2.9.25
config file = /etc/ansible/ansible.cfg
2.2配置inventory主机清单定义
2.2.1在inventory定义主机写入主机连接信息
# 详细清单文件;
[webservers]
10.0.0.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
10.0.0.41 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
# 通过域名的简写方式;
[webservers]
web[1:2].oldxu.com ansible_ssh_pass='123456'
2.2.2 做ssh免密交互后定义主机
免密
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.51
2.2.3 定义主机
vim /etc/ansible/hosts
[web]
192.168.1.201
192.168.1.202
192.168.1.203
192.168.1.204
192.168.1.205
192.168.1.214
192.168.1.240
192.168.1.241
检查
root@XTTD-2020YSWIII:~# ansible web -m ping
192.168.1.201 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.202 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.205 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.204 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.203 | SUCCESS => {
"changed": false,
"ping": "pong"
}
2.2.4 定义主机组
vim /etc/ansible/hosts
[k8s_proxy]
192.168.1.201
192.168.1.202
[k8s_apiserver]
192.168.1.203
192.168.1.204
[root@rstx-53 scripts]# ansible k8s_apiserver -m ping
192.168.1.204 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.203 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
2.2.5 ip范围定义
[test]
192.168.1.[201:205]
2.2.6 支持特殊变量信息配置 (剧本)
[oldboy]
172.16.1.7
[oldboy:vars]
ansible_user=root
ansible_password=123456
ansible_port=22
2.2.7 嵌入式配置方法
vim /etc/ansible/hosts
[k8s:children]
k8s_proxy
k8s_apiserver
k8s_node
[k8s_proxy]
192.168.1.201
192.168.1.202
[k8s_apiserver]
192.168.1.203
192.168.1.204
[k8s_node]
192.168.1.205
192.168.1.214
192.168.1.240
192.168.1.241
[root@rstx-53 scripts]# ansible k8s -m ping
192.168.1.202 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.201 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.205 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.204 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.203 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
3.ad-hoc 单个模块执行过程
ad-hoc是什么
ad-hoc是单个模块在一个或多个主机执行的过程
ansible-playbook是什么
ansible-palybook是多个模块在一个或多个主机执行的过程
ad-hoc语法结构:
ansible groups -m command -a '命令' -i /etc/ansible/hosts
-m 指定执行的模块
-a 执行的动作
-i 指定inventory
-f 指定执行的进程数量
ad-hoc执行过程
1.加载配置;
2.读取inventory;
3.操作对应的目标主机组;如果组不存在则报错;
4.构建对应的py文件,推送到远程目标主机;
5.远程主机执行该文件;
6.执行完成后,删除对应的py文件;
7.像服务端返回最终执行结果;