Skip to content

Commit

Permalink
init unAvailable func in podlifecycle and update ruleset sample (#50)
Browse files Browse the repository at this point in the history
* init unAvailable func and update ruleset sample

* fix ut
  • Loading branch information
Eikykun committed Aug 22, 2023
1 parent bc4476b commit f3bf107
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 14 deletions.
8 changes: 7 additions & 1 deletion config/samples/apps_v1alpha1_ruleset.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,10 @@ metadata:
app.kubernetes.io/created-by: kusionstack
name: ruleset-sample
spec:
# TODO(user): Add fields here
rules:
- availablePolicy:
maxUnavailableValue: 50%
name: maxUnavailable
selector:
matchLabels:
app: foo
8 changes: 6 additions & 2 deletions pkg/controllers/podopslifecycle/podopslifecycle_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import (

"kusionstack.io/kafed/apis/apps/v1alpha1"
"kusionstack.io/kafed/pkg/controllers/ruleset"
"kusionstack.io/kafed/pkg/controllers/utils"
"kusionstack.io/kafed/pkg/controllers/utils/expectations"
"kusionstack.io/kafed/pkg/log"
)
Expand Down Expand Up @@ -89,7 +90,7 @@ func NewReconciler(mgr manager.Manager) *ReconcilePodOpsLifecycle {
recorder: mgr.GetEventRecorderFor(controllerName),
expectation: expectation,
}
r.registerStages()
r.initRuleSetManager()

return r
}
Expand Down Expand Up @@ -288,7 +289,7 @@ func (r *ReconcilePodOpsLifecycle) addLabels(ctx context.Context, pod *corev1.Po
})
}

func (r *ReconcilePodOpsLifecycle) registerStages() {
func (r *ReconcilePodOpsLifecycle) initRuleSetManager() {
r.ruleSetManager.RegisterStage(v1alpha1.PodOpsLifecyclePreCheckStage, func(po client.Object) bool {
labels := po.GetLabels()
return labels != nil && labelHasPrefix(labels, v1alpha1.PodPreCheckLabelPrefix)
Expand All @@ -297,6 +298,9 @@ func (r *ReconcilePodOpsLifecycle) registerStages() {
labels := po.GetLabels()
return labels != nil && labelHasPrefix(labels, v1alpha1.PodPostCheckLabelPrefix)
})
ruleset.AddUnAvailableFunc(func(po *corev1.Pod) (bool, *int64) {
return !utils.IsServiceAvailable(po), nil
})
}

func labelHasPrefix(labels map[string]string, prefix string) bool {
Expand Down
8 changes: 4 additions & 4 deletions pkg/controllers/ruleset/processor/rules/available.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func (r *AvailableRuler) Filter(ruleSet *appsv1alpha1.RuleSet, targets map[strin
// TODO: UncreatedReplicas
// allowUnavailable -= uncreatedReplicas
allAvailableSize := 0
var minTimeLeft *int32
var minTimeLeft *int64
// filter unavailable pods
for podName := range effectiveTargets {
pod := targets[podName]
Expand Down Expand Up @@ -150,9 +150,9 @@ func (r *AvailableRuler) getPodReplicaSetReplication(controllerRef *metav1.Owner
return int(*rs.Spec.Replicas), true, nil
}

func processUnavailableFunc(pod *corev1.Pod) (bool, *int32) {
func processUnavailableFunc(pod *corev1.Pod) (bool, *int64) {
isUnavailable := false
var minInterval *int32
var minInterval *int64
for _, f := range register.UnAvailableFuncList {
unavailable, interval := f(pod)
if !unavailable {
Expand All @@ -168,7 +168,7 @@ func processUnavailableFunc(pod *corev1.Pod) (bool, *int32) {
return isUnavailable, minInterval
}

func min(a, b *int32) *int32 {
func min(a, b *int64) *int64 {
if a == nil {
return b
}
Expand Down
8 changes: 2 additions & 6 deletions pkg/controllers/ruleset/register/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,10 @@ var (
UnAvailableFuncList []UnAvailableFunc
)

func AddUnAvailableFunc(f func(pod *corev1.Pod) (bool, *int32)) {
UnAvailableFuncList = append(UnAvailableFuncList, f)
}

type UnAvailableFunc func(pod *corev1.Pod) (bool, *int32)
type UnAvailableFunc func(pod *corev1.Pod) (bool, *int64)

func DefaultInit() {
UnAvailableFuncList = append(UnAvailableFuncList, func(pod *corev1.Pod) (bool, *int32) {
UnAvailableFuncList = append(UnAvailableFuncList, func(pod *corev1.Pod) (bool, *int64) {
return !utils.IsPodReady(pod) || utils.IsPodTerminal(pod), nil
})
}
5 changes: 5 additions & 0 deletions pkg/controllers/ruleset/ruleset_controller_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package ruleset
import (
"context"

corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/util/workqueue"
Expand Down Expand Up @@ -78,6 +79,10 @@ func RegisterListenChan(ctx context.Context) *source.Channel {
return &source.Channel{Source: ch}
}

func AddUnAvailableFunc(f func(pod *corev1.Pod) (bool, *int64)) {
register.UnAvailableFuncList = append(register.UnAvailableFuncList, f)
}

func newRulesetManager() ManagerInterface {
return &rsManager{
register: register.DefaultRegister(),
Expand Down
2 changes: 1 addition & 1 deletion pkg/controllers/ruleset/ruleset_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ const (

func initRulesetManager() {

register.UnAvailableFuncList = append(register.UnAvailableFuncList, func(pod *corev1.Pod) (bool, *int32) {
register.UnAvailableFuncList = append(register.UnAvailableFuncList, func(pod *corev1.Pod) (bool, *int64) {
if pod.GetLabels() == nil {
return false, nil
}
Expand Down

0 comments on commit f3bf107

Please sign in to comment.