apollo

Apollo

架构图

Deployment

组件

名称 功能说明 接口服务对象
Portal 提供Web界面供用户管理配置 配置管理员
AdminService 提供配置管理接口 Portal
ConfigService 提供配置获取接口 Apollo客户端程序
Eureka Config Service和Admin Service会向Eureka注册服务,并保持心跳 Config和Admin
Meta Server Meta Server从Eureka获取Config Service和Admin Service的服务信息 Portal和Client

部署环境

运行环境 版本
mysql 5.6.5+ ApolloPortalDB
ApolloConfigDB
ApolloPortalDevDB
ApolloConfigProDB
ApolloConfigFatDB
java 环境 1.8+
测版本 1.5.1 | 1.6.1 |1.7.1 | 1.8.1 |1.9.2

制作docker image

configService

version=${version:=1.5.1}
wget https://github.com/ctripcorp/apollo/releases/download/v${version}/apollo-configservice-${version}-github.zip -O /opt/apollo-configservice-${version}-github.zip
unzip apollo-configservice-${version}-github.zip -d /opt/apollo-configservice-${version}
wget -O /opt/apollo-configservice-${version}/scripts/startup.sh https://raw.githubusercontent.com/apolloconfig/apollo/1.5.1/scripts/apollo-on-kubernetes/apollo-config-server/scripts/startup-kubernetes.sh
FROM 1209233066/jre:1.8.0_281
ARG version=1.5.1
#ENV APOLLO_CONFIG_SERVICE_NAME="service-apollo-config-server.sre"
ENV SERVICE_NAME=apollo-configservice-${version}
ENV SERVER_PORT=8080
ADD . /apollo-config-server
RUN ln -sf /apollo-config-server/apollo-configservice-${version}.jar /apollo-config-server/apollo-configservice.jar
EXPOSE 8080
CMD ["/apollo-config-server/scripts/startup.sh"]

adminservice

version=${version:=1.5.1}
wget https://github.com/ctripcorp/apollo/releases/download/v${version}/apollo-adminservice-${version}-github.zip
unzip apollo-adminservice-${version}-github.zip -d /opt/apollo-adminservice-${version}
wget -O /opt/apollo-adminservice-${version}/scripts/startup.sh https://raw.githubusercontent.com/apolloconfig/apollo/1.5.1/scripts/apollo-on-kubernetes/apollo-admin-server/scripts/startup-kubernetes.sh
FROM 1209233066/jre:1.8.0_281
ARG VERSION=1.5.1
ENV SERVICE_NAME=apollo-adminservice-${VERSION}
ENV SERVER_PORT=8090
ADD . /apollo-admin-server/
RUN ln -sf /apollo-admin-server/apollo-adminservice-${VERSION}.jar /apollo-admin-server/apollo-adminservice.jar
EXPOSE 8090
CMD ["/apollo-admin-server/scripts/startup.sh"]

portal

version=${version:=1.5.1}
wget https://github.com/ctripcorp/apollo/releases/download/v${version}/apollo-portal-${version}-github.zip
unzip apollo-portal-${version}-github.zip -d /opt/apollo-portal-${version}
wget -O /opt/apollo-portal-${version}/scripts/startup.sh https://raw.githubusercontent.com/apolloconfig/apollo/1.5.1/scripts/apollo-on-kubernetes/apollo-portal-server/scripts/startup-kubernetes.sh
FROM 1209233066/jre:1.8.0_281
ARG VERSION=1.5.1
#ENV APOLLO_CONFIG_SERVICE_NAME="service-apollo-config-server.sre"
ENV SERVICE_NAME=apollo-portal-${VERSION}
ENV SERVER_PORT=8070
ADD . /apollo-portal-server/
RUN ln -sf /apollo-portal-server/apollo-portal-${VERSION}.jar /apollo-portal-server/apollo-portal.jar
EXPOSE 8070
CMD ["/apollo-portal-server/scripts/startup.sh"]

部署

mysql

apiVersion: v1
kind: Namespace
metadata:
name: apollo
---
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: apollo
spec:
ports:
- name: mysql
port: 3306
targetPort: 3306
selector:
app: mysql
clusterIP: None
type: ClusterIP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
namespace: apollo
spec:
replicas: 1
serviceName: mysql
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: harbor.od.com/public/mysql:8.0.27
imagePullPolicy: Always
ports:
- name: mysql-port
containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123"
volumeMounts:
- name: mysqldata
mountPath: /var/lib/mysql
volumes:
- name: mysqldata
nfs:
path: /data/nfs-volume/mysql
server: 10.4.7.200
set character_set_connection=gb2312;
set character_set_database=gb2312;
set character_set_results=gb2312;
set character_set_server=gb2312;
set character_set_system=gb2312;
set collation_connection=gb2312;
set collation_database=gb2312;
set collation_server=gb2312;

部署文档

--
wget
https://raw.githubusercontent.com/ctripcorp/apollo/1.5.1/scripts/db/migration/configdb/V1.0.0__initialization.sql -O
configdb.sql
--
wget https://raw.githubusercontent.com/apolloconfig/apollo/1.5.1/scripts/db/migration/portaldb/V1.0.0__initialization.sql -O
portaldb.sql
--
source configdb.sql
source portaldb.sql
--
grant select,insert,update,delete on ApolloConfigDB.* to apolloconfig@'%' ;
grant select,insert,update,delete on ApolloPortalDB.* to apolloportal@'%' ;
--
alter user apolloconfig@'%' identified by '123456';
alter user apolloportal@'%' identified by '123456';
--
flush privileges;

修改eureka地址

update ServerConfig set value='http://config.od.com/eureka' where id =1;
select * from ServerConfig limit 1;
vi /etc/named/od.com.zone
config A 10.4.7.11

configserver

apiVersion: v1
kind: ConfigMap
metadata:
name: apollo-configservice-cm
namespace: apollo
data:
application-github.properties: |
# DataSource
spring.datasource.url = jdbc:mysql://mysql:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = apolloconfig
spring.datasource.password = 123456
eureka.service.url = http://config.od.com/eureka
#apollo.eureka.server.enabled=true
app.properties: |
appId=100003171
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: apollo-configservice
namespace: apollo
labels:
name: apollo-configservice
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
revisionHistoryLimit: 7
progressDeadlineSeconds: 600
selector:
matchLabels:
name: apollo-configservice
template:
metadata:
labels:
app: apollo-configservice
name: apollo-configservice
spec:
restartPolicy: Always
terminationGracePeriodSeconds: 30
containers:
- name: apollo-configservice
image: harbor.od.com/public/apollo-configservice:1.5.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
protocol: TCP
volumeMounts:
- name: configmap-volume
mountPath: /apollo-config-server/config
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
securityContext:
runAsUser: 0
volumes:
- name: configmap-volume
configMap:
name: apollo-configservice-cm
---
apiVersion: v1
kind: Service
metadata:
name: apollo-configservice
namespace: apollo
spec:
ports:
- protocol: TCP
port: 8080
targetPort: 8080
selector:
app: apollo-configservice
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: apollo-configservice
namespace: apollo
spec:
rules:
- host: config.od.com
http:
paths:
- path: /
backend:
serviceName: apollo-configservice
servicePort: 8080

adminserver

apiVersion: v1
kind: ConfigMap
metadata:
name: apollo-adminservice-cm
namespace: apollo
data:
application-github.properties: |
#DataSource
spring.datasource.url = jdbc:mysql://mysql:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = apolloconfig
spring.datasource.password = 123456
eureka.service.url = http://config.od.com/eureka
app.properties: |
appId=100003172
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: apollo-adminservice
namespace: apollo
labels:
name: apollo-adminservice
spec:
replicas: 1
selector:
matchLabels:
name: apollo-adminservice
template:
metadata :
labels:
app: apollo-adminservice
name: apollo-adminservice
spec:
volumes:
- name: configmap-volume
configMap:
name: apollo-adminservice-cm
containers:
- name: apollo-adminservice
image: harbor.od.com/public/apollo-adminservice:1.5.1
ports:
- containerPort: 8090
protocol: TCP
volumeMounts:
- name: configmap-volume
mountPath: /apollo-admin-server/config
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: harbor
restartPolicy: Always
terminationGracePeriodSeconds: 30
securityContext:
runAsUser: 0
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
revisionHistoryLimit: 7
progressDeadlineSeconds: 600

protal

apiVersion: v1
kind: ConfigMap
metadata:
name: apollo-portal-cm
namespace: apollo
data:
apollo-env.properties: |
dev.meta=http://apollo-configservice
application-github.properties: |
# DataSource
spring.datasource.url = jdbc:mysql://mysql:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = protaldb
spring.datasource.password = 123456
app.properties: |
appId=100003173
apollo-env.properties: |
local.meta=http://localhost:8080
dev.meta=http://config.od.com
fat.meta=http://fill-in-fat-meta-server:8080
uat.meta=http://fill-in-uat-meta-server:8080
lpt.meta=${lpt_meta}
pro.meta=http://fill-in-pro-meta-server:8080
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: apollo-portal
namespace: apollo
labels:
name: apollo-portal
spec:
replicas: 1
selector:
matchLabels:
name: apollo-portal
template:
metadata:
labels:
app: apollo-portal
name: apollo-portal
spec:
volumes:
- name: portal-volume
configMap:
name: apollo-portal-cm
containers:
- name: apollo-portal
image: harbor.od.com/public/apollo-portal:1.5.1
ports:
- containerPort: 8070
protocol: TCP
volumeMounts:
- name: portal-volume
mountPath: /apollo-portal-server/config
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: harbor
restartPolicy: Always
terminationGracePeriodSeconds: 30
securityContext:
runAsUser: 0
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
revisionHistoryLimit: 7
progressDeadlineSeconds: 600
---
kind: Service
apiVersion: v1
metadata:
name: apollo-portal
namespace: apollo
spec:
ports:
- protocol: TCP
port: 8070
targetPort: 8070
selector:
app: apollo-portal
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: apollo-portal
namespace: apollo
spec:
rules:
- host: portal.od.com
http:
paths:
- path: /
backend:
serviceName: apollo-portal
servicePort: 8070

分环境

默认支持环境说明

名称 说明
DEV 开发环境
FAT 测试环境,相当于alpha环境(功能测试)
UAT 集成环境,相当于beta环境(回归测试)
PRO 生产环境
wget https://raw.githubusercontent.com/ctripcorp/apollo/1.5.1/scripts/db/migration/configdb/V1.0.0__initialization.sql -O configdb.sql
---
sed -i s/ApolloConfigDB/ApolloConfigTestDB/g configdb.sql
---
source configdb.sql;
---
grant select,insert,update,delete on ApolloConfigTestDB.* to apolloconfig@'%' ;
--
alter user apolloconfig@'%' identified by '123456';
--
flush privileges;
update ApolloConfigTestDB.ServerConfig set value='http://config-test.od.com/eureka' where id =1;
select * from ApolloConfigTestDB.ServerConfig limit 1;
vi /etc/named/od.com.zone
config-test A 10.4.7.11
kind: ConfigMap
metadata:
name: apollo-portal-cm
namespace: infra
data:
apollo-env.properties: |
dev.meta=http://config.od.com
fat.meta=http://config-test.od.com
pro.meta=http://config-prod.od.com
application-github.properties: |
# DataSource
spring.datasource.url = jdbc:mysql://mysql.od.com:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = apolloportal
spring.datasource.password = 123456
app.properties: |
appId=100003173
update ApolloPortalDB.ServerConfig set value='DEV,FAT,UAT,PRO' where ID=1;
namespace 创建一个指定名称的 namespace
clusterrole Create a ClusterRole.
clusterrolebinding 为一个指定的 ClusterRole 创建一个 ClusterRoleBinding
role Create a role with single rule.
rolebinding 为一个指定的 Role 或者 ClusterRole创建一个 RoleBinding
configmap 从本地 file, directory 或者 literal value 创建一个 configmap
secret 使用指定的 subcommand 创建一个 secret
deployment 创建一个指定名称的 deployment.
cronjob Create a cronjob with the specified name.
job Create a job with the specified name.
poddisruptionbudget 创建一个指定名称的 pod disruption budget.
priorityclass Create a priorityclass with the specified name.
quota 创建一个指定名称的 quota.
service 使用指定的 subcommand 创建一个 service.
serviceaccount

主要的表功能

表明 Key Value
ApolloPortalDB.ServerConfig apollo.portal.envs DEV,FAT,UAT,PRO
ApolloPortalDB.ServerConfig organizations [{"orgId":"TEST1","orgName":"1"},{"orgId":"TEST2","orgName":"2"}]
posted @   mingtian是吧  阅读(216)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示