Deploy kubernetes statefulset with affinity
Here is an example to demonstrate how to assign statefulset and pod to the target worker node.
affinity helps define which node will be assigned for the pod by using the node labels.
$ kubectl get nodes -o wide --show-labels
$ kubectl label nodes <node-name> noname.io/fio=true
$ cat statefulset-node-select.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: fiobench
spec:
serviceName: fiobench
replicas: 1
selector:
matchLabels:
app: fiobench
template:
metadata:
labels:
app: fiobench
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: noname.io/fio
operator: In
values:
- "true"
containers:
- name: fiobench
image: noname/perfbench:fio
imagePullPolicy: Always
volumeMounts:
- name: fiobench-data-1
mountPath: /fiodata1
- name: fiobench-data-2
mountPath: /fiodata2
securityContext:
privileged: true
imagePullSecrets:
- name: regcred
volumeClaimTemplates:
- metadata:
name: fiobench-data-1
spec:
storageClassName: fio-repl-node-select
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1400Gi
- metadata:
name: fiobench-data-2
spec:
storageClassName: fio-repl-node-select
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1400Gi
$ kubectl apply -f statefulset-node-select.yaml
$ kubectl get statefulset
$ kubectl get pod -o wide