Skip to content

Commit

Permalink
feat: add discovery deployment
Browse files Browse the repository at this point in the history
Signed-off-by: Phoeniix Zhao <Phoenix500526@163.com>
  • Loading branch information
Phoenix500526 committed Feb 16, 2024
1 parent 418e37c commit b5d58a5
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 6 deletions.
12 changes: 7 additions & 5 deletions api/v1alpha1/xlinecluster_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -180,11 +180,13 @@ type XlineClusterStatus struct {
type XlineClusterOprStage string

const (
StageXlineScriptCM XlineClusterOprStage = "Xline/ScriptCM"
StageXlineConfigMap XlineClusterOprStage = "Xline/ConfigMap"
StageXlineService XlineClusterOprStage = "Xline/Service"
StageXlineStatefulSet XlineClusterOprStage = "Xline/Statefulset"
StageComplete XlineClusterOprStage = "complete"
StageXlineScriptCM XlineClusterOprStage = "Xline/ScriptCM"
StageXlineConfigMap XlineClusterOprStage = "Xline/ConfigMap"
StageXlineService XlineClusterOprStage = "Xline/Service"
StageXlineDiscoveryService XlineClusterOprStage = "Xline/DiscoveryService"
StageXlineDiscoveryDeploy XlineClusterOprStage = "Xline/DiscoveryDeploy"
StageXlineStatefulSet XlineClusterOprStage = "Xline/Statefulset"
StageComplete XlineClusterOprStage = "complete"
)

// XlineClusterRecStatus represents XlineCluster reconcile status
Expand Down
12 changes: 12 additions & 0 deletions config/rbac/role.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@ kind: ClusterRole
metadata:
name: manager-role
rules:
- apiGroups:
- apps
resources:
- deployments
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- apps
resources:
Expand Down
1 change: 1 addition & 0 deletions internal/controller/xlinecluster_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ type XlineClusterReconciler struct {
//+kubebuilder:rbac:groups=xline.io.datenlord.com,resources=xlineclusters/finalizers,verbs=update
//+kubebuilder:rbac:groups=core,resources=services,verbs=get;list;watch;create;update;patch;delete
//+kubebuilder:rbac:groups=apps,resources=statefulsets,verbs=get;list;watch;create;update;patch;delete
//+kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete
//+kubebuilder:rbac:groups=core,resources=pods,verbs=get;list;watch
//+kubebuilder:rbac:groups=core,resources=configmaps,verbs=get;list;watch;create;update;patch;delete
//+kubebuilder:rbac:groups=core,resources=secrets,verbs=get;list;watch
Expand Down
12 changes: 12 additions & 0 deletions internal/reconciler/cluster_reconciler.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,18 @@ func (r *ClusterStageRecResult) AsXlineClusterRecStatus() xapi.XlineClusterRecSt

// reconcile xline cluster resources.
func (r *XlineClusterReconciler) recXlineResources() ClusterStageRecResult {
// create an xline discovery service
discoverySvc := tran.MakeDiscoveryService(r.CR, r.Schema)
if err := r.CreateOrUpdate(discoverySvc, &corev1.Service{}); err != nil {
return clusterStageFail(xapi.StageXlineDiscoveryService, err)
}

// create an xline discovery deployment
discoveryDeploy := tran.MakeDiscoveryDeployment(r.CR, r.Schema)
if err := r.CreateOrUpdate(discoveryDeploy, &appv1.Deployment{}); err != nil {
return clusterStageFail(xapi.StageXlineDiscoveryDeploy, err)
}

// create an xline script cm
script := tran.MakeScriptCM(r.CR, r.Schema)
if err := r.CreateOrUpdate(script, &corev1.ConfigMap{}); err != nil {
Expand Down
75 changes: 74 additions & 1 deletion internal/transformer/xlinecluster_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,23 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
"k8s.io/utils/pointer"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
)

const (
XlinePort = 2379
XlinePort = 2379
DiscoveryPort = 10086
)

func GetXlineInstanceLabels(xlineClusterName types.NamespacedName) map[string]string {
return MakeResourceLabels(xlineClusterName.Name)
}

func GetXlineDiscoveryLabels(xlineClusterName types.NamespacedName) map[string]string {
return MakeResourceLabels(fmt.Sprintf("%s-discovery", xlineClusterName.Name))
}

func GetMemberTopology(cr *xapi.XlineCluster) string {
replicas := int(cr.Spec.Replicas)
members := make([]string, replicas)
Expand Down Expand Up @@ -64,6 +70,73 @@ func getConfigInfo(cr *xapi.XlineCluster) []corev1.EnvFromSource {
}
}

func MakeDiscoveryService(cr *xapi.XlineCluster, scheme *runtime.Scheme) *corev1.Service {
svcLabel := GetXlineDiscoveryLabels(cr.ObjKey())
service := &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: fmt.Sprintf("%s-discovery", cr.Name),
Namespace: cr.Namespace,
},
Spec: corev1.ServiceSpec{
Ports: []corev1.ServicePort{
{
Name: "discovery-port",
Port: DiscoveryPort,
},
},
Selector: svcLabel,
},
}
_ = controllerutil.SetOwnerReference(cr, service, scheme)
return service
}

func MakeDiscoveryDeployment(cr *xapi.XlineCluster, scheme *runtime.Scheme) *appv1.Deployment {
discoveryLabel := GetXlineDiscoveryLabels(cr.ObjKey())
podSpec := corev1.PodSpec{
Containers: []corev1.Container{
{
Name: "xline-discovery",
Image: "phoenix500526/discovery:v0.1.1",
Command: []string{
"/usr/local/bin/discovery",
},
Ports: []corev1.ContainerPort{
{
ContainerPort: DiscoveryPort,
},
},
Env: []corev1.EnvVar{
{Name: "XC_NAME", Value: cr.Name},
},
},
},
// ServiceAccountName: "my-service-account",
}

deploy := &appv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Name: cr.Name,
Namespace: cr.Namespace,
},
Spec: appv1.DeploymentSpec{
Replicas: pointer.Int32(1),
Selector: &metav1.LabelSelector{
MatchLabels: discoveryLabel,
},
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: discoveryLabel,
},
Spec: podSpec,
},
},
}

_ = controllerutil.SetOwnerReference(cr, deploy, scheme)
return deploy
}

func MakeService(cr *xapi.XlineCluster, scheme *runtime.Scheme) *corev1.Service {
svcLabel := GetXlineInstanceLabels(cr.ObjKey())
service := &corev1.Service{
Expand Down

0 comments on commit b5d58a5

Please sign in to comment.