add service for each volume server
related to https://github.com/seaweedfs/seaweedfs-operator/issues/16
This commit is contained in:
parent
15fc33c506
commit
e853e2870f
|
@ -21,7 +21,7 @@ func (r *SeaweedReconciler) ensureVolumeServers(seaweedCR *seaweedv1.Seaweed) (d
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if done, result, err = r.ensureVolumeServerService(seaweedCR); done {
|
if done, result, err = r.ensureVolumeServerServices(seaweedCR); done {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,17 +66,29 @@ func (r *SeaweedReconciler) ensureVolumeServerPeerService(seaweedCR *seaweedv1.S
|
||||||
return ReconcileResult(err)
|
return ReconcileResult(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *SeaweedReconciler) ensureVolumeServerService(seaweedCR *seaweedv1.Seaweed) (bool, ctrl.Result, error) {
|
func (r *SeaweedReconciler) ensureVolumeServerServices(seaweedCR *seaweedv1.Seaweed) (bool, ctrl.Result, error) {
|
||||||
|
|
||||||
log := r.Log.WithValues("sw-volume-service", seaweedCR.Name)
|
for i := 0; i < int(seaweedCR.Spec.Volume.Replicas); i++ {
|
||||||
|
done, result, err := r.ensureVolumeServerService(seaweedCR, i)
|
||||||
|
if done {
|
||||||
|
return done, result, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
volumeServerService := r.createVolumeServerService(seaweedCR)
|
return ReconcileResult(nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *SeaweedReconciler) ensureVolumeServerService(seaweedCR *seaweedv1.Seaweed, i int) (bool, ctrl.Result, error) {
|
||||||
|
|
||||||
|
log := r.Log.WithValues("sw-volume-service", seaweedCR.Name, "index", i)
|
||||||
|
|
||||||
|
volumeServerService := r.createVolumeServerService(seaweedCR, i)
|
||||||
if err := controllerutil.SetControllerReference(seaweedCR, volumeServerService, r.Scheme); err != nil {
|
if err := controllerutil.SetControllerReference(seaweedCR, volumeServerService, r.Scheme); err != nil {
|
||||||
return ReconcileResult(err)
|
return ReconcileResult(err)
|
||||||
}
|
}
|
||||||
_, err := r.CreateOrUpdateService(volumeServerService)
|
_, err := r.CreateOrUpdateService(volumeServerService)
|
||||||
|
|
||||||
log.Info("ensure volume service " + volumeServerService.Name)
|
log.Info("ensure volume service "+volumeServerService.Name, "index", i)
|
||||||
return ReconcileResult(err)
|
return ReconcileResult(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package controllers
|
package controllers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/seaweedfs/seaweedfs-operator/controllers/label"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/intstr"
|
"k8s.io/apimachinery/pkg/util/intstr"
|
||||||
|
@ -42,12 +45,14 @@ func (r *SeaweedReconciler) createVolumeServerPeerService(m *seaweedv1.Seaweed)
|
||||||
}
|
}
|
||||||
return dep
|
return dep
|
||||||
}
|
}
|
||||||
func (r *SeaweedReconciler) createVolumeServerService(m *seaweedv1.Seaweed) *corev1.Service {
|
func (r *SeaweedReconciler) createVolumeServerService(m *seaweedv1.Seaweed, i int) *corev1.Service {
|
||||||
labels := labelsForVolumeServer(m.Name)
|
labels := labelsForVolumeServer(m.Name)
|
||||||
|
serviceName := fmt.Sprintf("%s-volume-%d", m.Name, i)
|
||||||
|
labels[label.PodName] = serviceName
|
||||||
|
|
||||||
dep := &corev1.Service{
|
dep := &corev1.Service{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: m.Name + "-volume",
|
Name: serviceName,
|
||||||
Namespace: m.Namespace,
|
Namespace: m.Namespace,
|
||||||
Labels: labels,
|
Labels: labels,
|
||||||
Annotations: map[string]string{
|
Annotations: map[string]string{
|
||||||
|
|
|
@ -15,4 +15,8 @@ const (
|
||||||
InstanceLabelKey string = "app.kubernetes.io/instance"
|
InstanceLabelKey string = "app.kubernetes.io/instance"
|
||||||
// VersionLabelKey is Kubernetes recommended label key, it represents the version of the app
|
// VersionLabelKey is Kubernetes recommended label key, it represents the version of the app
|
||||||
VersionLabelKey string = "app.kubernetes.io/version"
|
VersionLabelKey string = "app.kubernetes.io/version"
|
||||||
|
|
||||||
|
// PodName is to select pod by name
|
||||||
|
// https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-selector
|
||||||
|
PodName string = "statefulset.kubernetes.io/pod-name"
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue