嗨!!!
我已经将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操作员的开发人员之一。