podman安装consul

📦 1. 环境准备与镜像拉取
首先安装 Podman 并拉取 Consul 官方镜像。

# 安装 Podman
sudo dnf install -y podman

# 拉取 Consul 官方镜像 (建议使用特定版本以保证一致性)
sudo podman pull docker.io/hashicorp/consul:2.0.4
💾 2. 创建数据持久化目录与配置文件
生产环境必须将数据目录和配置目录挂载到宿主机,以确保容器重启后数据不丢失。

# 创建 Consul 数据与配置目录
sudo mkdir -p /var/lib/consul/data
sudo mkdir -p /etc/consul.d

# 可选:创建专用的 Consul 系统用户(推荐,但非必须)
# sudo useradd --system --home /etc/consul.d --shell /bin/false consul
创建 Consul 配置文件 /etc/consul.d/consul.hcl:

# /etc/consul.d/consul.hcl
datacenter = "dc1"
data_dir = "/consul/data"
log_level = "INFO"
server = true
bootstrap_expect = 1 # 单节点服务器模式;多节点集群请设为 3 或 5

client_addr = "0.0.0.0"
ui_config {
enabled = true
}

# 如需启用 ACL 或加密,请在此处添加相应配置
# encrypt = "YOUR_GOSSIP_ENCRYPTION_KEY"
🏭 3. 以生产模式启动 Consul 容器
使用 -server 模式启动,并挂载数据与配置目录。注意 :Z 标签用于 SELinux 环境下的正确权限上下文。

sudo podman run -d \
--name consul-persistent \
--restart=no \
-p 8500:8500 \
-p 8600:8600/udp \
-v /var/lib/consul/data:/consul/data:Z \
-v /etc/consul.d:/consul/config:Z \
docker.io/hashicorp/consul:2.0.4 \
agent -config-dir=/consul/config
参数说明:

--restart=no:暂不设置重启策略,后续由 Systemd 接管。

-p 8500:8500:映射 HTTP API 和 Web UI 端口。

-p 8600:8600/udp:映射 DNS 接口端口。

-v ...:Z:将宿主机目录挂载到容器内,并正确设置 SELinux 上下文。

🔄 4. 配置 Systemd 实现开机自启
这是实现生产级自启动的关键步骤。

如何为 Consul 创建 Quadlet 文件

下面是针对你之前部署 Consul 场景的 Quadlet 配置方案。

1). 创建 Quadlet 文件目录

对于 rootful(系统级)容器,官方推荐的目录是 /etc/containers/systemd/-29。

sudo mkdir -p /etc/containers/systemd/

2). 编写 .container 文件

创建文件 /etc/containers/systemd/consul-persistent.container,内容如下:

[Unit]
Description=Consul Server Container (Persistent)
After=network-online.target

[Container]
Image=docker.io/hashicorp/consul:2.0.4
ContainerName=consul-persistent
PublishPort=8500:8500
PublishPort=8600:8600/udp
Volume=/var/lib/consul/data:/consul/data:Z
Volume=/etc/consul.d:/consul/config:Z
Exec=agent -config-dir=/consul/config
# 如果 Consul 需要以 root 用户运行(例如绑定低端口),可取消注释下面这行
# User=root

[Service]
Restart=always
TimeoutStartSec=300

[Install]
WantedBy=multi-user.target

关键配置项说明:

  • Image:指定要使用的容器镜像。

  • PublishPort:映射端口,8600:8600/udp 指定了 UDP 协议。

  • Volume:挂载数据卷和配置目录。:Z 标签用于 SELinux 环境下的正确权限上下文-。

  • Exec:指定容器启动命令,等同于 podman run 命令中镜像后的参数-36。

  • Restart=always:确保容器在退出后自动重启-。

  • TimeoutStartSec=300:为镜像拉取预留更长的启动超时时间(默认 90 秒可能不够)-。

  • WantedBy=multi-user.target:这是实现开机自启的关键。[Install] 段会在系统启动时自动激活服务-29。

3). 应用配置并启动服务

Quadlet 文件需要被 systemd 生成器识别。

# 重新加载 systemd 配置,这会触发 Quadlet 生成器
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start consul-persistent.service

4). 验证服务状态

# 查看服务状态
sudo systemctl status consul-persistent.service

# 查看日志
sudo journalctl -u consul-persistent.service -f

 

🔥 5. 配置防火墙
如果启用了 firewalld,需要放行 Consul 使用的端口,以便集群其他节点或客户端访问。

sudo firewall-cmd --permanent --add-port=8300-8302/tcp
sudo firewall-cmd --permanent --add-port=8300-8302/udp
sudo firewall-cmd --permanent --add-port=8500/tcp
sudo firewall-cmd --permanent --add-port=8600/tcp
sudo firewall-cmd --permanent --add-port=8600/udp
sudo firewall-cmd --reload
🛠️ 6. 运维与管理

查看日志:sudo journalctl -u consul-persistent.service -f

查看容器日志:sudo podman logs -f consul-persistent

查看集群成员:sudo podman exec consul-persistent consul members

停止服务:sudo systemctl stop consul-persistent.service

禁用自启:

🟢 情况一:如果你使用的是 Quadlet(推荐方式)

Quadlet 生成的服务是“瞬态”的,不能使用 systemctl disable 命令来禁用自启。你需要通过修改配置文件来实现。

方法 A:修改 .container 文件(最规范)

  1. 停止当前服务(如果正在运行):

    sudo systemctl stop consul-persistent.service
  2. 编辑 Quadlet 文件:

    sudo vi /etc/containers/systemd/consul-persistent.container
  3. 注释掉或删除 [Install] 段。使其变成这样:

    #[Install]
    #WantedBy=multi-user.target
  4. 重新加载 systemd 配置,使修改生效:

    sudo systemctl daemon-reload

    这样,下次开机时 Consul 就不会自动启动了。如果需要手动启动,依然可以使用 systemctl start。

posted on 2026-09-24 02:40  wtsgtc  阅读(11)  评论(0)    收藏  举报