StatefulSet Hakkında

Merhabalar Arkadaşlar,

8 adet node ve 1 adet master sunucumun olduğu bir yapıda Statefulset kurmak istiyorum. Birden fazla projem mevcut ve bu statefulsetler aktif bir şekilde çalışıyor. Service olarak ise headless bir service olarak ayağa kaldırdım. Dışarıdan ulaşmaya çalıştığımda herhangi bir sorun olmadan çalışmaktadır ancak projerlerimden bazıları birbiriyle haberleşmek zorundalar ve buna göre sonuç dönüyorlar. Projeler kendi aralarında haberleşemiyor ve hata dönüyor.

Headless service de böyle bir sorunla karşılaşan oldu mu? Nodeport yapısıyla statefulset çalışıyor mu?

Teşekkürler…

merhaba, nasıl bir hata dönüyor? headless service size virtual ip dönüp trafiği loadbalance etmek yerine podlara direkt erişmenizi sağlar. statefulset podları benzersiz şekilde tanımlamakla ilgilidir. diğer podlardan bu statefullset’deki podlara erişmek isterseniz statefulservice-0 yada 1 - 2 -3.serviceadı şeklinde giderseniz erişebilirsiniz.

{“timestamp”:“2022-03-12T08:53:13Z”,“traceId”:“62ca0c260d”,“status”:“INTERNAL_SERVER_ERROR”,“type”:null,“code”:0,“message”:"I/O error on GET request for “http://test.deneme.com:6000/belge/testcikti

Böyle bir hata alıyorum. a adı altında oluşturduğum statefulset ile b adı altında oluşturduğum statefulset birbiriyle iletişim halinde olması gerekiyor. Service olarak bunu kullanıyorum.

kind: Service
apiVersion: v1
metadata:
  name: proje
  namespace: branch
  labels:
    app: proje
spec:
  clusterIP: None
  ports:
    - name: tcp-6000
      protocol: TCP
      port: 6000
      targetPort: 6000
  selector:
    app: proje

cluster içerisinden bir statefulset’e ulaşmak için servisin ismine gitmeniz gerekir. yani diyelim siz “web” isimli bir statefulset’i “web-service” isimli bir headless servisle cluster içinde expose ettiniz. diğer podlardan bu statefulset’e ulaşmak için “web” ismine giderseniz size her seferinde bu statefulset’deki podların ip adresleri rastgele sırayla geri dönecek. yani her sorguda aldığınız ip adresi değişecek. bu sürekli aynı poda gitmeniz gereken bir session söz konusu olduğunda sorun yaratacak. misal arada cookie işleyen ve ona göre karar veren bir mekanizma olmadığı için http temelli sessionlarda sorun çıkacak. bunu aşmak için direkt bu podlardan spesifik birine bağlantı kurabailirsiniz. web-1.web-service şeklinde direkt web-1 isimli pod’a gidebilirsiniz. tabi ortada bu sefer bir load balancing olmayacak ve her seferinde aynı pod’a gideceksiniz. ama zaten statefulsetin amacı load balancing sağlamak değil. bu tarz her seferinde aynı ismi sahip olacak ve sırayla oluşturulacak podlar oluşturmak için statefulset var. eğer sizin uygulamanız buna uygun değilse, statefulset yerine deployment oluşturup clusterip tipi servisle cluster içinde expose etmek daha doğru bir yöntem olacaktır.