
tonyli71/mariadb-galera本镜像(adfinissygroup/k8s-mariadb-galera-centos:v004)用于在OpenShift环境中部署持久化的MariaDB Galera集群。通过StatefulSet实现多节点高可用配置,支持数据自动复制和持久化存储,适用于需要高可靠性数据库的企业级应用场景。
mariadb-galera-persistent-template.yml文件:yamlkind: Template apiVersion: v1 metadata: name: mariadb-galera-persistent annotations: description: MariaDB Galera cluster persistent (ODF) iconClass: icon-mariadb tags: database,mysql,replication,mariadb,galera,nfs parameters: - name: MYSQL_SERVICE_NAME description: Service name for the MariaDB service value: galera - name: GALERA_PETSET_NAME description: PetSet name value: mysql - name: NUMBER_OF_GALERA_MEMBERS description: Number of Galera Nodes value: "3" required: true - name: VOLUME_PV_NAME description: Volume PV basename. If the name is "datadir", it you need to create datadir-GALERA_PETSET_NAME-number value: datadir required: true - name: VOLUME_CAPACITY description: Volume space available for data, e.g. 512Mi, 2Gi. required: true value: 2Gi - name: MYSQL_USER description: The username that clients will use to connect to the server value: user - name: MYSQL_PASSWORD description: The password for the MYSQL_USER generate: expression from: "[a-zA-Z0-9]{12}" - name: MYSQL_DATABASE description: The name of the database that will be created and replicated value: userdb - name: MYSQL_ROOT_PASSWORD description: The password for the root user generate: expression from: "[a-zA-Z0-9]{12}" objects: - apiVersion: v1 kind: Service metadata: annotations: service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" name: "${MYSQL_SERVICE_NAME}" labels: app: "${GALERA_PETSET_NAME}" spec: ports: - port: 3306 name: "${GALERA_PETSET_NAME}" clusterIP: None selector: app: "${GALERA_PETSET_NAME}" - apiVersion: apps/v1beta1 kind: StatefulSet metadata: name: "${GALERA_PETSET_NAME}" spec: serviceName: "${MYSQL_SERVICE_NAME}" replicas: "${NUMBER_OF_GALERA_MEMBERS}" template: metadata: labels: app: "${GALERA_PETSET_NAME}" annotations: pod.alpha.kubernetes.io/initialized: "true" spec: containers: - name: "${GALERA_PETSET_NAME}" image: adfinissygroup/k8s-mariadb-galera-centos:v004 imagePullPolicy: IfNotPresent ports: - containerPort: 3306 name: mysql - containerPort: 4444 name: sst - containerPort: 4567 name: replication - containerPort: 4568 name: ist readinessProbe: exec: command: - /usr/share/container-scripts/mysql/readiness-probe.sh initialDelaySeconds: 15 timeoutSeconds: 5 volumeMounts: - name: "${VOLUME_PV_NAME}" mountPath: /var/lib/mysql subPath: data env: - name: POD_NAMESPACE valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.namespace - name: MYSQL_USER value: "${MYSQL_USER}" - name: MYSQL_PASSWORD value: "${MYSQL_PASSWORD}" - name: MYSQL_DATABASE value: "${MYSQL_DATABASE}" - name: MYSQL_ROOT_PASSWORD value: "${MYSQL_ROOT_PASSWORD}" - name: GALERA_PETSET_NAME value: "${GALERA_PETSET_NAME}" volumeClaimTemplates: - metadata: name: "${VOLUME_PV_NAME}" spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: "${VOLUME_CAPACITY}"
| 参数名称 | 描述 | 默认值 | 是否必填 |
|---|---|---|---|
| MYSQL_SERVICE_NAME | MariaDB服务名称 | galera | 否 |
| GALERA_PETSET_NAME | StatefulSet名称 | mysql | 否 |
| NUMBER_OF_GALERA_MEMBERS | Galera节点数量 | "3" | 是 |
| VOLUME_PV_NAME | 存储卷PV基础名称 | datadir | 是 |
| VOLUME_CAPACITY | 存储容量(如512Mi、2Gi) | 2Gi | 是 |
| MYSQL_USER | 客户端连接数据库的用户名 | user | 否 |
| MYSQL_PASSWORD | MYSQL_USER的密码 | 自动生成(12位字母数字) | 否 |
| MYSQL_DATABASE | 要创建并复制的数据库名称 | userdb | 否 |
| MYSQL_ROOT_PASSWORD | root用户密码 | 自动生成(12位字母数字) | 否 |
使用OpenShift命令行工具部署模板:
bashoc create -f mariadb-galera-persistent-template.yml
基于模板创建应用,指定必要参数:
bashoc new-app --template=mariadb-galera-persistent \ -p NUMBER_OF_GALERA_MEMBERS=3 \ -p VOLUME_PV_NAME=datadir \ -p VOLUME_CAPACITY=5Gi \ -p MYSQL_DATABASE=myappdb
容器运行时会自动注入以下环境变量:
POD_NAMESPACE:当前Pod所在的命名空间(从Pod元数据获取)MYSQL_USER:数据库普通用户MYSQL_PASSWORD:普通用户密码MYSQL_DATABASE:默认数据库名称MYSQL_ROOT_PASSWORD:root用户密码GALERA_PETSET_NAME:StatefulSet名称| 端口 | 名称 | 用途 |
|---|---|---|
| 3306 | mysql | MySQL服务端口 |
| 4444 | sst | Galera SST(State Snapshot Transfer)端口 |
| 4567 | replication | Galera复制端口 |
| 4568 | ist | Galera IST(Incremental State Transfer)端口 |
通过volumeClaimTemplates自动创建持久化存储声明,默认使用ReadWriteOnce访问模式,存储容量由VOLUME_CAPACITY参数指定。存储卷名称格式为${VOLUME_PV_NAME}-${GALERA_PETSET_NAME}-<number>,例如datadir-mysql-0、datadir-mysql-1等。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务