Skip to content

Commit

Permalink
Merge pull request #615 from planetscale/backport-610-to-release-2.12
Browse files Browse the repository at this point in the history
[release-2.12]  Support customisation of docker images per-keyspace
  • Loading branch information
frouioui authored Oct 14, 2024
2 parents f1ebc37 + 43c9efa commit c16dd3d
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 19 deletions.
8 changes: 8 additions & 0 deletions deploy/crds/planetscale.com_vitessclusters.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1181,6 +1181,14 @@ spec:
mysql80Compatible:
type: string
type: object
mysqldExporter:
type: string
vtbackup:
type: string
vtorc:
type: string
vttablet:
type: string
type: object
name:
maxLength: 63
Expand Down
57 changes: 56 additions & 1 deletion docs/api/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -6009,7 +6009,18 @@ <h3 id="planetscale.com/v2.VitessKeyspaceTemplateImages">VitessKeyspaceTemplateI
</p>
<p>
<p>VitessKeyspaceTemplateImages specifies user-definable container images to
use for this keyspace.</p>
use for this keyspace. The images defined here by the user will override
those defined at the top-level in VitessCluster.spec.images.</p>
<p>While this field allows you to set a different Vitess version for some
components than the version defined at the top level, it is important to
note that Vitess only ensures compatibility between one version and the
next and previous one. For instance: N is only guaranteed to be compatible
with N+1 and N-1. Do be careful when specifying multiple versions across
your cluster so that they respect this compatibility rule.</p>
<p>Note: this structure is a copy of VitessKeyspaceImages, once we have gotten
rid of MysqldImage and replaced it by MysqldImageNew (planned for v2.15), we
should be able to remove VitessKeyspaceTemplateImages entirely and just use
VitessKeyspaceImages instead as it contains exactly the same fields.</p>
</p>
<table class="table table-striped">
<thead class="thead-dark">
Expand All @@ -6021,6 +6032,39 @@ <h3 id="planetscale.com/v2.VitessKeyspaceTemplateImages">VitessKeyspaceTemplateI
<tbody>
<tr>
<td>
<code>vttablet</code></br>
<em>
string
</em>
</td>
<td>
<p>Vttablet is the container image (including version tag) to use for Vitess Tablet instances.</p>
</td>
</tr>
<tr>
<td>
<code>vtorc</code></br>
<em>
string
</em>
</td>
<td>
<p>Vtorc is the container image (including version tag) to use for Vitess Orchestrator instances.</p>
</td>
</tr>
<tr>
<td>
<code>vtbackup</code></br>
<em>
string
</em>
</td>
<td>
<p>Vtbackup is the container image (including version tag) to use for Vitess Backup jobs.</p>
</td>
</tr>
<tr>
<td>
<code>mysqld</code></br>
<em>
<a href="#planetscale.com/v2.MysqldImageNew">
Expand All @@ -6035,6 +6079,17 @@ <h3 id="planetscale.com/v2.VitessKeyspaceTemplateImages">VitessKeyspaceTemplateI
mysqld running alongside each tablet.</p>
</td>
</tr>
<tr>
<td>
<code>mysqldExporter</code></br>
<em>
string
</em>
</td>
<td>
<p>MysqldExporter specifies the container image for mysqld-exporter.</p>
</td>
</tr>
</tbody>
</table>
<h3 id="planetscale.com/v2.VitessKeyspaceTurndownPolicy">VitessKeyspaceTurndownPolicy
Expand Down
12 changes: 12 additions & 0 deletions pkg/apis/planetscale/v2/vitesskeyspace_defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,20 @@ func DefaultVitessKeyspaceImages(dst *VitessKeyspaceImages, clusterDefaults *Vit
// MergeVitessKeyspaceTemplateImages takes non-empty image values from a non-nil src
// and sets them on dst.
func MergeVitessKeyspaceTemplateImages(dst *VitessKeyspaceImages, src *VitessKeyspaceTemplateImages) {
if src.Vttablet != "" {
dst.Vttablet = src.Vttablet
}
if src.Vtorc != "" {
dst.Vtorc = src.Vtorc
}
if src.Vtbackup != "" {
dst.Vtbackup = src.Vtbackup
}
if src.Mysqld != nil {
dst.Mysqld.Mysql56Compatible = src.Mysqld.Mysql56Compatible
dst.Mysqld.Mysql80Compatible = src.Mysqld.Mysql80Compatible
}
if src.MysqldExporter != "" {
dst.MysqldExporter = src.MysqldExporter
}
}
23 changes: 22 additions & 1 deletion pkg/apis/planetscale/v2/vitesskeyspace_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,13 +188,34 @@ type VitessKeyspaceTemplate struct {
}

// VitessKeyspaceTemplateImages specifies user-definable container images to
// use for this keyspace.
// use for this keyspace. The images defined here by the user will override
// those defined at the top-level in VitessCluster.spec.images.
//
// While this field allows you to set a different Vitess version for some
// components than the version defined at the top level, it is important to
// note that Vitess only ensures compatibility between one version and the
// next and previous one. For instance: N is only guaranteed to be compatible
// with N+1 and N-1. Do be careful when specifying multiple versions across
// your cluster so that they respect this compatibility rule.
//
// Note: this structure is a copy of VitessKeyspaceImages, once we have gotten
// rid of MysqldImage and replaced it by MysqldImageNew (planned for v2.15), we
// should be able to remove VitessKeyspaceTemplateImages entirely and just use
// VitessKeyspaceImages instead as it contains exactly the same fields.
type VitessKeyspaceTemplateImages struct {
// Vttablet is the container image (including version tag) to use for Vitess Tablet instances.
Vttablet string `json:"vttablet,omitempty"`
// Vtorc is the container image (including version tag) to use for Vitess Orchestrator instances.
Vtorc string `json:"vtorc,omitempty"`
// Vtbackup is the container image (including version tag) to use for Vitess Backup jobs.
Vtbackup string `json:"vtbackup,omitempty"`
// Mysqld specifies the container image to use for mysqld, as well as
// declaring which MySQL flavor setting in Vitess the image is
// compatible with. Only one flavor image may be provided at a time.
// mysqld running alongside each tablet.
Mysqld *MysqldImageNew `json:"mysqld,omitempty"`
// MysqldExporter specifies the container image for mysqld-exporter.
MysqldExporter string `json:"mysqldExporter,omitempty"`
}

// VitessOrchestratorSpec specifies deployment parameters for vtorc.
Expand Down
51 changes: 34 additions & 17 deletions test/endtoend/operator/operator-latest.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
Expand Down Expand Up @@ -2490,6 +2489,24 @@ spec:
type: string
durabilityPolicy:
type: string
images:
properties:
mysqld:
properties:
mysql56Compatible:
type: string
mysql80Compatible:
type: string
type: object
mysqldExporter:
type: string
vtbackup:
type: string
vtorc:
type: string
vttablet:
type: string
type: object
name:
maxLength: 63
minLength: 1
Expand Down Expand Up @@ -6533,6 +6550,22 @@ subjects:
- kind: ServiceAccount
name: vitess-operator
---
apiVersion: scheduling.k8s.io/v1
description: Vitess components (vttablet, vtgate, vtctld, etcd)
globalDefault: false
kind: PriorityClass
metadata:
name: vitess
value: 1000
---
apiVersion: scheduling.k8s.io/v1
description: The vitess-operator control plane.
globalDefault: false
kind: PriorityClass
metadata:
name: vitess-operator-control-plane
value: 5000
---
apiVersion: apps/v1
kind: Deployment
metadata:
Expand Down Expand Up @@ -6583,19 +6616,3 @@ spec:
memory: 128Mi
priorityClassName: vitess-operator-control-plane
serviceAccountName: vitess-operator
---
apiVersion: scheduling.k8s.io/v1
description: The vitess-operator control plane.
globalDefault: false
kind: PriorityClass
metadata:
name: vitess-operator-control-plane
value: 5000
---
apiVersion: scheduling.k8s.io/v1
description: Vitess components (vttablet, vtgate, vtctld, etcd)
globalDefault: false
kind: PriorityClass
metadata:
name: vitess
value: 1000

0 comments on commit c16dd3d

Please sign in to comment.