Skip to content

enchancement: auto generate shardingconfig #8

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!-- Thank you for contributing to Karbour!
<!-- Thank you for contributing to Kridge!

Note:

Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ bin/
# Dependency directories (remove the comment below to include it)
# vendor/

.idea/
.idea/**
demo/**
testdemo/**
43 changes: 20 additions & 23 deletions config/crd/bases/kridge.kusionstack.io_shardingconfigs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -114,37 +114,35 @@ spec:
type: array
root:
properties:
auto:
description: Auto is config to automatically generate child ShardingConfig
properties:
everyShardReplicas:
type: integer
shardingSize:
type: integer
required:
- everyShardReplicas
- shardingSize
type: object
canary:
description: Canary is canary shard config
properties:
inNamespaces:
items:
type: string
type: array
inNumbers:
inShardHash:
items:
type: string
type: array
replicas:
type: integer
required:
- replicas
type: object
canaryReplicas:
type: integer
disable:
type: boolean
manual:
items:
properties:
id:
type: integer
numbers:
items:
type: string
type: array
required:
- id
- numbers
type: object
type: array
normalReplicas:
type: integer
prefix:
type: string
resourceSelector:
Expand Down Expand Up @@ -214,12 +212,11 @@ spec:
x-kubernetes-map-type: atomic
type: object
type: array
size:
type: integer
targetStatefulSet:
type: string
type:
type: string
required:
- prefix
- targetStatefulSet
type: object
selector:
description: Selector is a label query over pods of this configuration.
Expand Down
27 changes: 27 additions & 0 deletions config/default/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@

namespace: kridge
bases:
- ../crd
- ../rbac
- ../manager
- ../webhook

patchesStrategicMerge:

# Protect the /metrics endpoint by putting it behind auth.
# Only one of manager_auth_proxy_patch.yaml and
# manager_prometheus_metrics_patch.yaml should be enabled.
# - manager_auth_proxy_patch.yaml
# If you want your controller-manager to expose the /metrics
# endpoint w/o any authn/z, uncomment the following line and
# comment manager_auth_proxy_patch.yaml.
# Only one of manager_auth_proxy_patch.yaml and
# manager_prometheus_metrics_patch.yaml should be enabled.
#- manager_prometheus_metrics_patch.yaml

#vars:
#- name: WEBHOOK_SECRET_NAME
# objref:
# kind: Secret
# name: webhook-server-secret
# apiVersion: v1
32 changes: 32 additions & 0 deletions config/demo/shardingconfig-auto.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
apiVersion: kridge.kusionstack.io/v1alpha1
kind: ShardingConfig
metadata:
name: sharding-root
namespace: operator-demo
spec:
root:
prefix: operator-demo
targetStatefulSet: operator-demo
canary:
replicas: 1
inNamespaces:
- ns-canary
auto:
everyShardReplicas: 2
shardingSize: 2
resourceSelector:
- objectSelector:
relateResources:
- apiGroups:
- '*'
resources:
- pods
- services
controller:
leaderElectionName: operator-leader
selector:
matchExpressions:
- key: statefulset.kubernetes.io/pod-name
operator: In
values:
- operator-demo-0
30 changes: 14 additions & 16 deletions config/manager/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ spec:
spec:
containers:
- args:
- --logtostderr=true
- --v=4
- --leader-election-namespace=kridge
- --proxy-image=${proxy-image}
- --proxy-cpu=1
- --proxy-memory=2Gi
- --proxy-ephemeral-storage=6Gi
- --leader-election-lease-duration-seconds=15
- --leader-election-renew-deadline-seconds=10
- --logtostderr=true
- --v=4
- --leader-election-namespace=kridge
- --proxy-image=kusionstack/kridge-proxy:latest
- --proxy-cpu=100m
- --proxy-memory=100Mi
- --proxy-ephemeral-storage=100Mi
- --leader-election-lease-duration-seconds=15
- --leader-election-renew-deadline-seconds=10
command:
- /manager
env:
Expand All @@ -55,7 +55,7 @@ spec:
value: secret
- name: WATCH_ON_LIMIT
value: 'true'
image: ${manager-image}
image: kusionstack/kridge-manager:latest
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: 3
Expand All @@ -80,13 +80,11 @@ spec:
timeoutSeconds: 2
resources:
limits:
cpu: '4'
memory: 8Gi
ephemeral-storage: 30Gi
cpu: 500m
memory: 128Mi
requests:
cpu: '4'
memory: 8Gi
ephemeral-storage: 30Gi
cpu: 10m
memory: 64Mi
securityContext:
allowPrivilegeEscalation: false
terminationMessagePath: /dev/termination-log
Expand Down
4 changes: 1 addition & 3 deletions config/manager/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
#apiVersion: kustomize.config.k8s.io/v1beta1
#kind: Kustomization
resources:
- service.yaml
- sharding_resource.yaml
- deployment.yaml
- deployment.yaml
2 changes: 2 additions & 0 deletions docs/demo.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Demo

2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ require (
golang.org/x/crypto v0.5.0 // indirect
golang.org/x/mod v0.6.0 // indirect
golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b // indirect
golang.org/x/sys v0.5.0 // indirect
golang.org/x/sys v0.6.0 // indirect
golang.org/x/term v0.5.0 // indirect
golang.org/x/text v0.7.0 // indirect
golang.org/x/tools v0.2.0 // indirect
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -563,8 +563,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
Expand Down
70 changes: 37 additions & 33 deletions pkg/apis/kridge/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,47 +16,51 @@ limitations under the License.

package kridge

// Environments
const (
EnvEnableWebhookServer = "ENABLE_WEBHOOK_SERVER"
EnvEnableCalculateRunnable = "ENABLE_CALCULATE_RUNNABLE"
EnvTestMode = "ENV_TEST_MODE"
EnvGlobalSelector = "GLOBAL_SELECTOR"
EnvWatchOnLimit = "WATCH_ON_LIMIT"
)

EnvGlobalSelector = "GLOBAL_SELECTOR"
EnvWatchOnLimit = "WATCH_ON_LIMIT"

KdControlPrefix = "kridge.kusionstack.io/"

KdShardingHashKey = "kridge.kusionstack.io/sharding-hash"
KdControlKey = "kridge.kusionstack.io/control"
KdNamespaceKey = "kridge.kusionstack.io/namespace"

KdIgnoreWebhookKey = "kridge.kusionstack.io/ignore-webhook"
KdIgnoreValidateKey = "kridge.kusionstack.io/ignore-validate"
KdDefaultReplicasKey = "kridge.kusionstack.io/default-replicas"
// Labels
const (
KdControlPrefix = "kridge.kusionstack.io/"
KdShardHashKey = "kridge.kusionstack.io/shard-hash"
KdControlKey = "kridge.kusionstack.io/control"
KdNamespaceKey = "kridge.kusionstack.io/namespace"
KdIgnoreWebhookLabel = "kridge.kusionstack.io/ignore-webhook"
KdIgnoreValidateLabel = "kridge.kusionstack.io/ignore-validate"
KdDefaultReplicasLabel = "kridge.kusionstack.io/default-replicas"
KdEnableProxyLabel = "kridge.kusionstack.io/enable-proxy"
KdAutoShardingRootLabel = "kridge.kusionstack.io/auto-sharding-root"
KdInRollingLabel = "kridge.kusionstack.io/rolling"
KdDisableFakeKubeconfigArgLabel = "kridge.kusionstack.io/disable-fake-kubeconfig-arg"
KdDisableFakeKubeconfigEnvLabel = "kridge.kusionstack.io/disable-fake-kubeconfig-env"
KdSharedLogVolumeLabel = "kridge.kusionstack.io/log-volume"
KdWatchOnLimitLabel = "kridge.kusionstack.io/watching"
KdProxyKubeConfigVolumeLabel = "kridge.kusionstack.io/kubeconfig-volume"
)

KdEnableProxyKey = "kridge.kusionstack.io/enable-proxy"
// Annotations
const (
KdAutoShardingHashAnno = "kridge.kusionstack.io/auto-sharding-hash"
KdRollingStatusAnno = "kridge.kusionstack.io/roll-status"
KdRollingExpectedAnno = "kridge.kusionstack.io/roll-expected"
KdSharedLogPathAnno = "kridge.kusionstack.io/log-path"
KdWebhookEnvConfigAnno = "kridge.kusionstack.io/env-sync"
KdEnvInjectAnno = "kridge.kusionstack.io/env-inject"
KdProxyContainerResourceAnno = "kridge.kusionstack.io/proxy-resource"
)

// Finalizer
const (
ProtectFinalizer = "finalizer.kridge.kusionstack.io/protected"
)

KdAutoShardingRootLabel = "kridge.kusionstack.io/auto-sharding-root"
KdAutoShardingHashAnno = "kridge.kusionstack.io/auto-sharding-hash"

KdInRollingLabel = "kridge.kusionstack.io/rolling"
KdRollingStatusAnno = "kridge.kusionstack.io/roll-status"
KdRollingExpectedAnno = "kridge.kusionstack.io/roll-expected"

KdDisableFakeKubeconfigArg = "kridge.kusionstack.io/disable-fake-kubeconfig-arg"
KdDisableFakeKubeconfigEnv = "kridge.kusionstack.io/disable-fake-kubeconfig-env"

KdSharedLogPathAnnoKey = "kridge.kusionstack.io/log-path"
KdSharedLogVolumeKey = "kridge.kusionstack.io/log-volume"

KdWatchOnLimitKey = "kridge.kusionstack.io/watching"

// Name
const (
ShardingConfigMapName = "kridge-sharding-config"

KdWebhookEnvConfigAnno = "kridge.kusionstack.io/env-sync"
KdEnvInjectAnno = "kridge.kusionstack.io/env-inject"
KdProxyKubeConfigVolume = "kridge.kusionstack.io/kubeconfig-volume"
KdProxyContainerResourceAnno = "kridge.kusionstack.io/proxy-resource"
)
39 changes: 21 additions & 18 deletions pkg/apis/kridge/v1alpha1/shardingconfig_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,35 +40,38 @@ type ShardingConfigSpec struct {
}

type ShardingConfigRoot struct {
Disable *bool `json:"disable,omitempty"`
Prefix string `json:"prefix,omitempty"`
Canary *CanaryConfig `json:"canary,omitempty"`
Size int `json:"size,omitempty"`
Type ShardingType `json:"type,omitempty"`
Manual []ManualConfig `json:"manual,omitempty"`
CanaryReplicas int `json:"canaryReplicas,omitempty"`
NormalReplicas int `json:"normalReplicas,omitempty"`
TargetStatefulSet string `json:"targetStatefulSet,omitempty"`
ResourceSelector []ObjectLimiter `json:"resourceSelector,omitempty"`
Disable *bool `json:"disable,omitempty"`
Prefix string `json:"prefix"`
TargetStatefulSet string `json:"targetStatefulSet"`

// Canary is canary shard config
Canary *CanaryConfig `json:"canary,omitempty"`

// Auto is config to automatically generate child ShardingConfig
Auto *AutoConfig `json:"auto,omitempty"`

// TODO: config every shard
//Manual []ManualConfig `json:"manual,omitempty"`

ResourceSelector []ObjectLimiter `json:"resourceSelector,omitempty"`
}

type AutoConfig struct {
ShardingSize int `json:"shardingSize"`
EveryShardReplicas int `json:"everyShardReplicas"`
}

type CanaryConfig struct {
Replicas *int `json:"replicas"`
InNamespaces []string `json:"inNamespaces,omitempty"`
InNumbers []string `json:"inNumbers,omitempty"`
InShardHash []string `json:"inShardHash,omitempty"`
}

type ManualConfig struct {
ID int `json:"id"`
Numbers []string `json:"numbers"`
}

type ShardingType string

const (
ShardingAuto ShardingType = "Auto"
ShardingManual ShardingType = "Manual"
)

// ShardingConfigRestConfigOverrides defines overrides to the application's rest config.
type ShardingConfigRestConfigOverrides struct {
// UserAgentOrPrefix can override the UserAgent of application.
Expand Down
Loading