Ansible与Docker自动化运维实战:从零构建容器化部署流水线
30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度在实际运维工作中手工登录服务器、执行重复命令、部署应用、管理配置不仅效率低下而且极易出错。随着服务器规模从几台扩展到几十上百台这种“人肉运维”模式将变得不可持续。自动化运维正是为了解决这一痛点其核心思想是“一次编写处处执行”将运维操作代码化、流程化。Ansible 和 Docker 是构建现代自动化运维体系的两大基石Ansible 负责编排和执行任务实现配置管理、应用部署Docker 则通过容器化技术将应用及其依赖打包成标准单元实现环境一致性。本文面向希望从零开始构建自动化运维能力的运维工程师和开发者。我们将完成一个完整的实战闭环首先在控制节点安装和配置 Ansible然后在被管节点上通过 Ansible 自动化安装 Docker最后使用 Ansible 部署一个简单的容器化应用。通过这个流程你将掌握 Ansible 的核心概念、Inventory 管理、Playbook 编写以及如何将 Ansible 与 Docker 结合实现从基础设施准备到应用上线的全流程自动化。学完后你可以将此模式扩展到更复杂的场景如多环境部署、服务编排和持续集成。1. 理解自动化运维的核心Ansible 与 Docker 的角色在深入安装和操作之前必须先厘清 Ansible 和 Docker 在自动化运维体系中各自扮演的角色以及它们如何协同工作。混淆两者的职责是初学者常见的误区。1.1 Ansible无代理的配置管理与任务编排器Ansible 的核心价值在于“简单”和“无代理”。它通过 SSHLinux/Unix或 WinRMWindows协议连接到目标主机将模块Module推送到远端执行无需在目标主机上安装额外的客户端守护进程。一个 Ansible 控制节点可以管理成千上万台主机。它的主要工作模式包括Ad-Hoc 命令用于执行一次性任务例如检查一组服务器的磁盘使用情况ansible all -m shell -a df -h。PlaybookAnsible 的脚本使用 YAML 格式编写。它将一系列任务Task组织成剧本Play描述在哪些主机Hosts上以什么身份become执行什么操作。Playbook 是实现复杂、可重复自动化流程的标准方式。在本文的上下文中Ansible 将承担两个核心职责第一作为“安装器”在所有目标服务器上自动化安装 Docker 引擎第二作为“部署器”在已经安装了 Docker 的服务器上执行docker run等命令来部署和管理容器。1.2 Docker应用容器化与运行时环境Docker 解决了“在我的机器上能跑为什么到服务器上就不行”的环境一致性问题。它将应用代码、运行时、系统工具、系统库和设置打包成一个轻量级、可移植的容器镜像。这个镜像可以在任何安装了 Docker 引擎的环境中运行保证环境完全一致。在自动化运维流程中Docker 通常处于 Ansible 的下游环境准备阶段Ansible 确保所有目标服务器都安装了正确版本的 Docker 引擎。应用部署阶段Ansible 从镜像仓库拉取指定的 Docker 镜像并以定义的参数端口、卷、环境变量等运行容器。1.3 协同工作流从零到容器化应用上线两者的协作构成了一个清晰的自动化流水线下图展示了从零开始到应用上线的核心步骤与工具分工flowchart TD A[准备控制节点与主机清单] -- B[Ansible: 通过SSH连接被管节点] B -- C[Ansible Playbookbr执行系统初始化任务] C -- D[Ansible Playbookbr在所有节点安装Docker] D -- E[被管节点环境就绪br具备Docker运行时] E -- F[Ansible Playbookbr拉取镜像并运行容器] F -- G[完成br容器化应用上线]这个流程体现了基础设施即代码IaC的思想所有步骤都可以通过版本控制的 Ansible Playbook 来管理和重复执行。2. 环境准备与规划在开始编写任何自动化脚本之前规划好实验环境是成功的第一步。一个清晰的环境规划能避免后续的许多网络和权限问题。2.1 实验环境架构我们假设一个最简单的实验环境包含1台控制节点和2台被管节点可以是虚拟机或云服务器。控制节点需要安装 Ansible 的机器。它将是我们的“指挥中心”。系统Ubuntu 22.04 / CentOS 8 / Rocky Linux 8任选其一主机名ansible-ctrlIP192.168.1.10被管节点1我们将通过 Ansible 管理的第一台服务器。系统Ubuntu 22.04主机名web-server-01IP192.168.1.11被管节点2我们将通过 Ansible 管理的第二台服务器。系统CentOS 8主机名db-server-01IP192.168.1.12注意在实际操作中请将 IP 地址替换为你自己环境的真实地址。确保所有机器之间网络互通并且控制节点可以通过 SSH 连接到被管节点。2.2 前置条件检查清单在控制节点上执行以下检查确保基础环境就绪Python 环境Ansible 本身由 Python 编写控制节点需要 Python 3.8 或更高版本。# 在控制节点上检查 python3 --versionSSH 互通这是 Ansible 工作的基础。确保从控制节点可以免密 SSH 登录到所有被管节点。在控制节点生成 SSH 密钥对如果还没有ssh-keygen -t rsa -b 4096 -C “ansible-control” # 一路回车即可将公钥分发到每一台被管节点ssh-copy-id root192.168.1.11 # 输入被管节点密码 ssh-copy-id root192.168.1.12 # 输入被管节点密码测试免密登录ssh root192.168.1.11 “hostname” # 应返回 web-server-01 ssh root192.168.1.12 “hostname” # 应返回 db-server-01权限本文示例使用root用户进行 SSH 连接和提权操作这简化了学习过程。在生产环境中强烈建议创建一个具有sudo权限的专用运维账户并在 Ansible 中配置become方法来提权遵循最小权限原则。3. 在控制节点安装与配置 AnsibleAnsible 的安装非常简单特别是在基于 RPM 或 DEB 包管理的系统上。3.1 在 Ubuntu/Debian 控制节点上安装对于 Ubuntu 22.04可以通过系统的apt包管理器安装。# 更新软件包索引 sudo apt update # 安装软件属性通用包为添加PPA可能需要 sudo apt install -y software-properties-common # 添加Ansible官方PPA可选但通常能获得较新版本 sudo add-apt-repository --yes --update ppa:ansible/ansible # 安装Ansible sudo apt install -y ansible3.2 在 CentOS/RHEL/Rocky Linux 控制节点上安装对于 CentOS 8 或 Rocky Linux 8需要先启用 EPEL 仓库然后通过dnf安装。# 安装EPEL仓库 sudo dnf install -y epel-release # 更新元数据缓存 sudo dnf makecache # 安装Ansible sudo dnf install -y ansible3.3 验证安装与基础配置安装完成后进行基本验证和配置。验证安装ansible --version此命令会输出 Ansible 的版本、可执行文件路径和配置路径。确认版本在 2.9 以上即可。理解 Ansible 配置文件 Ansible 的配置文件查找顺序为ANSIBLE_CONFIG环境变量指定的文件./ansible.cfg当前目录~/.ansible.cfg用户家目录/etc/ansible/ansible.cfg系统全局 我们创建一个项目专用的配置文件这样不会影响系统全局设置。# 创建一个项目目录 mkdir ~/ansible-docker-demo cd ~/ansible-docker-demo # 创建并编辑ansible.cfg cat ansible.cfg ‘EOF‘ [defaults] # 指定默认的Inventory文件路径 inventory ./inventory # 禁用首次连接时的主机密钥检查仅限实验环境 host_key_checking False # 设置远程用户根据你的环境修改 remote_user root # 设置默认的become提权方式为sudo become True become_method sudo # become_user root # 默认就是root可省略 # 设置SSH连接超时和重试 timeout 30 retries 3 EOF生产环境警告host_key_checking False会跳过 SSH 主机密钥验证存在安全风险仅用于实验或受信内网环境。生产环境应设置为True并妥善管理已知主机密钥。配置 Inventory主机清单 Inventory 文件定义了 Ansible 管理哪些主机以及如何将它们分组。创建inventory文件# ~/ansible-docker-demo/inventory # 定义被管节点使用IP或域名并指定连接变量 [web_servers] 192.168.1.11 ansible_userroot [db_servers] 192.168.1.12 ansible_userroot # 定义一个总组包含所有服务器 [all_servers:children] web_servers db_servers # 为所有主机设置通用变量可选 [all_servers:vars] # ansible_connectionssh # 默认就是ssh # 可以在这里设置时区、yum/apt源等通用配置这个清单将我们的两台服务器分别归入web_servers和db_servers组并创建了一个父组all_servers。测试连接 使用ping模块测试 Ansible 是否能与被管节点正常通信。# 测试所有主机 ansible all -m ping # 测试web_servers组 ansible web_servers -m ping # 测试单台主机 ansible 192.168.1.11 -m ping如果一切正常你会看到类似以下的成功输出其中“ping”: “pong”是关键192.168.1.11 | SUCCESS { “changed”: false, “ping”: “pong” } 192.168.1.12 | SUCCESS { “changed”: false, “ping”: “pong” }4. 编写 Playbook 自动化安装 Docker现在我们将使用 Ansible Playbook 这个强大的工具来自动化地在所有被管节点上安装 Docker。我们将编写一个名为install_docker.yml的 Playbook。4.1 Playbook 结构解析一个 Playbook 包含一个或多个“Play”。每个 Play 针对一组主机执行一系列“Task”。每个 Task 调用一个 Ansible 模块。创建install_docker.yml文件# ~/ansible-docker-demo/install_docker.yml --- - name: 在所有服务器上安装并配置 Docker hosts: all_servers # 目标主机组对应inventory中的定义 become: yes # 告诉Ansible以sudo权限运行任务 vars: # 定义变量使Playbook更灵活 docker_users: [] # 可以添加需要加入docker组的用户例如 [‘appuser‘] tasks: # 任务列表开始 - name: 为Ubuntu系统安装依赖包 apt: name: - apt-transport-https - ca-certificates - curl - software-properties-common - gnupg - lsb-release state: present update_cache: yes when: ansible_os_family “Debian“ # 仅当系统是Debian/Ubuntu时执行 - name: 为CentOS/RHEL系统安装依赖包 yum: name: - yum-utils - device-mapper-persistent-data - lvm2 state: present when: ansible_os_family “RedHat“ # 仅当系统是RedHat/CentOS/Rocky时执行 - name: 为Ubuntu添加Docker官方GPG密钥 apt_key: url: https://download.docker.com/linux/ubuntu/gpg state: present when: ansible_os_family “Debian“ - name: 为Ubuntu添加Docker稳定版仓库 apt_repository: repo: “deb [archamd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable“ state: present update_cache: yes when: ansible_os_family “Debian“ - name: 为CentOS/RHEL添加Docker官方仓库 yum_repository: name: docker-ce-stable description: “Docker CE Stable“ baseurl: https://download.docker.com/linux/centos/$releasever/$basearch/stable gpgcheck: yes gpgkey: https://download.docker.com/linux/centos/gpg enabled: yes when: ansible_os_family “RedHat“ - name: 安装Docker引擎、客户端及容器运行时 package: name: - docker-ce - docker-ce-cli - containerd.io - docker-compose-plugin # Docker Compose V2 (作为插件) state: present # 注意对于RedHat系包名可能略有不同但docker-ce是通用的。 - name: 确保Docker服务已启动并开机自启 systemd: name: docker state: started enabled: yes - name: 将指定用户加入docker组避免每次使用sudo user: name: “{{ item }}“ groups: docker append: yes loop: “{{ docker_users }}“ # 如果docker_users变量为空列表此任务将被跳过 # 生产环境建议创建一个专用用户并加入docker组 - name: 验证Docker安装 command: docker --version register: docker_version_result # 将命令输出注册到一个变量中 changed_when: false # 此命令不会改变系统状态所以changed状态设为false - name: 打印Docker版本信息 debug: msg: “Docker installed successfully: {{ docker_version_result.stdout }}“4.2 关键模块与参数详解apt/yum/package模块用于管理软件包。state: present确保安装。update_cache: yes在操作前更新仓库缓存类似apt update或yum makecache。apt_key与apt_repository模块Ubuntu 系统专用用于管理 APT 仓库的 GPG 密钥和仓库源。yum_repository模块RedHat 系统专用用于管理 YUM/DNF 仓库。systemd模块管理系统服务。state: started确保服务运行enabled: yes确保开机自启。when语句这是 Playbook 的条件判断让任务只在满足条件的主机上执行。ansible_os_family是一个 Ansible 收集的系统信息事实Fact非常有用。register与debugregister将一个任务的输出保存到变量中debug模块可以打印变量或自定义信息用于调试和输出结果。loop用于循环执行任务。这里循环遍历docker_users变量列表中的每个用户。4.3 执行 Playbook 并验证在控制节点的项目目录下运行 Playbookcd ~/ansible-docker-demo # 使用 -v 参数可以输出更详细的信息-vvv 更详细 ansible-playbook install_docker.yml执行过程会显示每个任务的执行状态ok,changed,failed。如果一切顺利最后会看到PLAY RECAP所有任务都应该是ok数字 changed数字 unreachable0 failed0。手动验证 Docker 是否安装成功# 使用Ad-Hoc命令在所有被管节点上运行 docker --version ansible all_servers -m command -a “docker --version“ # 或者检查Docker服务状态 ansible all_servers -m systemd -a “namedocker statestarted“5. 使用 Ansible 部署容器化应用Docker 环境就绪后我们就可以用 Ansible 来部署应用了。这里以一个最基础的 Nginx 容器为例演示如何拉取镜像、运行容器并暴露端口。5.1 编写应用部署 Playbook创建deploy_nginx.yml文件# ~/ansible-docker-demo/deploy_nginx.yml --- - name: 在Web服务器组部署Nginx容器 hosts: web_servers # 这次只针对web服务器组 become: yes vars: nginx_container_name: “my-nginx“ nginx_host_port: 8080 # 映射到宿主机的端口 nginx_container_port: 80 # 容器内部的端口 tasks: - name: 从Docker Hub拉取最新的Nginx镜像 docker_image: name: nginx tag: latest source: pull # docker_image模块用于管理镜像 - name: 确保Nginx容器正在运行 docker_container: name: “{{ nginx_container_name }}“ image: “nginx:latest“ state: started # started 表示运行absent 表示删除stopped 表示停止 restart_policy: unless-stopped # 重启策略除非手动停止否则总是重启 ports: - “{{ nginx_host_port }}:{{ nginx_container_port }}“ # 端口映射 宿主机端口:容器端口 volumes: - “/etc/localtime:/etc/localtime:ro“ # 挂载宿主机时间保持容器时间一致 # 还可以定义 environment, networks 等参数 register: container_result - name: 打印容器运行信息 debug: msg: “Nginx container ‘{{ nginx_container_name }}‘ is running on port {{ nginx_host_port }}.“5.2 核心模块docker_containerdocker_container模块是 Ansible 管理 Docker 容器的核心它封装了docker run,docker stop,docker rm等命令的功能。state: started这是幂等性操作的关键。如果容器不存在则创建并启动它如果容器存在但已停止则启动它如果容器已在运行则不做任何改变。这符合自动化运维的期望。restart_policy建议设置为unless-stopped或always确保容器在宿主机重启后能自动恢复。ports定义端口映射列表。格式为“HOST_PORT:CONTAINER_PORT”或“HOST_IP:HOST_PORT:CONTAINER_PORT”。volumes定义数据卷或目录挂载列表。格式为“HOST_PATH:CONTAINER_PATH:MODE”。上例中:ro表示只读。5.3 执行部署与访问验证运行部署 Playbookansible-playbook deploy_nginx.yml验证容器是否运行# 在控制节点上检查web服务器上的容器 ansible web_servers -m shell -a “docker ps | grep nginx“ # 或者直接访问Nginx服务 # 使用curl命令测试假设web服务器IP是192.168.1.11 curl -I http://192.168.1.11:8080如果看到返回HTTP/1.1 200 OK说明 Nginx 容器已经成功部署并通过 Ansible 对外提供服务。6. 进阶编写通用角色与变量管理上面的 Playbook 已经可以工作但为了更好的可维护性和复用性Ansible 推荐使用“角色”Role来组织代码。角色是一种将 Playbook 按功能如安装 Docker、部署 Nginx拆分为独立、可复用组件的方式。6.1 创建角色目录结构Ansible 提供了命令来初始化标准角色结构cd ~/ansible-docker-demo # 创建名为common和nginx的角色 ansible-galaxy init roles/common ansible-galaxy init roles/nginx这会创建如下目录结构roles/ ├── common/ │ ├── defaults/ # 角色默认变量 (低优先级) │ ├── files/ # 静态文件 │ ├── handlers/ # 处理器 (用于重启服务等) │ ├── meta/ # 角色依赖信息 │ ├── tasks/ # 主任务文件 │ ├── templates/ # Jinja2模板文件 │ └── vars/ # 角色变量 (高优先级) └── nginx/ └── ... (类似结构)6.2 重构 Docker 安装任务为角色将install_docker.yml中的任务移动到角色中。定义角色变量(roles/common/defaults/main.yml)# 角色默认变量可以被playbook中的变量覆盖 docker_users: [] docker_version: “latest“ # 可以指定版本如 “20.10“ docker_compose_version: “v2“ # 使用docker-compose-plugin编写角色任务(roles/common/tasks/main.yml)# 将之前install_docker.yml中的tasks部分拆分并优化后放在这里 - name: 安装系统依赖 (Ubuntu) apt: pkg: - apt-transport-https - ca-certificates - curl - software-properties-common - gnupg - lsb-release state: present update_cache: yes when: ansible_os_family “Debian“ tags: docker_install - name: 安装系统依赖 (CentOS) yum: name: - yum-utils - device-mapper-persistent-data - lvm2 state: present when: ansible_os_family “RedHat“ tags: docker_install # ... 后续任务添加仓库、安装包、启动服务等也移入此文件并使用变量 {{ docker_version }} 等创建使用角色的 Playbook(site.yml)# ~/ansible-docker-demo/site.yml --- - name: 为所有服务器配置基础环境并安装Docker hosts: all_servers become: yes roles: - role: common vars: docker_users: [‘deploy-user‘] # 覆盖角色默认变量 - name: 在Web服务器部署应用 hosts: web_servers become: yes roles: - nginx # 调用nginx角色其任务在roles/nginx/tasks/main.yml中定义现在要执行完整的自动化流程只需要运行ansible-playbook site.yml6.3 使用变量文件分离配置对于不同环境开发、测试、生产配置如端口、镜像版本可能不同。可以将变量定义在外部 YAML 文件中。创建group_vars/和host_vars/目录mkdir -p ~/ansible-docker-demo/group_vars mkdir -p ~/ansible-docker-demo/host_vars为web_servers组创建变量文件 (group_vars/web_servers.yml)# 这些变量会自动应用到web_servers组的所有主机 nginx_container_name: “prod-nginx“ nginx_host_port: 80 # 生产环境用80端口 nginx_image_tag: “1.23-alpine“ # 使用特定版本和更小的Alpine镜像在roles/nginx/tasks/main.yml中直接引用这些变量如{{ nginx_host_port }}。Ansible 会自动加载对应组的变量。7. 常见问题与排查路径即使按照步骤操作也可能遇到问题。以下是基于此实战场景的常见问题排查清单。问题现象可能原因检查与解决步骤Ansibleping模块失败提示UNREACHABLE1. 网络不通或防火墙阻断 SSH。2. SSH 免密登录未配置成功。3. Inventory 中主机 IP 或用户名错误。4. 控制节点无法解析主机名。1. 使用ping命令测试网络连通性。2. 手动 SSH 登录测试ssh userhost。3. 检查~/.ssh/authorized_keys文件权限应为600。4. 检查 Inventory 文件语法和变量。Ansibleping模块失败提示FAILED错误信息与 Python 相关目标主机上没有安装 Python或者 Python 路径不对。1. 在被管节点上安装 Pythonapt install python3或yum install python3。2. 在 Inventory 中为该主机设置ansible_python_interpreter/usr/bin/python3。执行 Playbook 时任务卡住或超时1. 网络慢下载包超时。2. 被管节点需要交互式输入如 apt/yum 确认。3. 任务本身执行时间长。1. 在ansible.cfg中增加timeout值。2. 在 apt/yum 任务中添加-y参数Ansible 模块通常自动处理。3. 使用-T参数为单个 Playbook 运行设置超时ansible-playbook -T 300 playbook.yml。Docker 安装任务在 CentOS 上失败提示找不到包1. EPEL 仓库未启用或 Docker CE 仓库未正确添加。2. 系统版本与仓库不匹配如 CentOS 8 已停止维护。1. 检查yum_repository任务是否成功执行查看/etc/yum.repos.d/下是否有docker-ce.repo。2. 对于 CentOS 8可能需要切换源或使用 Podman。考虑使用 Rocky Linux 8 替代。docker_container任务失败提示Error: No such imagedocker_image拉取镜像失败或尚未执行。1. 确保网络可以访问 Docker Hub 或配置的镜像仓库。2. 检查docker_image任务的name和tag是否正确。3. 为docker_image任务添加ignore_errors: yes并配合failed_when进行更精细的错误处理。容器启动后无法通过宿主机 IP 和端口访问1. 宿主机防火墙未开放端口。2. Docker 容器端口映射错误。3. 容器内应用未监听正确端口。1. 在宿主机上运行sudo firewall-cmd --list-ports(firewalld) 或sudo iptables -L -n检查。2. 运行docker ps查看端口映射列PORTS。3. 进入容器检查应用日志docker logs container_name。Playbook 执行成功但实际状态未改变非幂等任务设计有缺陷未使用 Ansible 的幂等模块或command/shell模块未正确处理。1. 优先使用yum,apt,systemd,docker_container(state: started) 等声明式、幂等的模块。2. 如果必须用command/shell使用creates或removes参数或通过register和changed_when手动控制状态判断。通用排查命令增加输出详细程度ansible-playbook -v playbook.yml-vvv输出最详细。检查 Ansible 收集的事实ansible all -m setup查看ansible_os_family,ansible_distribution等信息是否正确。在特定主机上执行 Ad-Hoc 命令调试ansible host -m shell -a “your_command”。查看 Docker 相关日志在被管节点上运行sudo journalctl -u docker或docker logs container_id。8. 生产环境最佳实践与扩展方向将实验环境中的模式应用到生产环境需要考虑更多关于安全、稳定性和可维护性的因素。8.1 安全加固清单使用专用运维账户不要使用root用户直接 SSH。创建一个如ansible或deploy的专用账户赋予其必要的sudo权限通过/etc/sudoers.d/精细控制并在 Inventory 中配置ansible_user和ansible_become_password建议使用 Ansible Vault 加密密码。启用 SSH 密钥验证并禁用密码登录确保所有被管节点 SSH 配置中PasswordAuthentication设置为no。管理敏感数据使用Ansible Vault加密密码、API 密钥等敏感变量。# 加密一个变量文件 ansible-vault encrypt secrets.yml # 运行Playbook时提供密码 ansible-playbook site.yml --ask-vault-pass # 或通过密码文件 ansible-playbook site.yml --vault-password-file .vault_pass.txt限制 Docker 权限避免将非必要用户加入docker组因为该组权限等同于root。考虑使用sudo来运行特定的 Docker 命令。使用私有镜像仓库生产环境应从私有仓库如 Harbor, Nexus拉取镜像而非 Docker Hub以便进行安全扫描和版本控制。8.2 可维护性与效率提升使用动态 Inventory当服务器数量多或频繁变动时手动维护静态 Inventory 文件效率低下。可以编写脚本从云平台 API、CMDB 或数据库中动态获取主机列表。Ansible 支持从脚本输出的 JSON 格式中读取 Inventory。利用 Tags 控制执行流程为 Playbook 中的任务打上标签可以只运行特定部分。tasks: - name: 安装包 yum: namehttpd statepresent tags: install - name: 启动服务 systemd: namehttpd statestarted tags: config,service运行ansible-playbook site.yml --tags “install”或--skip-tags “config”。配置回调与通知使用handlers来处理任务结果。例如只有在配置文件真正被修改后才触发重启服务的 Handler。集成 CI/CD 流水线将 Ansible Playbook 放入 Git 仓库通过 Jenkins、GitLab CI 或 GitHub Actions 等工具在代码推送后自动执行测试环境的部署。8.3 扩展方向掌握了 Ansible Docker 的基础自动化后可以进一步探索以下方向构建更强大的运维体系容器编排当需要管理多个相互关联的容器时Docker Compose 或 Kubernetes 是更佳选择。Ansible 同样可以用于部署和配置 Kubernetes 集群如使用kubespray项目或通过k8s模块管理 Kubernetes 资源。配置管理复杂化对于更复杂的配置如 Nginx 虚拟主机、MySQL 配置文件使用template模块配合 Jinja2 模板根据变量动态生成配置文件。监控与日志集成在 Playbook 中部署 Prometheus Node Exporter、cAdvisor用于容器监控和 ELK/EFK 栈的客户端实现基础设施和应用的监控与日志集中收集。网络设备自动化虽然本文聚焦服务器但 Ansible 也支持通过network_cli等连接插件管理网络设备交换机、路由器。这与服务器自动化理念相通但模块和连接方式不同。自动化运维是一个持续迭代的过程。从用 Ansible 执行一条 Ad-Hoc 命令开始到编写一个完整的 Playbook 管理一类服务再到用角色和变量管理复杂的多环境部署每一步都在提升效率与规范性。本次实战提供了一个坚实的起点关键在于将学到的模式应用到实际工作中并持续优化你的“基础设施即代码”仓库。 30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度

相关新闻

最新新闻

日新闻

周新闻

月新闻