in pkg/controller/nameservice/nameservice_controller.go [339:402]
func (r *ReconcileNameService) statefulSetForNameService(nameService *rocketmqv1alpha1.NameService) *appsv1.StatefulSet {
ls := labelsForNameService(nameService.Name)
// 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(nameService.Spec.VolumeClaimTemplates[0].Name, "") {
nameService.Spec.VolumeClaimTemplates[0].Name = uuid.New().String()
}
dep := &appsv1.StatefulSet{
ObjectMeta: metav1.ObjectMeta{
Name: nameService.Name,
Namespace: nameService.Namespace,
},
Spec: appsv1.StatefulSetSpec{
Replicas: &nameService.Spec.Size,
Selector: &metav1.LabelSelector{
MatchLabels: ls,
},
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: ls,
Annotations: nameService.Spec.PodAnnotations,
},
Spec: corev1.PodSpec{
ServiceAccountName: nameService.Spec.ServiceAccountName,
Affinity: nameService.Spec.Affinity,
Tolerations: nameService.Spec.Tolerations,
NodeSelector: nameService.Spec.NodeSelector,
PriorityClassName: nameService.Spec.PriorityClassName,
HostNetwork: nameService.Spec.HostNetwork,
DNSPolicy: nameService.Spec.DNSPolicy,
ImagePullSecrets: nameService.Spec.ImagePullSecrets,
Containers: []corev1.Container{{
Resources: nameService.Spec.Resources,
Image: nameService.Spec.NameServiceImage,
// Name must be lower case !
Name: "name-service",
ImagePullPolicy: nameService.Spec.ImagePullPolicy,
Env: nameService.Spec.Env,
Ports: []corev1.ContainerPort{{
ContainerPort: cons.NameServiceMainContainerPort,
Name: cons.NameServiceMainContainerPortName,
}},
VolumeMounts: []corev1.VolumeMount{{
MountPath: cons.LogMountPath,
Name: nameService.Spec.VolumeClaimTemplates[0].Name,
SubPath: cons.LogSubPathName,
}},
SecurityContext: getContainerSecurityContext(nameService),
}},
Volumes: getVolumes(nameService),
SecurityContext: getPodSecurityContext(nameService),
},
},
VolumeClaimTemplates: getVolumeClaimTemplates(nameService),
},
}
// Set Broker instance as the owner and controller
controllerutil.SetControllerReference(nameService, dep, r.scheme)
return dep
}