【问题标题】:Kubernetes - How to use statefulsets for my Stateful database? [closed]Kubernetes - 如何为我的有状态数据库使用状态集? [关闭]
【发布时间】:2021-09-25 16:26:36
【问题描述】:

我在 gke 上有一个带有 apache、mysql 和 keyrock 的集群,我想使用水平 pod 自动缩放器对其进行扩展。

对于 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-service代码:

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


           

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

有什么想法吗?

【问题讨论】:

  • 请仅在 SO 上提出 programming 相关问题!
  • @alex 你检查过mysql是一种可以在多个实例中运行的软件吗?如果有,你检查过它是如何在分布式模式下运行的吗?
  • 不确定你是否已经参考过这个页面kubernetes.io/docs/tasks/run-application/…你需要写一个init容器来为你完成复制任务,最好使用Kubernetes操作员github.com/mysql/mysql-operator
  • @hellodk 你相信如果我写下一个init容器就可以了吗?
  • @Jonas 谢谢你的回答!!我已经检查过 mysql 可以在多个实例中运行,但我不明白这如何解决我的问题..

标签: mysql kubernetes replication hpa statefulset


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答!!你相信我不能避免运营商吗?我尝试使用运算符,但无法将 mysql 与 keyrock 连接!
  • 我认为运营商旨在解决这类问题;否则你必须自己解决复制问题,这将是很多工作。这就是运算符的用途,用于处理应用程序(域)-特定逻辑
  • 再次感谢您。您能回答我另一个问题吗?如果我要使用运算符,我也应该使用和 statefulsets 吗?我也必须创建一个 InnoDB Cluster 吗?也许只有操作员?
  • 我没有使用特定的运算符,但很可能是的,它会为你创建一个 StatefulSet(或任何需要的东西)。 InnoDB 集群也是如此
  • @alex 运算符是正确的方法,如果可能,请使用它们。可以参考这个 MySQL Operator - github.com/cybozu-go/moco
【解决方案2】:

默认 kubernetes pod 创建,不会在缩放的 pod 之间同步数据。您可以使用 kubernetes 初始化容器或公共存储或任何脚本来执行此操作

【讨论】:

  • 如何解决在 Kubernetes 上运行两个 MySQL 实例的问题? - 它只是两个不同的数据库,数据不一致。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-09
  • 2017-05-19
  • 2019-12-01
  • 2021-08-07
  • 1970-01-01
相关资源
最近更新 更多