k8s 部署 consul 集群

如何在 k8s 部署 consul 集群

预先要求

需要先 安装 k8s 包管理器 helm

安装

克隆 helm consul chart

$ git clone https://github.com/hashicorp/consul-helm.git

修改 ./consul-helm/values.yaml:

server:
  enabled: "-"
  image: null
  replicas: 3 # 根据你的 k8s 集群节点数量配置,不能大于节点数量
  bootstrapExpect: 3 # <= replicas
syncCatalog:
  enabled: true # 开启 k8s service 和 consul service 同步

使用 helm 部署 consul 集群

$ helm install ./consul-helm --namespace=consul

执行成功之后会发现 pod 一直是等待中,检查 pod 的事件发现是 pvc 没有和 pv 做绑定,一直是 pending 状态,需要手动做一下绑定,绑定成功之后等一会儿就可以正常启动起来了。

$ kubectl get pvc -n consul
NAME                                  STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
data-dining-sparrow-consul-server-0   Pending           10Gi       RWX            nas            2h
data-dining-sparrow-consul-server-1   Pending           10Gi       RWX            nas            2h

安装过程中发现的问题

(1) consul 无法和 k8s 同步服务,查看 consul-sync-catalog 日志,发现时无法连接 consul,connection refused 错误。

解决办法:

修改 /etc/hosts 加入一行:

172.20.0.52 consul

consul 需要和 values.yaml 中 global.domain 一致,

ip 是 consul 对应的 POD_IP

(2) consul-sync-catalog 首次启动的时候无法从 k8s 同步服务到 consul,查看日志发现以下错误:

an empty namespace may not be set when a resource name is provided

重新创建服务即可同步成功。

服务同步成功后截图

miaowing
A Javascript & Typescript developer
Posted on 2019-11-17

Share this post

Scan to open in WeChat

Stay tuned

  • Add me on WeChat

  • Subscribe to my newsletter