halo sobat sekolahlinux, kali ini saya bakal coba share bagaimana cara mendistribusikan replica pods secara merata ke setiap node, jadi goalnya agar replica pods tidak menumpuk didalam 1 node, yang tentu jika menumpuk didalam 1 node ini tidak baik.
untuk bisa mendistribusikan pods secara merata ke setiap node kita akan menggunakan podAntiAffinity dan pada metode ini kita bisa menggunakan 2 methode yaitu
- requiredDuringSchedulingIgnoredDuringExecution pada methode ini kita memberitahukan pods untuk benar-benar berada pada node yang berbeda, pada methode ini diwajibkan jumlah replica pods haruslah sama dengan jumlah node yang ada, jika jumlah node tidak sama, maka pods akan mentriger node autoscale untuk scaling up sesuai dengan jumlah replica pods, namun jika jumlah max node autoscale tidak mencukupi, maka pods sisanya akan berada di status pending, misal jumlah replica pods adalah 10 dan jumlah node saat itu adalah 5, maka node autoscale akan metriger untuk scaling up hinggal jumlah node 10 walaupun resource dari masing-masing node masih cukup untuk menampung pods lain
- preferredDuringSchedulingIgnoredDuringExecution pada methode ini kita memberitahukan pods untuk menyebar secara merata kesetiap node yang berbeda, namun pada methode ini jumlah node existing tidak lah harus sama dengan jumlah pods replica, sehingga walaupun jumlah node kita kurang dari jumlah pods replica, ini tidak akan mentriger node autoscale melakukan scaling up, pada methode ini pods akan mengisi secara merata ke semua node, misal jumlah replica pods 10 dan jumlah node 5, maka masing-masing node akan ada 2 replica pods, dengan syarat jumlah resource request nya masih mencukupi
oke langsung saja ya berikut ini contoh manifest untuk podAntiAffinity untuk setiap methode nya
- requiredDuringSchedulingIgnoredDuringExecution:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - nginx topologyKey: "kubernetes.io/hostname" containers: name: nginx image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80
- preferredDuringSchedulingIgnoredDuringExecution:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - nginx topologyKey: kubernetes.io/hostname weight: 100 containers: name: nginx image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80
nah selanjutnya kalian tinggal mencobanya saja, untuk detail dari paramater diatas kamu bisa baca langsung pada link dibawah
- https://kubernetes.io/docs/reference/labels-annotations-taints/
- https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
selamat mencoba ya