美文网首页
Java微服务:Consul篇

Java微服务:Consul篇

作者: 阙馨妍子 | 来源:发表于2020-10-15 19:25 被阅读0次

    Consul与Kubernetes有许多集成,可以直接在Kubernetes上以服务器或客户端模式运行。本文介绍如何在Kubernetes集群(如果有K8s环境,可跳过先决条件的相关安装)上运行Consul Service Mesh,完成服务发现,并利用Consul分布式键值存储,完成Quarkus Java应用在运行时从Consul读取配置。

    先决条件

    # 安装
    brew install minikube
    # 或
    curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v0.30.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
    
    # 启动
    minikube start
    
    • 安装Kubectl:brew install kubernetes-cli
    • 安装Helm:brew install kubernetes-helm

    在Kubernetes上部署Consul

    在Kubernetes上运行Consul的推荐方法是通过 Helm chart
    这里是一个详细的安装和配置步骤,几分钟内就可以部署并运行一个完整的Consul。
    使用官方Helm chart安装Consul

    helm repo add hashicorp https://helm.releases.hashicorp.com
    helm install consul hashicorp/consul --set global.name=consul
    kubectl port-forward service/consul-server 8500:8500
    

    在Kubernetes上部署Consul Service Mesh

    运行Envoy的Connect sidecar可以自动注入到集群的pod中,从而自动配置Kubernetes。这里是一个安装和配置Consul Service Mesh的详细步骤。

    1. 配置Helm chart

      cat > consul-values.yaml <<EOF
      global:
        domain: consul
        datacenter: minidc    # minikube环境,否则 datacenter: dc
      
      server:
        replicas: 1
        bootstrapExpect: 1
      
      client:
        enabled: true
        grpc: true
      
      ui:
        enabled: true
        service
            type: 'NodePort'
      
      connectInject:
        enabled: true
      
      syncCatalog:
        enabled: true
      
      EOF
      
      

      说明:

      • connectInject键设置为true来启用Consul Connect Service Mesh。
      • syncCatalog设置为true来启用同步Kubernetes和Consul Services功能,Consul可以自动同步Kubernetes和Consul中的服务。
    2. 部署Consul Service Mesh
      helm install -f consul-values.yaml hashicorp hashicorp/consul
      安装Connect injector后,便会自动将Envoy作为Sidecar代理添加到Kubernetes集群,所以使用Consul Service Mesh的所有服务都将自动注册到Consul目录中。启用syncCatalogconnectInject的情况下,将不再需要手动注册托管在Kubernetes集群上的服务。

    3. 访问Consul UI
      minikube service hashicorp-consul-ui
      在浏览器中打开Consul UI服务(http://localhost:18500),其中包含Consul服务,节点和其他资源的列表。

      Consul UI-Services
    4. 滚动更新
      运行Consul时,可以通过helm upgrade命令更新配置和部署。
      helm upgrade hashicorp -f consul-values.yaml hashicorp/consul

    Quarkus-从Consul读取配置属性

    Consul提供了一个分布式的KV存储,我们将其作为Quarkus服务的配置源。

    1. 在Quarkus项目中添加consul-config扩展
      ./mvnw quarkus:add-extension -Dextensions="consul-config"

    2. 在程序中使用@ConfigProperty 读取配置

      
      import org.eclipse.microprofile.config.inject.ConfigProperty;
      
      import javax.ws.rs.GET;
      import javax.ws.rs.Path;
      import javax.ws.rs.Produces;
      import javax.ws.rs.core.MediaType;
      
      @Path("/gateway")
      public class Gateway {
          @ConfigProperty(name = "client.host")
          String host;
          @ConfigProperty(name = "client.port")
          int port;
      
          String path = "/v1/batch";
      
          @GET
          @Produces(MediaType.TEXT_PLAIN)
          public String hello() {
              return host + ":" + port + path;
          }
      }
      
    3. 配置应用
      src/main/resources/application.properties中添加应用配置:

      # Consul服务器名称
      quarkus.application.name=consul-test
      # 启用从Consul读取配置文件
      quarkus.consul-config.enabled=true
      # 此Quarkus应用程序要从Consul配置服务器读取的KV存储的键
      quarkus.consul-config.properties-value-keys=config/${quarkus.application.name}
      
    4. 将配置添加到Consul
      通过Consul UI(或调用API)添加属性:


      Consul UI-K/V

    config/consul-test:

    client.host=127.0.0.1
    client.port=8000
    
    1. 打包并运行:./mvnw compile quarkus:dev

    Quarkus允许Java程序在运行时读取Consul配置,将Quarkus应用项目打包并部署到Kubernetes中,Consul Service Mesh就自动进行服务同步和发现,任何Consul或Quarkus问题,欢迎评论区积极讨论,互相学习,永远进步。

    相关文章

      网友评论

          本文标题:Java微服务:Consul篇

          本文链接:https://www.haomeiwen.com/subject/eyfbpktx.html