in pkg/controller/controller/dledger_controller.go [233:300]
func (r *ReconcileController) getControllerStatefulSet(controller *rocketmqv1alpha1.Controller) *appsv1.StatefulSet {
ls := labelsForController(controller.Name)
// After CustomResourceDefinition version upgraded from v1beta1 to v1
// `controller.spec.VolumeClaimTemplates.metadata` declared in yaml will not be stored by kubernetes.
// Here is a temporary repair method: to generate a random name
if strings.EqualFold(controller.Spec.VolumeClaimTemplates[0].Name, "") {
controller.Spec.VolumeClaimTemplates[0].Name = uuid.New().String()
}
var replica = int32(controller.Spec.Size)
dep := &appsv1.StatefulSet{
ObjectMeta: metav1.ObjectMeta{
Name: controller.Name,
Namespace: controller.Namespace,
},
Spec: appsv1.StatefulSetSpec{
ServiceName: tool.BuildHeadlessSvcResourceName(controller.Name),
Replicas: &replica,
Selector: &metav1.LabelSelector{
MatchLabels: ls,
},
UpdateStrategy: appsv1.StatefulSetUpdateStrategy{
Type: appsv1.RollingUpdateStatefulSetStrategyType,
},
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: ls,
},
Spec: corev1.PodSpec{
ServiceAccountName: controller.Spec.ServiceAccountName,
Affinity: controller.Spec.Affinity,
Tolerations: controller.Spec.Tolerations,
NodeSelector: controller.Spec.NodeSelector,
PriorityClassName: controller.Spec.PriorityClassName,
ImagePullSecrets: controller.Spec.ImagePullSecrets,
Containers: []corev1.Container{{
Resources: controller.Spec.Resources,
Image: controller.Spec.ControllerImage,
Name: cons.ControllerContainerName,
SecurityContext: getContainerSecurityContext(controller),
ImagePullPolicy: controller.Spec.ImagePullPolicy,
Env: getENV(controller),
VolumeMounts: []corev1.VolumeMount{{
MountPath: cons.LogMountPath,
Name: controller.Spec.VolumeClaimTemplates[0].Name,
SubPath: cons.LogSubPathName,
}, {
MountPath: cons.StoreMountPath,
Name: controller.Spec.VolumeClaimTemplates[0].Name,
SubPath: cons.StoreSubPathName,
}},
// Command: []string{"sh", "mqcontroller"},
}},
Volumes: getVolumes(controller),
SecurityContext: getPodSecurityContext(controller),
},
},
VolumeClaimTemplates: getVolumeClaimTemplates(controller),
},
}
// Set Controller instance as the owner and controller
controllerutil.SetControllerReference(controller, dep, r.scheme)
return dep
}