返回顶部
首页 > 资讯 > 前端开发 > html >k8s如何部署高可用配置中心apollo
  • 676
分享到

k8s如何部署高可用配置中心apollo

2024-04-02 19:04:59 676人浏览 安东尼
摘要

这篇文章主要讲解了“k8s如何部署高可用配置中心apollo”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“k8s如何部署高可用配置中心apollo”吧!部署

这篇文章主要讲解了“k8s如何部署高可用配置中心apollo”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“k8s如何部署高可用配置中心apollo”吧!

部署成功页面

下面是部署完成后,访问apollo的登录页面

k8s如何部署高可用配置中心apollo

登录页面

输入用户名密码:apollo/admin,部署环境完成portal页面图

k8s如何部署高可用配置中心apollo
部署完成apollo后页面

k8s的dashboard部署页面,本文部署了dev, fat, pro三个环境。

k8s如何部署高可用配置中心apollo
部署环境完成k8s后dashboard图

部署过程

本文在部署的时候使用了当前最新的apollo版本为:1.7.1,所以下面的所有构建也是基于当前版本的。

一、构建镜像

首先从git上下载源码,可以从GitHub下载:https://github.com/ctripcorp/apollo;也可以从gitee下载:Https://gitee.com/nobodyiam/apollo,国内的会快一点。然后进入到目录

/scripts/apollo-on-kubernetes

去构建镜像。

1、 直接使用编译的的包进行安装,获取 apollo 压缩包

可以直接从官网下载,因为github实在是太慢了。建议直接从我的百度云下载。

A、下载比较慢,直接用我百度云

  • 链接:https://pan.baidu.com/s/1eLL2ocYE1uzXcvzO2Y3DNg

  • 提取码:nfvm

B、从 https://github.com/ctripcorp/apollo/releases 下载预先打好的 java 包

(1)进入scripts/apollo-on-kubernetes/  执行 wget https://github.com/ctripcorp/apollo/releases/download/v1.7.1/apollo-portal-1.7.1-github.zip  (2)进入scripts/apollo-on-kubernetes/  执行 wget https://github.com/ctripcorp/apollo/releases/download/v1.7.1/apollo-adminservice-1.7.1-github.zip  (3)进入scripts/apollo-on-kubernetes/  执行 wget https://github.com/ctripcorp/apollo/releases/download/v1.7.1/apollo-configservice-1.7.1-github.zip

2、解压压缩包, 获取程序 jar 包

不要忘记重命名,把版本号去掉。

解压 apollo-portal-1.7.1-github.zip 获取 apollo-portal-1.7.1.jar, 重命名为 apollo-portal.jar, 放到 scripts/apollo-on-kubernetes/apollo-portal-server 解压 apollo-adminservice-1.7.1-github.zip 获取 apollo-adminservice-1.7.1.jar, 重命名为 apollo-adminservice.jar, 放到 scripts/apollo-on-kubernetes/apollo-admin-server 解压 apollo-configservice-1.7.1-github.zip 获取 apollo-configservice-1.7.1.jar, 重命名为 apollo-configservice.jar, 放到 scripts/apollo-on-kubernetes/apollo-config-server

3、构建镜像

注意:因为许多地方都要同时改,在构建的时候要确定命名空间,我使用zizai。

要构建如下的镜像:alpine-bash-3.8-image,apollo-config-server,apollo-admin-server和apollo-portal-server,对应的镜像文件,在对应的目录下:

k8s如何部署高可用配置中心apollo

构建镜像要去到对应的Dockerfile同级目录下去执行。

例如,去到scripts/apollo-on-kubernetes/apollo-config-server下执行:

docker build -t apollo-config-server:v1.7.1 .

注意,总共要构建4个镜像。整体的思路是:先构建镜像,然后打tag,再推到仓库里去。

在对应目录下,总结整体脚本如下:

alpine-bash-3.8-image的镜像: docker build -t alpine-bash:3.8 . docker tag alpine-bash:3.8  hub.thinkinpower.net/zizai/alpine-bash:3.8 docker push hub.thinkinpower.net/zizai/alpine-bash:3.8  apollo对应的镜像: docker build -t apollo-config-server:v1.7.1 . docker tag apollo-config-server:v1.7.1  hub.xx.net/zizai/apollo-config-server:v1.7.1 docker push hub.xx.net/zizai/apollo-config-server:v1.7.1  docker build -t apollo-admin-server:v1.7.1 . docker tag apollo-admin-server:v1.7.1  hub.xx.net/zizai/apollo-admin-server:v1.7.1 docker push hub.xx.net/zizai/apollo-admin-server:v1.7.1  docker build -t apollo-portal-server:v1.7.1 . docker tag apollo-portal-server:v1.7.1  hub.thinkinpower.net/zizai/apollo-portal-server:v1.7.1 docker push hub.thinkinpower.net/zizai/apollo-portal-server:v1.7.1

二、部署apollo到kubernetes

1、创建数据库脚本

说明一下:

  • 在实际的生产环境使用中,通过分布式存储来实现的磁盘在Mysql这种io密集性应用中,性能问题会显得非常突出。所以在实际应用中,一般不会把mysql这种应用直接放入kubernetes中管理,而是使用专用的服务器来独立部署。而像WEB这种无状态应用依然会运行在kubernetes当中,这个时候web服务器要连接kubernetes管理之外的数据库,有两种方式:一是直接连接数据库所在物理服务器IP,另一种方式就是借助kubernetes的Endpoints直接将外部服务器映射为kubernetes内部的一个服务。

我们使用外面的mysql作为数据库,不会将mysql部署到k8s里。

执行目录scripts/apollo-on-kubernetes/db下的脚本。Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB。每一个配置的config一个数据库脚本,portal一个数据库脚本。数据库脚本见:https://github.com/ctripcorp/apollo/tree/master/scripts/apollo-on-kubernetes/db,在git里已经有。如果apollo  开启了 4 个环境, 即 dev、test-alpha、test-beta、prod, 在MySQL 中导入  scripts/apollo-on-kubernetes/db 下的文件。

k8s如何部署高可用配置中心apollo

2、部署k8s的yaml文件

官网的yaml可以下载修改就可以了,因为我用自己的仓库的镜像,并且多次测试,我主要有如下的修改:

(1)配置文件要删除掉安全提示:

securityContext:  privileged: true

(2)添加仓库的密钥:

imagePullSecrets:  - name: reGIStry-harbor

(3)下面修改为每次都拉镜像:Always

imagePullPolicy: Always

(4)添加mysql的配置信息

我只用3个环境,需要修改的文件如图:

k8s如何部署高可用配置中心apollo

因为修改得比较多,我将在下面列出每一个文件。我只拿开发环境apollo-env-dev的作为一个示例,其它的只是对应修改就可以了。在执行的时候,建议大家从下面的(3)、(2)、(1)的顺序执行下面的文件。

(1)、service-apollo-admin-server-dev.yaml

--- # configmap for apollo-admin-server-dev kind: ConfigMap apiVersion: v1 metadata:   namespace: zizai   name: configmap-apollo-admin-server-dev data:   application-github.properties: |     spring.datasource.url = jdbc:mysql://service-mysql-for-apollo-dev-env.zizai:3306/DevApolloConfigDB?characterEncoding=utf8     spring.datasource.username = admin     spring.datasource.passWord = mysql-admin     eureka.service.url = http://statefulset-apollo-config-server-dev-0.service-apollo-meta-server-dev:8080/eureka/,http://statefulset-apollo-config-server-dev-1.service-apollo-meta-server-dev:8080/eureka/,http://statefulset-apollo-config-server-dev-2.service-apollo-meta-server-dev:8080/eureka/  --- kind: Service apiVersion: v1 metadata:   namespace: zizai   name: service-apollo-admin-server-dev   labels:     app: service-apollo-admin-server-dev spec:   ports:     - protocol: tcp       port: 8090       targetPort: 8090   selector:     app: pod-apollo-admin-server-dev   type: ClusterIP   sessionAffinity: ClientIP  --- kind: Deployment apiVersion: apps/v1 metadata:   namespace: zizai   name: deployment-apollo-admin-server-dev   labels:     app: deployment-apollo-admin-server-dev spec:   replicas: 3   selector:     matchLabels:       app: pod-apollo-admin-server-dev   strategy:     rollingUpdate:       maxSurge: 1       maxUnavailable: 1     type: RollingUpdate   template:     metadata:       labels:         app: pod-apollo-admin-server-dev     spec:       imagePullSecrets:           # dokcer仓库密码,不需要的可以去掉         - name: registry-harbor       affinity:         podAntiAffinity:           preferredDuringSchedulingIgnoredDuringExecution:           - weight: 100             podAffinityTerm:               labelSelector:                 matchExpressions:                 - key: app                   operator: In                   values:                   - pod-apollo-admin-server-dev               topologyKey: kubernetes.io/hostname              volumes:         - name: volume-configmap-apollo-admin-server-dev           configMap:             name: configmap-apollo-admin-server-dev             items:               - key: application-github.properties                 path: application-github.properties              initContainers:         - image: hub.thinkinpower.net/zizai/alpine-bash:3.8           imagePullPolicy: Always           name: check-service-apollo-config-server-dev           command: ['bash', '-c', "curl --connect-timeout 2 --max-time 5 --retry 60 --retry-delay 1 --retry-max-time 120 service-apollo-config-server-dev.zizai:8080"]              containers:         - image: hub.thinkinpower.net/zizai/apollo-admin-server:v1.7.1           imagePullPolicy: Always           name: container-apollo-admin-server-dev           ports:             - protocol: TCP               containerPort: 8090           volumeMounts:             - name: volume-configmap-apollo-admin-server-dev               mountPath: /apollo-admin-server/config/application-github.properties               subPath: application-github.properties                      env:             - name: APOLLO_ADMIN_SERVICE_NAME               value: "service-apollo-admin-server-dev.zizai"                      readinessProbe:             tcpSocket:               port: 8090             initialDelaySeconds: 10             periodSeconds: 5                      livenessProbe:             tcpSocket:               port: 8090             initialDelaySeconds: 120             periodSeconds: 10                  dnsPolicy: ClusterFirst       restartPolicy: Always

(2)、service-apollo-config-server-dev.yaml

--- # configmap for apollo-config-server-dev kind: ConfigMap apiVersion: v1 metadata:   namespace: zizai   name: configmap-apollo-config-server-dev data:   application-github.properties: |     spring.datasource.url = jdbc:mysql://service-mysql-for-apollo-dev-env.zizai:3306/DevApolloConfigDB?characterEncoding=utf8     spring.datasource.username = admin     spring.datasource.password = mysql-admin     eureka.service.url = http://statefulset-apollo-config-server-dev-0.service-apollo-meta-server-dev:8080/eureka/,http://statefulset-apollo-config-server-dev-1.service-apollo-meta-server-dev:8080/eureka/,http://statefulset-apollo-config-server-dev-2.service-apollo-meta-server-dev:8080/eureka/  --- kind: Service apiVersion: v1 metadata:   namespace: zizai   name: service-apollo-meta-server-dev   labels:     app: service-apollo-meta-server-dev spec:   ports:     - protocol: TCP       port: 8080       targetPort: 8080   selector:     app: pod-apollo-config-server-dev   type: ClusterIP   clusterIP: None   sessionAffinity: ClientIP  --- kind: Service apiVersion: v1 metadata:   namespace: zizai   name: service-apollo-config-server-dev   labels:     app: service-apollo-config-server-dev spec:   ports:     - protocol: TCP       port: 8080       targetPort: 8080       nodePort: 30002   selector:     app: pod-apollo-config-server-dev    type: NodePort   sessionAffinity: ClientIP  --- kind: StatefulSet apiVersion: apps/v1 metadata:   namespace: zizai   name: statefulset-apollo-config-server-dev   labels:     app: statefulset-apollo-config-server-dev spec:   serviceName: service-apollo-meta-server-dev   replicas: 3   selector:     matchLabels:       app: pod-apollo-config-server-dev   updateStrategy:     type: RollingUpdate   template:     metadata:       labels:         app: pod-apollo-config-server-dev     spec:       imagePullSecrets:           # dokcer仓库密码,不需要的可以去掉         - name: registry-harbor       affinity:         podAntiAffinity:           preferredDuringSchedulingIgnoredDuringExecution:           - weight: 100             podAffinityTerm:               labelSelector:                 matchExpressions:                 - key: app                   operator: In                   values:                   - pod-apollo-config-server-dev               topologyKey: kubernetes.io/hostname        volumes:         - name: volume-configmap-apollo-config-server-dev           configMap:             name: configmap-apollo-config-server-dev             items:               - key: application-github.properties                 path: application-github.properties              containers:         - image: hub.thinkinpower.net/zizai/apollo-config-server:v1.7.1           imagePullPolicy: Always           name: container-apollo-config-server-dev           ports:             - protocol: TCP               containerPort: 8080           volumeMounts:             - name: volume-configmap-apollo-config-server-dev               mountPath: /apollo-config-server/config/application-github.properties               subPath: application-github.properties                      env:             - name: APOLLO_CONFIG_SERVICE_NAME               value: "service-apollo-config-server-dev.zizai"                      readinessProbe:             tcpSocket:               port: 8080             initialDelaySeconds: 10             periodSeconds: 5                      livenessProbe:             tcpSocket:               port: 8080             initialDelaySeconds:  120             periodSeconds: 10                  dnsPolicy: ClusterFirst       restartPolicy: Always

(3)、service-mysql-for-apollo-dev-env.yaml

--- # 为外部 mysql 服务设置 service kind: Service apiVersion: v1 metadata:   namespace: zizai   name: service-mysql-for-apollo-dev-env   labels:     app: service-mysql-for-apollo-dev-env spec:   ports:     - protocol: TCP       port: 3306       targetPort: 3306   type: ClusterIP   sessionAffinity: None  --- kind: Endpoints apiVersion: v1 metadata:   namespace: zizai   name: service-mysql-for-apollo-dev-env subsets:   - addresses:       - ip: 10.29.254.48     ports:       - protocol: TCP         port: 3306

3、添加Ingress

官网给的示例是用k8s的NodePort来访问,但是在实际中,我们用会用Ingress来访问Portal。

注意:因为我们在部署portal的时候是多实例的,所以Ingress要添加保持会话,要不页面会登录不了,进入不了portal页面。具体为:

metadata:   annotations:     Nginx.ingress.kubernetes.io/affinity: "cookie"  # 解决会话保持     nginx.ingress.kubernetes.io/session-cookie-name: "route"     nginx.ingress.kubernetes.io/session-cookie-expires: "172800"     nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"

ingress的代码示例为如下:

apiVersion: extensions/v1beta1 kind: Ingress metadata:   name: zizai-apollo-portal   namespace: zizai   annotations:     nginx.ingress.kubernetes.io/affinity: "cookie"  # 解决会话保持     nginx.ingress.kubernetes.io/session-cookie-name: "route"     nginx.ingress.kubernetes.io/session-cookie-expires: "172800"     nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"  spec:   rules:     - host: zizai-apollo-portal.test.thinkinpower.net       http:         paths:           - path: /             backend:               serviceName: service-apollo-portal-server               servicePort: 8070

4、配置nginx

添加nginx访问到Ingress里:

nginx配置文件:zizai-apollo-portal.test.thinkinpower.net.conf

server {   listen     80;   server_name  zizai-apollo-portal.test.thinkinpower.net;   access_log  /data/logs/nginx/zizai-apollo-portal.test.thinkinpower.net.access.log  main;   error_log  /data/logs/nginx/zizai-apollo-portal.test.thinkinpower.net.error.log;   root   /data/webapps/zizai-apollo-portal.test.thinkinpower.net/test/static;   index  index.html index.htm;   client_max_body_size 50m;     location   / {     proxy_set_header Host $http_host;     proxy_set_header X-Real-IP $remote_addr;     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;     proxy_pass http://kubernetes;  # 指向集群的   }  }

这样就可以根据域名:http://zizai-apollo-portal.test.thinkinpower.net 访问portal了。

(1)创建的部署:

k8s如何部署高可用配置中心apollo

(2)创建的有部署副本:

k8s如何部署高可用配置中心apollo

(3)创建的service:

k8s如何部署高可用配置中心apollo

(4)创建的ingress:

k8s如何部署高可用配置中心apollo

(5)创建的配置字典:

k8s如何部署高可用配置中心apollo

三、简单使用

本文章将只有简单的使用,后面会有文章介绍详细的使用,需要的可以在本文留言。

1、创建项目

k8s如何部署高可用配置中心apollo

2、选择一个环境添加变量timeout

k8s如何部署高可用配置中心apollo

3、如果是在添加环境的过程中,刷新页面会有“添加补缺环境”的提示

k8s如何部署高可用配置中心apollo
添加补缺环境

感谢各位的阅读,以上就是“k8s如何部署高可用配置中心apollo”的内容了,经过本文的学习后,相信大家对k8s如何部署高可用配置中心apollo这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: k8s如何部署高可用配置中心apollo

本文链接: https://lsjlt.com/news/84041.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • k8s如何部署高可用配置中心apollo
    这篇文章主要讲解了“k8s如何部署高可用配置中心apollo”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“k8s如何部署高可用配置中心apollo”吧!部署...
    99+
    2024-04-02
  • 如何部署k8s高可用架构
    本篇内容主要讲解“如何部署k8s高可用架构”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何部署k8s高可用架构”吧!概述地址sealos, 让kubernetes高可用不再需要keepaliv...
    99+
    2023-06-27
  • SpringBoot如何集成Apollo配置中心
    这篇文章将为大家详细讲解有关SpringBoot如何集成Apollo配置中心,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。系统环境SpringBoot 版本:2.1.8.RELEASEApollo 版本:...
    99+
    2023-06-02
  • 如何使用Springboot整合Apollo配置中心
    本篇内容介绍了“如何使用Springboot整合Apollo配置中心”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Apollo简介Apoll...
    99+
    2023-06-20
  • Rancher 2.4.3 - HA 部署高可用k8s集群
    对于生产环境,需以高可用的配置安装 Rancher,确保用户始终可以访问 Rancher Server。当安装在Kubernetes集群中时,Rancher将与集群的 etcd 集成,并利用Kubernetes 调度实现高可用。为确保高可用...
    99+
    2023-01-31
    集群 Rancher k8s
  • docker compose 一键部署分布式配置中心Apollo的过程详解
    简介 说起分布式肯定要想到分布式配置中心、分布式日志、分布式链路追踪等 在分布式部署中业务往往有很多配置比如: 应用程序在启动和运行时需要读取一些配置信息,配置基本上伴随着应用程序的...
    99+
    2024-04-02
  • 使用Springboot整合Apollo配置中心
    Apollo简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理...
    99+
    2024-04-02
  • Docker中如何部署k8s
    这篇文章主要介绍Docker中如何部署k8s,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!拓扑结构1master + 2minionk8s-master 192.168.0.201 masterk8s-node1 1...
    99+
    2023-06-07
  • springboot logback如何从apollo配置中心读取变量
    目录springbootlogback从apollo配置中心读取变量1、在apollo配置中心添加2、项目的application.yml配置文件配置如下3、在logback.xml...
    99+
    2024-04-02
  • k8s中如何部署springboot项目
    在k8s中部署Spring Boot项目通常可以通过以下几个步骤完成: 创建Docker镜像:首先,将你的Spring Boot...
    99+
    2024-04-02
  • k8s中如何部署redis集群
    在Kubernetes中部署Redis集群通常可以通过以下步骤进行: 创建Redis的ConfigMap:在Kubernetes中...
    99+
    2024-04-09
    redis
  • k8s中如何部署mysql集群
    在Kubernetes中部署MySQL集群可以使用StatefulSet和PersistentVolume。以下是一个简单的步骤: ...
    99+
    2024-04-02
  • CKAD认证中部署k8s并配置Calico插件
    预设网络 Calico(https://github.com/projectcalico/calico) 是针对容器、虚拟机和裸机工作负载的开源网络和安全解决方案,它提供了 pod ...
    99+
    2024-04-02
  • SpringCloud高可用配置中心Config详解
    目录前言源码环境开发工具正文commons 工程commons 工程 - POM 文件commons 工程 - 项目结构配置文件service 工程registry-service(...
    99+
    2024-04-02
  • MHA高可用架构部署以及配置(详细)
    目录 一、MHA概述 1、简介 2、MHA特点 3、何为高可用 4、故障切换过程 二、MHA高可用架构部署 1、架构图 2、 实验环境:需要四台Centos7服务器 3、实验部署 3.1、master、slave1、slave2安装mysq...
    99+
    2023-09-04
    数据库 mysql 运维
  • Kubernetes中如何使用Rancher部署K8S集群
    本篇文章给大家分享的是有关Kubernetes中如何使用Rancher部署K8S集群,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.安装Rancher这里使用三台机器来搭建K...
    99+
    2023-06-19
  • SpringBoot整合Apollo配置中心快速使用详解
    目录一、简介二、使用1. 测试项目搭建2. Apollo配置中心的配置3. 项目启动与测试4.常见整合问题附录一、简介 1.Apollo 是什么?Apollo(阿波罗)是携程框架部门...
    99+
    2024-04-02
  • 如何部署MHA实现MySQL高可用
    MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行...
    99+
    2024-04-02
  • 如何部署MySQL-MMM高可用群集
    如何部署MySQL-MMM高可用群集,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。简介MMM(Master-Master re...
    99+
    2024-04-02
  • MySQL高可用方案MHA如何部署
    这篇文章将为大家详细讲解有关MySQL高可用方案MHA如何部署,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MHA(Master High Availability)是一...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作