ESB文档库 ESB文档库
00 概述
01 产品安装指南
02 快速入门指南
03 ESB Studio使用指南
04 企业服务总线使用指南
05 高级配置指南
06 接口服务说明
07 升级&数据迁移指南
08 FAQ
  • 目的
  • 1.ESB Server容器化部署
  • 1.1.基础镜像的导入
  • 1.3.构建镜像
  • 1.3.1.编写Dockerfile
  • 1.3.2.构建镜像
  • 1.4.部署ESB-Server镜像
  • 1.4.1.上传镜像到私有镜像库
  • 1.4.2.创建ConfigMap
  • 1.4.3.创建Chart包
  • 1.4.4.配置文件的修改
  • 1.4.5.部署服务
  • 1.4.5.1.检查配置
  • 1.4.5.2.部署
  • 1.4.5.3.查看日志
  • 2.ESB Governor容器化部署
  • 2.1.基础镜像的导入
  • 2.2.上传JDK和数据库驱动包
  • 2.3.构建镜像
  • 2.3.1.编写Dockerfile
  • 2.3.2.构建镜像
  • 2.4.部署APIGateway-Governor镜像
  • 2.4.1.上传镜像到私有镜像库
  • 2.4.2.创建ConfigMap
  • 2.4.3.创建Chart包
  • 2.4.4.配置文件的修改
  • 2.4.5.部署服务
  • 2.4.5.1.检查配置
  • 2.4.5.2.部署
  • 2.4.5.3.查看日志

# 目的

ESB Server 和 ESB Governor 进行容器化部署(本文档只提供基础chart 包安装方式,生产环境需要根据客户具体环境进行适配)。

1.找售后拿到ESB Server和ESB Governor的基础镜像包:esb-server-base-image.tar,esb-governor-base-image.tar。

2.本文档只提供k8s chart包相关配置,ESB Server和ESB Governor的介质内配置文件配置,请参考 01 产品安装指南

基础镜像包是将服务进行容器化构建后导出的镜像包,该镜像不包含JDK,数据库驱动,以及必要的ip地址并未设置,不是一个可直接使用的镜像包。因此,需要根据实际使用情况,设置JDK路径,数据库驱动包,必要的IP之后,才可以使用。

# 1.ESB Server容器化部署

# 1.1.基础镜像的导入

拿到基础镜像包:esb-server-base-image.tar之后,将镜像包上传到服务器指定目录,如:/opt/esb/base-image下。 使用如下命令,将/opt/esb/base-image目录下的镜像包导入到Docker容器中

docker load -i /opt/esb/base-image/esb-server-base-image.tar

1.2.上传JDK和数据库驱动包 这里以jdk1.8,和mysql数据驱动作为示例,将其上传至服务器指定目录,如:/home/esb目录下。

# 1.3.构建镜像

# 1.3.1.编写Dockerfile

在esb目录下创建并编写Dockerfile文件,Dockerfile文件内容如下:

#基础镜像名:标签
FROM esb-server-base-image:latest
#jdk所在目录,copy到创建镜像的目录
COPY ./jdk1.8/ /opt/primeton/esb/server/jdk1.8/
 
#copy数据库启动
COPY ./mysql-connector-java-5.1.32.jar  /opt/Primeton_ESB_Server/server/libs/
#设置JAVA_HOME环境变量
ENV RP_JAVA_HOME=/opt/jdk1.8/
#执行启动脚本
ENTRYPOINT /opt/Primeton_ESB_Server/startServer.sh

# 1.3.2.构建镜像

进入到/home/esb目录,执行以下命令:

docker build -t esb-server-image:V1 ./

至此,镜像构建完成。

# 1.4.部署ESB-Server镜像

# 1.4.1.上传镜像到私有镜像库

使用如下命令,将1.3.2中构建成功的镜像,上传至私有镜像库中


#tag制作,da7fa4ac97be4:镜像ID,192.168.16.221:9800:仓库地址,esb-server-image:8分别表示镜像名和版本号
docker tag da7fa4ac97be4 192.168.16.221:9800/esb-server-image:8
 
#推送至私有仓库
docker push 192.168.16.221:9800/esb-server-image:8

# 1.4.2.创建ConfigMap

创建一个名为application.yml文件,内容如下,将该文件作为创建ConfigMap的文件源,根据实际情况,修改配置

需要修改项
- url: jdbc:mysql://127.0.0.1:3306/esb8?useUnicode=true&characterEncoding=UTF-8,数据库地址;
- driver-class-name: com.mysql.jdbc.Driver,驱动Class;
- host: 127.0.0.1,redis地址;
- port: 6379,redis端口号;
- - ip: 127.0.0.1,elastic地址;
- port: 9200,elastic端口号;
- url: http://127.0.0.1:8080/governor/unManagerService/addUnManagedServer,governor地址。
spring:
  jpa:
    hibernate:
      ddl-auto: none
    database-platform: org.hibernate.dialect.MySQLDialect
  datasource:
    druid:
      username: root
      password: root
      url: jdbc:mysql://127.0.0.1:3306/esb8?useUnicode=true&characterEncoding=UTF-8
      driver-class-name: com.mysql.jdbc.Driver
      max-active: 20
      min-idle: 10
      query-timeout: 5
      max-wait: 5000
      max-wait-thread-count: 10
      validation-query-timeout: 3
      transaction-query-timeout: 5
  redis:
    enable: false
    timeout: 5000
    host: 127.0.0.1
    port: 6379
    pool:
      max-wait: 10000
      max-active: 500
      min-idle: 50
      max-idle: 250
   
esb:
  path:
    ignored:
      - /favicon.ico #默认配置,不可删除
  jms:
    timeout: 300 #单位秒
  policy-data-init-time:
    #分别可以按天,小时,分钟,秒为单位,设置每次执行同步程序相隔的时间。
    #例如,设置间隔时间为一天,Days=1,Hours=24,Minutes=60,Seconds=60
    days: 1
    hours: 24
    minutes: 60
    seconds: 60
    #以下hour,min,sec为设置同步程序的启动时间。
    #例如,16:30:00启动程序,hour=16,min=30,sec=00
    hour: 12
    min: 0
    sec: 0
  collector:
    global:
      intervalTime: 10000 #单位ms
    sys:
      resource:
        enabled: true
      thread:
        enabled: true
    module:
      state:
        enabled: true
      thread:
        enabled: true
      endpoint:
        enabled: true
    mq:
      state:
        enabled: true
  alarm:
    email:
      host: smtp.primeton.com
      user: esb@primeton.com
      password: primeton
  database:
    init: true
    #强制初始化
    enforceInit: false
 
elasticsearch:
  enabled: true
  ioThreadCount: 50
  connectTimeout: 60000 #单位ms
  maxTotal: 10000
  maxPerRoute: 1000
  numberOfShards: 1
  numberOfReplicas: 0
  refreshInterval: 10s
  username:
  password:
  hosts:
  - ip: 127.0.0.1
    port: 9200
    protocol: http
     
governor:
  getServer:
    url: http://127.0.0.1:8080/governor/unManagerService/addUnManagedServer

将上述配置修改完成之后,上传至需要部署服务器上的指定目录下,如:/opt/esb-server,使用如下命令创建ConfigMap

#1.创建ConfigMap,/opt/esb-server目录为application.yml所在的目录
kubectl create configmap esb-server-config --from-file=/opt/esb-server/application.yml
  
#2.查看创建的ConfigMap
kubectl describe configmaps esb-server-config

# 1.4.3.创建Chart包

使用helm创建部署包,我们在/opt目录下,进行创建,命令如下:

helm create esb-server-chart

# 1.4.4.配置文件的修改

执行完上述命令后,将会创建一个名为esb-server-chart的文件夹,文件列表如下:

[root@k8s ~]# tree esb-server-chart
esb-server-chart
├── charts              
├── Chart.yaml         
├── templates         
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── ingress.yaml
│   ├── NOTES.txt
│   └── service.yaml
└── values.yaml
 
2 directories, 7 files

我们需要修改deployment.yaml、service.yaml、values.yaml文件,修改为如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: esb-server-deployment
  labels:
    app: {{ Values.esb.server.chart.name }}
    chart: {{ Values.esb.server.chart.chart }}
    release: {{ Release.Name }}
    heritage: {{ Release.Service }}
spec:
  replicas: {{ Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ Values.esb.server.chart.name }}
      release: {{ Release.Name }}
  template:
    metadata:
      labels:
        app: {{ Values.esb.server.chart.name }}
        release: {{ Release.Name }}
    spec:
      containers:
        - name: {{ Values.esb.server.chart.container.name }}
          image: "{{ Values.image.repository }}:{{ Values.image.tag }}"
          imagePullPolicy: {{ Values.image.pullPolicy }}
          ports:
            - name: {{ Values.esb.server.port.name }}
              containerPort: {{ Values.service.containerPort }}
              protocol: TCP
          volumeMounts:
          - mountPath: "/opt/primeton/esb/server/server/conf/application.yml"
            subPath: application.yml
            name: config-volume
      volumes:
      - name: config-volume
        configMap:
          name: esb-server-config
configMap的name值要和创建ConfigMap时的值相同,否则将找不到对应的ConfigMap
apiVersion: v1
kind: Service
metadata:
  name: esb-server-chart-service
  labels:
    app: {{Values.esb.server.chart.name}}
    chart: {{Values.esb.server.chart.chart}}
    release: {{Release.Name}}
    heritage: {{Release.Service}}
spec:
  type: {{Values.service.type}}
  ports:
    - port: {{Values.service.port}}
      targetPort: {{Values.service.containerPort}}
      protocol: TCP
      name: {{Values.esb.server.port.name}}
  selector:
    app: {{Values.esb.server.chart.name}}
    release: {{Release.Name}}

values.yaml

esb:
  server:
    chart:
      name: ESB-Server
      chart: ESB-Server-Chart
      container:
        name: esb-server-container
    port:
      name: http
 
replicaCount: 1
 
image:
  repository: 192.168.16.221:9800/esb-server-image
  tag: 8
  pullPolicy: IfNotPresent
 
service:
  type: NodePort
  port: 8080
  containerPort: 8080
 
ingress:
  enabled: false
  path: /
 
resources: {}
需要将上述的镜像地址:192.168.16.221:9800修改为实际的镜像地址

# 1.4.5.部署服务

# 1.4.5.1.检查配置

执行该命令时所在的目录为,esb-server-chart所在目录,如果配置有误,根据提示修改配置即可

helm install --dry-run --debug esb-server-chart

# 1.4.5.2.部署

可以在部署的时候,根据实际需要,使用--set来设置参数,该参数会覆盖values.yaml文件中设置的参数值,部署示例:

helm install ${chart-name} --set ${key=value}
 
#示例
helm install esb-server-chart

# 1.4.5.3.查看日志

部署完成后,可以查看pod日志,确保部署后,服务启动成功,先找到部署的pod,再查看日志

#获取pod
kubectl get pods
 
#查看日志
kubectl logs ${pod-name}

# 2.ESB Governor容器化部署

# 2.1.基础镜像的导入

拿到基础镜像包:esb-governor-base.tar之后,将镜像包上传到服务器指定目录,如:/opt/esb/base-image下。 使用如下命令,将/opt/esb/base-image目录下的镜像包导入到Docker容器中

docker load -i /opt/esb/base-image/esb-governor-base-image.tar

# 2.2.上传JDK和数据库驱动包

这里以jdk1.8,和mysql数据驱动作为示例,将其上传至服务器指定目录,如:opt/source/下。

# 2.3.构建镜像

# 2.3.1.编写Dockerfile

在source目录下创建并编写Dockerfile文件,Dockerfile文件内容如下:

#基础镜像名:标签
FROM esb-governor-base-image:latest
#jdk所在目录,copy到创建镜像的目录
COPY ./jdk1.8/ /opt/primeton/governor/jdk1.8/
 
#copy数据库启动
COPY ./mysql-connector-java-5.1.32.jar /opt/primeton/governor/libs/
 
#设置JAVA_HOME环境变量
ENV RP_JAVA_HOME=/opt/primeton/governor/jdk1.8
 
#执行启动脚本
ENTRYPOINT /opt/primeton/governor/startServer.sh

# 2.3.2.构建镜像

进入到source目录,执行以下命令:

docker build -t  esb-governor-image:9.0 ./

至此,镜像构建完成。

# 2.4.部署APIGateway-Governor镜像

# 2.4.1.上传镜像到私有镜像库

使用如下命令,将2.3.2中构建成功的镜像,上传至私有镜像库中

#tag制作,4fbee3684923:镜像ID,192.168.16.221:9800:仓库地址, APIGateway-governor-image:8分别表示镜像名和版本号 docker tag 4fbee3684923 192.168.16.221:9800/ esb-governor-image:8 #推送至私有仓库 docker push 192.168.16.221:9800/ esb-governor-image:8

# 2.4.2.创建ConfigMap

创建一个名为application.yml文件内容如下,将该文件作为创建ConfigMap的文件源,根据实际情况,修改配置

需要修改项
- url: jdbc:mysql://127.0.0.1:3306/esb8?useUnicode=true&characterEncoding=UTF-8,数据库地址;
- driver-class-name: com.mysql.jdbc.Driver,驱动Class;
- ip: 127.0.0.1,elastic地址;
- port: 9200,elastic端口号;
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8    
  jpa:
    hibernate:
      ddl-auto: none
    database-platform: org.hibernate.dialect.MySQLDialect
  datasource:
    druid:
      username: root
      password: root
      url: jdbc:mysql://127.0.0.1:3306/esb8?useUnicode=true&characterEncoding=UTF-8
      driver-class-name: com.mysql.jdbc.Driver
      max-active: 20
      min-idle: 10
      query-timeout: 5
      max-wait: 5000
      max-wait-thread-count: 10
      validation-query-timeout: 3
      transaction-query-timeout: 5
  http:
    multipart:
      maxFileSize: 50Mb 
      maxRequestSize: 100Mb
 
esb:
  business: true
  database:
    init: false
    #强制初始化
    enforceInit: false
  auth:
    lock:
      enable: true
      lockCount: 5
      lockTime: 1800000
      maxErrorTime: 1800000
 
feign:
  hystrix:
    enabled: false
 
management:
  security:
    enabled: false
security:
  iam:
    enabled: true
    login-url: /login     
    logout-url: /logout
  basic:
    enabled: false
  ignored:
    - favicon.ico
    - /swagger-resources/**
    - /swagger-ui.html
    - /v2/api-docs
    - /webjars/**
    - /functions/functionCode/**
    - /index.html
    - /static/**
    - /
  enable-csrf: false   
     
elasticsearch:
  enabled: true
  ioThreadCount: 50
  connectTimeout: 60000 #单位ms
  maxTotal: 10000
  maxPerRoute: 1000
  numberOfShards: 1
  numberOfReplicas: 0
  refreshInterval: 10s
  username:
  password:
  hosts:
  - ip: 127.0.0.1
    port: 9200
    protocol: http

将上述配置修改完成之后,上传至需要部署服务器上的指定目录下,如:/opt/APIGateway-governor,使用如下命令创建ConfigMap

#1.创建ConfigMap,/opt/esb-governor目录为application.yml所在的目录
kubectl create configmap esb-governor-config --from-file=/opt/APIGateway-governor/application.yml
  
#2.查看创建的ConfigMap
kubectl describe configmaps esb-governor-config

# 2.4.3.创建Chart包

使用helm创建部署包,我们在/opt目录下,进行创建,命令如下:

helm create esb-governor-chart

# 2.4.4.配置文件的修改

执行完上述命令后,将会创建一个名为esb-governor-chart的文件夹,文件列表如下:

[root@k8s ~]# tree esb-governor-chart
esb-governor-chart
├── charts              
├── Chart.yaml         
├── templates         
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── ingress.yaml
│   ├── NOTES.txt
│   └── service.yaml
└── values.yaml
 
2 directories, 7 files

我们需要修改deployment.yaml、service.yaml、values.yaml文件,修改为如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: esb-governor-deployment
  labels:
    app: {{ Values.esb.governor.chart.name }}
    chart: {{ Values.esb.governor.chart.chart }}
    release: {{ Release.Name }}
    heritage: {{ Release.Service }}
spec:
  replicas: {{ Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ Values.esb.governor.chart.name }}
      release: {{ Release.Name }}
  template:
    metadata:
      labels:
        app: {{ Values.esb.governor.chart.name }}
        release: {{ Release.Name }}
    spec:
      containers:
        - name: {{ Values.esb.governor.chart.container.name }}
          image: "{{ Values.image.repository }}:{{ Values.image.tag }}"
          imagePullPolicy: {{ Values.image.pullPolicy }}
          ports:
            - name: {{ Values.esb.governor.port.name }}
              containerPort: {{ Values.governor.containerPort }}
              protocol: TCP
          volumeMounts:
          - mountPath: "/opt/primeton/governor/conf/application.yml"
            subPath: application.yml
            name: config-volume
      volumes:
      - name: config-volume
        configMap:
          name: esb-governor-config
configMap的name值要和创建ConfigMap时的值相同,否则将找不到对应的ConfigMap
apiVersion: v1
kind: Service
metadata:
  name: esb-governor-chart-service
  labels:
    app: {{Values.esb.governor.chart.name}}
    chart: {{Values.esb.governor.chart.chart}}
    release: {{Release.Name}}
    heritage: {{Release.Service}}
spec:
  type: {{Values.service.type}}
  ports:
    - port: {{Values.service.port}}
      targetPort: {{Values.service.containerPort}}
      protocol: TCP
      name: {{Values.esb.governor.port.name}}
  selector:
    app: {{Values.esb.governor.chart.name}}
    release: {{Release.Name}}

esb:
  governor:
    chart:
      name: ESB-Governor
      chart: ESB-Governor-Chart
      container:
        name: esb-governor-container
    port:
      name: http
 
replicaCount: 1
 
image:
  repository: 192.168.16.221:9800/esb-governor-image
  tag: 8
  pullPolicy: IfNotPresent
 
service:
  type: NodePort
  port: 8080
  containerPort: 8080
 
ingress:
  enabled: false
  path: /
 
resources: {}
需要将上述的镜像地址:192.168.16.221:9800修改为实际的镜像地址

# 2.4.5.部署服务

# 2.4.5.1.检查配置

执行该命令时所在的目录为,esb-governor-chart所在目录,如果配置有误,根据提示修改配置即可

helm install --dry-run --debug esb-governor-chart

# 2.4.5.2.部署

可以在部署的时候,根据实际需要,使用--set来设置参数,该参数会覆盖values.yaml文件中设置的参数值,部署示例:

helm install ${chart-name} --set ${key=value}
 
#示例
helm install esb-governor-chart

# 2.4.5.3.查看日志

部署完成后,可以查看pod日志,确保部署后,服务启动成功,先找到部署的pod,再查看日志


#获取pod
kubectl get pods
 
#查看日志
kubectl logs ${pod-name}

← 5.6 报文转换配置说明 5.8 ESB容器化部署 二 →