in pkg/seata/generators.go [73:148]
func MakeStatefulSet(s *seatav1alpha1.SeataServer) *appsv1.StatefulSet {
labels := makeLabels(s.Name)
statefulSet := &appsv1.StatefulSet{
ObjectMeta: metav1.ObjectMeta{
Name: s.Name,
Namespace: s.Namespace,
Labels: s.Labels,
Annotations: s.Annotations,
},
Spec: appsv1.StatefulSetSpec{
Selector: &metav1.LabelSelector{MatchLabels: labels},
ServiceName: s.Spec.ServiceName,
Template: apiv1.PodTemplateSpec{ObjectMeta: metav1.ObjectMeta{Labels: labels}},
VolumeClaimTemplates: []apiv1.PersistentVolumeClaim{{
ObjectMeta: metav1.ObjectMeta{
Name: pvcName,
Labels: map[string]string{"app": s.GetName(), "uid": string(s.UID)},
},
Spec: s.Spec.Persistence.PersistentVolumeClaimSpec,
}},
},
}
statefulSet.Spec.Template.Spec.Containers = []apiv1.Container{{
Name: s.Spec.ContainerName,
Image: s.Spec.Image,
Command: []string{
"/bin/bash",
},
Args: []string{
"-c",
fmt.Sprintf("export SEATA_IP=$(HOST_NAME).%s;", s.Spec.ServiceName) +
fmt.Sprintf("python3 -c \"\n%s\n\";", PythonScript) +
"/bin/bash /seata-server-entrypoint.sh;",
},
Ports: []apiv1.ContainerPort{
{Name: "service-port", ContainerPort: s.Spec.Ports.ServicePort},
{Name: "console-port", ContainerPort: s.Spec.Ports.ConsolePort},
{Name: "raft-port", ContainerPort: s.Spec.Ports.RaftPort},
},
VolumeMounts: []apiv1.VolumeMount{{
Name: "seata-store",
MountPath: "/seata-server/sessionStore",
}},
}}
container := &statefulSet.Spec.Template.Spec.Containers[0]
container.Resources = s.Spec.Resources
statefulSet.Spec.Replicas = &s.Spec.Replicas
container.Image = s.Spec.Image
container.Ports[0].ContainerPort = s.Spec.Ports.ConsolePort
container.Ports[1].ContainerPort = s.Spec.Ports.ServicePort
container.Ports[2].ContainerPort = s.Spec.Ports.RaftPort
envs := []apiv1.EnvVar{
{
Name: "HOST_NAME",
ValueFrom: &apiv1.EnvVarSource{
FieldRef: &apiv1.ObjectFieldSelector{FieldPath: "metadata.name"},
},
},
{Name: "store.mode", Value: "raft"},
{Name: "server.port", Value: strconv.Itoa(int(s.Spec.Ports.ConsolePort))},
{Name: "server.servicePort", Value: strconv.Itoa(int(s.Spec.Ports.ServicePort))},
}
addr := utils.ConcatRaftServerAddress(s)
envs = append(envs, apiv1.EnvVar{Name: "server.raft.serverAddr", Value: addr})
for _, env := range s.Spec.Env {
envs = append(envs, env)
}
container.Env = envs
return statefulSet
}