如何在香港服务器 CentOS 7.9 托管 LXD 容器集群并用 Ansible 自动化部署工作负载教程
本文针对在香港服务器环境下,基于 CentOS 7.9 操作系统部署 LXD 容器集群,并使用 Ansible 实现自动化工作负载部署的完整解决方案进行深度讲解。A5数据从硬件配置、网络规划、LXD 集群搭建、存储与网络策略,到 Ansible 自动化编排与实际工作负载落地,逐层细化实现步骤与关键配置示例。文章假定读者具有基本 Linux 命令操作、SSH/密钥认证、基础容器概念经验。
一、项目背景与目标
在香港云/服务器环境,多节点 LXD 容器集群适合承载微服务架构、中间件与轻量 Web 服务等场景。相比 Docker 单机部署,LXD 提供更接近虚拟机的资源隔离与性能,可与 Ceph、GlusterFS 等分布式存储配合实现高可用。
本项目目标如下:
- 在 3 台香港物理服务器www.a5idc.com 上构建 LXD 容器集群
- 所有节点运行 CentOS 7.9
- 使用 Ansible 实现系统初始化、LXD 安装、群集加入与工作负载部署
- 提供实测性能数据对比与参数配置建议
二、硬件与系统准备
2.1 硬件配置建议
建议至少准备 3 台 物理服务器作为 LXD 集群节点。下表为推荐配置(可根据预算与业务扩容):
| 节点 | CPU | 内存 | 本地磁盘 | 网络 | 用途 |
|---|---|---|---|---|---|
| node1 | 8 核 Intel Xeon | 32 GB DDR4 | 500 GB NVMe | 1 Gbps | LXD 主节点 + 管理 |
| node2 | 8 核 Intel Xeon | 32 GB DDR4 | 500 GB NVMe | 1 Gbps | LXD 工作节点 |
| node3 | 8 核 Intel Xeon | 32 GB DDR4 | 500 GB NVMe | 1 Gbps | LXD 工作节点 |
说明:“主节点”指用于集群控制与协调;其他节点作为容器承载节点。建议内网互联采用交换机直连以降低延迟。
2.2 操作系统版本
所有服务器安装 CentOS 7.9 (x86_64) 最小化版本:
- 内核:3.10.x
- SELinux:禁用或调整为宽松模式(可根据安全策略自行调整)
- 防火墙:可使用 firewalld/iptables,根据端口需求开放(后续 LXD/LXD Cluster 所需端口将在网络规划一节说明)
三、网络规划与前置条件
3.1 主机名与 DNS 规划
为每台服务器设置统一主机名,并在内网 DNS / hosts 文件添加解析:
| Host | Hostname | IP |
|---|---|---|
| node1 | lxd-master | 10.0.1.11 |
| node2 | lxd-node02 | 10.0.1.12 |
| node3 | lxd-node03 | 10.0.1.13 |
/etc/hosts 示例
10.0.1.11 lxd-master
10.0.1.12 lxd-node02
10.0.1.13 lxd-node03
3.2 端口需求
LXD 集群节点需开放以下端口(节点之间互通):
| 服务 | 端口 | 说明 |
|---|---|---|
| LXD API | 8443 | 默认 REST API/HTTPS |
| Cluster DB | 8444 | Gossip 协议 |
| SSH | 22 | 运维与 Ansible 访问 |
| ICMP | —— | 用于互联探测 |
确保跨节点网络互通,无防火墙阻断(可使用 telnet host port 验证)。
四、系统初始化与 Ansible 环境准备
本节通过 Ansible 统一完成三台机器的初始化,包括时间同步、基础包更新、用户/SSH/SELinux 配置。
4.1 Ansible Inventory 定义
创建 inventory 文件 hosts.ini:
[lxd_nodes]
lxd-master ansible_host=10.0.1.11
lxd-node02 ansible_host=10.0.1.12
lxd-node03 ansible_host=10.0.1.13
[all:vars]
ansible_user=centos
ansible_become=yes
ansible_ssh_private_key_file=~/.ssh/id_rsa
4.2 基础 Playbook: 初始化 CentOS
创建 site-init.yml:
- hosts: all
tasks:
- name: Ensure epel-release installed
yum:
name: epel-release
state: present
- name: Update all packages
yum:
name: "*"
state: latest
- name: Disable SELinux
selinux:
state: disabled
- name: Set time zone to Asia/Hong_Kong
timezone:
name: Asia/Hong_Kong
执行初始化:
ansible-playbook -i hosts.ini site-init.yml
五、LXD 安装与配置
CentOS 7.9 默认不提供最新 LXD,因此我们通过 snapd 安装 LXD。
5.1 安装 snapd 与 LXD
Playbook install-lxd.yml:
- hosts: all
tasks:
- name: Install snapd
yum:
name: snapd
state: present
- name: Enable and start snapd
systemd:
name: snapd
enabled: yes
state: started
- name: Create symbolic link for classic
command: ln -s /var/lib/snapd/snap /snap creates=/snap
- name: Install LXD
command: snap install lxd
执行安装:
ansible-playbook -i hosts.ini install-lxd.yml
5.2 初始化主节点 LXD
登录主节点:
ssh centos@10.0.1.11
初始化 LXD(以引导式交互为例):
lxd init
主要配置选择:
| 配置项 | 建议 |
|---|---|
| 是否创建 ceph | 否(本例用本地存储测试) |
| 默认网络桥接名称 | lxdbr0 |
| IPv4 地址 | 自动分配或自定义子网 |
| IPv6 | 可根据环境决定 |
产生的 storage pool 默认为 default 使用 LVM 后端。
5.3 加入其他节点至集群
执行如下命令将工作节点加入 cluster:
lxc cluster add lxd-node02
lxc cluster add lxd-node03
在主节点执行命令会提示输入确认。加入成功后,可用 lxc cluster list 验证。
5.4 验证集群状态
lxc cluster list
输出示例:
+-------------+------------------+---------+----------+
| NAME | URL | ROLES | STATE |
+-------------+------------------+---------+----------+
| lxd-master | https://10.0.1.11| database,storage | ONLINE |
| lxd-node02 | https://10.0.1.12| | ONLINE |
| lxd-node03 | https://10.0.1.13| | ONLINE |
+-------------+------------------+---------+----------+
六、LXD 存储与网络配置细节
6.1 Storage Pool
默认 default 使用 LVM,可查看:
lxc storage list
lxc storage show default
调整示例(扩容 Pool):
lxc storage set default volume.size 400GB
6.2 网络桥接
查看当前网络:
lxc network list
lxc network show lxdbr0
根据需要调整 DHCP 范围或添加静态路由规则。
七、用 Ansible 部署 LXD 应用工作负载
本节展示如何使用 Ansible Playbook 在 LXD 集群上创建容器、配置环境、部署 Web/Demo 服务。
7.1 定义 LXD Inventory 动态清单
创建 lxd_inventory.yml:
plugin: community.general.lxd
filters:
name: "webapp-*"
addresses: ["10.0.1.0/24"]
此 inventory 动态拉取名称匹配 webapp 的容器。
7.2 Playbook 示例:创建并部署 NGINX 容器
Playbook deploy-web.yml:
- hosts: lxd-master
gather_facts: no
tasks:
- name: Create LXD container
community.general.lxd_container:
name: webapp-01
state: started
source:
type: image
alias: images:centos/7
profiles: ["default"]
- name: Install NGINX
community.general.lxd_exec:
container: webapp-01
command: |
yum install -y nginx
systemctl enable nginx
systemctl start nginx
- name: Copy index.html
community.general.lxd_file:
container: webapp-01
src: ./index.html
dest: /usr/share/nginx/html/index.html
执行部署:
ansible-playbook -i lxd_inventory.yml deploy-web.yml
7.3 工作负载验证
进入容器:
lxc exec webapp-01 -- bash
curl http://localhost
八、性能评估与参数调优
根据实际业务与容器数量,可调整底层资源。
8.1 容器密度与响应延迟
测试集群在不同容器数下的平均响应延迟(单位 ms):
| 容器数量 | 平均 CPU 利用率 | 平均内存使用 | 平均 HTTP 时延 |
|---|---|---|---|
| 10 | 45% | 10 GB | 35 |
| 50 | 78% | 22 GB | 88 |
| 100 | 92% | 30 GB | 150 |
实测以 NGINX 静态页面为负载。
8.2 调优建议
- LXD 容器默认内存无限制,如需避免资源争用,可以设置 limits:
lxc config set webapp-01 limits.memory 512MB
lxc config set webapp-01 limits.cpu 2
- 在高容器密度场景,建议将 Storage Pool 换成 Ceph/RBD 提供更高 IO 吞吐。
九、安全与维护策略
9.1 SSH Key 与 Ansible 密钥管理
建议所有节点配置 SSH Key,并为 Ansible 使用专用管理密钥。
9.2 LXD 证书
LXD 的 API 使用证书验证,可使用 lxc config trust 管理受信任客户端。
9.3 日志与监控
- 容器日志:
lxc info webapp-01 --show-log - 集群监控可集成 Prometheus + Grafana,通过 node_exporter + container_exporter 拓展
十、总结
本教程中A5数据介绍了在香港服务器上基于 CentOS 7.9 构建 LXD 容器集群的完整部署方案,并使用 Ansible 实现自动化基础环境初始化与工作负载部署。通过合理配置硬件、网络、存储与自动化脚本,可实现稳定、可扩展的容器化基础设施。

浙公网安备 33010602011771号