在实际的生产环境使用中,通过分布式存储来实现的磁盘在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 下的文件 。

文章插图
2、部署k8s的yaml文件
官网的yaml可以下载修改就可以了,因为我用自己的仓库的镜像,并且多次测试,我主要有如下的修改:
(1)配置文件要删除掉安全提示:
securityContext:
privileged: true
(2)添加仓库的密钥:
imagePullSecrets:
- name: registry-harbor
(3)下面修改为每次都拉镜像:Always
imagePullPolicy: Always
(4)添加mysql的配置信息
我只用3个环境,需要修改的文件如图:

文章插图
因为修改得比较多,我将在下面列出每一个文件 。我只拿开发环境apollo-env-dev的作为一个示例,其它的只是对应修改就可以了 。在执行的时候,建议大家从下面的(3)、(2)、(1)的顺序执行下面的文件 。
(1)、service-apollo-admin-server-dev.yaml
---# configmap for apollo-admin-server-devkind: ConfigMapapiVersion: v1metadata:namespace: zizainame: configmap-apollo-admin-server-devdata:Application-github.properties: |spring.datasource.url = jdbc:mysql://service-mysql-for-apollo-dev-env.zizai:3306/DevApolloConfigDB?characterEncoding=utf8spring.datasource.username = adminspring.datasource.password = mysql-admineureka.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: ServiceapiVersion: v1metadata:namespace: zizainame: service-apollo-admin-server-devlabels:app: service-apollo-admin-server-devspec:ports:- protocol: TCPport: 8090targetPort: 8090selector:app: pod-apollo-admin-server-devtype: ClusterIPsessionAffinity: ClientIP---kind: DeploymentapiVersion: apps/v1metadata:namespace: zizainame: deployment-apollo-admin-server-devlabels:app: deployment-apollo-admin-server-devspec:replicas: 3selector:matchLabels:app: pod-apollo-admin-server-devstrategy:rollingUpdate:maxSurge: 1maxUnavailable: 1type: RollingUpdatetemplate:metadata:labels:app: pod-apollo-admin-server-devspec:imagePullSecrets:# dokcer仓库密码,不需要的可以去掉- name: registry-harboraffinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:labelSelector:matchExpressions:- key: appoperator: Invalues:- pod-apollo-admin-server-devtopologyKey: kubernetes.io/hostnamevolumes:- name: volume-configmap-apollo-admin-server-devconfigMap:name: configmap-apollo-admin-server-devitems:- key: application-github.propertiespath: application-github.propertiesinitContainers:- image: hub.thinkinpower.net/zizai/alpine-bash:3.8imagePullPolicy: Alwaysname: check-service-apollo-config-server-devcommand: ['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.1imagePullPolicy: Alwaysname: container-apollo-admin-server-devports:- protocol: TCPcontainerPort: 8090volumeMounts:- name: volume-configmap-apollo-admin-server-devmountPath: /apollo-admin-server/config/application-github.propertiessubPath: application-github.propertiesenv:- name: APOLLO_ADMIN_SERVICE_NAMEvalue: "service-apollo-admin-server-dev.zizai"readinessProbe:tcpSocket:port: 8090initialDelaySeconds: 10periodSeconds: 5livenessProbe:tcpSocket:port: 8090initialDelaySeconds: 120periodSeconds: 10DNSPolicy: ClusterFirstrestartPolicy: Always(2)、service-apollo-config-server-dev.yaml---# configmap for apollo-config-server-devkind: ConfigMapapiVersion: v1metadata:namespace: zizainame: configmap-apollo-config-server-devdata:application-github.properties: |spring.datasource.url = jdbc:mysql://service-mysql-for-apollo-dev-env.zizai:3306/DevApolloConfigDB?characterEncoding=utf8spring.datasource.username = adminspring.datasource.password = mysql-admineureka.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: ServiceapiVersion: v1metadata:namespace: zizainame: service-apollo-meta-server-devlabels:app: service-apollo-meta-server-devspec:ports:- protocol: TCPport: 8080targetPort: 8080selector:app: pod-apollo-config-server-devtype: ClusterIPclusterIP: NonesessionAffinity: ClientIP---kind: ServiceapiVersion: v1metadata:namespace: zizainame: service-apollo-config-server-devlabels:app: service-apollo-config-server-devspec:ports:- protocol: TCPport: 8080targetPort: 8080nodePort: 30002selector:app: pod-apollo-config-server-devtype: NodePortsessionAffinity: ClientIP---kind: StatefulSetapiVersion: apps/v1metadata:namespace: zizainame: statefulset-apollo-config-server-devlabels:app: statefulset-apollo-config-server-devspec:serviceName: service-apollo-meta-server-devreplicas: 3selector:matchLabels:app: pod-apollo-config-server-devupdateStrategy:type: RollingUpdatetemplate:metadata:labels:app: pod-apollo-config-server-devspec:imagePullSecrets:# dokcer仓库密码,不需要的可以去掉- name: registry-harboraffinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 100podAffinityTerm:labelSelector:matchExpressions:- key: appoperator: Invalues:- pod-apollo-config-server-devtopologyKey: kubernetes.io/hostnamevolumes:- name: volume-configmap-apollo-config-server-devconfigMap:name: configmap-apollo-config-server-devitems:- key: application-github.propertiespath: application-github.propertiescontainers:- image: hub.thinkinpower.net/zizai/apollo-config-server:v1.7.1imagePullPolicy: Alwaysname: container-apollo-config-server-devports:- protocol: TCPcontainerPort: 8080volumeMounts:- name: volume-configmap-apollo-config-server-devmountPath: /apollo-config-server/config/application-github.propertiessubPath: application-github.propertiesenv:- name: APOLLO_CONFIG_SERVICE_NAMEvalue: "service-apollo-config-server-dev.zizai"readinessProbe:tcpSocket:port: 8080initialDelaySeconds: 10periodSeconds: 5livenessProbe:tcpSocket:port: 8080initialDelaySeconds:120periodSeconds: 10dnsPolicy: ClusterFirstrestartPolicy: Always
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- redis哨兵docker部署及springboot运行
- k8s之DNS服务器搭建
- 新手小白如何部署服务器,让你的个人电脑成为网站服务器
- 如何实现几百台SIP终端实现自动化部署
- 想实现高可用?先搞定负载均衡原理
- 小说系统,浩森系统程序部署教程
- CentOS7部署和设置GO
- Mysql:下载、安装、部署、修改密码步骤
- 花5分钟来总结下K8S原理
- 从零开始入门K8S| 从Spring Cloud到Kubernetes的微服务迁移实践
