扩展后连接到apache的问题,我在Kubernetes上的有状态数据库



嗨!!!

我已经将keyrock、apache和mysql部署到了Kubernetes。。

在我使用了hpa和我的状态数据库后,我无法登录到我的简单网站。。这是我的sql代码:

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: mysql
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7.21
imagePullPolicy: Always
resources:
requests:
memory: 50Mi #50
cpu: 50m
limits:
memory: 500Mi #220?
cpu: 400m #65  
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql
subPath: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret # MARK P
key: password
- name: MYSQL_ROOT_HOST
valueFrom:
secretKeyRef:
name: mysql-secret # MARK P
key: host                  
volumeClaimTemplates:
- metadata:
name: mysql-storage
spec:
accessModes:
- ReadWriteOnce
storageClassName: standard #?manual
resources:
requests:
storage: 5Gi

这是无头服务:

# Headless service for stable DNS entries of StatefulSet members.
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
app: mysql  #x-app  #
spec:
ports:
- name: mysql
port: 3306
clusterIP: None
selector:
app: mysql  #x-app


有人能帮我吗?

我在用gke。。Keyrock和apache是部署,mysql是状态集。。

谢谢!!

您不能只扩大独立数据库的规模。将HPA用于无状态应用程序是可行的,但不适用于像数据库这样的有状态应用程序。

增加StaetefulSet的副本只会创建另一个带有新MySQL实例的pod。此新复制副本不知道旧复制副本中的数据。基本上,您现在有两个完全不同的数据库。这就是为什么放大后无法登录的原因。当您的请求被路由到新副本时,此实例没有您在旧副本中创建的用户信息。

在这种情况下,您应该以集群模式部署数据库。然后,您可以利用水平缩放。

我建议使用mysql/mysql操作符、presslabs/mysql操作符或KubeDB等数据库操作符来管理Kubernetes中的数据库。在这些操作符中,KubeDB具有自动缩放功能。我不确定其他运营商是否提供此功能。

披露:我是KubeDB操作员的开发人员之一。

最新更新