像MySQL集群这种对性能要求很高的有状态应用,并不是很推荐在Kuberentes中部署,业务程序想要使用集群外部的MySQL实例可以通过配置文件或者环境变量指定MySQL地址。
为了统一集群内服务访问方式,部分公司会使用Kubernetes中SVC去代理集群外中间件流量,这样访问集群外中间件就如同访问集群的中间件。实现方式很简单,只需要指定SVC和对应Endpoint,并且Endpoint的后端节点为集群外的中间件访问地址和端口。
---
apiVersion: v1
kind: Service
metadata:
name: rds-devops-01
namespace: default
spec:
ports:
- name: mysql
port: 3306
---
apiVersion: v1
kind: Endpoints
metadata:
# Endpoints 的name必须和Service一致,这样才能关联上
name: rds-devops-01
namespace: default
subsets:
- addresses:
- ip: 10.0.160.11
ports:
- name: mysql
port: 3306
---
# 用于作为MySQL客户端进行测试
apiVersion: apps/v1
kind: Deployment
metadata:
name: rds-client
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: rds-client
template:
metadata:
labels:
app: rds-client
spec:
containers:
- name: mysql
image: mysql:5.7
command: ["sleep", "600"]
# 验证是否可以通过SVC去连接集群外部的数据库
[root@maxiaoke nginx-01]# kubectl exec -it rds-client-85d97ddb97-sp24g -- bash
root@rds-client-85d97ddb97-sp24g:/# mysql -u root -p -h rds-devops-01 -e "select version();"
Enter password:
+-----------+
| version() |
+-----------+
| 5.7.35 |
+-----------+