move mysql operator and cluster

This commit is contained in:
2025-04-14 14:30:26 +02:00
parent 6e2597ffa7
commit 2b032964a2
30 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*~
# Various IDEs
.project
.idea/
*.tmproj

View File

@@ -0,0 +1,5 @@
apiVersion: v1
appVersion: "1.0"
description: A Helm chart for easy deployment of a MySQL cluster with MySQL operator.
name: mysql-cluster
version: 0.3.1

View File

@@ -0,0 +1,59 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "mysql-cluster.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "mysql-cluster.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "mysql-cluster.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "mysql-cluster.dbConnectURL" -}}
mysql://
{{- if .Values.appUser -}}
{{ urlquery .Values.appUser -}}
{{- if .Values.appPassword -}}
:{{ urlquery .Values.appPassword }}
{{- end -}}
@
{{- end -}}
{{- include "mysql-cluster.clusterName" . -}}-mysql-master:3306
{{- if .Values.appDatabase -}}
/{{- .Values.appDatabase -}}
{{- end -}}
{{- end -}}
{{- define "mysql-cluster.clusterName" -}}
{{- printf "%s-db" (include "mysql-cluster.fullname" .) | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "mysql-cluster.secretName" -}}
{{- printf "%s-db" (include "mysql-cluster.fullname" .) | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "mysql-cluster.backupSecretName" -}}
{{- printf "%s-db-backup" (include "mysql-cluster.fullname" .) | trunc 63 | trimSuffix "-" -}}
{{- end -}}

View File

@@ -0,0 +1,23 @@
{{- if .Values.backupCredentials }}
apiVersion: v1
kind: Secret
metadata:
name: {{ template "mysql-cluster.backupSecretName" . }}
labels:
app: {{ template "mysql-cluster.name" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
{{- if .Values.backupSecretLabels }}
{{- toYaml .Values.backupSecretLabels | nindent 4 }}
{{- end }}
{{- if .Values.backupSecretAnnotations }}
annotations:
{{ toYaml .Values.backupSecretAnnotations }}
{{- end }}
type: Opaque
data:
{{- range $key, $value := .Values.backupCredentials }}
{{ $key | upper }}: {{ $value | b64enc | quote }}
{{- end }}
{{- end -}}

View File

@@ -0,0 +1,78 @@
apiVersion: mysql.presslabs.org/v1alpha1
kind: MysqlCluster
metadata:
name: {{ include "mysql-cluster.clusterName" . }}
labels:
app: {{ template "mysql-cluster.name" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: {{ .Values.replicas }}
{{- if .Values.customSecretName }}
secretName: {{ .Values.customSecretName }}
{{- else }}
secretName: {{ include "mysql-cluster.secretName" . }}
{{- end }}
{{- if .Values.image }}
image: {{ .Values.image }}
{{- end }}
{{- if .Values.mysqlVersion }}
mysqlVersion: {{ .Values.mysqlVersion | quote }}
{{- end }}
{{- if .Values.initBucketURL }}
initBucketURL: {{ .Values.initBucketURL }}
{{- end }}
{{- if .Values.initBucketSecretName }}
initBucketSecretName: {{ .Values.initBucketSecretName }}
{{- end }}
{{- if .Values.backupSecretName }}
backupSecretName: {{ .Values.backupSecretName }}
{{- else if .Values.backupCredentials }}
backupSecretName: {{ include "mysql-cluster.backupSecretName" . }}
{{- else if .Values.backupSchedule }}
{{ required "One of .mysql.backupSecretName and .mysql.backupCredentials should be specified" "" }}
{{- end }}
{{- if .Values.serverIDOffset }}
serverIDOffset: {{ .Values.serverIDOffset }}
{{- end }}
{{- if .Values.backupSchedule }}
backupSchedule: "{{ .Values.backupSchedule }}"
backupRemoteDeletePolicy: {{ .Values.backupRemoteDeletePolicy }}
backupURL: {{ required ".mysql.backupURL is missing" .Values.backupURL }}
{{- end }}
{{- if .Values.backupScheduleJobsHistoryLimit }}
backupScheduleJobsHistoryLimit: {{ .Values.backupScheduleJobsHistoryLimit }}
{{- end }}
{{- if .Values.mysqlConf }}
mysqlConf:
{{- toYaml .Values.mysqlConf | nindent 4 }}
{{- end }}
{{- if .Values.podSpec }}
podSpec:
{{- toYaml .Values.podSpec | nindent 4 }}
{{- end }}
{{- if .Values.volumeSpec }}
volumeSpec:
{{- toYaml .Values.volumeSpec | nindent 4 }}
{{- end }}
{{- if .Values.initFileExtraSQL }}
initFileExtraSQL:
{{- toYaml .Values.initFileExtraSQL | nindent 6 }}
{{- end }}
{{- if .Values.queryLimits }}
queryLimits:
{{ toYaml .Values.queryLimits | indent 4 }}
{{- end }}

View File

@@ -0,0 +1,25 @@
{{- if not .Values.customSecretName }}
apiVersion: v1
kind: Secret
metadata:
name: {{ include "mysql-cluster.secretName" . }}
labels:
app: {{ template "mysql-cluster.name" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
{{- if .Values.appSecretLabels }}
{{- toYaml .Values.appSecretLabels | nindent 4 }}
{{- end }}
{{- if .Values.appSecretAnnotations }}
annotations:
{{ toYaml .Values.appSecretAnnotations }}
{{- end }}
type: Opaque
data:
ROOT_PASSWORD: {{ required ".rootPassword is missing" .Values.rootPassword | b64enc | quote }}
USER: {{ .Values.appUser | b64enc | quote }}
PASSWORD: {{ .Values.appPassword | b64enc | quote }}
DATABASE: {{ .Values.appDatabase | b64enc | quote }}
DB_CONNECT_URL: {{ include "mysql-cluster.dbConnectURL" . | b64enc | quote }}
{{- end }}

View File

@@ -0,0 +1,76 @@
# Default values for mysql-cluster.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
## The cluster number of nodes
replicas: 1
## For setting custom docker image or specifying mysql version
## the image field has priority over mysqlVersion.
# image: percona:5.7
# mysqlVersion: "5.7"
## MySQL connect credentials, those credentials will be provisioned in the cluster
rootPassword: "CHANGE_ME"
appUser: ""
appPassword: ""
appDatabase: ""
# appSecretLabels: {}
# appSecretAnnotations: {}
podSpec:
mysqlConf:
volumeSpec:
serverIDOffset:
initBucketURL:
initBucketSecretName:
backupSchedule:
backupScheduleJobsHistoryLimit:
backupURL:
backupSecretName:
backupRemoteDeletePolicy:
# backupSecretLabels: {}
# backupSecretAnnotations: {}
backupCredentials:
# use s3 https://rclone.org/s3/
# S3_PROVIDER: ? # like: AWS, Minio, Ceph, and so on
# S3_ENDPOINT: ?
# AWS_ACCESS_KEY_ID: ?
# AWS_SECRET_ACCESS_KEY: ?
# AWS_REGION: ?
# AWS_ACL: ?
# AWS_STORAGE_CLASS: ?
# AWS_SESSION_TOKEN: ?
# use google cloud storage https://rclone.org/googlecloudstorage/
# GCS_SERVICE_ACCOUNT_JSON_KEY: ?
# GCS_PROJECT_ID: ?
# GCS_OBJECT_ACL: ?
# GCS_BUCKET_ACL: ?
# GCS_LOCATION: ?
# GCS_STORAGE_CLASS: MULTI_REGIONAL
# use http https://rclone.org/http/
# HTTP_URL: ?
# use google drive https://rclone.org/drive/
# GDRIVE_CLIENT_ID: ?
# GDRIVE_ROOT_FOLDER_ID: ?
# GDRIVE_IMPERSONATOR: ?
# use azure https://rclone.org/azureblob/
# AZUREBLOB_ACCOUNT: ?
# AZUREBLOB_KEY: ?
## For enabling and configuring pt-kill: https://www.percona.com/doc/percona-toolkit/LATEST/pt-kill.html
#queryLimits:
# maxIdleTime: ... # pt-kill --idle-time
# maxQueryTime: ... # pt-kill --busy-time
# kill: oldest|all|all-but-oldest # pt-kill --victims
# killMode: query|connection # pt-kill --kill-query or pt-kill --kill
# ignoreDb: [] # pt-kill --ignore-db ...
# ignoreCommand: [] # pt-kill --ignore-command ...
# ignoreUser: [] # pt-kill --ignore-user