apollo配置中心快速部署步骤
参考文档: https://www.apolloconfig.com/#/zh/deployment/distributed-deployment-guide?id=_24-kubernetes%e9%83%a8%e7%bd%b2
1. 数据库准备
Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,从源码仓库下载sql文件,导入数据库即可。需要注意的是ApolloPortalDB只需要在生产环境部署一个即可,而ApolloConfigDB需要在每个环境部署一套,如fat、uat和pro分别部署3套ApolloConfigDB。
注意:使用工具导入sql文件时,需注意工具sql编辑器的编码方式,建议采用拷贝粘贴替代文件导入。
如有外部数据库实例,即可直接使用SQL文件进行数据库创建和初始化。本文采用手工部署单节点mysql,相关部署yaml文件如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mysql-dev
name: mysql-dev
namespace: dev
spec:
replicas: 1
selector:
matchLabels:
app: mysql-dev
template:
metadata:
labels:
app: mysql-dev
spec:
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 30
- key: "node.kubernetes.io/not-ready"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 30
containers:
- env:
- name: MYSQL_ROOT_PASSWORD
value: "password"
- name: TZ
value: Asia/Shanghai
image: mysql:8.0.17
imagePullPolicy: IfNotPresent
name: mysql-dev
ports:
- containerPort: 3306
protocol: TCP
name: tcp
args:
- --lower_case_table_names=1
- --skip-ssl
- --character_set_server=utf8mb4
- --explicit_defaults_for_timestamp
# 数据库的持久化存储,根据实际情况修改
# volumeMounts:
# - name: mysqldata
# mountPath: /var/lib/mysql
# volumes:
# - name: mysqldata
# nfs:
# server: 192.168.0.0
# path: "/nfs/mysql-data"
---
apiVersion: v1
kind: Service
metadata:
name: mysql-dev
namespace: dev
spec:
ports:
- port: 3306
protocol: TCP
targetPort: 3306
nodePort: 30306
type: NodePort
selector:
app: mysql-dev
2. kubernetes部署
Apollo 1.7.0版本增加了基于Kubernetes原生服务发现的部署模式,不再使用内置的Eureka。以下使用官方Helm Charts进行快速部署。如何安装helm,请参考官方手册:https://helm.sh/
Apollo目前支持以下环境:
- DEV:开发环境
- FAT:测试环境,相当于alpha环境(功能测试)
- UAT:集成环境,相当于beta环境(回归测试)
- PRO:生产环境
2.1 添加Apollo Helm Chart仓库
$ helm repo add apollo https://charts.apolloconfig.com
$ helm search repo apollo
NAME CHART VERSION APP VERSION DESCRIPTION
apollo/apollo-portal 0.7.0 2.2.0 A Helm chart for Apollo Portal
apollo/apollo-service 0.7.0 2.2.0 A Helm chart for Apollo Config Service and Apol...
## 将helm chart拉到本地,方便编辑values.yaml文件
$ helm pull apollo/apollo-service
$ helm pull apollo/apollo-portal
拉取apollo-portal和apollo-service到本地之后分别解压,下面需要用到解压后的value.yaml文件。
2.2 部署apollo-service
apollo/apollo-service包含两个服务:apollo-configservice和apollo-adminservice。根据架构需要在每个环境中安装apollo-configservice和apollo-adminservice,建议在release名称中加入环境信息,例如:apollo-service-dev。
拷贝默认值到values-dev.yaml
cp apollo-service\values.yaml apollo-service\values-dev.yaml
编辑values-dev.yaml
修改数据库相关配置:
configdb:
name: apollo-configdb
# apolloconfigdb host
host: "mysql-dev"
port: 3306
dbName: apolloconfigdb
# apolloconfigdb user name
userName: "root"
# apolloconfigdb password
password: "password"
connectionStringProperties: characterEncoding=utf8
service:
# whether to create a Service for this host or not
enabled: false
fullNameOverride: ""
port: 3306
type: ClusterIP
其他值根据实际情况调整,此处保持默认。
可配置项说明:https://www.apolloconfig.com/#/zh/deployment/distributed-deployment-guide?id=_24133-%e9%85%8d%e7%bd%ae%e9%a1%b9%e8%af%b4%e6%98%8e
执行apollo-service部署命令:
$ helm install apollo-service-dev -f apollo-service/values-dev.yaml -n dev apollo/apollo-service
NAME: apollo-service-dev
LAST DEPLOYED: Wed Jan 3 14:17:42 2024
NAMESPACE: dev
STATUS: deployed
REVISION: 1
dev SUITE: None
NOTES:
Meta service url for current release:
echo http://apollo-service-dev-apollo-configservice.dev:8080
For local dev use:
export POD_NAME=$(kubectl get pods --namespace dev -l "app=apollo-service-dev-apollo-configservice" -o jsonpath="{.items[0].metadata.name}")
echo http://127.0.0.1:8080
kubectl --namespace dev port-forward $POD_NAME 8080:8080
Urls registered to meta service:
Config service: http://apollo-service-dev-apollo-configservice.dev:8080
Admin service: http://apollo-service-dev-apollo-adminservice.dev:8090
其他环境fat uat pro部署方法依此类推。
2.3 部署apollo-portal
apollo-portal部署需要2.2步骤的meta service地址,例如上述的Config service: http://apollo-service-dev-apollo-configservice.dev:8080
同样的拷贝默认value.yaml文件
cp apollo-portal/values.yaml apollo-portal/values-dev.yaml
编辑values-dev.yaml
config:
# spring profiles to activate
profiles: "github,auth"
# specify the env names, e.g. dev,pro
envs: "dev"
# specify the meta servers, e.g.
# dev: http://apollo-configservice-dev:8080
# pro: http://apollo-configservice-pro:8080
metaServers:
dev: http://apollo-service-dev-apollo-configservice.dev:8080
# 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: mysql-dev
port: 3306
dbName: apolloportaldb
# apolloportaldb user name
userName: root
# apolloportaldb password
password: password
connectionStringProperties: characterEncoding=utf8
service:
# whether to create a Service for this host or not
enabled: false
fullNameOverride: ""
port: 3306
type: ClusterIP
其他配置项说明:https://www.apolloconfig.com/#/zh/deployment/distributed-deployment-guide?id=_24143-%e9%85%8d%e7%bd%ae%e9%a1%b9%e8%af%b4%e6%98%8e
执行apollo-portal部署命令:
$ helm install apollo-portal -f apollo-portal/values-dev.yaml -n dev apollo/apollo-portal
NAME: apollo-portal
LAST DEPLOYED: Wed Jan 3 15:45:38 2024
NAMESPACE: dev
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Portal url for current release:
export POD_NAME=$(kubectl get pods --namespace dev -l "app=apollo-portal" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8070 to use your application"
kubectl --namespace dev port-forward $POD_NAME 8070:8070
至此,apollo-service和apollo-portal部署完成。
3. 服务访问
在value-dev.yaml文件中可以配置ingress进行访问。本案为测试,集群内使用k8s服务发现,集群外直接采用nodeport访问即可。
3.1 apollo-service访问方式
部署时返回的信息已经提示了apollo-service的访问方式了:
Meta service url for current release:
echo http://apollo-service-dev-apollo-configservice.dev:8080
For local dev use:
export POD_NAME=$(kubectl get pods --namespace dev -l "app=apollo-service-dev-apollo-configservice" -o jsonpath="{.items[0].metadata.name}")
echo http://127.0.0.1:8080
kubectl --namespace dev port-forward $POD_NAME 8080:8080
Urls registered to meta service:
Config service: http://apollo-service-dev-apollo-configservice.dev:8080
Admin service: http://apollo-service-dev-apollo-adminservice.dev:8090
3.2 apollo-portal访问方式
同样,apollo-portal部署时返回的信息已经提示了访问方式:
Portal url for current release:
export POD_NAME=$(kubectl get pods --namespace dev -l "app=apollo-portal" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8070 to use your application"
kubectl --namespace dev port-forward $POD_NAME 8070:8070
本案直接用nodeport方式暴露apollo-portal服务:
kubectl expose service apollo-portal --port=8070 --target-port=8070 --name=apollo-portal-nodeport --type=NodePort -n dev
4. 页面访问
具体页面操作,可以使用官方提供的演示环境。
演示环境(Demo):
http://81.68.181.139
账号/密码:apollo/admin