一、 准备工作
系统要求:
一个运行 CentOS 7 (建议更新到最新小版本) 的节点作为 Ansible 控制节点。(192.168.63.134)
一个或多个 CentOS 7 (或其他 Linux) 节点作为 被管理节点。(192.168.63.135)
控制节点需要能通过网络 (SSH) 访问被管理节点。
权限要求:
在控制节点上执行安装需要 root 用户或具有 sudo 权限的用户。
Ansible 默认使用 SSH 连接到被管理节点,需要确保:
控制节点上有一个用户 (例如 ansible_user) 可以 SSH 登录到所有被管理节点。
该用户在被管理节点上拥有执行特权命令的权限 (通常通过配置 sudo 实现,且建议配置免密码 sudo 以获得最佳自动化体验)。
网络连接: 确保控制节点可以访问互联网以下载软件包 (或配置好内部 YUM 仓库)。
二、 安装 Ansible 控制节点
1.更新所有系统软件包
yum update -y
2.安装 EPEL 仓库 (Extra Packages for Enterprise Linux),提供 Ansible 包
yum install -y epel-release
3.安装ansbile
yum install -y ansible
4.验证安装
ansible --version
三、 配置 Ansible
主机清单 (Inventory)
-
核心概念: Ansible 通过 主机清单 知道要管理哪些机器。默认清单文件是
/etc/ansible/hosts
。 -
编辑清单文件:
vim /etc/ansible/hosts [local] 127.0.0.1 ansible_connection=local [webservers] 127.0.0.1 192.168.63.135 [docker_hosts] 127.0.0.1 192.168.63.135
四、 设置 SSH 免密登录
为了让 Ansible 无需手动输入密码即可连接被管理节点,配置 SSH 密钥认证是最佳实践。
在控制节点生成 SSH 密钥对
-
ssh-keygen
注:按 Enter 接受默认保存位置 (~/.ssh/id_rsa) 和空密码 (或设置强密码)
-
将公钥复制到被管理节点
ssh-copy-id 192.168.63.135
测试
五、 测试 Ansible 连接
Ping 模块测试:
测试所有主机
ansible all -m ping
测试特定组 (如 web_servers)
ansible web_servers -m ping
测试单个主机
ansible 192.168.63.135 -m ping
六、通过ansible安装docker
创建一个名为 install_docker.yml
的 Playbook 文件
---
- name: Install Docker on CentOS
hosts: docker_hosts
become: true
tasks:
- name: Install yum-utils
yum:
name: yum-utils
state: present
- name: Add Docker CE repository
yum_repository:
name: docker-ce
description: Docker CE Repository
baseurl: http://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable
gpgcheck: no
- name: Install Docker CE
yum:
name: docker-ce-20.10.9-3.el7
state: present
- name: Create /etc/docker directory
file:
path: /etc/docker
state: directory
- name: Configure Docker daemon.json
copy:
content: |
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
dest: /etc/docker/daemon.json
- name: Start and enable Docker service
systemd:
name: docker
state: started
enabled: true
在控制节点上,使用以下命令执行 Playbook
ansible-playbook install_docker.yml
-
name
:任务的名称,用于描述该任务的作用。 -
hosts
:指定要执行任务的目标主机组。 -
become: true
:表示使用sudo
权限执行任务。 -
task: 包含一系列要执行的任务。
-
yum
模块:用于安装或管理yum
软件包。 -
yum_repository
模块:用于添加yum
仓库。 -
file
模块:用于创建目录。 -
copy
模块:用于将内容复制到指定文件。 -
systemd
模块:用于管理系统服务,如启动、停止、启用服务等
-
测试发现两台主机全部安装好docker