helm部署多环境多k8s集群Apollo(阿里云资源)
规划搭建信息1.利用官方文档提供的helm方式部署2.部署三个环境: prodevtest3.各个环境需准备MySQL、Slb,因网络原因,dev和test环境的Slb需有公网ip,生产的vpc与内网连通故无需公网4.apollo的组件包括apollo-config-server(其中包括apollo-meta-server)、apollo-admin-server和apollo-portal4.
规划
搭建信息
1.利用官方文档提供的helm方式部署
2.部署三个环境: pro dev test
3.各个环境需准备MySQL、Slb,因网络原因,dev和test环境的Slb需有公网ip,生产的vpc与内网连通故无需公网
4.apollo的组件包括apollo-config-server(其中包括apollo-meta-server)、apollo-admin-server和apollo-portal
4.每个环境(开发/测试/生产)都需要安装apollo-config-server和apollo-admin-server,计划将两者部署在对应环境的k8s集群中的ops命名空间下
5.开发、测试、生产三个环境只需要一个apollo-portal,计划将apollo-portal部署在生产k8s集群的ops命名空间下
环境 | 数据库实例 | 用户 | 密码 | 数据库 | 数据库连接地址 | SLB ip |
---|---|---|---|---|---|---|
生产 | proddb | apollo | my_apollo_db_passwd | ProdApolloConfigDB | rm-prod-rds-addresss.mysql.rds.aliyuncs.com | prod_slb_address |
测试 | testdb | apollo | my_apollo_db_passwd | TestAlphaApolloConfigDB | rm-test-rds-addresss.mysql.rds.aliyuncs.com | test_slb_address |
开发 | devdb | apollo | my_apollo_db_passwd | DevApolloConfigDB | rm-dev-rds-addresss.mysql.rds.aliyuncs.com | dev_slb_address |
部署大致流程
1.使用helm将apollo的chart拉到本地
2.修改chart包中的values.yaml文件,对配置进行自定义
3.在各自集群上部署apollo-config-server和apollo-admin-server
4.在生产集群上部署apollo-portal
准备工作
按照分布式部署指南
1.创建数据库用户apollo
2.创建数据库并授读写权限给apollo用户
3.每个集群各自需一个数据库,apollo-portal单独需要一个数据库
部署
部署生产环境
$ helm version
version.BuildInfo{Version:"v3.5.1", GitCommit:"32c22239423b3b4ba6706d450bd044baffdcf9e6", GitTreeState:"clean", GoVersion:"go1.15.7"}
$ helm repo add apollo http://ctripcorp.github.io/apollo/charts
"apollo" has been added to your repositories
$ cd /tmp/apollo/
$ helm search repo apollo
NAME CHART VERSION APP VERSION DESCRIPTION
apollo/apollo-portal 0.1.2 1.7.2 A Helm chart for Apollo Portal
apollo/apollo-service 0.1.2 1.7.2 A Helm chart for Apollo Config Service and Apol...
$ helm pull apollo/apollo-service --untar
$ cd /tmp/apollo/apollo-service
修改values.yaml,以下是修改好的版本
若手动修改,注意修改数据库相关信息
configdb:
name: apollo-configdb
# apolloconfigdb host
host: "rm-prod-rds-addresss.mysql.rds.aliyuncs.com"
port: 3306
dbName: ProdApolloConfigDB
# apolloconfigdb user name
userName: "apollo"
# apolloconfigdb password
password: "my_apollo_db_passwd"
connectionStringProperties: characterEncoding=utf8
service:
# whether to create a Service for this host or not
enabled: true
fullNameOverride: ""
port: 3306
type: ExternalName
configService:
name: apollo-configservice
fullNameOverride: ""
replicaCount: 1
containerPort: 8080
image:
repository: apolloconfig/apollo-configservice
pullPolicy: IfNotPresent
imagePullSecrets: []
service:
fullNameOverride: ""
port: 8080
targetPort: 8080
type: ClusterIP
liveness:
initialDelaySeconds: 100
periodSeconds: 10
readiness:
initialDelaySeconds: 30
periodSeconds: 5
config:
# spring profiles to activate
profiles: "github,kubernetes"
# override apollo.config-service.url: config service url to be accessed by apollo-client
configServiceUrlOverride: ""
# override apollo.admin-service.url: admin service url to be accessed by apollo-portal
adminServiceUrlOverride: ""
# environment variables passed to the container, e.g. JAVA_OPTS
env: {}
strategy: {}
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
adminService:
name: apollo-adminservice
fullNameOverride: ""
replicaCount: 1
containerPort: 8090
image:
repository: apolloconfig/apollo-adminservice
pullPolicy: IfNotPresent
imagePullSecrets: []
service:
fullNameOverride: ""
port: 8090
targetPort: 8090
type: ClusterIP
liveness:
initialDelaySeconds: 100
periodSeconds: 10
readiness:
initialDelaySeconds: 30
periodSeconds: 5
config:
# spring profiles to activate
profiles: "github,kubernetes"
# environment variables passed to the container, e.g. JAVA_OPTS
env: {}
strategy: {}
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
helm 部署
$ helm install apollo-service -f values.yaml -n ops apollo/apollo-service
$ helm list -n ops
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
apollo-service ops 1 2021-02-03 14:17:18.883545338 +0800 CST deployed apollo-service-0.1.21.7.2
注:部署过程中镜像拉取速度可能较慢
部署apollo-portal
cd /tmp/apollo
helm pull apollo/apollo-portal --untar
cd apollo-portal
修改values.yaml
注意
1.portal的svc需要一个nodeport,主要是方便内网slb暴露服务
2.config.metaServers是各个环境的config-server访问ip:port,这里dev和test的ip和port是slb的
3.配置环境config.envs
name: apollo-portal
fullNameOverride: ""
replicaCount: 1
containerPort: 8070
image:
repository: apolloconfig/apollo-portal
pullPolicy: IfNotPresent
imagePullSecrets: []
service:
fullNameOverride: ""
port: 8070
targetPort: 8070
type: NodePort
sessionAffinity: ClientIP
ingress:
enabled: false
annotations: {}
hosts:
- host: ""
paths: []
tls: []
liveness:
initialDelaySeconds: 100
periodSeconds: 10
readiness:
initialDelaySeconds: 30
periodSeconds: 5
# environment variables passed to the container, e.g. JAVA_OPTS
env: {}
strategy: {}
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
config:
# spring profiles to activate
profiles: "github,auth"
# specify the env names, e.g. dev,pro
envs: "pro,dev,test"
# specify the meta servers, e.g.
# dev: http://apollo-configservice-dev:8080
# pro: http://apollo-configservice:8080
# metaServers: {}
metaServers:
pro: http://apollo-service-apollo-configservice.ops:8080
dev: http://dev_slb_address:30002
test: http://test_slb_address:30004
# specify the context path, e.g. /apollo
contextPath: ""
# extra config files for apollo-portal, e.g. application-ldap.yml
files: {}
portaldb:
name: apollo-portaldb
# apolloportaldb host
host: rm-prod-rds-addresss.mysql.rds.aliyuncs.com
port: 3306
dbName: ApolloPortalDB
# apolloportaldb user name
userName: apollo
# apolloportaldb password
password: my_apollo_db_passwd
connectionStringProperties: characterEncoding=utf8
service:
# whether to create a Service for this host or not
enabled: true
fullNameOverride: ""
port: 3306
type: ExternalName
helm部署
$ helm install apollo-portal -f values.yaml -n ops apollo/apollo-portal
注:values.yaml配置的svc的nodeport为随机端口,用命令获取
kubectl get svc -n ops | grep apollo-portal
获取nodeport后,在slb上配置监听,将slb的8080端口转发到这个nodeport上
这时访问http://prod_slb_address:8080,则可以看到apollo-portal的界面
账号apollo 密码admin 后期使用注意修改
部署开发环境
helm repo add apollo http://ctripcorp.github.io/apollo/charts
cd /tmp/apollo/
helm pull apollo/apollo-service --untar
cd /tmp/apollo/apollo-service
ops@dev-jump:/tmp/apollo/apollo-service$ helm install apollo-service -f values.yaml -n ops apollo/apollo-service
修改values.yaml
注意:
1.修改数据库相关信息
2.config-server和admin-server的svc各自需要一个nodeport,yaml文件中未指定,k8s将随机分配,这里分别是30002和30001
3.dev、test环境和portal所在的生产环境无法通过内网互通,故config-server和admin-server通过node暴露服务在公网,portal才能连通
4.因注意点3,故需修改configService.config.configServiceUrlOverride和configService.config.adminServiceUrlOverride,参数详情见分布式部署指南
configdb:
name: apollo-configdb
# apolloconfigdb host
host: "rm-dev-rds-addresss.mysql.rds.aliyuncs.com"
port: 3306
dbName: DevApolloConfigDB
# apolloconfigdb user name
userName: "apollo"
# apolloconfigdb password
password: "my_apollo_db_passwd"
connectionStringProperties: characterEncoding=utf8
service:
# whether to create a Service for this host or not
enabled: true
fullNameOverride: ""
port: 3306
type: ExternalName
configService:
name: apollo-configservice
fullNameOverride: ""
replicaCount: 1
containerPort: 8080
image:
repository: apolloconfig/apollo-configservice
pullPolicy: IfNotPresent
imagePullSecrets: []
service:
fullNameOverride: ""
port: 8080
targetPort: 8080
type: NodePort
liveness:
initialDelaySeconds: 100
periodSeconds: 10
readiness:
initialDelaySeconds: 30
periodSeconds: 5
config:
# spring profiles to activate
profiles: "github,kubernetes"
# override apollo.config-service.url: config service url to be accessed by apollo-client
configServiceUrlOverride: "http://dev_slb_address:30002"
# override apollo.admin-service.url: admin service url to be accessed by apollo-portal
adminServiceUrlOverride: "http://dev_slb_address:30001"
# environment variables passed to the container, e.g. JAVA_OPTS
env: {}
strategy: {}
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
adminService:
name: apollo-adminservice
fullNameOverride: ""
replicaCount: 1
containerPort: 8090
image:
repository: apolloconfig/apollo-adminservice
pullPolicy: IfNotPresent
imagePullSecrets: []
service:
fullNameOverride: ""
port: 8090
targetPort: 8090
type: NodePort
liveness:
initialDelaySeconds: 100
periodSeconds: 10
readiness:
initialDelaySeconds: 30
periodSeconds: 5
config:
# spring profiles to activate
profiles: "github,kubernetes"
# environment variables passed to the container, e.g. JAVA_OPTS
env: {}
strategy: {}
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
config-server和admin-server的svc被随机分配nodeport,使用以下命令查看,本例分别是30002和30001
kubectl get svc -n ops | grep apollo
在slb上配置监听,将config-server和admin-server暴露在公网,这里用的slb前端端口与svc的nodeport一致,注意加白名单访问控制
部署测试环境
helm repo add apollo http://ctripcorp.github.io/apollo/charts
cd /tmp/apollo/
helm pull apollo/apollo-service --untar
cd /tmp/apollo/apollo-service
类似开发环境,修改values.yaml,需要注意的点和开发环境一样
configdb:
name: apollo-configdb
# apolloconfigdb host
host: "rm-test-rds-addresss.mysql.rds.aliyuncs.com"
port: 3306
dbName: TestBetaApolloConfigDB
# apolloconfigdb user name
userName: "apollo"
# apolloconfigdb password
password: "my_apollo_db_passwd"
connectionStringProperties: characterEncoding=utf8
service:
# whether to create a Service for this host or not
enabled: true
fullNameOverride: ""
port: 3306
type: ExternalName
configService:
name: apollo-configservice
fullNameOverride: ""
replicaCount: 1
containerPort: 8080
image:
repository: apolloconfig/apollo-configservice
pullPolicy: IfNotPresent
imagePullSecrets: []
service:
fullNameOverride: ""
port: 8080
targetPort: 8080
type: NodePort
liveness:
initialDelaySeconds: 100
periodSeconds: 10
readiness:
initialDelaySeconds: 30
periodSeconds: 5
config:
# spring profiles to activate
profiles: "github,kubernetes"
# override apollo.config-service.url: config service url to be accessed by apollo-client
configServiceUrlOverride: "http://test_slb_address:30004"
# override apollo.admin-service.url: admin service url to be accessed by apollo-portal
adminServiceUrlOverride: "http://test_slb_address:30003"
# environment variables passed to the container, e.g. JAVA_OPTS
env: {}
strategy: {}
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
adminService:
name: apollo-adminservice
fullNameOverride: ""
replicaCount: 1
containerPort: 8090
image:
repository: apolloconfig/apollo-adminservice
pullPolicy: IfNotPresent
imagePullSecrets: []
service:
fullNameOverride: ""
port: 8090
targetPort: 8090
type: NodePort
liveness:
initialDelaySeconds: 100
periodSeconds: 10
readiness:
initialDelaySeconds: 30
periodSeconds: 5
config:
# spring profiles to activate
profiles: "github,kubernetes"
# environment variables passed to the container, e.g. JAVA_OPTS
env: {}
strategy: {}
resources: {}
nodeSelector: {}
tolerations: []
affinity: {}
helm部署之后,也和开发环境一样配置slb监听
helm install apollo-service -f values.yaml -n ops apollo/apollo-service
确认部署
1.访问apollo页面,使用apollo用户登录
2.在界面右上角管理员工具中选择"系统信息"
3.在弹出的系统信息页面中,可以看到在部署portal时定义好的环境
4.分别点击各个环境中的config-server和admin-server的"check"按钮,无报错则部署成功
更多推荐
所有评论(0)