MetalLB v0.13.5 deploy and configuration Kubernetes 1.25

En kısa, açıklanabilir şekilde MetalLB on-premise sistemlerde load balancer olarak kullanılmaktadır. Sanal bir havuzdan istekleri 2 türde (layer2, bgp) yönlendirmekte, failover yeteneği bulunmakta..

Daha detaylı bilgi için; https://metallb.universe.tf/ https://blog.opstree.com/2020/10/13/kubernetes-diary-software-loadbalancer/ ve aşağıdaki görselleri inceleyebiliriz;

Ön gereksinimler;

A Kubernetes cluster, running Kubernetes 1.13.0 or later, that does not already have network load-balancing functionality.

A cluster network configuration that can coexist with MetalLB.

Some IPv4 addresses for MetalLB to hand out.

When using the BGP operating mode, you will need one or more routers capable of speaking BGP.

When using the L2 operating mode, traffic on port 7946 (TCP & UDP, other port can be configured) must be allowed between nodes, as required by memberlist.

Kuruluma başlamadan önce isteklerin gerçekleşebilmesi için;

kubectl edit configmap -n kube-system kube-proxy
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
strictARP: true

Helm ile deploy edebiliriz,

helm repo add metallb https://metallb.github.io/metallb
helm install metallb metallb/metallb --create-namespace -n metallb-system

Bu adımdan sonra podlar ContainerCreating, CreateContainerConfigError gözüküyorsa firewall kontrolü yapınız, geçici olarak kapatarak yada podlar için belirlenen network aralığına tamamen izin verip deneyebilirsiniz.

Çünkü belirtilen porta (7946) izin vermek yeterli olmuyor, webhook yaratırken başka bir hata veriyor, bu kısmı firewall’u kapatmadan yada geniş bir aralık vermeden çözemedim, eğer çözen olursa yorumlarda belirtiniz.

Events;

Warning  FailedCreatePodSandBox  118s (x18 over 73m)  kubelet  Failed to create pod sandbox: rpc error: code = DeadlineExceeded desc = context deadline exceeded

Kurulum tamamlandıktan sonra ip pool belirtmemiz gerekiyor,

vim resource.yaml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.1.240-192.168.1.250 #ip adreslerini değiştiriniz 
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2advertisementX
  namespace: metallb-system
spec:
  ipAddressPools:
  - first-pool
kubectl apply -f resource.yaml -n metallb-system
ipaddresspool.metallb.io/default created
l2advertisement.metallb.io/l2advertisement1 created

Önceki versiyonda belirttiğimiz bu ip adres havuzlarını bir configmap içerisinde barındırıyorduk, eğer versiyon geçişi yaptıysanız aşağıdaki gibi dönüşüm sağlayabilirsiniz.

Örnek configmap

kind: ConfigMap
apiVersion: v1
data:
  config: |
    address-pools:
    - addresses:
      - 10.10.10.131-10.10.10.132
      name: default
      protocol: layer2
metadata:
  annotations:
    meta.helm.sh/release-name: metallb
    meta.helm.sh/release-namespace: metallb-system
  labels:
    app.kubernetes.io/instance: metallb
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: metallb
    helm.sh/chart: metallb-2.5.1
  name: metallb-config
  namespace: metallb-system
#aynı dizinde;
docker run -d -v $(pwd):/var/input quay.io/metallb/configmaptocrs 
022/10/03 14:01:29 MetalLB generator starting. commit: dev branch: dev goversion: gc / go1.18.3 / amd64
2022/10/03 14:01:29 Reading configmap
2022/10/03 14:01:29 Decoding configmap
2022/10/03 14:01:29 Creating custom resources
2022/10/03 14:01:29 Validating the custom resources
2022/10/03 14:01:29 Creating the output YAML
2022/10/03 14:01:29 Generator finished successfully!

Oluşturulan resource.yaml dosyasını incelediğimizde;

# This was autogenerated by MetalLB's custom resource generator.
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  creationTimestamp: null
  name: default
  namespace: metallb-system
spec:
  addresses:
  - 10.10.10.131-10.10.10.132
status: {}
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  creationTimestamp: null
  name: l2advertisement1
  namespace: metallb-system
spec:
  ipAddressPools:
  - default
status: {}
---
kubectl apply -f resource.yaml -n metallb-system

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.