Skip to content

Commit f28fbe2

Browse files
committed
Use different sidecar image when running with mysql 8.0
1 parent 12efa94 commit f28fbe2

File tree

14 files changed

+74
-27
lines changed

14 files changed

+74
-27
lines changed

Dockerfile.sidecar

+2-1
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,10 @@ RUN apt-get update \
5858
COPY hack/docker/percona.gpg /etc/apt/trusted.gpg.d/percona.gpg
5959
RUN echo 'deb https://repo.percona.com/apt buster main' > /etc/apt/sources.list.d/percona.list
6060

61+
ARG XTRABACKUP_PKG=percona-xtrabackup-24
6162
RUN apt-get update \
6263
&& apt-get install -y --no-install-recommends \
63-
percona-toolkit percona-xtrabackup-80 unzip default-mysql-client
64+
percona-toolkit ${XTRABACKUP_PKG} unzip default-mysql-client
6465

6566

6667
USER mysql

Makefile

+11-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
APP_VERSION ?= $(shell git describe --abbrev=5 --dirty --tags --always)
22
REGISTRY := quay.io/presslabs
33
IMAGE_NAME := mysql-operator
4-
SIDECAR_IMAGE_NAME := mysql-operator-sidecar
4+
SIDECAR_MYSQL57_IMAGE_NAME := mysql-operator-sidecar-mysql57
5+
SIDECAR_MYSQL8_IMAGE_NAME := mysql-operator-sidecar-mysql8
56
BUILD_TAG := build
67
IMAGE_TAGS := $(APP_VERSION)
78
PKG_NAME := github.com/presslabs/mysql-operator
@@ -126,11 +127,14 @@ dependencies-local: dependencies
126127
.PHONY: images
127128
images:
128129
docker build . -f Dockerfile -t $(REGISTRY)/$(IMAGE_NAME):$(BUILD_TAG)
129-
docker build . -f Dockerfile.sidecar -t $(REGISTRY)/$(SIDECAR_IMAGE_NAME):$(BUILD_TAG)
130+
docker build . -f Dockerfile.sidecar -t $(REGISTRY)/$(SIDECAR_MYSQL57_IMAGE_NAME):$(BUILD_TAG)
131+
docker build . -f Dockerfile.sidecar --build-arg XTRABACKUP_PKG=percona-xtrabackup-80 \
132+
-t $(REGISTRY)/$(SIDECAR_MYSQL8_IMAGE_NAME):$(BUILD_TAG)
130133
set -e; \
131134
for tag in $(IMAGE_TAGS); do \
132135
docker tag $(REGISTRY)/$(IMAGE_NAME):$(BUILD_TAG) $(REGISTRY)/$(IMAGE_NAME):$${tag}; \
133-
docker tag $(REGISTRY)/$(SIDECAR_IMAGE_NAME):$(BUILD_TAG) $(REGISTRY)/$(SIDECAR_IMAGE_NAME):$${tag}; \
136+
docker tag $(REGISTRY)/$(SIDECAR_MYSQL57_IMAGE_NAME):$(BUILD_TAG) $(REGISTRY)/$(SIDECAR_MYSQL57_IMAGE_NAME):$${tag}; \
137+
docker tag $(REGISTRY)/$(SIDECAR_MYSQL8_IMAGE_NAME):$(BUILD_TAG) $(REGISTRY)/$(SIDECAR_MYSQL8_IMAGE_NAME):$${tag}; \
134138
done
135139

136140
# Push the docker image
@@ -139,7 +143,8 @@ publish: images
139143
set -e; \
140144
for tag in $(IMAGE_TAGS); do \
141145
docker push $(REGISTRY)/$(IMAGE_NAME):$${tag}; \
142-
docker push $(REGISTRY)/$(SIDECAR_IMAGE_NAME):$${tag}; \
146+
docker push $(REGISTRY)/$(SIDECAR_MYSQL57_IMAGE_NAME):$${tag}; \
147+
docker push $(REGISTRY)/$(SIDECAR_MYSQL8_IMAGE_NAME):$${tag}; \
143148
done
144149

145150
# E2E tests
@@ -161,5 +166,6 @@ e2e-remote:
161166
--kubernetes-config $(KUBECONFIG) --kubernetes-context $(K8S_CONTEXT) \
162167
--report-dir ../../e2e-reports \
163168
--operator-image quay.io/presslabs/mysql-operator:$(E2E_IMG_TAG) \
164-
--sidecar-image quay.io/presslabs/mysql-operator-sidecar:$(E2E_IMG_TAG) \
169+
--sidecar-mysql57-image quay.io/presslabs/mysql-operator-sidecar-mysql57:$(E2E_IMG_TAG) \
170+
--sidecar-mysql8-image quay.io/presslabs/mysql-operator-sidecar-mysql8:$(E2E_IMG_TAG) \
165171
--orchestrator-image quay.io/presslabs/mysql-operator-orchestrator:$(E2E_IMG_TAG)

charts/mysql-operator/templates/statefulset.yaml

+3
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ spec:
5151
{{- if .Values.sidecarImage }}
5252
- --sidecar-image={{ .Values.sidecarImage }}
5353
{{- end -}}
54+
{{- if .Values.sidecarMysql8Image }}
55+
- --sidecar-mysql8-image={{ .Values.sidecarMysql8Image }}
56+
{{- end -}}
5457
{{- if .Values.watchNamespace }}
5558
- --namespace={{ .Values.watchNamespace }}
5659
{{- end }}

charts/mysql-operator/values.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
replicas: 1
66
image: quay.io/presslabs/mysql-operator:latest
7-
sidecarImage: quay.io/presslabs/mysql-operator-sidecar:latest
7+
sidecarImage: quay.io/presslabs/mysql-operator-sidecar-mysql57:latest
8+
sidecarMysql8Image: quay.io/presslabs/mysql-operator-sidecar-mysql8:latest
89
imagePullPolicy: IfNotPresent
910

1011
# Insert a pre-stop lifecycle hook and trigger a failover. NOTE: Use this when your cluster network

hack/development/Dockerfile.sidecar

+2-1
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,10 @@ RUN apt-get update \
4444
COPY hack/docker/percona.gpg /etc/apt/trusted.gpg.d/percona.gpg
4545
RUN echo 'deb https://repo.percona.com/apt buster main' > /etc/apt/sources.list.d/percona.list
4646

47+
ARG XTRABACKUP_PKG=percona-xtrabackup-80
4748
RUN apt-get update \
4849
&& apt-get install -y --no-install-recommends \
49-
percona-toolkit percona-xtrabackup-80 unzip default-mysql-client
50+
percona-toolkit ${XTRABACKUP_PKG} unzip default-mysql-client
5051

5152
USER mysql
5253

hack/generate_chart.sh

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ echo "Updating chart images tag to: ${version}"
2020
sed -i.bak -E "
2121
s#image: (.*):.*#image: \\1:${version}#
2222
s#sidecarImage: (.*):.*#sidecarImage: \\1:${version}#
23+
s#sidecarMysql8Image: (.*):.*#sidecarMysql8Image: \\1:${version}#
2324
s# image: (.*): (.*):.*# image: \\1:${version}#
2425
" ${CHART_PATH}/values.yaml
2526
rm ${CHART_PATH}/values.yaml.bak

pkg/controller/mysqlbackup/internal/syncer/deletionjob.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,14 @@ func (s *deletionJobSyncer) ensureContainers() []core.Container {
167167

168168
rcloneCommand = append(rcloneCommand, "delete", bucketForRclone(s.backup.Spec.BackupURL))
169169

170+
image := s.opt.SidecarMysql57Image
171+
if s.cluster != nil {
172+
image = s.cluster.GetSidecarImage()
173+
}
174+
170175
container := core.Container{
171176
Name: "delete",
172-
Image: s.opt.SidecarImage,
177+
Image: image,
173178
ImagePullPolicy: s.opt.ImagePullPolicy,
174179
Args: rcloneCommand,
175180
}

pkg/controller/mysqlbackup/internal/syncer/job.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ func (s *jobSyncer) ensurePodSpec(in core.PodSpec) core.PodSpec {
127127
}
128128

129129
in.Containers[0].Name = "backup"
130-
in.Containers[0].Image = s.opt.SidecarImage
130+
in.Containers[0].Image = s.cluster.GetSidecarImage()
131131
in.Containers[0].ImagePullPolicy = s.opt.ImagePullPolicy
132132
in.Containers[0].Args = []string{
133133
"take-backup-to",

pkg/controller/mysqlcluster/internal/syncer/statefullset.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ func (s *sfsSyncer) ensureInitContainersSpec() []core.Container {
348348

349349
// clone and init container
350350
cloneInit := s.ensureContainer(containerCloneAndInitName,
351-
s.opt.SidecarImage,
351+
s.cluster.GetSidecarImage(),
352352
[]string{"clone-and-init"},
353353
)
354354
initCs = append(initCs, cloneInit)
@@ -415,7 +415,7 @@ func (s *sfsSyncer) ensureContainersSpec() []core.Container {
415415

416416
// SIDECAR container
417417
sidecar := s.ensureContainer(containerSidecarName,
418-
s.opt.SidecarImage,
418+
s.cluster.GetSidecarImage(),
419419
[]string{"config-and-serve"},
420420
)
421421
sidecar.Ports = ensurePorts(core.ContainerPort{
@@ -465,7 +465,7 @@ func (s *sfsSyncer) ensureContainersSpec() []core.Container {
465465

466466
// PT-HEARTBEAT container
467467
heartbeat := s.ensureContainer(containerHeartBeatName,
468-
s.opt.SidecarImage,
468+
s.cluster.GetSidecarImage(),
469469
[]string{
470470
"pt-heartbeat",
471471
"--update", "--replace",
@@ -500,7 +500,7 @@ func (s *sfsSyncer) ensureContainersSpec() []core.Container {
500500
command = append(command, getCliOptionsFromQueryLimits(s.cluster.Spec.QueryLimits)...)
501501

502502
killer := s.ensureContainer(containerKillerName,
503-
s.opt.SidecarImage,
503+
s.cluster.GetSidecarImage(),
504504
command,
505505
)
506506

pkg/internal/mysqlcluster/mysqlcluster.go

+11
Original file line numberDiff line numberDiff line change
@@ -265,3 +265,14 @@ func (c *MysqlCluster) GetNamespacedName() types.NamespacedName {
265265
Name: c.Name,
266266
}
267267
}
268+
269+
// GetSidecarImage selects the sidecar docker image based on mysql version
270+
func (c *MysqlCluster) GetSidecarImage() string {
271+
// decide the sidecar image based on mysql version
272+
sidecarImage := options.GetOptions().SidecarMysql57Image
273+
if c.GetMySQLSemVer().Major == 8 {
274+
sidecarImage = options.GetOptions().SidecarMysql8Image
275+
}
276+
277+
return sidecarImage
278+
}

pkg/options/options.go

+13-6
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,10 @@ func getFromEnvOrDefault(key, def string) string {
3737

3838
// Options is the data structure that contains information about mysql operator configuration
3939
type Options struct {
40-
// SidecarImage is the image used in sidecar container to serve backups and configure MySQL
41-
SidecarImage string
40+
// SidecarMysql57Image is the image used in sidecar container to serve backups and configure MySQL
41+
SidecarMysql57Image string
42+
// SidecarMysql8Image as above but used when cluster uses mysql 8.0 and above
43+
SidecarMysql8Image string
4244

4345
// MetricsExporterImage is the image for exporter container
4446
MetricsExporterImage string
@@ -118,13 +120,17 @@ const (
118120
)
119121

120122
var (
121-
defaultSidecarImage = "quay.io/presslabs/mysql-operator-sidecar:" + util.AppVersion
123+
defaultSidecarMysql57Image = "quay.io/presslabs/mysql-operator-sidecar-mysql57:" + util.AppVersion
124+
defaultSidecarMysql8Image = "quay.io/presslabs/mysql-operator-sidecar-mysql8:" + util.AppVersion
122125
)
123126

124127
// AddFlags registers all mysql-operator needed flags
125128
func (o *Options) AddFlags(fs *pflag.FlagSet) {
126-
fs.StringVar(&o.SidecarImage, "sidecar-image", defaultSidecarImage,
127-
"The image that instrumentate mysql.")
129+
fs.StringVar(&o.SidecarMysql57Image, "sidecar-image", defaultSidecarMysql57Image,
130+
"The image that is used for mysql node instrumentation.")
131+
132+
fs.StringVar(&o.SidecarMysql8Image, "sidecar-mysql8-image", defaultSidecarMysql8Image,
133+
"The image that is used for mysql (version 8.0 or above) node instrumentation.")
128134

129135
fs.StringVar(&o.MetricsExporterImage, "metrics-exporter-image", defaultExporterImage,
130136
"The image for mysql metrics exporter.")
@@ -166,7 +172,8 @@ var once sync.Once
166172
func GetOptions() *Options {
167173
once.Do(func() {
168174
instance = &Options{
169-
SidecarImage: defaultSidecarImage,
175+
SidecarMysql57Image: defaultSidecarMysql57Image,
176+
SidecarMysql8Image: defaultSidecarMysql8Image,
170177
MetricsExporterImage: defaultExporterImage,
171178

172179
ImagePullPolicy: defaultImagePullPolicy,

skaffold.yaml

+10-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,16 @@ build:
55
- image: quay.io/presslabs/mysql-operator
66
docker:
77
dockerfile: hack/development/Dockerfile.operator
8-
- image: quay.io/presslabs/mysql-operator-sidecar
8+
- image: quay.io/presslabs/mysql-operator-sidecar-mysql57
99
docker:
1010
dockerfile: hack/development/Dockerfile.sidecar
11+
buildArgs:
12+
XTRABACKUP_PKG: percona-xtrabackup-24
13+
- image: quay.io/presslabs/mysql-operator-sidecar-mysql8
14+
docker:
15+
dockerfile: hack/development/Dockerfile.sidecar
16+
buildArgs:
17+
XTRABACKUP_PKG: percona-xtrabackup-80
1118
- image: quay.io/presslabs/mysql-operator-orchestrator
1219
docker:
1320
dockerfile: hack/development/Dockerfile.orchestrator
@@ -22,5 +29,6 @@ deploy:
2229
- hack/development/dev-values.yaml
2330
values:
2431
image: quay.io/presslabs/mysql-operator
25-
sidecarImage: quay.io/presslabs/mysql-operator-sidecar
32+
sidecarImage: quay.io/presslabs/mysql-operator-sidecar-mysql57
33+
sidecarMysql8Image: quay.io/presslabs/mysql-operator-sidecar-mysql8
2634
orchestrator.image: quay.io/presslabs/mysql-operator-orchestrator

test/e2e/framework/helm.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ func HelmInstallChart(release, ns string) {
3232
"--values", TestContext.ChartValues, "--wait",
3333
"--kube-context", TestContext.KubeContext,
3434
"--set", fmt.Sprintf("image=%s", TestContext.OperatorImage),
35-
"--set", fmt.Sprintf("sidecarImage=%s", TestContext.SidecarImage),
35+
"--set", fmt.Sprintf("sidecarImage=%s", TestContext.SidecarMysql57Image),
36+
"--set", fmt.Sprintf("sidecarMysql8Image=%s", TestContext.SidecarMysql8Image),
3637
"--set", fmt.Sprintf("orchestrator.image=%s", TestContext.OrchestratorImage),
3738
}
3839

test/e2e/framework/text_context.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ type TestContextType struct {
3636
ChartPath string
3737
ChartValues string
3838

39-
OperatorImage string
40-
SidecarImage string
41-
OrchestratorImage string
39+
OperatorImage string
40+
SidecarMysql57Image string
41+
SidecarMysql8Image string
42+
OrchestratorImage string
4243

4344
TimeoutSeconds int
4445
DumpLogsOnFailure bool
@@ -66,7 +67,8 @@ func RegisterCommonFlags() {
6667
flag.StringVar(&TestContext.ChartValues, "operator-chart-values-path", "../../test/e2e-values.yaml", "Path to a values file for mysql-operator chart.")
6768

6869
flag.StringVar(&TestContext.OperatorImage, "operator-image", "quay.io/presslabs/mysql-operator:build", "Image for mysql operator.")
69-
flag.StringVar(&TestContext.SidecarImage, "sidecar-image", "quay.io/presslabs/mysql-operator-sidecar:build", "Image for mysql helper.")
70+
flag.StringVar(&TestContext.SidecarMysql57Image, "sidecar-mysql57-image", "quay.io/presslabs/mysql-operator-sidecar-mysql57:build", "Image for mysql helper.")
71+
flag.StringVar(&TestContext.SidecarMysql8Image, "sidecar-mysql8-image", "quay.io/presslabs/mysql-operator-sidecar-mysql8:build", "Image for mysql helper.")
7072
flag.StringVar(&TestContext.OrchestratorImage, "orchestrator-image", "quay.io/presslabs/mysql-operator-orchestrator:build", "Image for mysql orchestrator.")
7173

7274
flag.IntVar(&TestContext.TimeoutSeconds, "pod-wait-timeout", 100, "Timeout to wait for a pod to be ready.")

0 commit comments

Comments
 (0)