2. 环境准备与基础工具:Linux基础环境配置、Python环境搭建、Git版本控制、Ansible基础安装

好,咱们正式开始动手了。这一章说白了就是「搭台子」。你想想看,后面所有的自动化规则、定制脚本、编排任务,都得跑在某个环境上。如果地基没打牢,后面全是坑。我个人习惯是,每接手一个新项目,第一件事就是把环境标准化,哪怕花一整天也值得。

2.1 Linux基础环境配置

我建议你统一用 CentOS 7.9 或 Ubuntu 20.04 LTS。为什么?因为这两个版本在运维圈子里最稳,社区支持也最成熟。我在项目中遇到过有人用最新的 Ubuntu 22.04,结果 Ansible 某个模块的依赖包还没适配,折腾了两天。嗯,这里要注意:生产环境别追新。

2.1.1 最小化安装后的第一件事

装完系统后,别急着装软件。先做三件事:

  • 关闭 SELinux(除非你真的很懂它)—— 我见过太多因为 SELinux 策略导致 Ansible 执行失败的案例。
  • 配置 yum/apt 源为国内镜像 —— 阿里云或清华源都行,下载速度快十倍。
  • 设置主机名和 hosts 解析 —— 这是后面集群通信的基础。

核心命令速查:

# CentOS 7
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 配置阿里云 yum 源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum makecache

# 设置主机名
hostnamectl set-hostname ansible-master
echo "192.168.1.100 ansible-master" >> /etc/hosts

2.1.2 基础软件包安装

我个人习惯装完系统后,先跑一遍这个命令,把常用工具补齐:

yum install -y vim wget curl net-tools bind-utils lsof tree bash-completion

为什么要有 bash-completion?你想想看,敲命令时按 Tab 能自动补全,效率提升不是一星半点。我曾经在排查问题时,就因为少装了 net-tools,导致 ifconfig 用不了,还得现装,挺尴尬的。

2.2 Python环境搭建

Ansible 是基于 Python 写的,所以 Python 环境是必须的。CentOS 7 自带的 Python 2.7 其实也能用,但我强烈建议你装 Python 3。为什么?因为 Python 2 在 2020 年已经停止维护了,很多新模块都不再支持。

2.2.1 安装 Python 3.6+

CentOS 7 默认没有 Python 3,需要从 EPEL 源安装:

yum install -y epel-release
yum install -y python36 python36-pip python36-devel

装完之后,记得把 pip3 升级到最新:

pip3 install --upgrade pip

小技巧: 我习惯在 /usr/local/bin 下创建一个软链接,让 python 直接指向 python3:

ln -s /usr/bin/python3 /usr/local/bin/python

这样后面写脚本时就不用纠结是 python 还是 python3 了。

2.2.2 虚拟环境(强烈推荐)

你想想看,如果所有项目都共用一套 Python 包,迟早会出依赖冲突。我就在项目中遇到过:A 项目需要 requests==2.25,B 项目需要 requests==2.26,结果一升级,A 项目挂了。

解决方案就是虚拟环境:

pip3 install virtualenv
mkdir /opt/venv
virtualenv -p python3 /opt/venv/ansible-env
source /opt/venv/ansible-env/bin/activate

激活后,终端前面会出现 (ansible-env) 的提示,表示你已经在虚拟环境里了。后面所有 Python 包都装在这里,互不干扰。

2.3 Git版本控制

做自动化,没有版本控制就是裸奔。你想想看,一个 Playbook 改错了,如果没有 Git,你只能凭记忆回退。我曾经有一次误删了 200 行的配置文件,幸好有 Git,一个 git checkout 就救回来了。

2.3.1 安装与基础配置

yum install -y git
git --version   # 确认安装成功

# 配置用户信息(必须)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 推荐配置
git config --global core.autocrlf input
git config --global core.safecrlf true

注意: user.name 和 user.email 不配置的话,Git 会报错。我见过新手直接跳过这步,结果提交记录里全是「unknown」,后面追查问题根本找不到责任人。

2.3.2 初始化 Ansible 项目仓库

我个人习惯把 Ansible 的所有内容放在一个 Git 仓库里管理:

mkdir -p /data/ansible-project
cd /data/ansible-project
git init
echo "*.retry" > .gitignore
echo "*.pyc" >> .gitignore
echo "venv/" >> .gitignore
git add .
git commit -m "初始化 Ansible 项目结构"

为什么要忽略 *.retry 文件?因为 Ansible 执行失败时会生成这些文件,它们不应该被提交到仓库里。嗯,这里要注意:.gitignore 一定要在第一次提交前写好,否则后面再改就麻烦了。

2.4 Ansible基础安装

终于到主角了。Ansible 的安装其实很简单,但有几个细节需要注意。

2.4.1 通过 pip 安装(推荐)

我建议用 pip 安装,因为可以指定版本,也方便升级:

# 先激活虚拟环境
source /opt/venv/ansible-env/bin/activate

# 安装 Ansible
pip install ansible

# 验证安装
ansible --version

输出应该类似这样:

ansible [core 2.12.3]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules']
  ansible python module location = /opt/venv/ansible-env/lib/python3.6/site-packages/ansible
  executable location = /opt/venv/ansible-env/bin/ansible
  python version = 3.6.8

版本选择建议:

Ansible 版本 适用场景 我的建议
2.9.x 老项目、稳定至上 如果团队习惯用旧版,可以保留
4.x / 5.x 新项目、需要新特性 推荐,社区支持好
最新版 尝鲜、测试环境 生产环境慎用

2.4.2 通过 yum 安装(备选)

如果你不想用虚拟环境,也可以用 yum 直接装:

yum install -y epel-release
yum install -y ansible

但说实话,yum 源的 Ansible 版本通常比较旧。我建议还是用 pip 方式,灵活得多。

2.4.3 验证安装与基础配置

装完之后,先建一个最基本的 ansible.cfg:

mkdir -p /etc/ansible
cat > /etc/ansible/ansible.cfg << 'EOF'
[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False
gathering = smart
EOF

然后创建一个测试用的 inventory 文件:

cat > /etc/ansible/hosts << 'EOF'
[local]
127.0.0.1 ansible_connection=local
EOF

最后跑一个简单的 ping 测试:

ansible local -m ping

如果返回:

127.0.0.1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

恭喜你,环境搭建成功了!

避坑指南: 我曾经在 CentOS 7 上直接用 yum 装 Ansible,结果装的是 2.4 的旧版,很多新模块都用不了。后来统一改用 pip 安装,再也没出过问题。所以,能用 pip 就别用 yum。

2.5 本章小结

这一章我们做了四件事:

  1. 配置了 Linux 基础环境,关闭了 SELinux,配好了国内源
  2. 搭建了 Python 3 环境,并配置了虚拟环境
  3. 安装了 Git,初始化了 Ansible 项目仓库
  4. 通过 pip 安装了 Ansible,并验证了连通性

说白了,这些步骤就像盖房子前打地基。虽然看起来琐碎,但每一步都关系到后面的稳定性。下一章,我们就要开始写真正的 Ansible Playbook 了。到时候你会发现,今天花的时间,绝对值。