如何在香港服务器 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 实现自动化基础环境初始化与工作负载部署。通过合理配置硬件、网络、存储与自动化脚本,可实现稳定、可扩展的容器化基础设施。

posted @ 2026-01-15 10:50  A5IDC  阅读(0)  评论(0)    收藏  举报