# 目的
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}