四、kubernetes部署consul高可用集群

kubernetes部署consul高可用集群

  • 部署步骤
    • 准备工作
    • consul和nacos的比较
    • Helm安装consul
    • 访问consul
    • springboot应用程序访问consul集群示例

部署步骤

参考官网地址:https://artifacthub.io/packages/helm/bitnami/consul

准备工作

需安装kubernetes集群;
需安装Helm;
需安装Nexus3;
需安装NFS持久化插件。
如果未安装参考我的【kubernetes集群部署教程】【kubernetes部署Nexus3教程】

consul和nacos的比较

Consul和Nacos都是现代化的服务发现和配置管理工具,用于构建和管理微服务架构的基础设施。它们有一些共同点,也有一些不同点。以下是它们的共同点和不同点,以及它们的优缺点:
(1)共同点:
服务发现:Consul和Nacos都提供了服务注册和发现功能,允许微服务应用在动态环境中自动发现和定位其他服务。
健康检查:两者都支持对注册的服务进行健康状态检查,确保只有健康的服务被路由和调用。
键值存储:Consul和Nacos都支持键值存储,用于动态配置和共享全局配置信息。
多数据中心支持:两者都支持在多个数据中心之间进行服务和配置的复制和同步,以实现高可用性和容灾。
(2)不同点:
语言支持:Consul主要使用Go语言开发,而Nacos则是由Java编写。这可能会影响一些用户的选择,尤其是在特定语言的生态系统中使用时。
社区和生态系统:Consul在一些场景中拥有更广泛的用户社区和生态系统,而Nacos则在我国等地区拥有更大的用户群体。
功能丰富程度:Consul是一个更早的项目,因此它可能在某些功能方面更加成熟和丰富。然而,Nacos在最近的发展中也迅速增加了很多新功能。
基础设施支持:Consul可以用于多种平台,包括Docker和Kubernetes等,而Nacos在云原生环境中更受欢迎,并具有更好的Kubernetes原生集成。
(3)优缺点:
Consul的优点:
成熟稳定:Consul是一个成熟的项目,拥有广泛的用户社区和大量的生产部署经验。
多平台支持:Consul支持多种平台和语言,适用性广泛。
强大的健康检查:Consul提供了灵活且强大的健康检查功能,确保服务的高可用性。
Consul的缺点:
配置复杂:对于新手来说,Consul的配置可能相对较复杂,可能需要更多的学习和配置时间。
部分功能付费:一些高级功能(如自动化网络和拓扑规划)需要付费版本。
Nacos的优点:
云原生支持:Nacos在云原生环境中拥有更好的支持和集成,特别适合Kubernetes部署。
生态系统:在我国,Nacos拥有更广泛的用户群体和活跃的社区支持。
开源:Nacos是一个完全开源的项目,没有额外的付费功能。
Nacos的缺点:
相对年轻:相对于Consul,Nacos是一个相对较年轻的项目,可能在某些功能方面还不如Consul成熟。
语言限制:由于Nacos主要由Java编写,如果你的项目是使用其他语言开发的,可能需要一些额外的集成工作如高可用集群搭建需要使用mysql数据库作为数据存储。
总的来说,Consul和Nacos都是优秀的服务发现和配置管理工具。

Helm安装consul

# 添加仓库源
helm repo add bitnami https://charts.bitnami.com/bitnami

PS.如果你已经阅读我的kubernetes部署postgresql高可用集群文章已经添加了bitnami仓库则不需要再添加该仓库了。

在官网上查看到截止目前的版本如下图:
四、kubernetes部署consul高可用集群_第1张图片
我们这里选择10.12.4版本进行安装,使用固定版本去安装这些中间件的好处就是稳定可靠的移植,因为你永远不知道哪天版本发生变化之后配置跟随改变导致部署失败,最好的例子就是下一个章节中kubernetes安装seata高可用集群的时候就会发现版本的重要性了。
接下来执行命令进行安装consul:

helm pull bitnami/consul --version 10.12.4
tar -xvf consul-10.12.4.tgz
cd consul
vi values.yaml
# 管理镜像到自己的nexus3私服,如果不采用私服可以不管
# 查看values.yaml可以查看到相关镜像
docker pull bitnami/consul:1.16.0-debian-11-r0
docker tag bitnami/consul:1.16.0-debian-11-r0 10.108.69.78:8082/bitnami/consul:1.16.0-debian-11-r0
docker push 10.108.69.78:8082/bitnami/consul:1.16.0-debian-11-r0

docker pull bitnami/bitnami-shell:11-debian-11-r129
docker tag bitnami/bitnami-shell:11-debian-11-r129 10.108.69.78:8082/bitnami/bitnami-shell:11-debian-11-r129
docker push 10.108.69.78:8082/bitnami/bitnami-shell:11-debian-11-r129

docker pull bitnami/consul-exporter:0.9.0-debian-11-r69
docker tag bitnami/consul-exporter:0.9.0-debian-11-r69 10.108.69.78:8082/bitnami/consul-exporter:0.9.0-debian-11-r69
docker push 10.108.69.78:8082/bitnami/consul-exporter:0.9.0-debian-11-r69

# 主要编辑values.yaml如下内容
#########================#########
global.storageClass: "nfs-storage"
# 设置镜像拉取为nexus3的docker私服,如果不采用私服留空
global.imageRegistry: "10.108.69.78:8083"  
# 给个固定的ClusterIP方便管理,生产环境下可以不用修改
service.clusterIP: "10.111.195.50"

# 编辑好values.yaml之后进行安装
helm install consul .

然后就可以看到consul三节点的集群部署好了
在这里插入图片描述

PS.在这里顺便提一下使用私有镜像仓库的好处,不要觉得它很麻烦,当kubernetes部署应用的时候直接通过私服拉取镜像的时候那个速度简直不要太快,由于kubernetes有可能在本地环境的时候我们需要重启或者在生产环境需要扩容node节点的时候导致Pod有可能部署在不同的node,如果不使用私服拉取镜像则又要等待一根烟和一盏茶的功夫去拉取镜像(因为有可能该node上不存在镜像),使用私服拉取就不需要等那么多时间了(太费烟和茶)。下边体验一下拉取镜像的速度:
四、kubernetes部署consul高可用集群_第2张图片

访问consul

修改局域网中需要远程连接的windows电脑的hosts文件

10.111.195.50 consul-ui

浏览器直接访问http://consul-ui即可
四、kubernetes部署consul高可用集群_第3张图片
四、kubernetes部署consul高可用集群_第4张图片

springboot应用程序访问consul集群示例

PS.我这里的是使用spring cloud的2022.0.3版本也就是springboot3.x版本,其他旧版本的springboot的配置文件有可能不一样。具体的配置参考官方网站:https://docs.spring.io/spring-cloud-consul/docs/current/reference/html/#configuration-properties和https://docs.spring.io/spring-cloud-consul/docs/current/reference/html/appendix.html

spring:
  application:
    name: my-project
  profiles:
    active: dev
  # 使用consul作为配置中心
  config:
    import: optional:consul:consul-ui:80
  cloud:
    consul:
      host: consul-ui
      port: 80
      # 注册中心
      discovery:
        register: true
        enabled: true
        deregister: true
        service-name: ${spring.application.name}
        prefer-ip-address: true
        instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
        health-check-path: /actuator/health
        health-check-interval: 10s
        health-check-critical-timeout: 60s
      config:
        enabled: true
        format: YAML
        # 注意这里的下边的三个配置项
        prefixes: config
        defaultContext: ${spring.application.name}
        data-key: data

按照以上的prefixes、defaultContext、data-key的配置
在consul中配置文件应该是:config/my-project,dev/data
如果是生产环境则根据spring.profiles.active=prod设置对应的配置文件config/my-project,prod/data
参考如下:

server:
  port: 38001
  forward-headers-strategy: framework
spring:
  profiles:
    active: dev
  datasource:
    driver-class-name: org.postgresql.Driver
    # 这里你就会发现修改hosts的好处了,本地开发好使,后面打包程序的到kubernetes中运行也好使
    url: jdbc:postgresql://postgresql-ha-pgpool:5432/knack
    username: postgres
    password: gJLNPsLY9E
    
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
  global-config:
    db-config:
      update-strategy: ignored
      table-prefix: t_
        
logging:
  config: classpath:log4j2.xml

四、kubernetes部署consul高可用集群_第5张图片

你可能感兴趣的:(kubernetes,consul)