

























在 Kubernetes (K8s) 环境下,Etcd 和 Consul 的部署方式和角色定位有显著区别。
以下是两者在 K8s 环境下的详细部署与使用指南。
Etcd 在 K8s 中有两种存在形式:
如果你希望 K8s 使用外部的独立 Etcd 集群(例如为了更高的高可用性或性能隔离),你需要先部署 Etcd,然后修改 K8s API Server 的配置。
部署步骤(基于二进制/虚拟机模式,这是生产环境独立部署的标准方式):
etcd.service,核心参数包括:
--name:节点名称。--initial-advertise-peer-urls:节点间通信地址。--listen-client-urls:对外服务地址。--advertise-client-urls:客户端访问地址。--initial-cluster:集群所有节点列表。/etc/kubernetes/manifests/kube-apiserver.yaml),将默认的本地 Etcd 地址替换为你的独立集群地址:spec:
containers:
- command:
- kube-apiserver
# 指向独立 Etcd 集群的 VIP 或 IP 列表
- --etcd-servers=https://192.168.1.10:2379,https://192.168.1.11:2379,https://192.168.1.12:2379
- --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
- --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
- --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
如果你的 Go 应用需要 Etcd 做注册中心,且不想依赖外部设施,可以在 K8s 内部署一个业务专用的 Etcd 集群(注意:不要与 K8s 系统共用的那个 Etcd 混用)。
# 添加 Bitnami 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
# 安装 Etcd 集群(3副本)
helm install my-etcd bitnami/etcd --set replicaCount=3
部署后,你的 Go 应用通过 Service 域名(如 my-etcd.default.svc.cluster.local:2379)即可访问。Consul 在 K8s 中通常以 StatefulSet 形式运行,并配合 DaemonSet (Client 模式) 来注入 Sidecar 代理,从而实现服务网格功能。
HashiCorp 官方提供了功能强大的 Helm Chart,可以一键部署包含 Server、Client、Connect Inject(注入器)和 UI 的完整环境。
1. 准备配置文件 (values.yaml)
为了生产级使用,你需要开启 TLS、ACL(权限控制)和 Gossip 加密。
# consul-values.yaml
global:
name: consul
datacenter: dc1
# 开启 TLS 加密
tls:
enabled: true
enableAutoEncrypt: true
# 开启 ACL 权限
acls:
manageSystemACLs: true
# Gossip 协议加密
gossipEncryption:
autoGenerate: true
server:
replicas: 3 # 生产环境至少 3 个
storage: 10Gi
storageClass: standard # 需提前准备好 StorageClass
ui:
enabled: true
service:
type: ClusterIP
# 开启 Connect 注入,实现服务网格
connectInject:
enabled: true
# 默认不注入,需在 Pod 注解中显式开启
default: false
2. 执行部署
# 添加 HashiCorp 仓库
helm repo add hashicorp https://helm.releases.hashicorp.com
helm repo update
# 创建命名空间
kubectl create namespace consul
# 安装 Consul
helm install consul hashicorp/consul --namespace consul -f consul-values.yaml
部署完成后,Consul 并不会自动接管所有流量,你需要通过注解来让 Go 应用接入 Consul 网格。
1. 服务注册与 Sidecar 注入
在你的 Go 应用 Deployment YAML 中添加注解,Consul 会自动注入 Envoy Sidecar 并注册服务。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-go-app
spec:
template:
metadata:
annotations:
# 开启 Connect 注入
"consul.hashicorp.com/connect-inject": "true"
# 定义服务名
"consul.hashicorp.com/connect-service": "user-service"
# 定义服务端口
"consul.hashicorp.com/connect-service-port": "8080"
spec:
containers:
- name: app
image: my-go-app:latest
ports:
- containerPort: 8080
2. 服务调用
一旦注入成功,你的 Go 应用访问其他服务时,流量会自动经过本地 Sidecar 代理,享受 mTLS 加密和可观测性。
http://order-service),Consul DNS 模块会自动解析到健康的实例 IP。| 特性 | Etcd in K8s | Consul in K8s |
|---|---|---|
| 主要角色 | K8s 的数据库 (后端存储) | 应用的服务网格 (流量治理) |
| 部署形态 | 1. 静态 Pod (内置)2. 独立集群 (外部)3. StatefulSet (业务用) | 1. Server (StatefulSet)2. Client (DaemonSet/Sidecar) |
| 部署工具 | Kubeadm (内置), Helm/Operator (业务用) | Helm Chart (官方首选) |
| Go 应用交互 | 使用 clientv3 直接连接 IP/域名 |
通过 Sidecar 代理,或使用 consul-api |
| 核心价值 | 强一致性数据存储,K8s 运行基础 | 零代码侵入的流量管理、安全、监控 |
建议:
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。