Skip to content

Commit

Permalink
Support dynamic change user.yaml, optimize deployment render (#114)
Browse files Browse the repository at this point in the history
Signed-off-by: shaoyue.chen <[email protected]>
  • Loading branch information
haorenfsa authored May 15, 2024
1 parent 43d4234 commit b660ccc
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 27 deletions.
71 changes: 51 additions & 20 deletions pkg/controllers/deployment_updater.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ func updatePodTemplate(

updatePodMeta(template, appLabels, updater)
updateInitContainers(template, updater)
updateVolumes(template, updater)
updateUserDefinedVolumes(template, updater)
updateScheduleSpec(template, updater)
updateMilvusContainer(template, updater, isCreating)
updateSidecars(template, updater)
Expand Down Expand Up @@ -154,23 +154,34 @@ func updateScheduleSpec(template *corev1.PodTemplateSpec, updater deploymentUpda
template.Spec.PriorityClassName = mergedComSpec.PriorityClassName
}

func updateVolumes(template *corev1.PodTemplateSpec, updater deploymentUpdater) {
mergedComSpec := updater.GetMergedComponentSpec()
volumes := &template.Spec.Volumes
addVolume(volumes, configVolumeByName(updater.GetIntanceName()))
addVolume(volumes, toolVolume)
for _, volumeValues := range mergedComSpec.Volumes {
func updateUserDefinedVolumes(template *corev1.PodTemplateSpec, updater deploymentUpdater) {
userDefinedVolumes := []corev1.Volume{}
volumesInCRSpec := updater.GetMergedComponentSpec().Volumes
for _, volumeValues := range volumesInCRSpec {
var volume corev1.Volume
volumeValues.MustAsObj(&volume)
fillConfigMapVolumeDefaultValues(&volume)
addVolume(volumes, volume)
userDefinedVolumes = append(userDefinedVolumes, volume)
}
if persistence := updater.GetPersistenceConfig(); persistence != nil && persistence.Enabled {
rocketMqPvcName := getPVCNameByInstName(updater.GetIntanceName())
if len(persistence.PersistentVolumeClaim.ExistingClaim) > 0 {
addVolume(volumes, persisentVolumeByName(persistence.PersistentVolumeClaim.ExistingClaim))
} else {
addVolume(volumes, persisentVolumeByName(getPVCNameByInstName(updater.GetIntanceName())))
rocketMqPvcName = persistence.PersistentVolumeClaim.ExistingClaim
}
userDefinedVolumes = append(userDefinedVolumes, persisentVolumeByName(rocketMqPvcName))
}
for _, volume := range userDefinedVolumes {
addVolume(&template.Spec.Volumes, volume)
}
}

func updateBuiltInVolumes(template *corev1.PodTemplateSpec, updater deploymentUpdater) {
builtInVolumes := []corev1.Volume{
configVolumeByName(updater.GetIntanceName()),
toolVolume,
}
for _, volume := range builtInVolumes {
addVolume(&template.Spec.Volumes, volume)
}
}

Expand Down Expand Up @@ -217,15 +228,7 @@ func updateMilvusContainer(template *corev1.PodTemplateSpec, updater deploymentU
container.Ports = []corev1.ContainerPort{metricPort}
}

addVolumeMount(&container.VolumeMounts, configVolumeMount)
addVolumeMount(&container.VolumeMounts, toolVolumeMount)
if updater.HasHookConfig() {
addVolumeMount(&container.VolumeMounts, hookConfigVolumeMount)
}
if persistence := updater.GetPersistenceConfig(); persistence != nil && persistence.Enabled {
addVolumeMount(&container.VolumeMounts, persistentVolumeMount(*persistence))
}
for _, volumeMount := range mergedComSpec.VolumeMounts {
for _, volumeMount := range getUserDefinedVolumeMounts(updater) {
addVolumeMount(&container.VolumeMounts, volumeMount)
}

Expand All @@ -241,9 +244,37 @@ func updateMilvusContainer(template *corev1.PodTemplateSpec, updater deploymentU
container.Resources = *mergedComSpec.Resources
}

func updateBuiltInVolumeMounts(template *corev1.PodTemplateSpec, updater deploymentUpdater) {
containerIdx := GetContainerIndex(template.Spec.Containers, updater.GetComponentName())
if containerIdx < 0 {
return
}
container := &template.Spec.Containers[containerIdx]
builtInVolumeMounts := []corev1.VolumeMount{
configVolumeMount,
toolVolumeMount,
}
for _, volumeMount := range builtInVolumeMounts {
addVolumeMount(&container.VolumeMounts, volumeMount)
}
}

func getUserDefinedVolumeMounts(updater deploymentUpdater) []corev1.VolumeMount {
ret := updater.GetMergedComponentSpec().VolumeMounts
if updater.HasHookConfig() {
ret = append(ret, hookConfigVolumeMount)
}
if persistence := updater.GetPersistenceConfig(); persistence != nil && persistence.Enabled {
ret = append(ret, persistentVolumeMount())
}
return ret
}

func updateSomeFieldsOnlyWhenRolling(template *corev1.PodTemplateSpec, updater deploymentUpdater) {
// when perform rolling update
// we add some other perfered updates
updateBuiltInVolumes(template, updater)
updateBuiltInVolumeMounts(template, updater)
updateConfigContainer(template, updater)
componentName := updater.GetComponentName()
containerIdx := GetContainerIndex(template.Spec.Containers, updater.GetComponentName())
Expand Down
6 changes: 4 additions & 2 deletions pkg/controllers/deployment_updater_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,8 +187,10 @@ func TestMilvus_UpdateDeployment(t *testing.T) {
err := updateDeployment(deployment, updater)
assert.NoError(t, err)
assert.Len(t, deployment.Spec.Template.Spec.Volumes, 3)
assert.Equal(t, deployment.Spec.Template.Spec.Volumes[2].PersistentVolumeClaim.ClaimName, "pvc1")
assert.Len(t, deployment.Spec.Template.Spec.Containers[0].VolumeMounts, 3)
idx := GetVolumeIndex(deployment.Spec.Template.Spec.Volumes, MilvusDataVolumeName)
assert.LessOrEqual(t, 0, idx)
idx = GetVolumeMountIndex(deployment.Spec.Template.Spec.Containers[0].VolumeMounts, v1beta1.RocksMQPersistPath)
assert.LessOrEqual(t, 0, idx)
})

const oldImage = "milvusdb/milvus:v2.3.0"
Expand Down
8 changes: 4 additions & 4 deletions pkg/controllers/deployments.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ const (
)

var (
DefaultConfigMapMode int32 = 420
DefaultConfigMapMode int32 = 0666
ErrRequeue = pkgerr.New("requeue")
)

Expand Down Expand Up @@ -279,14 +279,14 @@ var (

configVolumeMount = corev1.VolumeMount{
Name: MilvusConfigVolumeName,
ReadOnly: true,
ReadOnly: false,
MountPath: MilvusUserConfigMountPath,
SubPath: MilvusUserConfigMountSubPath,
}

hookConfigVolumeMount = corev1.VolumeMount{
Name: MilvusConfigVolumeName,
ReadOnly: true,
ReadOnly: false,
MountPath: MilvusHookConfigUpdatesMountPath,
SubPath: MilvusHookConfigMountSubPath,
}
Expand Down Expand Up @@ -318,7 +318,7 @@ func persisentVolumeByName(name string) corev1.Volume {
}
}

func persistentVolumeMount(persist v1beta1.Persistence) corev1.VolumeMount {
func persistentVolumeMount() corev1.VolumeMount {
return corev1.VolumeMount{
Name: MilvusDataVolumeName,
ReadOnly: false,
Expand Down
2 changes: 1 addition & 1 deletion pkg/controllers/k8s_default_values.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ func fillConfigMapVolumeDefaultValues(v *corev1.Volume) {
return
}
if v.ConfigMap.DefaultMode == nil {
v.ConfigMap.DefaultMode = int32Ptr(420)
v.ConfigMap.DefaultMode = int32Ptr(int(corev1.ConfigMapVolumeSourceDefaultMode))
}
}

0 comments on commit b660ccc

Please sign in to comment.