k8s-apollo分布式部署


一、前置准备


#1.1 环境准备

前面介绍过Apollo使用Docker分布式部署 (opens new window)的方案,这里介绍下如何在k8s集群中部署,因为随着云原生的流行,大多数公司系统的交付都是以k8s的方式进行管理运行,本次使用涉及版本如下:

  • k8s版本: 1.26
  • helm版本: v3.12.0
  • apollo版本: 1.9.1 注意
  • 部署环境:
    • 开发环境 dev命名空间
    • 生产环境 prod命名空间

注意: 这里的版本是当时helm仓库最新版本,自定义的话需要自行修改镜像版本。

关于使用k8s部署的更多参考,点击直达 (opens new window)官方介绍

#1.2 数据库准备

需要注意,每个环境都需要有apolloconfigdb库,apolloportaldb部署一个即可

数据库一般企业为了稳定性大多都采用云数据库,这里我们也是一样,直接使用集群外云商的数据库,因此,我们只需要按照常规部署中,把数据库脚本导入值对应的库中即可,所需数据库脚本:

apolloportaldb地址: https://github.com/apolloconfig/apollo/tree/1.9.1/scripts/sql/apolloportaldb.sql

apolloconfigdb地址: https://github.com/apolloconfig/apollo/tree/1.9.1/scripts/sql/apolloconfigdb.sql

#二、部署


#2.1 添加Apollo Helm Chart仓库
  1. [root@k8s-master01 ~]# helm repo add apollo https://charts.apolloconfig.com
  2. [root@k8s-master01 ~]# helm search repo apollo
  3. NAME CHART VERSION APP VERSION DESCRIPTION
  4. apollo/apollo-portal 0.6.1 2.1.0 A Helm chart for Apollo Portal
  5. apollo/apollo-service 0.6.1 2.1.0 A Helm chart for Apollo Config Service and Apol...

#2.2 获取应用Charts包

通过查看版本,我们可以看到默认版本是2.1.0,这里我们需要部署的是1.9.1版本,因此我们把资源下载到本地进行相关资源的配置

  1. # apollo-portal 相关配置
  2. [root@k8s-master01 ~]# helm pull apollo/apollo-portal
  3. # apollo-configservice和apollo-adminservice
  4. [root@k8s-master01 ~]# helm pull apollo/apollo-service

#2.3 dev环境部署

这里的dev环境部署在dev命名空间下,并且我们只部署apollo-configservice和apollo-adminservice部署即可

  1. [root@k8s-master01 ~]# tar -xf apollo-service-0.6.1.tgz
  2. [root@k8s-master01 ~]# tree apollo-service
  3. apollo-service
  4. ├── Chart.yaml
  5. ├── templates
  6. ├── deployment-adminservice.yaml
  7. ├── deployment-configservice.yaml
  8. ├── _helpers.tpl
  9. ├── ingress-adminservice.yaml
  10. ├── ingress-configservice.yaml
  11. ├── NOTES.txt
  12. ├── service-adminservice.yaml
  13. ├── service-configdb.yaml
  14. └── service-configservice.yaml
  15. └── values.yaml
#2.3.1 修改镜像版本

以下修改均为apollo-service/values.yaml文件

  • apollo-configservice

tag默认为空,这里修改为1.9.1

  1. configService:
  2. name: apollo-configservice
  3. fullNameOverride: ""
  4. replicaCount: 2
  5. containerPort: 8080
  6. image:
  7. repository: apolloconfig/apollo-configservice
  8. tag: "1.9.1"
  9. pullPolicy: IfNotPresent

  • apollo-adminservice

tag默认为空,这里修改为1.9.1

  1. adminService:
  2. name: apollo-adminservice
  3. fullNameOverride: ""
  4. replicaCount: 2
  5. containerPort: 8090
  6. image:
  7. repository: apolloconfig/apollo-adminservice
  8. tag: "1.9.1"

#2.3.2 数据源修改
  1. configdb:
  2. name: apollo-configdb
  3. # apolloconfigdb host
  4. host: "rm-*****.mysql.rds.aliyuncs.com"
  5. port: 3306
  6. dbName: ApolloConfigDB
  7. # apolloconfigdb user name
  8. userName: "root"
  9. # apolloconfigdb password
  10. password: "*****"
  11. connectionStringProperties: characterEncoding=utf8
  12. service:
  13. # whether to create a Service for this host or not
  14. enabled: false
  15. fullNameOverride: ""
  16. port: 3306
  17. type: ClusterIP

#2.3.3 应用部署
  1. [root@k8s-master01 ~]# helm install apollo-service-dev -f apollo-service/values.yaml -n dev apollo/apollo-service
  2. NAME: apollo-service-dev
  3. LAST DEPLOYED: Tue Jul 25 15:05:31 2023
  4. NAMESPACE: dev
  5. STATUS: deployed
  6. REVISION: 1
  7. TEST SUITE: None
  8. NOTES:
  9. Meta service url for current release:
  10. echo http://apollo-service-dev-apollo-configservice.dev:8080
  11. For local test use:
  12. export POD_NAME=$(kubectl get pods --namespace dev -l "app=apollo-service-dev-apollo-configservice" -o jsonpath="{.items[0].metadata.name}")
  13. echo http://127.0.0.1:8080
  14. kubectl --namespace dev port-forward $POD_NAME 8080:8080
  15. Urls registered to meta service:
  16. Config service: http://apollo-service-dev-apollo-configservice.dev:8080
  17. Admin service: http://apollo-service-dev-apollo-adminservice.dev:8090

注意

此处我们需要注意对应环境的Meta Server地址,需要记录下来,apollo-portal和后面应用客户端都需要用到,另外由于我们这里不同命名空间部署,因此需要注意后面portal服务与Config和Admin的通信问题。

#2.3.4 查看pod启动状态
k8s-apollo分布式部署
#2.4 prod环境部署

这里的prod环境部署在prod命名空间下,这里我们不仅部署擦还有把apollo-portal一块部署

#2.4.1 apollo-configservice和apollo-adminservice 部署

此两个应用我们只需要修改下values.yaml中数据库配置把数据源修改为对应的生产环境即可

  1. configdb:
  2. name: apollo-configdb
  3. # apolloconfigdb host
  4. host: "{prodMySQLHost}"
  5. port: 3306
  6. dbName: ApolloConfigDB
  7. # apolloconfigdb user name
  8. userName: "root"
  9. # apolloconfigdb password
  10. password: "*****"
  11. connectionStringProperties: characterEncoding=utf8
  12. service:
  13. # whether to create a Service for this host or not
  14. enabled: false
  15. fullNameOverride: ""
  16. port: 3306
  17. type: ClusterIP

部署的时候注意下指定prod命名空间

  1. [root@k8s-master01 ~]# helm install apollo-service-prod -f apollo-service/values.yaml -n prod apollo/apollo-service
  2. NAME: apollo-service-prod
  3. LAST DEPLOYED: Tue Jul 25 15:27:05 2023
  4. NAMESPACE: prod
  5. STATUS: deployed
  6. REVISION: 1
  7. TEST SUITE: None
  8. NOTES:
  9. Meta service url for current release:
  10. echo http://apollo-service-prod-apollo-configservice.prod:8080
  11. For local test use:
  12. export POD_NAME=$(kubectl get pods --namespace prod -l "app=apollo-service-prod-apollo-configservice" -o jsonpath="{.items[0].metadata.name}")
  13. echo http://127.0.0.1:8080
  14. kubectl --namespace prod port-forward $POD_NAME 8080:8080
  15. Urls registered to meta service:
  16. Config service: http://apollo-service-prod-apollo-configservice.prod:8080
  17. Admin service: http://apollo-service-prod-apollo-adminservice.prod:8090

#2.4.2 apollo-portal部署
  1. [root@k8s-master01 ~]# tar -xf apollo-portal-0.6.1.tgz
  2. [root@k8s-master01 ~]# tree apollo-portal
  3. apollo-portal
  4. ├── Chart.yaml
  5. ├── templates
  6. ├── deployment-portal.yaml
  7. ├── _helpers.tpl
  8. ├── ingress-portal.yaml
  9. ├── NOTES.txt
  10. ├── service-portaldb.yaml
  11. └── service-portal.yaml
  12. └── values.yaml

修改镜像版本,这里跟上面一样直接把tag修改为1.9.1,

  1. name: apollo-portal
  2. fullNameOverride: ""
  3. replicaCount: 1
  4. containerPort: 8070
  5. image:
  6. repository: apolloconfig/apollo-portal
  7. tag: "1.9.1"
  8. pullPolicy: IfNotPresent

修改支持的环境,这里目前只有pro和dev,metaServers如果有其他命名空间,我们需要注意svc的地址,保证portal服务可以和哥各个环境的configserviceadminservice通信

  1. config:
  2. # spring profiles to activate
  3. profiles: "github,auth"
  4. # specify the env names, e.g. dev,pro
  5. envs: "dev,pro"
  6. # specify the meta servers, e.g.
  7. # dev: 注意这里命名空间
  8. # pro: http://apollo-configservice-pro:8080
  9. metaServers: {"dev":"http://apollo-service-dev-apollo-configservice.dev:8080","pro":"http://apollo-service-prod-apollo-configservice:8080"}
  10. # specify the context path, e.g. /apollo
  11. contextPath: ""
  12. # extra config files for apollo-portal, e.g. application-ldap.yml
  13. files: {}

修改数据源相关配置

  1. portaldb:
  2. name: apollo-portaldb
  3. # apolloportaldb host
  4. host: "portalDBHost"
  5. port: 3306
  6. dbName: ApolloPortalDB
  7. # apolloportaldb user name
  8. userName: root
  9. # apolloportaldb password
  10. password: ****
  11. connectionStringProperties: characterEncoding=utf8

ingress暴露portal管理界面配置

  1. ingress:
  2. ingressClassName: nginx
  3. enabled: true
  4. annotations: {}
  5. hosts:
  6. - host: "apollo.tchua.com"
  7. paths: ["/"

应用安装部署

  1. [root@k8s-master01 ~]# helm install apollo-portal -f apollo-portal/values.yaml -n prod apollo/apollo-portal
  2. NAME: apollo-portal
  3. LAST DEPLOYED: Tue Jul 25 16:26:30 2023
  4. NAMESPACE: prod
  5. STATUS: deployed
  6. REVISION: 2
  7. TEST SUITE: None
  8. NOTES:
  9. Portal url for current release:
  10. export POD_NAME=$(kubectl get pods --namespace prod -l "app=apollo-portal" -o jsonpath="{.items[0].metadata.name}")
  11. echo "Visit http://127.0.0.1:8070 to use your application"
  12. kubectl --namespace prod port-forward $POD_NAME 8070:8070
  13. Ingress:
  14. http://apollo.tchua.com/
#2.4.3 查看应用部署
k8s-apollo分布式部署
#2.5 查看各环境应用注册
k8s-apollo分布式部署
#2.6 总结
#2.6.1 helm在线部署

上面我们自定义镜像版本,还有数据源,都是通过下载应用的Charts包至本地进行修改(也推荐使用此方式),如果嫌麻烦我们还可以直接在线安装,安装时指定相关参数即可:

  • 安装portal
  1. helm install apollo-portal \
  2. --set portaldb.host=1.2.3.4 \
  3. --set portaldb.userName=apollo \
  4. --set portaldb.password=apollo \
  5. --set portaldb.service.enabled=true \
  6. --set config.envs="dev\,pro" \
  7. --set config.metaServers.dev=http://apollo-service-dev-apollo-configservice.dev:8080 \
  8. --set config.metaServers.pro=http://apollo-service-prod-apollo-configservice:8080 \
  9. --set replicaCount=1 \
  10. -n prod \
  11. apollo/apollo-portal

更多参数参考apollo-portal chart的可配置参数及其默认值(opens new window)

  • 安装apollo-configserviceapollo-adminservice
  1. helm install apollo-service-dev \
  2. --set configdb.host=1.2.3.4 \
  3. --set configdb.userName=apollo \
  4. --set configdb.password=apollo \
  5. --set configdb.service.enabled=true \
  6. --set configService.replicaCount=1 \
  7. --set adminService.replicaCount=1 \
  8. -n dev \
  9. apollo/apollo-service

更多参数参考apollo-service chart的可配置参数及其默认值(opens new window)

#2.6.2 客户端连接

对于同一个命名空间的应用,我们只需要连接apollo-configservice对应的svc地址即可,比如目前环境:

  • dev:http://apollo-service-dev-apollo-configservice:8080
  • prod: http://apollo-service-prod-apollo-configservice:8080

如果涉及到跨集群访问,无论是客户端访问configservice还是portal访问adminservice就需要我们把相关的资源映射出去,这里建议都使用Ingress的方式,当然更多可以参考官方介绍[指定Meta Server地址 (opens new window)]

#2.6.3 应用卸载
  1. helm uninstall -n your-namespace apollo-portal
  2. helm uninstall -n your-namespace apollo-service
声明: 本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
Kubernetes

k8s存储之nfs自动供给StorageClass配置

2024-2-22 10:17:53

Kubernetes

Ingress获取真实IP

2024-6-6 17:43:21

0 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
私信列表
搜索