func()

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

}