Skip to content

Commit 21fa99a

Browse files
Merge pull request #255 from omersch381/mdns_to_statefulset
Change Mdns deployment type to StatefulSet
2 parents ad65ea9 + 3efb9f1 commit 21fa99a

12 files changed

+205
-135
lines changed

api/bases/designate.openstack.org_designatemdnses.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ spec:
7070
description: ContainerImage - Designate Container Image URL (will
7171
be set to environmental default if empty)
7272
type: string
73+
controlNetworkName:
74+
default: designate
75+
description: ControlNetworkName - specify which network attachment
76+
is to be used for control, notifys and zone transfers.
77+
type: string
7378
customServiceConfig:
7479
description: CustomServiceConfig - customize the service config using
7580
this parameter to change service defaults, or overwrite rendered
@@ -126,6 +131,13 @@ spec:
126131
from the Secret
127132
type: string
128133
type: object
134+
replicas:
135+
default: 1
136+
description: Replicas - Designate Mdns Replicas
137+
format: int32
138+
maximum: 32
139+
minimum: 0
140+
type: integer
129141
resources:
130142
description: Resources - Compute Resources required by this service
131143
(Limits/Requests). https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

api/bases/designate.openstack.org_designates.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,11 @@ spec:
827827
description: ContainerImage - Designate Container Image URL (will
828828
be set to environmental default if empty)
829829
type: string
830+
controlNetworkName:
831+
default: designate
832+
description: ControlNetworkName - specify which network attachment
833+
is to be used for control, notifys and zone transfers.
834+
type: string
830835
customServiceConfig:
831836
description: CustomServiceConfig - customize the service config
832837
using this parameter to change service defaults, or overwrite
@@ -884,6 +889,13 @@ spec:
884889
password from the Secret
885890
type: string
886891
type: object
892+
replicas:
893+
default: 1
894+
description: Replicas - Designate Mdns Replicas
895+
format: int32
896+
maximum: 32
897+
minimum: 0
898+
type: integer
887899
resources:
888900
description: Resources - Compute Resources required by this service
889901
(Limits/Requests). https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

api/v1beta1/designatemdns_types.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,13 @@ type DesignateMdnsSpecBase struct {
4545
// Common input parameters for all Designate services
4646
DesignateTemplate `json:",inline"`
4747

48+
// +kubebuilder:validation:Optional
49+
// +kubebuilder:default=1
50+
// +kubebuilder:validation:Maximum=32
51+
// +kubebuilder:validation:Minimum=0
52+
// Replicas - Designate Mdns Replicas
53+
Replicas *int32 `json:"replicas"`
54+
4855
// +kubebuilder:validation:Optional
4956
// DatabaseHostname - Designate Database Hostname
5057
DatabaseHostname string `json:"databaseHostname,omitempty"`
@@ -60,6 +67,11 @@ type DesignateMdnsSpecBase struct {
6067
// +operator-sdk:csv:customresourcedefinitions:type=spec
6168
// TLS - Parameters related to the TLS
6269
TLS tls.Ca `json:"tls,omitempty"`
70+
71+
// +kubebuilder:default="designate"
72+
// +kubebuilder:validation:Optional
73+
// ControlNetworkName - specify which network attachment is to be used for control, notifys and zone transfers.
74+
ControlNetworkName string `json:"controlNetworkName"`
6375
}
6476

6577
// DesignateMdnsStatus defines the observed state of DesignateMdns

api/v1beta1/zz_generated.deepcopy.go

Lines changed: 7 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/bases/designate.openstack.org_designatemdnses.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ spec:
7070
description: ContainerImage - Designate Container Image URL (will
7171
be set to environmental default if empty)
7272
type: string
73+
controlNetworkName:
74+
default: designate
75+
description: ControlNetworkName - specify which network attachment
76+
is to be used for control, notifys and zone transfers.
77+
type: string
7378
customServiceConfig:
7479
description: CustomServiceConfig - customize the service config using
7580
this parameter to change service defaults, or overwrite rendered
@@ -126,6 +131,13 @@ spec:
126131
from the Secret
127132
type: string
128133
type: object
134+
replicas:
135+
default: 1
136+
description: Replicas - Designate Mdns Replicas
137+
format: int32
138+
maximum: 32
139+
minimum: 0
140+
type: integer
129141
resources:
130142
description: Resources - Compute Resources required by this service
131143
(Limits/Requests). https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

config/crd/bases/designate.openstack.org_designates.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,11 @@ spec:
827827
description: ContainerImage - Designate Container Image URL (will
828828
be set to environmental default if empty)
829829
type: string
830+
controlNetworkName:
831+
default: designate
832+
description: ControlNetworkName - specify which network attachment
833+
is to be used for control, notifys and zone transfers.
834+
type: string
830835
customServiceConfig:
831836
description: CustomServiceConfig - customize the service config
832837
using this parameter to change service defaults, or overwrite
@@ -884,6 +889,13 @@ spec:
884889
password from the Secret
885890
type: string
886891
type: object
892+
replicas:
893+
default: 1
894+
description: Replicas - Designate Mdns Replicas
895+
format: int32
896+
maximum: 32
897+
minimum: 0
898+
type: integer
887899
resources:
888900
description: Resources - Compute Resources required by this service
889901
(Limits/Requests). https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

config/rbac/role.yaml

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,6 @@ metadata:
55
creationTimestamp: null
66
name: manager-role
77
rules:
8-
- apiGroups:
9-
- ""
10-
resources:
11-
- nodes
12-
verbs:
13-
- get
14-
- list
158
- apiGroups:
169
- ""
1710
resources:
@@ -35,18 +28,6 @@ rules:
3528
- patch
3629
- update
3730
- watch
38-
- apiGroups:
39-
- apps
40-
resources:
41-
- daemonsets
42-
verbs:
43-
- create
44-
- delete
45-
- get
46-
- list
47-
- patch
48-
- update
49-
- watch
5031
- apiGroups:
5132
- apps
5233
resources:

controllers/designate_controller.go

Lines changed: 22 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@ type DesignateReconciler struct {
119119
// +kubebuilder:rbac:groups=rabbitmq.openstack.org,resources=transporturls,verbs=get;list;watch;create;update;patch;delete
120120
// +kubebuilder:rbac:groups=redis.openstack.org,resources=redises,verbs=get;list;watch;create;update;patch;delete
121121
// +kubebuilder:rbac:groups=k8s.cni.cncf.io,resources=network-attachment-definitions,verbs=get;list;watch
122-
// +kubebuilder:rbac:groups="",resources=nodes,verbs=get;list
123122
// +kubebuilder:rbac:groups=apps,resources=statefulsets,verbs=get;list;create;update;patch;delete;watch
124123

125124
// service account, role, rolebinding
@@ -775,25 +774,14 @@ func (r *DesignateReconciler) reconcileNormal(ctx context.Context, instance *des
775774
allocatedIPs[predIP] = true
776775
}
777776

778-
// Get a list of the nodes in the cluster
779-
780-
// TODO(oschwart):
781-
// * confirm whether or not this lists only the nodes we want (i.e. ones
782-
// that will host the daemonset)
783-
// * do we want to provide a mechanism to temporarily disabling this list
784-
// for maintenance windows where nodes might be "coming and going"
785-
786-
nodes, err := helper.GetKClient().CoreV1().Nodes().List(ctx, metav1.ListOptions{})
787-
if err != nil {
788-
return ctrl.Result{}, err
789-
}
790-
791-
var nodeNames []string
792-
for _, node := range nodes.Items {
793-
nodeNames = append(nodeNames, fmt.Sprintf("mdns_%s", node.Name))
777+
// Handle Mdns predictable IPs configmap
778+
mdnsReplicaCount := int(*instance.Spec.DesignateMdns.Replicas)
779+
var mdnsNames []string
780+
for i := 0; i < mdnsReplicaCount; i++ {
781+
mdnsNames = append(mdnsNames, fmt.Sprintf("mdns_address_%d", i))
794782
}
795783

796-
updatedMap, allocatedIPs, err := r.allocatePredictableIPs(ctx, predictableIPParams, nodeNames, mdnsConfigMap.Data, allocatedIPs)
784+
updatedMap, allocatedIPs, err := r.allocatePredictableIPs(ctx, predictableIPParams, mdnsNames, mdnsConfigMap.Data, allocatedIPs)
797785
if err != nil {
798786
return ctrl.Result{}, err
799787
}
@@ -959,7 +947,7 @@ func (r *DesignateReconciler) reconcileNormal(ctx context.Context, instance *des
959947
Log.Info("Deployment Worker task reconciled")
960948

961949
// deploy designate-mdns
962-
designateMdns, op, err := r.mdnsDaemonSetCreateOrUpdate(ctx, instance)
950+
designateMdns, op, err := r.mdnsStatefulSetCreateOrUpdate(ctx, instance)
963951
if err != nil {
964952
instance.Status.Conditions.Set(condition.FalseCondition(
965953
designatev1beta1.DesignateMdnsReadyCondition,
@@ -1585,8 +1573,8 @@ func (r *DesignateReconciler) workerDeploymentCreateOrUpdate(ctx context.Context
15851573
return deployment, op, err
15861574
}
15871575

1588-
func (r *DesignateReconciler) mdnsDaemonSetCreateOrUpdate(ctx context.Context, instance *designatev1beta1.Designate) (*designatev1beta1.DesignateMdns, controllerutil.OperationResult, error) {
1589-
daemonset := &designatev1beta1.DesignateMdns{
1576+
func (r *DesignateReconciler) mdnsStatefulSetCreateOrUpdate(ctx context.Context, instance *designatev1beta1.Designate) (*designatev1beta1.DesignateMdns, controllerutil.OperationResult, error) {
1577+
statefulSet := &designatev1beta1.DesignateMdns{
15901578
ObjectMeta: metav1.ObjectMeta{
15911579
Name: fmt.Sprintf("%s-mdns", instance.Name),
15921580
Namespace: instance.Namespace,
@@ -1597,28 +1585,28 @@ func (r *DesignateReconciler) mdnsDaemonSetCreateOrUpdate(ctx context.Context, i
15971585
instance.Spec.DesignateMdns.NodeSelector = instance.Spec.NodeSelector
15981586
}
15991587

1600-
op, err := controllerutil.CreateOrUpdate(ctx, r.Client, daemonset, func() error {
1601-
daemonset.Spec = instance.Spec.DesignateMdns
1588+
op, err := controllerutil.CreateOrUpdate(ctx, r.Client, statefulSet, func() error {
1589+
statefulSet.Spec = instance.Spec.DesignateMdns
16021590
// Add in transfers from umbrella Designate CR (this instance) spec
16031591
// TODO: Add logic to determine when to set/overwrite, etc
1604-
daemonset.Spec.ServiceUser = instance.Spec.ServiceUser
1605-
daemonset.Spec.DatabaseHostname = instance.Status.DatabaseHostname
1606-
daemonset.Spec.DatabaseAccount = instance.Spec.DatabaseAccount
1607-
daemonset.Spec.Secret = instance.Spec.Secret
1608-
daemonset.Spec.TransportURLSecret = instance.Status.TransportURLSecret
1609-
daemonset.Spec.ServiceAccount = instance.RbacResourceName()
1610-
daemonset.Spec.TLS = instance.Spec.DesignateAPI.TLS.Ca
1611-
daemonset.Spec.NodeSelector = instance.Spec.DesignateMdns.NodeSelector
1612-
1613-
err := controllerutil.SetControllerReference(instance, daemonset, r.Scheme)
1592+
statefulSet.Spec.ServiceUser = instance.Spec.ServiceUser
1593+
statefulSet.Spec.DatabaseHostname = instance.Status.DatabaseHostname
1594+
statefulSet.Spec.DatabaseAccount = instance.Spec.DatabaseAccount
1595+
statefulSet.Spec.Secret = instance.Spec.Secret
1596+
statefulSet.Spec.TransportURLSecret = instance.Status.TransportURLSecret
1597+
statefulSet.Spec.ServiceAccount = instance.RbacResourceName()
1598+
statefulSet.Spec.TLS = instance.Spec.DesignateAPI.TLS.Ca
1599+
statefulSet.Spec.NodeSelector = instance.Spec.DesignateMdns.NodeSelector
1600+
1601+
err := controllerutil.SetControllerReference(instance, statefulSet, r.Scheme)
16141602
if err != nil {
16151603
return err
16161604
}
16171605

16181606
return nil
16191607
})
16201608

1621-
return daemonset, op, err
1609+
return statefulSet, op, err
16221610
}
16231611

16241612
func (r *DesignateReconciler) producerDeploymentCreateOrUpdate(ctx context.Context, instance *designatev1beta1.Designate) (*designatev1beta1.DesignateProducer, controllerutil.OperationResult, error) {

controllers/designateapi_controller.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ var keystoneServices = []map[string]string{
104104
// +kubebuilder:rbac:groups=core,resources=pods,verbs=get;list;
105105
// +kubebuilder:rbac:groups=route.openshift.io,resources=routes,verbs=get;list;watch;create;update;patch;delete
106106
// +kubebuilder:rbac:groups=batch,resources=jobs,verbs=get;list;create;update;patch;delete;watch
107-
// +kubebuilder:rbac:groups=apps,resources=daemonsets,verbs=get;list;create;update;patch;delete;watch
108107
// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;create;update;patch;delete;watch
109108
// +kubebuilder:rbac:groups=keystone.openstack.org,resources=keystoneservices,verbs=get;list;watch;create;update;patch;delete
110109
// +kubebuilder:rbac:groups=keystone.openstack.org,resources=keystoneendpoints,verbs=get;list;watch;create;update;patch;delete

0 commit comments

Comments
 (0)