Ops工具
Helm
Helm 包管理工具
Helm进阶
Ansible
Ansible入门
Ansible 常用模块指令
Ansible playbook详解
Vdbench
vdbench基础使用指南
vdbench在ARM服务器上出现共享库aarch64.so问题
GitLab
Gitlab自定义机器人
Gitlab安装和使用
CosBench
Cosbench测试
s3curl
s3curl常用命令大全
S3curl测试
FIO
FIO安装和使用方法
本文档使用 MrDoc 发布
-
+
首页
Ansible入门
## 简介 Ansible 是一个 IT 自动化工具。它能配置系统、部署软件、编排更复杂的 IT 任务,如连续部署或零停机时间滚动更新。 Ansible 用 python 编写,尽管市面上已经有很多可供选择的配置管理解决方案(例如 Salt,Puppet,Chef等),但它们各有优劣。 Ansible的特点在于它的简洁。让 Ansible 在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要配置的每个节点上安装自己的组件。同时提供的一个优点在于,如果需要的话,你可以在不止一个地方控制你的整个基础架构。 ## 特性 1. Agentless:不需要在被管理节点上安装客户端,只要有sshd即可 2. Serverless:在服务端不需要启动任何服务,只需要执行命令就行 3. Modules in any language:基于模块工作,可以使用任意语言开发ansible模块 4. YAML, not code:使用yaml语言定制playbook 5. SSH by default:默认使用ssh控制各节点 ## 基本组件 - 核心:ansible - 核心模块(Core Modules):这些都是ansible自带的模块 - 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块 - 插件(Plugins):完成模块功能的补充 - 剧本(Playbooks):把需要完成的多个任务定义在剧本中 - 主机组(Host Inventory):ansible在管理多台主机时,可以选择只对其中的一部分执行某些操作 ## 前提条件 1、设置好各个节点的IP及主机名,并写入/etc/hosts中(每个节点完成) 2、创建用户,用于管理ansible(每个节点完成) ```bash # 创建用户 $ useradd admin # 设置密码 $ passwd admin ``` 3、权限委派 ```bash # 设置admin的权限,让他能够得到root权限 # 修改/etc/sudoers $ vi /etc/sudoers # 在root ALL=(ALL) ALL下面添加 admin ALL=(ALL) NOPASSWD: ALL # 冒号后面有空格,NOPASSWD表示执行命令时不需要密码,当然将他改为指定命令也是可以的 ``` 4、在主控端上生成ssh密钥,用于免密连接 ```bash # 首先切换到admin $ su - admin # 一定要加“-”,代表切换环境变量,否则后面可能报错 $ ssh-keygen # 将密钥拷贝到其他节点 $ ssh-copy-id 192.168.1.1 ``` 5、根据需要关闭防火墙或打开某些端口(所有节点) ```bash $ systemctl disable firewalld $ systemctl stop firewalld $ sed -i 's/SELINUX=enabled/SELINUX=disable/g' /etc/sysconfig/selinux $ seteforce 0 ``` 6、创建本地yum源(主控端完成) ```bash $ yum install -y httpd $ mkdir /var/www/html/pub $ mkdir /var/www/html/ansible # 创建/isos目录,用于存放iso文件 $ mkdir /isos # 通过winSCP或xftp将iso文件传到主控端/isos中 - 将iso挂载到/var/www/html/pub和/var/www/html/ansible中,并写入/etc/fstab $ vim /etc/fstab /iso/rhel-8.0-x86_64-dvd.sio /var/www/html/pub iso9669 defaults 0 0 /iso/rhel-8.0-x86_64-additional-20190521.iso /var/www/html/ansible iso9660 defaults 0 0 # 挂载 $ mount -a # 使用df检查是否成功挂载 $ df -Th ``` 7、修改yum仓库 ```bash $ vi /etc/yum.repos.d/dvd.repo [BaseOS] name=BaseOS baseurl=http://192.168.7.1/pub/BaseOS enables=1 gpgcheck=0 [AppStream] name=AppStream baseurl=http://192.168.7.1/pub/AppStream enables=1 gpgcheck=0 [ansible] name=ansible baseurl=http://192.168.7.1/ansible/ansible-2.8-for-rhel-8-x86_64-rpms enables=1 gpgcheck=0 $ yum clean all $ yum makecache ``` 8、将/etc/yum.repos.d/dvd.repo 复制到其他各个节点 ```bash $ scp /etc/yum.repos.d/dvd.repo root@192.168.1.2:/etc/yum.repos.d/dvd.repo ``` ## 安装与配置 安装并查看版本 ```bash $ yum install -y ansible $ ansible –version ``` 配置ansible ```bash $ su - admin $ sudo vi /etc/ansible/ansible.cfg ``` 更改以下内容 [defaults] inventory = /home/admin/ansible/inventory(可自定义) remote_user = admin host_key_checking = False [privilege_escalation] become=True become_method=sudo become_user=root become_ask_pass=False ```bash $ mkdir /home/admin/ansible $ touch /home/admin/ansible/inventory ``` 这个文件存放的是你所有的节点,可以分组 ```bash $ vim /home/admin/ansible/inventory [test] 192.168.7.10 [dev] 192.168.7.1 192.168.7.2 [prod] 192.168.7.1 192.168.7.3 [it:children](这个表示prod和webservers是it的子组,it包含这两个组的所有) prod dev ``` 测试是否能够正常正常读取节点 ```bash $ ansible all –list-hosts ``` 下面执行的是所有节点执行ping,如果返回bong则表示成功,all是缺省值,表示所有节点,-m 后面跟模块名, -a 后面跟参数,用单引号括起来 ```bash $ ansible all -m ping ``` 下面的是所有主机创建用户 ```bash $ ansible all -m command -a ‘useradd user10’ ``` ## 用法 查看所有模块 ```bash $ ansible-doc -l ``` 根据需要查找模块 ```bash $ ansible-doc -l | grep yum ``` 查看模块文档 ```bash $ ansible-doc yum ``` 上面以命令的方式执行叫ad-hoc,下面介绍以文件的方式执行:playbook 一定要注意格式 ```bash vim createuser.yml - name: Create users and group # playbook名称 hosts: test # 执行的目标主机组 tasks: - name: create alice user # 任务名称 user: # 使用模块 name: alice # 目标用户名称 state: present # 状态,present表示创建 - name: create it group group: name: it state: present ``` 写好文件后先检测语法,但这条命令只能检测你的格式 ```bash $ ansible-playbook –syntax-check creatuser.yml ``` 测试,前提是后面的操作和前面的操作没有联系,否则可能会报错 ```bash $ ansible-playbook -C creatuser.yml ``` 需求,给test主机组内所有主机安装httpd以及php,并启动,要求下次开机会自动启动 ```yaml - name: install httpd and setting hosts: test tasks: - name: install httpd yum: name: - httpd - php status: present - name: enable httpd service: name: httpd state: started enabled: yes ``` 需求: 1. 将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上 2. 将 Development Tools 软件包组安装到 dev 主机组中的主机上 3. 将test主机组中主机上的所有软件包更新为最新版本 ```yaml - name: install packages hosts: dev,test,prod tasks: - name: install httpd and php yum: name: "{{ item }}" state: present loop: - httpd - php - name: install package group hosts: dev tasks: - name: install Development Tools yum: name: '@Development Tools' state: present - name: upgrade package hosts: test taska: - name: upgrade all package yum: name: '*' state: latest ```
阿星
2024年1月21日 21:01
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码