Skip to content

Commit 9d87eab

Browse files
authored
Merge pull request #311 from arangodb/feature/node-selector
NodeSelector
2 parents 38dcb31 + cb31f7d commit 9d87eab

File tree

6 files changed

+35
-10
lines changed

6 files changed

+35
-10
lines changed

docs/Manual/Deployment/Kubernetes/DeploymentResource.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`).
348348
For the `syncworkers` group, it is highly recommended to use the same number
349349
as for the `dbservers` group.
350350

351-
### `spec.<group>.args: [string]`
351+
### `spec.<group>.args: []string`
352352

353353
This setting specifies additional commandline arguments passed to all servers of this group.
354354
The default value is an empty array.
@@ -389,7 +389,7 @@ for each server of this group.
389389
This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`
390390
because servers in these groups do not need persistent storage.
391391

392-
### `spec.<group>.tolerations: [Toleration]`
392+
### `spec.<group>.tolerations: []Toleration`
393393

394394
This setting specifies the `tolerations` for the `Pod`s created
395395
for each server of this group.
@@ -401,3 +401,9 @@ By default, suitable tolerations are set for the following keys with the `NoExec
401401
- `node.alpha.kubernetes.io/unreachable` (will be removed in future version)
402402

403403
For more information on tolerations, consult the [Kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/).
404+
405+
### `spec.<group>.nodeSelector: map[string]string`
406+
407+
This setting specifies a set of labels to be used as `nodeSelector` for Pods of this node.
408+
409+
For more information on node selectors, consult the [Kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/).

pkg/apis/deployment/v1alpha/server_group_spec.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,20 @@ type ServerGroupSpec struct {
4949
Tolerations []v1.Toleration `json:"tolerations,omitempty"`
5050
// ServiceAccountName specifies the name of the service account used for Pods in this group.
5151
ServiceAccountName *string `json:"serviceAccountName,omitempty"`
52+
// NodeSelector speficies a set of selectors for nodes
53+
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
5254
}
5355

5456
// GetCount returns the value of count.
5557
func (s ServerGroupSpec) GetCount() int {
5658
return util.IntOrDefault(s.Count)
5759
}
5860

61+
// GetNodeSelector returns the selectors for nodes of this group
62+
func (s ServerGroupSpec) GetNodeSelector() map[string]string {
63+
return s.NodeSelector
64+
}
65+
5966
// GetArgs returns the value of args.
6067
func (s ServerGroupSpec) GetArgs() []string {
6168
return s.Args
@@ -194,6 +201,9 @@ func (s *ServerGroupSpec) SetDefaultsFrom(source ServerGroupSpec) {
194201
if s.ServiceAccountName == nil {
195202
s.ServiceAccountName = util.NewStringOrNil(source.ServiceAccountName)
196203
}
204+
if s.NodeSelector == nil {
205+
s.NodeSelector = source.NodeSelector
206+
}
197207
setDefaultsFromResourceList(&s.Resources.Limits, source.Resources.Limits)
198208
setDefaultsFromResourceList(&s.Resources.Requests, source.Resources.Requests)
199209
}

pkg/apis/deployment/v1alpha/zz_generated.deepcopy.go

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

pkg/deployment/images.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ func (ib *imagesBuilder) fetchArangoDBImageIDAndVersion(ctx context.Context, ima
198198
}
199199
}
200200
if err := k8sutil.CreateArangodPod(ib.KubeCli, true, ib.APIObject, role, id, podName, "", image, "", "", ib.Spec.GetImagePullPolicy(), "", false, terminationGracePeriod, args, env, nil, nil, nil,
201-
tolerations, serviceAccountName, "", ""); err != nil {
201+
tolerations, serviceAccountName, "", "", nil); err != nil {
202202
log.Debug().Err(err).Msg("Failed to create image ID pod")
203203
return true, maskAny(err)
204204
}

pkg/deployment/resources/pod_creator.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,8 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string,
537537
requireUUID := group == api.ServerGroupDBServers && m.IsInitialized
538538
finalizers := r.createPodFinalizers(group)
539539
if err := k8sutil.CreateArangodPod(kubecli, spec.IsDevelopment(), apiObject, role, m.ID, m.PodName, m.PersistentVolumeClaimName, imageInfo.ImageID, lifecycleImage, alpineImage, spec.GetImagePullPolicy(),
540-
engine, requireUUID, terminationGracePeriod, args, env, finalizers, livenessProbe, readinessProbe, tolerations, serviceAccountName, tlsKeyfileSecretName, rocksdbEncryptionSecretName); err != nil {
540+
engine, requireUUID, terminationGracePeriod, args, env, finalizers, livenessProbe, readinessProbe, tolerations, serviceAccountName, tlsKeyfileSecretName, rocksdbEncryptionSecretName,
541+
groupSpec.GetNodeSelector()); err != nil {
541542
return maskAny(err)
542543
}
543544
log.Debug().Str("pod-name", m.PodName).Msg("Created pod")
@@ -614,7 +615,7 @@ func (r *Resources) createPodForMember(spec api.DeploymentSpec, memberID string,
614615
affinityWithRole = api.ServerGroupDBServers.AsRole()
615616
}
616617
if err := k8sutil.CreateArangoSyncPod(kubecli, spec.IsDevelopment(), apiObject, role, m.ID, m.PodName, imageInfo.ImageID, lifecycleImage, spec.GetImagePullPolicy(), terminationGracePeriod, args, env,
617-
livenessProbe, tolerations, serviceAccountName, tlsKeyfileSecretName, clientAuthCASecretName, masterJWTSecretName, clusterJWTSecretName, affinityWithRole); err != nil {
618+
livenessProbe, tolerations, serviceAccountName, tlsKeyfileSecretName, clientAuthCASecretName, masterJWTSecretName, clusterJWTSecretName, affinityWithRole, groupSpec.GetNodeSelector()); err != nil {
618619
return maskAny(err)
619620
}
620621
log.Debug().Str("pod-name", m.PodName).Msg("Created pod")

pkg/util/k8sutil/pods.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ func initLifecycleContainer(image string) (v1.Container, error) {
389389
}
390390

391391
// newPod creates a basic Pod for given settings.
392-
func newPod(deploymentName, ns, role, id, podName string, finalizers []string, tolerations []v1.Toleration, serviceAccountName string) v1.Pod {
392+
func newPod(deploymentName, ns, role, id, podName string, finalizers []string, tolerations []v1.Toleration, serviceAccountName string, nodeSelector map[string]string) v1.Pod {
393393
hostname := CreatePodHostName(deploymentName, role, id)
394394
p := v1.Pod{
395395
ObjectMeta: metav1.ObjectMeta{
@@ -403,6 +403,7 @@ func newPod(deploymentName, ns, role, id, podName string, finalizers []string, t
403403
RestartPolicy: v1.RestartPolicyNever,
404404
Tolerations: tolerations,
405405
ServiceAccountName: serviceAccountName,
406+
NodeSelector: nodeSelector,
406407
},
407408
}
408409
return p
@@ -416,9 +417,9 @@ func CreateArangodPod(kubecli kubernetes.Interface, developmentMode bool, deploy
416417
engine string, requireUUID bool, terminationGracePeriod time.Duration,
417418
args []string, env map[string]EnvValue, finalizers []string,
418419
livenessProbe *HTTPProbeConfig, readinessProbe *HTTPProbeConfig, tolerations []v1.Toleration, serviceAccountName string,
419-
tlsKeyfileSecretName, rocksdbEncryptionSecretName string) error {
420+
tlsKeyfileSecretName, rocksdbEncryptionSecretName string, nodeSelector map[string]string) error {
420421
// Prepare basic pod
421-
p := newPod(deployment.GetName(), deployment.GetNamespace(), role, id, podName, finalizers, tolerations, serviceAccountName)
422+
p := newPod(deployment.GetName(), deployment.GetNamespace(), role, id, podName, finalizers, tolerations, serviceAccountName, nodeSelector)
422423
terminationGracePeriodSeconds := int64(math.Ceil(terminationGracePeriod.Seconds()))
423424
p.Spec.TerminationGracePeriodSeconds = &terminationGracePeriodSeconds
424425

@@ -519,9 +520,9 @@ func CreateArangodPod(kubecli kubernetes.Interface, developmentMode bool, deploy
519520
// If another error occurs, that error is returned.
520521
func CreateArangoSyncPod(kubecli kubernetes.Interface, developmentMode bool, deployment APIObject, role, id, podName, image, lifecycleImage string, imagePullPolicy v1.PullPolicy,
521522
terminationGracePeriod time.Duration, args []string, env map[string]EnvValue, livenessProbe *HTTPProbeConfig, tolerations []v1.Toleration, serviceAccountName string,
522-
tlsKeyfileSecretName, clientAuthCASecretName, masterJWTSecretName, clusterJWTSecretName, affinityWithRole string) error {
523+
tlsKeyfileSecretName, clientAuthCASecretName, masterJWTSecretName, clusterJWTSecretName, affinityWithRole string, nodeSelector map[string]string) error {
523524
// Prepare basic pod
524-
p := newPod(deployment.GetName(), deployment.GetNamespace(), role, id, podName, nil, tolerations, serviceAccountName)
525+
p := newPod(deployment.GetName(), deployment.GetNamespace(), role, id, podName, nil, tolerations, serviceAccountName, nodeSelector)
525526
terminationGracePeriodSeconds := int64(math.Ceil(terminationGracePeriod.Seconds()))
526527
p.Spec.TerminationGracePeriodSeconds = &terminationGracePeriodSeconds
527528

0 commit comments

Comments
 (0)