in pkg/controller/broker/broker_controller.go [402:500]
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,
},
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
}