Skip to content

Commit

Permalink
feat: set quota-backend-bytes to 95% of requested size (#217)
Browse files Browse the repository at this point in the history
- Changed `ENVTEST_K8S_VERSION` to `1.30.0` as there's no tool chains
for version `1.30.1`
- Implemented auto setting `quota-backend-bytes` for requested PVC /
emptyDir size

fixes #211
  • Loading branch information
sircthulhu committed May 30, 2024
1 parent 8db580c commit 349c688
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 1 deletion.
25 changes: 24 additions & 1 deletion internal/controller/factory/statefulset.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@ package factory
import (
"context"
"fmt"
"math"
"strconv"

appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
ctrl "sigs.k8s.io/controller-runtime"
Expand All @@ -33,7 +36,8 @@ import (
)

const (
etcdContainerName = "etcd"
etcdContainerName = "etcd"
defaultBackendQuotaBytesFraction = 0.95
)

func CreateOrUpdateStatefulSet(
Expand Down Expand Up @@ -247,6 +251,25 @@ func generateEtcdCommand() []string {
func generateEtcdArgs(cluster *etcdaenixiov1alpha1.EtcdCluster) []string {
args := []string{}

if value, ok := cluster.Spec.Options["quota-backend-bytes"]; !ok || value == "" {
var size resource.Quantity
if cluster.Spec.Storage.EmptyDir != nil {
if cluster.Spec.Storage.EmptyDir.SizeLimit != nil {
size = *cluster.Spec.Storage.EmptyDir.SizeLimit
}
} else {
size = *cluster.Spec.Storage.VolumeClaimTemplate.Spec.Resources.Requests.Storage()
}
quota := float64(size.Value()) * defaultBackendQuotaBytesFraction
quota = math.Floor(quota)
if quota > 0 {
if cluster.Spec.Options == nil {
cluster.Spec.Options = make(map[string]string, 1)
}
cluster.Spec.Options["quota-backend-bytes"] = strconv.FormatInt(int64(quota), 10)
}
}

for name, value := range cluster.Spec.Options {
flag := "--" + name
if len(value) == 0 {
Expand Down
52 changes: 52 additions & 0 deletions internal/controller/factory/statefulset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,58 @@ var _ = Describe("CreateOrUpdateStatefulSet handler", func() {
"--key2=value2",
}))
})
It("should not override user defined quota-backend-bytes", func() {
etcdCluster := &etcdaenixiov1alpha1.EtcdCluster{
Spec: etcdaenixiov1alpha1.EtcdClusterSpec{
Options: map[string]string{
"quota-backend-bytes": "2147483648", // 2Gi
},
Storage: etcdaenixiov1alpha1.StorageSpec{
EmptyDir: &corev1.EmptyDirVolumeSource{
SizeLimit: ptr.To(resource.MustParse("2Gi")),
},
},
},
}
args := generateEtcdArgs(etcdCluster)
Expect(args).To(ContainElement("--quota-backend-bytes=2147483648"))
})
It("should set quota-backend-bytes to 0.95 of EmptyDir size", func() {
etcdCluster := &etcdaenixiov1alpha1.EtcdCluster{
Spec: etcdaenixiov1alpha1.EtcdClusterSpec{
Storage: etcdaenixiov1alpha1.StorageSpec{
EmptyDir: &corev1.EmptyDirVolumeSource{
SizeLimit: ptr.To(resource.MustParse("2Gi")),
},
},
},
}
args := generateEtcdArgs(etcdCluster)
// 2Gi * 0.95 = 2040109465,6
Expect(args).To(ContainElement("--quota-backend-bytes=2040109465"))
})
It("should set quota-backend-bytes to 0.95 of PVC size", func() {
etcdCluster := &etcdaenixiov1alpha1.EtcdCluster{
Spec: etcdaenixiov1alpha1.EtcdClusterSpec{
Storage: etcdaenixiov1alpha1.StorageSpec{
VolumeClaimTemplate: etcdaenixiov1alpha1.EmbeddedPersistentVolumeClaim{
Spec: corev1.PersistentVolumeClaimSpec{
AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce},
StorageClassName: ptr.To("local-path"),
Resources: corev1.VolumeResourceRequirements{
Requests: map[corev1.ResourceName]resource.Quantity{
corev1.ResourceStorage: resource.MustParse("2Gi"),
},
},
},
},
},
},
}
args := generateEtcdArgs(etcdCluster)
// 2Gi * 0.95 = 2040109465,6
Expect(args).To(ContainElement("--quota-backend-bytes=2040109465"))
})
})

/* TODO: all of the following tests validate merging logic, but all merging logic is now handled externally.
Expand Down

0 comments on commit 349c688

Please sign in to comment.