mendistribusikan pods pada node k8s secara merata dengan podAntiAffinity

0
659

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

selamat mencoba ya