Skip to content

Commit 5305967

Browse files
committed
Rollback to v1beta1 (#19)
1 parent 6282de7 commit 5305967

File tree

56 files changed

+653
-3016
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+653
-3016
lines changed

Makefile

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ run: generate fmt vet
3838

3939
# Generate manifests e.g. CRD, RBAC etc.
4040
manifests: controller-gen
41-
$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./api/v1beta2/..." output:crd:artifacts:config=config/crd/bases
41+
$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./api/v1beta1/..." output:crd:artifacts:config=config/crd/bases
4242
kubectl kustomize config/crd > config/crd/bases/patched_crd.yaml
4343
mv config/crd/bases/patched_crd.yaml config/crd/bases/flinkoperator.k8s.io_flinkclusters.yaml
4444
go mod tidy
@@ -53,7 +53,7 @@ vet:
5353

5454
# Generate code
5555
generate: controller-gen
56-
$(CONTROLLER_GEN) object:headerFile=./hack/boilerplate.go.txt paths=./api/v1beta2/...
56+
$(CONTROLLER_GEN) object:headerFile=./hack/boilerplate.go.txt paths=./api/v1beta1/...
5757

5858
# find or download controller-gen
5959
# download controller-gen if necessary

PROJECT

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ domain: k8s.io
33
repo: github.com/spotify/flink-on-k8s-operator
44
resources:
55
- group: flinkoperator
6-
version: v1beta2
6+
version: v1beta1
77
kind: FlinkCluster

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ The operator is still under active development, there is no Helm chart available
7272

7373
### API
7474

75-
* [Custom Resource Definition (v1beta2)](docs/crd.md)
75+
* [Custom Resource Definition (v1beta1)](docs/crd.md)
7676

7777
### How to
7878

api/v1beta1/flinkcluster_default.go

+37-16
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,25 @@ limitations under the License.
1717
package v1beta1
1818

1919
import (
20+
"github.com/hashicorp/go-version"
2021
corev1 "k8s.io/api/core/v1"
2122
"k8s.io/apimachinery/pkg/api/resource"
2223
)
2324

25+
var (
26+
v10, _ = version.NewVersion("1.10")
27+
)
28+
2429
// Sets default values for unspecified FlinkCluster properties.
2530
func _SetDefault(cluster *FlinkCluster) {
2631
if cluster.Spec.RecreateOnUpdate == nil {
2732
cluster.Spec.RecreateOnUpdate = new(bool)
2833
*cluster.Spec.RecreateOnUpdate = true
2934
}
3035
_SetImageDefault(&cluster.Spec.Image)
31-
_SetJobManagerDefault(&cluster.Spec.JobManager)
32-
_SetTaskManagerDefault(&cluster.Spec.TaskManager)
36+
flinkVersion, _ := version.NewVersion(cluster.Spec.FlinkVersion)
37+
_SetJobManagerDefault(&cluster.Spec.JobManager, flinkVersion)
38+
_SetTaskManagerDefault(&cluster.Spec.TaskManager, flinkVersion)
3339
_SetJobDefault(cluster.Spec.Job)
3440
_SetHadoopConfigDefault(cluster.Spec.HadoopConfig)
3541
}
@@ -40,7 +46,7 @@ func _SetImageDefault(imageSpec *ImageSpec) {
4046
}
4147
}
4248

43-
func _SetJobManagerDefault(jmSpec *JobManagerSpec) {
49+
func _SetJobManagerDefault(jmSpec *JobManagerSpec, flinkVersion *version.Version) {
4450
if jmSpec.Replicas == nil {
4551
jmSpec.Replicas = new(int32)
4652
*jmSpec.Replicas = 1
@@ -70,16 +76,24 @@ func _SetJobManagerDefault(jmSpec *JobManagerSpec) {
7076
jmSpec.Ports.UI = new(int32)
7177
*jmSpec.Ports.UI = 8081
7278
}
73-
if jmSpec.MemoryOffHeapMin.Format == "" {
74-
jmSpec.MemoryOffHeapMin = *resource.NewScaledQuantity(600, 6) // 600MB
75-
}
76-
if jmSpec.MemoryOffHeapRatio == nil {
77-
jmSpec.MemoryOffHeapRatio = new(int32)
78-
*jmSpec.MemoryOffHeapRatio = 25
79+
80+
if flinkVersion == nil || flinkVersion.LessThan(v10) {
81+
if jmSpec.MemoryOffHeapMin.Format == "" {
82+
jmSpec.MemoryOffHeapMin = *resource.NewScaledQuantity(600, 6) // 600MB
83+
}
84+
if jmSpec.MemoryOffHeapRatio == nil {
85+
jmSpec.MemoryOffHeapRatio = new(int32)
86+
*jmSpec.MemoryOffHeapRatio = 25
87+
}
88+
} else {
89+
if jmSpec.MemoryProcessRatio == nil {
90+
jmSpec.MemoryProcessRatio = new(int32)
91+
*jmSpec.MemoryProcessRatio = 80
92+
}
7993
}
8094
}
8195

82-
func _SetTaskManagerDefault(tmSpec *TaskManagerSpec) {
96+
func _SetTaskManagerDefault(tmSpec *TaskManagerSpec, flinkVersion *version.Version) {
8397
if tmSpec.Ports.Data == nil {
8498
tmSpec.Ports.Data = new(int32)
8599
*tmSpec.Ports.Data = 6121
@@ -92,12 +106,19 @@ func _SetTaskManagerDefault(tmSpec *TaskManagerSpec) {
92106
tmSpec.Ports.Query = new(int32)
93107
*tmSpec.Ports.Query = 6125
94108
}
95-
if tmSpec.MemoryOffHeapMin.Format == "" {
96-
tmSpec.MemoryOffHeapMin = *resource.NewScaledQuantity(600, 6) // 600MB
97-
}
98-
if tmSpec.MemoryOffHeapRatio == nil {
99-
tmSpec.MemoryOffHeapRatio = new(int32)
100-
*tmSpec.MemoryOffHeapRatio = 25
109+
if flinkVersion == nil || flinkVersion.LessThan(v10) {
110+
if tmSpec.MemoryOffHeapMin.Format == "" {
111+
tmSpec.MemoryOffHeapMin = *resource.NewScaledQuantity(600, 6) // 600MB
112+
}
113+
if tmSpec.MemoryOffHeapRatio == nil {
114+
tmSpec.MemoryOffHeapRatio = new(int32)
115+
*tmSpec.MemoryOffHeapRatio = 25
116+
}
117+
} else {
118+
if tmSpec.MemoryProcessRatio == nil {
119+
tmSpec.MemoryProcessRatio = new(int32)
120+
*tmSpec.MemoryProcessRatio = 80
121+
}
101122
}
102123
}
103124

api/v1beta2/flinkcluster_default_test.go api/v1beta1/flinkcluster_default_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package v1beta2
17+
package v1beta1
1818

1919
import (
2020
"testing"

api/v1beta1/flinkcluster_types.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,6 @@ type JobManagerSpec struct {
190190
// More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
191191
Resources corev1.ResourceRequirements `json:"resources,omitempty"`
192192

193-
// TODO: Memory calculation would be change. Let's watch the issue FLINK-13980.
194-
195193
// Percentage of off-heap memory in containers, as a safety margin to avoid OOM kill, default: 25
196194
MemoryOffHeapRatio *int32 `json:"memoryOffHeapRatio,omitempty"`
197195

@@ -200,6 +198,9 @@ type JobManagerSpec struct {
200198
// More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory
201199
MemoryOffHeapMin resource.Quantity `json:"memoryOffHeapMin,omitempty"`
202200

201+
// For Flink 1.10+. Percentage of memory process, as a safety margin to avoid OOM kill, default: 20
202+
MemoryProcessRatio *int32 `json:"memoryProcessRatio,omitempty"`
203+
203204
// Volumes in the JobManager pod.
204205
Volumes []corev1.Volume `json:"volumes,omitempty"`
205206

@@ -273,6 +274,9 @@ type TaskManagerSpec struct {
273274
// More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#meaning-of-memory
274275
MemoryOffHeapMin resource.Quantity `json:"memoryOffHeapMin,omitempty"`
275276

277+
// For Flink 1.10+. Percentage of process memory, as a safety margin to avoid OOM kill, default: 20
278+
MemoryProcessRatio *int32 `json:"memoryProcessRatio,omitempty"`
279+
276280
// Volumes in the TaskManager pods.
277281
// More info: https://kubernetes.io/docs/concepts/storage/volumes/
278282
Volumes []corev1.Volume `json:"volumes,omitempty"`
@@ -418,6 +422,9 @@ type JobSpec struct {
418422

419423
// FlinkClusterSpec defines the desired state of FlinkCluster
420424
type FlinkClusterSpec struct {
425+
// The version of Flink to be managed. This version must match the version in the image.
426+
FlinkVersion string `json:"flinkVersion"`
427+
421428
// Flink image spec for the cluster's components.
422429
Image ImageSpec `json:"image"`
423430

api/v1beta2/flinkcluster_types_test.go api/v1beta1/flinkcluster_types_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package v1beta2
17+
package v1beta1
1818

1919
import (
2020
. "github.com/onsi/ginkgo"

api/v1beta1/flinkcluster_validate.go

+69-26
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"reflect"
2323
"strings"
2424

25+
"github.com/hashicorp/go-version"
2526
"k8s.io/apimachinery/pkg/api/resource"
2627

2728
corev1 "k8s.io/api/core/v1"
@@ -47,6 +48,15 @@ func (v *Validator) ValidateCreate(cluster *FlinkCluster) error {
4748
if err != nil {
4849
return err
4950
}
51+
52+
var flinkVersion *version.Version
53+
if len(cluster.Spec.FlinkVersion) != 0 {
54+
flinkVersion, err = version.NewVersion(cluster.Spec.FlinkVersion)
55+
if err != nil {
56+
return err
57+
}
58+
}
59+
5060
err = v.validateHadoopConfig(cluster.Spec.HadoopConfig)
5161
if err != nil {
5262
return err
@@ -59,11 +69,11 @@ func (v *Validator) ValidateCreate(cluster *FlinkCluster) error {
5969
if err != nil {
6070
return err
6171
}
62-
err = v.validateJobManager(&cluster.Spec.JobManager)
72+
err = v.validateJobManager(flinkVersion, &cluster.Spec.JobManager)
6373
if err != nil {
6474
return err
6575
}
66-
err = v.validateTaskManager(&cluster.Spec.TaskManager)
76+
err = v.validateTaskManager(flinkVersion, &cluster.Spec.TaskManager)
6777
if err != nil {
6878
return err
6979
}
@@ -282,7 +292,7 @@ func (v *Validator) validateImage(imageSpec *ImageSpec) error {
282292
return nil
283293
}
284294

285-
func (v *Validator) validateJobManager(jmSpec *JobManagerSpec) error {
295+
func (v *Validator) validateJobManager(flinkVersion *version.Version, jmSpec *JobManagerSpec) error {
286296
var err error
287297

288298
// Replicas.
@@ -330,22 +340,39 @@ func (v *Validator) validateJobManager(jmSpec *JobManagerSpec) error {
330340
return err
331341
}
332342

333-
// MemoryOffHeapRatio
334-
err = v.validateMemoryOffHeapRatio(jmSpec.MemoryOffHeapRatio, "jobmanager")
335-
if err != nil {
336-
return err
337-
}
343+
if flinkVersion == nil || flinkVersion.LessThan(v10) {
344+
if jmSpec.MemoryProcessRatio != nil {
345+
return fmt.Errorf("MemoryProcessRatio config cannot be used with flinkVersion < 1.11', use " +
346+
"memoryOffHeapRatio instead")
347+
}
338348

339-
// MemoryOffHeapMin
340-
err = v.validateMemoryOffHeapMin(&jmSpec.MemoryOffHeapMin, jmSpec.Resources.Limits.Memory(), "jobmanager")
341-
if err != nil {
342-
return err
349+
// MemoryOffHeapRatio
350+
err = v.validateRatio(jmSpec.MemoryOffHeapRatio, "jobmanager", "memoryOffHeapRatio")
351+
if err != nil {
352+
return err
353+
}
354+
355+
// MemoryOffHeapMin
356+
err = v.validateMemoryOffHeapMin(&jmSpec.MemoryOffHeapMin, jmSpec.Resources.Limits.Memory(), "jobmanager")
357+
if err != nil {
358+
return err
359+
}
360+
} else {
361+
if jmSpec.MemoryOffHeapRatio != nil || !jmSpec.MemoryOffHeapMin.IsZero() {
362+
return fmt.Errorf("MemoryOffHeapRatio or MemoryOffHeapMin config cannot be used with flinkVersion >= 1.11'; " +
363+
"use memoryProcessRatio istead")
364+
}
365+
// MemoryProcessRatio
366+
err = v.validateRatio(jmSpec.MemoryProcessRatio, "jobmanager", "memoryProcessRatio")
367+
if err != nil {
368+
return err
369+
}
343370
}
344371

345372
return nil
346373
}
347374

348-
func (v *Validator) validateTaskManager(tmSpec *TaskManagerSpec) error {
375+
func (v *Validator) validateTaskManager(flinkVersion *version.Version, tmSpec *TaskManagerSpec) error {
349376
// Replicas.
350377
if tmSpec.Replicas < 1 {
351378
return fmt.Errorf("invalid TaskManager replicas, it must >= 1")
@@ -376,16 +403,33 @@ func (v *Validator) validateTaskManager(tmSpec *TaskManagerSpec) error {
376403
return err
377404
}
378405

379-
// MemoryOffHeapRatio
380-
err = v.validateMemoryOffHeapRatio(tmSpec.MemoryOffHeapRatio, "taskmanager")
381-
if err != nil {
382-
return err
383-
}
406+
if flinkVersion == nil || flinkVersion.LessThan(v10) {
407+
if tmSpec.MemoryProcessRatio != nil {
408+
return fmt.Errorf("MemoryProcessRatio config cannot be used with flinkVersion < 1.11', use " +
409+
"memoryOffHeapRatio instead")
410+
}
384411

385-
// MemoryOffHeapMin
386-
err = v.validateMemoryOffHeapMin(&tmSpec.MemoryOffHeapMin, tmSpec.Resources.Limits.Memory(), "taskmanager")
387-
if err != nil {
388-
return err
412+
// MemoryOffHeapRatio
413+
err = v.validateRatio(tmSpec.MemoryOffHeapRatio, "taskmanager", "memoryOffHeapRatio")
414+
if err != nil {
415+
return err
416+
}
417+
418+
// MemoryOffHeapMin
419+
err = v.validateMemoryOffHeapMin(&tmSpec.MemoryOffHeapMin, tmSpec.Resources.Limits.Memory(), "taskmanager")
420+
if err != nil {
421+
return err
422+
}
423+
} else {
424+
if tmSpec.MemoryOffHeapRatio != nil || !tmSpec.MemoryOffHeapMin.IsZero() {
425+
return fmt.Errorf("MemoryOffHeapRatio or MemoryOffHeapMin config cannot be used with flinkVersion >= 1.11'; " +
426+
"use memoryProcessRatio istead")
427+
}
428+
// MemoryProcessRatio
429+
err = v.validateRatio(tmSpec.MemoryProcessRatio, "taskmanager", "memoryProcessRatio")
430+
if err != nil {
431+
return err
432+
}
389433
}
390434

391435
return nil
@@ -487,10 +531,9 @@ func (v *Validator) validateCleanupAction(
487531
return nil
488532
}
489533

490-
func (v *Validator) validateMemoryOffHeapRatio(
491-
offHeapRatio *int32, component string) error {
492-
if offHeapRatio == nil || *offHeapRatio > 100 || *offHeapRatio < 0 {
493-
return fmt.Errorf("invalid %v memoryOffHeapRatio, it must be between 0 and 100", component)
534+
func (v *Validator) validateRatio(ratio *int32, component, property string) error {
535+
if ratio == nil || *ratio > 100 || *ratio < 0 {
536+
return fmt.Errorf("invalid %v %v, it must be between 0 and 100", component, property)
494537
}
495538
return nil
496539
}

api/v1beta2/flinkcluster_validate_test.go api/v1beta1/flinkcluster_validate_test.go

+2-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package v1beta2
17+
package v1beta1
1818

1919
import (
2020
"encoding/json"
@@ -104,9 +104,7 @@ func TestInvalidImageSpec(t *testing.T) {
104104
Name: "mycluster",
105105
Namespace: "default",
106106
},
107-
Spec: FlinkClusterSpec{
108-
FlinkVersion: "1.8",
109-
},
107+
Spec: FlinkClusterSpec{},
110108
}
111109
var err = validator.ValidateCreate(&cluster)
112110
var expectedErr = "image name is unspecified"
@@ -118,7 +116,6 @@ func TestInvalidImageSpec(t *testing.T) {
118116
Namespace: "default",
119117
},
120118
Spec: FlinkClusterSpec{
121-
FlinkVersion: "1.8",
122119
Image: ImageSpec{
123120
Name: "flink:1.8.1",
124121
PullPolicy: corev1.PullPolicy("XXX"),

api/v1beta1/flinkcluster_webhook.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ This marker is responsible for generating a mutating webhook manifest.
4141
The meaning of each marker can be found [here](/reference/markers/webhook.md).
4242
*/
4343

44-
// +kubebuilder:webhook:webhookVersions=v1beta1,path=/mutate-flinkoperator-k8s-io-v1beta1-flinkcluster,mutating=true,failurePolicy=fail,groups=flinkoperator.k8s.io,resources=flinkclusters,verbs=create;update,versions=v1beta1,name=mflinkcluster.flinkoperator.k8s.io
44+
// +kubebuilder:webhook:webhookVersions=v1beta1,path=/mutate-flinkoperator-k8s-io-v1beta2-flinkcluster,mutating=true,failurePolicy=fail,groups=flinkoperator.k8s.io,resources=flinkclusters,verbs=create;update,versions=v1beta2,name=mflinkcluster.flinkoperator.k8s.io
4545

4646
/*
4747
We use the `webhook.Defaulter` interface to set defaults to our CRD.
@@ -63,7 +63,7 @@ func (cluster *FlinkCluster) Default() {
6363
This marker is responsible for generating a validating webhook manifest.
6464
*/
6565

66-
// +kubebuilder:webhook:webhookVersions=v1beta1,path=/validate-flinkoperator-k8s-io-v1beta1-flinkcluster,mutating=false,failurePolicy=fail,groups=flinkoperator.k8s.io,resources=flinkclusters,verbs=create;update,versions=v1beta1,name=vflinkcluster.flinkoperator.k8s.io
66+
// +kubebuilder:webhook:webhookVersions=v1beta1,path=/validate-flinkoperator-k8s-io-v1beta2-flinkcluster,mutating=false,failurePolicy=fail,groups=flinkoperator.k8s.io,resources=flinkclusters,verbs=create;update,versions=v1beta2,name=vflinkcluster.flinkoperator.k8s.io
6767

6868
var _ webhook.Validator = &FlinkCluster{}
6969
var validator = Validator{}

0 commit comments

Comments
 (0)