func MakeStatefulSet()

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
}