【问题标题】:How to deploy docker images in google cloud kubernates如何在谷歌云 kubernetes 中部署 docker 镜像
【发布时间】:2019-11-25 00:35:03
【问题描述】:

我的微服务很少:

APIGateway:所有带有zuul代理的请求的通用网关

ConfigService:类似于属性文件的配置服务器

RegistryService:使用 eureka 服务器的服务注册中心

HomePageService:1个服务注册到eureka和config-service

ProductService:1个服务注册到eureka和config-service

当我按本地顺序运行时: RegistryService->ConfigService THEN all services APIGateway, HomePageService, ProductService,工作正常。

现在我通过提供配置创建了 docker 镜像,并在 docker 容器中运行并推送到 GCR。 我已经为谷歌云创建了帐户(免费 1 年)并且能够在 repo 中查看图像。

一切都很好,但是我如何在 GKE 中部署这些图像。我单独运行并部署但没有链接。部署这些服务的方式是什么?

kubectl run service-registry --image=gcr.io/salesstock/service-registry:v1 --port=7002
kubectl expose deployment service-registry --name=service-registry  --type=LoadBalancer --port=7002 --target-port=7002 

我尝试了一些东西并分享了一些代码片段。

RegistryService 属性:

spring:
  profiles: 
    active: dev
  application:
    name: registry-service       
server:
  port: 7002      
eureka:
  instance:
    hostname: localhost
    port: 7002
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${eureka.instance.port}/eureka/     

#======docker======
---    
spring:
  profiles: docker

eureka:
  instance:
    hostname: 192.168.99.100
    port: 7002
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${eureka.instance.port}/eureka/

APIGateway 属性:

spring: 
  profiles:
    active: dev
  application:
    name: api-gateway
  cloud:
    config:
      fail-fast: true
      discovery:
        enabled: true
        service-id: config-service
#      uri: http://localhost:8888    
server:
  port: 7001      
eureka:
  instance:
    hostname: localhost
    port: 7002
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${eureka.instance.port}/eureka/          

#======docker======
---    
spring:
  profiles: docker
  cloud:
    config:
      fail-fast: true
      discovery:
        enabled: true
        service-id: config-service
#       uri: http://192.168.99.100:8888

eureka:
  instance:
    hostname: 192.168.99.100
    port: 7002
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${eureka.instance.port}/eureka/         

ConfigService 属性:

spring:
  profiles:
    active: dev
  application:
    name: config-service
  cloud:
    config:
      server:
        git:
          uri:  git url 
          search-paths: ConfigFiles
server:
  port: 8888
management:
  security:
    enabled: false

eureka:
  instance:
    hostname: service-registry
    port: 7002
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${eureka.instance.port}/eureka/              

#======docker======
---    
spring:
  profiles: docker
  cloud:
    config:
      server:
        git:
          uri: git repo
          search-paths: ConfigFiles          
eureka:
  instance:
    hostname: 192.168.99.100
    port: 7002
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${eureka.instance.port}/eureka/     

HomePageService 属性:

spring:
  profiles:
    active: dev
  application:
    name: homepage-service
  cloud:
    config:
      fail-fast: true
      discovery:
        enabled: true
        service-id: config-service
#      uri: http://localhost:8888

server:
  port: 7003

#for dynamic port
#server:
#  port: 0   
feign:
  client:
    config:
      default:
        connectTimeout: 160000000
        readTimeout: 160000000
management:
  security:
    enabled: false
##  endpoints:
##    web:
##      exposure:
##        include: *
eureka:
  instance:
    hostname: localhost
    port: 7002
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${eureka.instance.port}/eureka/                    

#======docker======
---    
spring:
  profiles: docker
  cloud:
    config:
      fail-fast: true
      discovery:
        enabled: true
        service-id: config-service
#       uri: http://192.168.99.100:8888

eureka:
  instance:
    hostname: 192.168.99.100
    port: 7002
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${eureka.instance.port}/eureka/    

Docker 镜像示例:

  FROM openjdk:8
    EXPOSE 7003
    ADD /target/homepage-service.jar homepage-service.jar
    ENTRYPOINT ["java","-Dspring.profiles.active=docker", "-jar", "homepage-service.jar"]

【问题讨论】:

    标签: java spring-boot docker microservices google-kubernetes-engine


    【解决方案1】:

    您可以通过在 podspec of the k8s resource 中定义容器来部署 Docker 容器。您已经使用 kubectl run 命令执行此操作。

    然后expose the pods using services,这就是你正在使用 kubectl Expose 做的事情(默认值是 ClusterIP,非常适合 Pod 间通信)

    这对您不起作用的原因是每个容器尝试访问其他容器的方式。本地主机将无法正常工作。您使用的 IP (192.168.x.x) 可能也不起作用。

    相反,将每个容器配置为以the FQDN of the corresponding service 为目标。 示例:

    RegistryService->配置服务

    使用 ClusterIP 服务公开 ConfigService(如果使用 kubectl expose,名称将是 ConfigService)。
    配置 RegistryService 以使用“ConfigService.default.svc.cluster.local”查找 ConfigService

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 2020-02-16
      • 2019-03-29
      • 2020-05-02
      • 1970-01-01
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      相关资源
      最近更新 更多