01-Ansible基础学习
时间:2022-07-25
本文章向大家介绍01-Ansible基础学习,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Ansible
ansible的基本安装与使用
- 基本环境准备: centos7, 安装epel-release
- 节点数量: 3+
安装与配置
- 只需要一台主控节点
$ yum -y install epel-release ansible
- 配置ansible的主机清单
$ vim /etc/ansible/hosts
[webservers]
192.168.56.12 ansible_ssh_user=root ansible_ssh_pass=yeecallk8s
192.168.56.13 ansible_ssh_user=root ansible_ssh_pass=yeecallk8s
192.168.56.14 ansible_ssh_user=root ansible_ssh_pass=yeecallk8s
- 配置免交互ssh认证和日志记录
$ vim /etc/ansible/ansible.cfg
host_key_checking = False
log_path = /var/log/ansible.log
- 基本测试
$ ansible webservers -m ping
$ ansible webservers -a "free -m"
$ ansible --version #查看版本
ansible 2.9.10
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
配置文件
-
/etc/ansible/ansible.cfg
: 默认位置
重要参数:
- inventory: 指定主机清单位置
- forks:并行任务数量
- sudo_user: 是否提权
- remote_port: 远控ssh端口
- host_key_checking: 关闭sshkey交互认证
- log_path: 日志
- private_key_file: 私钥认证文件
主机清单(inventory)
- 普通分组
- 正则分组
- 官方文档:https://docs.ansible.com/
变量定义
- 主机变量和主机组变量的定义: 单独的主机变量的优先级高于组变量的优先级
$ vim /etc/ansible/hosts
[webservers]
192.168.56.11 ansible_ssh_user=root ansible_ssh_pass=yeecallk8s http_port=80
192.168.56.12 ansible_ssh_user=root ansible_ssh_pass=yeecallk8s
192.168.56.13 ansible_ssh_user=root ansible_ssh_pass=yeecallk8s
192.168.56.14 ansible_ssh_user=root ansible_ssh_pass=yeecallk8s
[webservers:vars]
http_port=8080
server_name=www.baidu.com
$ ansible webservers -a "echo {{ http_port }}" #获取定义变量
192.168.56.14 | CHANGED | rc=0 >>
8080
192.168.56.13 | CHANGED | rc=0 >>
8080
192.168.56.12 | CHANGED | rc=0 >>
8080
192.168.56.11 | CHANGED | rc=0 >>
80
- 抽离出的组变量: 方便引用
$ mkdir /etc/ansible/group_vars
$ vim /etc/ansible/group_vars/webservers.yml
http_port: 8080
server_name: 222.baidu.com
$ vim /etc/ansible/hosts #去掉此处定义的vars
[webservers]
192.168.56.11 ansible_ssh_user=root ansible_ssh_pass=yeecallk8s http_port=80
192.168.56.12 ansible_ssh_user=root ansible_ssh_pass=yeecallk8s
192.168.56.13 ansible_ssh_user=root ansible_ssh_pass=yeecallk8s
192.168.56.14 ansible_ssh_user=root ansible_ssh_pass=yeecallk8s
$ ansible webservers -a "echo {{ http_port }}"
$ ansible webservers -a "echo {{ server_name }}"
ad-hoc
常用的选项
-
-a
: 指定命令参数 -
-C
: 检查 -
-e
: 指定参数 -
-f
: 指定并发个数 -
-i
:指定inventory -
-m
: 指定模块 -
-u
:指定用户 -
-k
: 指定密码,交互式连接 --private-key
- --become-method: 指定sudo,或者切换用户执行
-
--become-user
: 提权用户,比如提权成root
$ ansible webservers -m shell -a "echo 123 >> /tmp/123"
$ ansible webservers -m shell -a "cat /tmp/123"
ssh 密码认证
$ vim /etc/ansible/hosts #去掉此处定义的vars
[webservers]
192.168.56.11 ansible_ssh_user=root ansible_ssh_pass=yeecallk8s
192.168.56.12 ansible_ssh_user=root ansible_ssh_pass=yeecallk8s
ssh 密钥认证 (免密)
$ ssh-keygen
$ ssh-copy-id root@192.168.56.12
$ ssh-copy-id root@192.168.56.13
$ vim /etc/ansible/hosts
[others]
192.168.56.12
192.168.56.13
ansible常用的模块
- 执行shell命令(command,shell)
- shell 支持管道,推荐使用shell模块
- 文件传输(file,copy)
- state: absent, directory, file, hard, link, touch
$ ansible all -m file -a "dest=/tmp/aaa mode=600 state=directory"
$ ansible all -m shell -a "ls -l /tmp/aaa"
$ ansible all -m file -a "dest=/tmp/aaa state=absent" #删除目录或者文件,会递归删除
- 管理软件包(yum)
- install (
present' or
installed',latest'), or remove (
absent' or `removed') a package
- install (
$ ansible all -m yum -a "name=epel-release state=latest"
$ ansible all -m yum -a "name=jq state=latest"
$ ansible 192.168.56.11 -m yum -a "name=memcached state=latest"
$ ansible 192.168.56.11 -m yum -a "name=memcached state=removed"
- 用户和组(user)
- state: absent(删除), present (创建)
提权执行命令
$ ansible all -m user -a "name=ops password=123456" #创建ops用户
$ ansible all -m shell -a "echo 'ops ALL=(ALL) ALL' >> /etc/sudoers" #给予sudo权限
$ ansible all -m shell -a "tail /etc/sudoers" #确认是否添加成功
$ ansible all -m shell -a "ls /root/" -u ops --become-user=root -k #使用ops查看/root
- 从源代码管理系统部署(git)
$ ansible all -m yum -a "name=git state=latest"
$ mkdir /opt/ansible
$ ansible 192.168.56.11 -m git -a "repo=https://github.com/ansible/ansible.git dest=/opt/ansible/"
- 服务管理(service)
- state: reloaded, restarted, started, stopped
- enable=true : 设置开机自启动
$ ansible 192.168.56.11 -m yum -a "name=memcached state=latest"
$ ansible 192.168.56.11 -m service -a "name=memcached state=restarted"
- 收集主机信息(setup)
$ ansible 192.168.56.11 -m setup
$ ansible 192.168.56.11 -m setup -a "filter=ansible_processor" #信息过滤
- PHP 高级面试题 - 如果没有 mb 系列函数,如何切割多字节字符串
- 如何做一个小程序口令红包功能
- 使用思维导图,优雅的完成自己的代码
- 移动端布局攻略
- nginx反向代理https网站 并实现网站的注册和登录功能
- 通过nginx GeoIP模块 限制某些国家地区访问网站
- CDN加速下通过nginx获取网站访客真实ip
- linux centos7服务器使用密钥登录ssh同时禁止root密码登录
- linux nginx服务器安装verynginx防止CC攻击
- linux nginx安装HttpGuard防止CC攻击
- wordpress您的主机禁用了mail()函数 SMTP邮件通知解决方法
- 我的编程之路:知识管理与知识体系
- UTF-8 为什么会比 UTF-16 浪费?
- 码农也要学算法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Angular StoreFeatureModule
- Angular Component之间的事件通知机制
- 如何将你的Python项目全面自动化?
- 正则表达式介绍与使用
- Angular ERROR NullInjectorError: R3InjectorError(AppModule)的错误分析
- 2.4-Air302(NB-IOT)-基础外设-延时,定时器
- Shell正则表达式一览表
- YAML基础语法
- 详解Kubernetes存储体系
- Python3 正则表达式特殊符号及用法.md
- Web网页响应式布局.md
- BootStrap应用开发学习入门1
- Python实现单链表和字典
- 关于如何做好运维管理工作的一点思考
- 2.6-Air302(NB-IOT)-基础外设-AD采集,NTC温度传感器B3950