func()

in pkg/controller/broker/broker_controller.go [415:514]


func (r *ReconcileBroker) getBrokerStatefulSet(broker *rocketmqv1alpha1.Broker, brokerGroupIndex int, replicaIndex int) *appsv1.StatefulSet {
	ls := labelsForBroker(broker.Name)
	var a int32 = 1
	var c = &a
	var statefulSetName string
	if broker.Spec.ClusterMode == "STATIC" {
		if replicaIndex == 0 {
			statefulSetName = broker.Name + "-" + strconv.Itoa(brokerGroupIndex) + "-master"
		} else {
			statefulSetName = broker.Name + "-" + strconv.Itoa(brokerGroupIndex) + "-replica-" + strconv.Itoa(replicaIndex)
		}
	} else if broker.Spec.ClusterMode == "CONTROLLER" {
		statefulSetName = broker.Name + "-" + strconv.Itoa(brokerGroupIndex) + "-" + strconv.Itoa(replicaIndex)
	}

	// After CustomResourceDefinition version upgraded from v1beta1 to v1
	// `broker.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(broker.Spec.VolumeClaimTemplates[0].Name, "") {
		broker.Spec.VolumeClaimTemplates[0].Name = uuid.New().String()
	}

	dep := &appsv1.StatefulSet{
		ObjectMeta: metav1.ObjectMeta{
			Name:      statefulSetName,
			Namespace: broker.Namespace,
		},
		Spec: appsv1.StatefulSetSpec{
			Replicas: c,
			Selector: &metav1.LabelSelector{
				MatchLabels: ls,
			},
			UpdateStrategy: appsv1.StatefulSetUpdateStrategy{
				Type: appsv1.RollingUpdateStatefulSetStrategyType,
			},
			Template: corev1.PodTemplateSpec{
				ObjectMeta: metav1.ObjectMeta{
					Labels:      ls,
					Annotations: broker.Spec.PodAnnotations,
				},
				Spec: corev1.PodSpec{
					ServiceAccountName: broker.Spec.ServiceAccountName,
					HostNetwork:        broker.Spec.HostNetwork,
					DNSPolicy:          corev1.DNSClusterFirstWithHostNet,
					Affinity:           broker.Spec.Affinity,
					Tolerations:        broker.Spec.Tolerations,
					NodeSelector:       broker.Spec.NodeSelector,
					PriorityClassName:  broker.Spec.PriorityClassName,
					ImagePullSecrets:   broker.Spec.ImagePullSecrets,
					Containers: []corev1.Container{{
						Resources: broker.Spec.Resources,
						Image:     broker.Spec.BrokerImage,
						Name:      cons.BrokerContainerName,
						Lifecycle: &corev1.Lifecycle{
							PostStart: &corev1.Handler{
								Exec: &corev1.ExecAction{
									Command: cmd,
								},
							},
						},
						SecurityContext: getContainerSecurityContext(broker),
						ImagePullPolicy: broker.Spec.ImagePullPolicy,
						Env:             getENV(broker, replicaIndex, brokerGroupIndex),
						Ports: []corev1.ContainerPort{{
							ContainerPort: cons.BrokerVipContainerPort,
							Name:          cons.BrokerVipContainerPortName,
						}, {
							ContainerPort: cons.BrokerMainContainerPort,
							Name:          cons.BrokerMainContainerPortName,
						}, {
							ContainerPort: cons.BrokerHighAvailabilityContainerPort,
							Name:          cons.BrokerHighAvailabilityContainerPortName,
						}},
						VolumeMounts: []corev1.VolumeMount{{
							MountPath: cons.LogMountPath,
							Name:      broker.Spec.VolumeClaimTemplates[0].Name,
							SubPath:   cons.LogSubPathName + getPathSuffix(broker, brokerGroupIndex, replicaIndex),
						}, {
							MountPath: cons.StoreMountPath,
							Name:      broker.Spec.VolumeClaimTemplates[0].Name,
							SubPath:   cons.StoreSubPathName + getPathSuffix(broker, brokerGroupIndex, replicaIndex),
						}, {
							MountPath: cons.BrokerConfigPath + "/" + cons.BrokerConfigName,
							Name:      broker.Spec.Volumes[0].Name,
							SubPath:   cons.BrokerConfigName,
						}},
					}},
					Volumes:         getVolumes(broker),
					SecurityContext: getPodSecurityContext(broker),
				},
			},
			VolumeClaimTemplates: getVolumeClaimTemplates(broker),
		},
	}
	// Set Broker instance as the owner and controller
	controllerutil.SetControllerReference(broker, dep, r.scheme)

	return dep

}