ansible自动化运维工具的搭建

1.ansible的基本信息

ansible是一种自动化运维工具,基于paramiko开发的,并且基于模块化工作,Ansible是一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台,它是基于python语言,由Paramiko和PyYAML两个关键模块构建。集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的.
https://www.jianshu.com/p/c82737b5485c

ansible被定义为配置管理工具,配置管理工具通常具有以下功能:

  • 确保所依赖的软件包已经被安装
  • 配置文件包含正确的内容和正确的权限
  • 相关服务被正确运行

常用的自动化运维工具技术特性比较:

项目PuppetSaltStackAnsible
开发语言RubyPythonPython
是否有客户端
是否支持二次开发不支持支持支持
服务器与远程机器是否相互验证
服务器与远程机器的通信是否加密是,标准的SSL协议是,使用AES加密是,使用OpenSSH
平台支持AIX , BSD, HP-UX, Linux , Mac OSX , Solaris, WindowsBSD, Linux , Mac OS X , Solaris, WindowsAIX , BSD , HP-UX , Linux , Mac OS X , Solaris
是否提供Web UI提供提供提供,但是是商业版本
配置文件格式Ruby 语法格式YAMLYAML
命令行执行不支持,大师可以通过配置模块实现支持支持

1.ansible的基本架构

ansible系统由控制主机和被管理主机组成,控制主机不支持windows平台
在这里插入图片描述

  • 核心: ansible
  • Core Modules: ansible自带的模块
  • Custom Modules: 核心模块功能不足时,用户可以添加扩展模块
  • Plugins: 通过插件来实现记录日志,发送邮件或其他功能
  • Playbooks: 剧本,YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能
  • Connectior Plugins: ansible基于连接插件连接到各个主机上,默认是使用ssh
  • Host Inventory: 记录由Ansible管理的主机信息,包括端口、密码、ip等

2. ansible特点

部署简单, 只需要在控制主机上部署ansible环境,被控制端上只要求安装ssh和python 2.5以上版本,这个对于类unix系统来说相当与无需配置.

  • no angents: 被管控节点无需安装agent
  • no server: 无服务端,使用是直接调用命名
  • modules in any languages: 基于模块工作, 可以使用任意语言开发模块
  • 易读的语法: 基于yaml语法编写playbook
  • 基于推送模式: 不同于puppet的拉取模式,直接由调用者控制变更在服务器上发生的时间
  • 模块是幂等性的:定义的任务已存在则不会做任何事情,意味着在同一台服务器上多次执行同一个playbook是安全的

3. ansible程序目录结构:

  • 配置文件:/etc/ansible/
  • 执行文件目录: /usr/bin/
  • lib依赖库:/usr/lib/python2.7/site-packages/ansible/
  • help文件:/usr/lib/python2.7/site-packages/ansible

2.ansible服务的搭建

1.获取安装包并安装

[root@server1 ~]# ls
ansible-2.7.8-1.el7.noarch.rpm
ansible-tower-setup-bundle-3.4.2-1.el7.tar.gz
libtomcrypt-1.17-25.el7.x86_64.rpm
libtommath-0.42.0-5.el7.x86_64.rpm
python2-crypto-2.6.1-13.el7.x86_64.rpm
python2-jmespath-0.9.0-1.el7.noarch.rpm
python-httplib2-0.9.2-0.1.el7.noarch.rpm
python-keyczar-0.71c-2.el7.noarch.rpm
python-paramiko-2.1.1-0.9.el7.noarch.rpm
sshpass-1.06-1.el7.x86_64.rpm
[root@server1 ~]# yum install -y *

2.添加用户,并切换

[root@server1 ansible]# useradd devops
[root@server1 ansible]# su - devops 
[devops@server1 ~]$ ls
[devops@server1 ~]$ mkdir ansible
[devops@server1 ~]$ cd ansible/
[devops@server1 ansible]$ ls
[devops@server1 ansible]$ pwd
/home/devops/ansible
[root@server2 ~]# useradd devops
[root@server2 ~]# id devops
uid=1000(devops) gid=1000(devops) groups=1000(devops)
[root@server2 ~]# passwd devops
[root@server3 ~]# useradd devops
[root@server3 ~]# id devops
uid=1000(devops) gid=1000(devops) groups=1000(devops)
[root@server3 ~]# passwd devops 

3.添加配置文件

 [devops@server1 ~]$ ls
[devops@server1 ~]$ mkdir ansible
[devops@server1 ~]$ cd ansible/
[devops@server1 ansible]$ ls
[devops@server1 ansible]$ pwd
/home/devops/ansible
[devops@server1 ansible]$ vim ansible.cfg
  1 [defaults]
  2 
  3 inventory       = inventory
[devops@server1 ansible]$ ls
ansible.cfg
[devops@server1 ansible]$ vim inventory
  1 [test]
  2 server2
  3 
  4 [db]
  5 server3
  6 
  7 [webservers:children]
  8 test
  9 db

在这里插入图片描述
在这里插入图片描述

文件的编写是很灵活的,又很多中写法。
这里列举4种方法:
<1>一个web组,组中有两个主机,分别的server1和server2
[web]
server1
server2
<2>一个web组,组中有很多主机,主机名只要是以server开头的即可
[web]
server*
<3>一个web组,组中有100个主机,主机名是server1-server100
[web]
server[1:100]
<4>两个组,一个web组,一个db组。web组中的主机为server1,db组中的主机为server2。
[web]
server1
[db]
server2

4.制作密钥并发送给server2和server3

[devops@server1 ansible]$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/devops/.ssh/id_rsa): 
Created directory '/home/devops/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/devops/.ssh/id_rsa.
Your public key has been saved in /home/devops/.ssh/id_rsa.pub.
The key fingerprint is:
02:79:4e:dc:5c:4e:eb:17:ed:96:77:b7:c2:55:5a:45 devops@server1
The key's randomart image is:
+--[ RSA 2048]----+
|          o    .E|
|     o o + . .  .|
|    o + o o . . o|
|     =   .   o +.|
|      o S . . =.+|
|       .   .....+|
|             o . |
|              .  |
|                 |
+-----------------+
[devops@server1 ansible]$ ssh-copy-id server2
[devops@server1 ansible]$ ssh-copy-id server3

5.测试

[devops@server1 ansible]$ ansible all --list-host
  hosts (2):
    server3
    server2
[devops@server1 ansible]$ ansible all -m ping
server2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
[devops@server1 ansible]$ ansible server2 -m ping
server2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
[devops@server1 ansible]$ ansible server3 -m ping
server3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
[devops@server1 ansible]$ ansible test -m ping
server2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
[devops@server1 ansible]$ ansible db -m ping
server3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

在这里插入图片描述

<think>我们正在Ubuntu系统上搭建Ansible自动化运维框架。根据引用[3],我们选择Ubuntu 20.04作为操作系统。以下是详细步骤: ### 1. 环境准备 #### 1.1 安装Ansible 在Ubuntu上,可以使用APT包管理器安装Ansible: ```bash sudo apt update sudo apt install -y ansible ``` #### 1.2 配置SSH无密码登录 Ansible通过SSH管理节点,需要配置控制节点到被管理节点的无密码登录: - 在控制节点生成SSH密钥(如果尚未生成): ```bash ssh-keygen -t rsa -b 4096 ``` - 将公钥复制到被管理节点(替换`user@remote_host`为实际用户名主机): ```bash ssh-copy-id user@remote_host ``` #### 1.3 确保被管理节点有Python Ansible要求被管理节点安装Python。Ubuntu通常预装Python,但如果没有,可手动安装: ```bash sudo apt install -y python3 ``` ### 2. 配置Ansible #### 2.1 编辑配置文件(可选) 主配置文件位于`/etc/ansible/ansible.cfg`。可以按需修改,例如调整并发数: ```ini [defaults] forks = 50 # 同时管理50台主机 ``` #### 2.2 定义主机清单 创建或编辑`/etc/ansible/hosts`文件,定义主机分组。例如: ```ini [web_servers] 192.168.1.10 ansible_user=ubuntu 192.168.1.11 ansible_user=ubuntu [db_servers] 192.168.1.20 ansible_user=ubuntu ``` ### 3. 测试连接 使用`ansible`命令测试到被管理节点的连接: ```bash ansible web_servers -m ping ``` 成功时会返回`pong`响应。 ### 4. 编写Playbook 创建Playbook文件(如`setup_web.yml`),用于自动化任务。以下示例安装Nginx: ```yaml --- - name: Install and start Nginx hosts: web_servers become: yes tasks: - name: Install Nginx apt: name: nginx state: present update_cache: yes - name: Start Nginx service service: name: nginx state: started enabled: yes ``` ### 5. 执行Playbook 运行Playbook: ```bash ansible-playbook setup_web.yml ``` ### 6. 验证 使用引用[1]中的方法检查被管理节点信息: ```bash ansible web_servers -m shell -a 'cat /etc/os-release | grep PRETTY_NAME | cut -d "=" -f2' ``` 或如引用[2]创建目录: ```bash ansible web_servers -m file -a 'path=/root/web mode=644 owner=root group=root state=directory' ``` ### 最佳实践 - **模块化**:使用Roles组织复杂任务(参考问题3)。 - **安全**:用Ansible Vault加密敏感数据(参考问题2)。 - **版本控制**:将Playbook存入Git仓库。 §§相关问题§§ 1. 如何优化Ansible执行效率? 2. 如何在Ansible中管理不同环境(如测试/生产)? 3. Ansible如何与Docker集成实现容器化部署?</think>### Ubuntu系统下搭建Ansible自动化运维框架指南 #### 1. 安装Ansible ```bash # 更新软件包索引 sudo apt update # 安装Ansible核心组件 sudo apt install -y ansible # 验证安装(应显示版本号) ansible --version ``` #### 2. 配置SSH无密码登录 ```bash # 生成SSH密钥(控制节点) ssh-keygen -t rsa -b 4096 # 分发公钥到被管理节点(替换user@remote_host) ssh-copy-id user@remote_host ``` #### 3. 配置主机清单 编辑`/etc/ansible/hosts`文件: ```ini [web_servers] 192.168.1.10 ansible_user=ubuntu 192.168.1.11 ansible_user=ubuntu [db_servers] db1.example.com db2.example.com ``` #### 4. 测试连接 ```bash # 测试所有节点连通性(引用[1]方式) ansible all -m ping # 测试特定节点组(引用[1]方式) ansible web_servers -m shell -a 'lsb_release -d' ``` #### 5. 创建基础Playbook 创建`setup_ubuntu.yml`文件: ```yaml --- - name: 基础Ubuntu服务器配置 hosts: all become: yes tasks: - name: 更新APT缓存 apt: update_cache: yes - name: 安装基础工具 apt: name: ['htop', 'tmux', 'tree'] state: present - name: 创建运维目录(引用[2]方式) file: path: /opt/ansible_ops state: directory mode: 0755 owner: root group: root ``` #### 6. 执行Playbook ```bash ansible-playbook setup_ubuntu.yml ``` #### 7. 验证配置 ```bash # 检查目录创建(引用[2]方式) ansible all -m shell -a 'ls -ld /opt/ansible_ops' # 检查系统信息(引用[1]方式) ansible db_servers -m shell -a 'cat /etc/os-release | grep PRETTY_NAME' ``` ### 关键配置说明 1. **Python环境**(引用[3]): - Ubuntu 20.04默认使用Python 3.8+ - 确保被管理节点安装Python:`sudo apt install python3` 2. **配置文件路径**: - 主配置:`/etc/ansible/ansible.cfg` - 主机清单:`/etc/ansible/hosts` 3. **常用模块**: - `apt`:Ubuntu软件包管理 - `copy`:文件分发 - `service`:服务管理 - `user`:用户管理 ### 最佳实践 1. **项目结构**(推荐): ``` ansible_project/ ├── inventories/ │ ├── production │ └── staging ├── roles/ │ ├── nginx │ └── postgresql └── playbooks/ ├── base.yml └── deploy.yml ``` 2. **使用Python虚拟环境**(引用[3]): ```bash sudo apt install -y python3-venv python3 -m venv ansible-env source ansible-env/bin/activate pip install ansible ``` 3. **配置优化**: ```ini # /etc/ansible/ansible.cfg [defaults] inventory = ./inventories/production forks = 50 host_key_checking = False ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值