ETCD on Kubernetes with Node Affinity
In part-1 of this multi-series blog, we covered how to setup Etcd on Kubernetes. In part-2 here, we will cover how to setup node affinity for our Etcd cluster on Amazon Elastic Kubernetes Service (EKS). Node affinity allows you to constrain which nodes your Pod can be scheduled on based on node labels, which provides high availability at node group level.
There are two types of node affinity as listed here :
-
requiredDuringSchedulingIgnoredDuringExecution
: The scheduler can’t schedule the Pod unless the rule is met. This functions likenodeSelector
, but with a more expressive syntax. -
preferredDuringSchedulingIgnoredDuringExecution
: The scheduler tries to find a node that meets the rule. If a matching node is not available, the scheduler still schedules the Pod.
Configuring Node Affinity
To setup Etcd on Kubernetes cluster with Node Affinity, we will need to perform two steps.
Apply labels and taints to Nodes
first need to apply labels and taints to nodes.We can apply labels and taints to nodes using the following commands:
~ kubectl label nodes <node name> key=etcd
~ kubectl taint nodes <node name>key=etcd:NoExecute
Configure Etcd Helm Chart
Since Etcd Helm chart includes nodeaffinity configuration, we can update them directly in our chart.
nodeAffinityPreset.type |
Node affinity preset type. Ignored if affinity is set. Allowed values: soft or hard |
"" |
nodeAffinityPreset.key |
Node label key to match. Ignored if affinity is set. |
"" |
nodeAffinityPreset.values |
Node label values to match. Ignored if affinity is set. |
[] |
First, configure nodeaffinity attributes in values.yaml file of your etcd Helm chart as shown in sample below.
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: key operator: In values: - etcd nodeSelector: {} tolerations: - key: "key" operator: "Equal" value: "etcd" effect: "NoExecute"
Then, apply the updated Helm chart using instructions covered in part-1 of this blog series.
Conclusion
In conclusion, we covered how to setup Etcd on Kubernetes with Node Affinity. Node Affinity will ensure high availability at node level. In effect, we have an Etcd cluster running now with Node Affinity. Next, we will cover how to maintain the Etcd cluster in Production using automated scripts in part-3 of this multi-series blog.