Kubernetes - 如何为我的有状态数据库使用有状态集?

Kubernetes - How to use statefulsets for my Stateful database?

我在 gke 上有一个带有 apache、mysql 和 keyrock 的集群,我想用 horizo​​ntal pod autoscaler 扩展它。

对于 mysql 我正在使用 statefulset 代码在这里:

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 
              cpu: 50m
            limits:
                memory: 500Mi 
                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 
                  key: password
            - name: MYSQL_ROOT_HOST
              valueFrom:
                secretKeyRef:
                  name: mysql-secret 
                  key: host                  
  volumeClaimTemplates:
    - metadata:
        name: mysql-storage
      spec:
        accessModes:
            - ReadWriteOnce
        storageClassName: standard 
        resources:
            requests:
                storage: 5Gi

mysql-服务代码:

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql  
spec:
  ports:
  - name: mysql
    port: 3306
  clusterIP: None
  selector:
    app: mysql  


           

问题:当hpa扩展mysql数据库时,第二个副本,我不知道如何同步 2 个副本!

有什么想法吗?

默认的 kubernetes pod 创建,不在扩展 pods 之间同步数据。您可以使用 kubernetes init 容器或公共存储或任何脚本来执行此操作

默认情况下,StatefulSet 不会处理复制问题。

您将不得不求助于 MySQL kubernetes 运算符来处理特定于应用程序的逻辑,例如您正在寻找的逻辑。

https://github.com/mysql/mysql-operator