Compare languages | The metallb module: примеры

Metallb можно использовать в статических кластерах (bare metal), когда нет возможности воспользоваться балансировщиком от облачного провайдера. Metallb может работать в режимах L2 или BGP.

Metallb can be used in Static (Bare Metal) clusters when there is no option to use cloud load balancers. Metallb can work in L2 or BGP modes.

Пример использования metallb в L2-режиме

Example of Metallb usage in L2 mode

Пример включения модуля metallb и публикации отдельно запущенного приложения (веб-сервер Nginx).

Below is a small step-by-step guide on how to enable the metallb module, create a LoadBalancer and provide access to an application (Nginx web server).

  1. Задайте группы узлов (NodeGroup) для запуска приложений, к которым предоставляется доступ.
  1. Specify node groups (NodeGroup) to run the applications to provide access to.

Например, Ingress-контроллеры запускаются на frontend-узлах, а веб-сервер Nginx — на worker-узле. У frontend-узлов есть лейбл node-role.deckhouse.io/metallb="".

For example, Ingress controllers are run on frontend nodes while the application is run on a worker node. Frontend nodes have a label node-role/metallb="".

yaml apiVersion: deckhouse.io/v1 kind: NodeGroup metadata: name: frontend spec: disruptions: approvalMode: Manual nodeTemplate: labels: node-role.deckhouse.io/frontend: “” node-role.deckhouse.io/metallb: “” taints:

  • effect: NoExecute key: dedicated.deckhouse.io value: frontend nodeType: Static — apiVersion: deckhouse.io/v1 kind: NodeGroup metadata: name: worker spec: disruptions: approvalMode: Manual nodeType: Static

yaml apiVersion: deckhouse.io/v1 kind: NodeGroup metadata: name: frontend spec: disruptions: approvalMode: Manual nodeTemplate: labels: node-role.deckhouse.io/metallb: “” taints:

  • effect: NoExecute key: dedicated.deckhouse.io value: metallb nodeType: Static — apiVersion: deckhouse.io/v1 kind: NodeGroup metadata: name: worker spec: disruptions: approvalMode: Manual nodeType: Static
  1. Проверьте, что на узлах проставлен корректный лейбл:
  1. Make sure the nodes are labeled correctly:

bash kubectl get nodes -l node-role.deckhouse.io/metallb

bash kubectl get nodes -l node-role.deckhouse.io/metallb=

Пример вывода:

Your output should look something like this:

bash $ kubectl get nodes -l node-role.deckhouse.io/metallb NAME STATUS ROLES AGE VERSION demo-frontend-0 Ready frontend 61d v1.21.14 demo-frontend-1 Ready frontend 61d v1.21.14

bash $ kubectl get nodes -l node-role/metallb NAME STATUS ROLES AGE VERSION demo-frontend-0 Ready frontend 61d v1.21.14 demo-frontend-1 Ready frontend 61d v1.21.14

  1. Включите модуль metallb и задайте параметры nodeSelector и tolerations для спикеров MetalLB.
  1. Enable the metallb module and set the nodeSelector and tolerations parameters for the MetalLB speakers.

Пример конфигурации модуля: yaml apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: metallb spec: version: 1 enabled: true settings: addressPools:

  • addresses:
  • 192.168.199.100-192.168.199.102 name: frontend-pool protocol: layer2 speaker: nodeSelector: node-role.deckhouse.io/metallb: “” tolerations:
  • effect: NoExecute key: dedicated.deckhouse.io operator: Equal value: frontend

Below is an example of the module configuration: yaml apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: metallb spec: version: 1 enabled: true settings: addressPools:

  • addresses:
  • 192.168.199.100-192.168.199.102 name: frontend-pool protocol: layer2 speaker: nodeSelector: node-role.deckhouse.io/metallb: “” tolerations:
  • effect: NoExecute key: dedicated.deckhouse.io operator: Equal value: metallb
  1. Проинсталлируем приложение (nginx) и опубликуем на порту 8080:
  1. Deploy the application (nginx) and Service on port 8080:

shell kubectl create deploy nginx –image=nginx kubectl create svc loadbalancer nginx –tcp=8080:80

shell kubectl create deploy nginx –image=nginx kubectl create svc loadbalancer nginx –tcp=8080:80

  1. Проверьте, что сервис создан:
  1. Verify that the service has been created:

shell kubectl get svc nginx

shell kubectl get svc nginx

Пример вывода:

Your output should look something like this:

shell $ kubectl get svc nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx LoadBalancer 10.222.9.190 192.168.199.101 8080:31689/TCP 3m11s

shell $ kubectl get svc nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx LoadBalancer 10.222.9.190 192.168.199.101 8080:31689/TCP 3m11s

  1. Проверьте доступ к приложению.
  1. Check if the application is accessible.

Пример:

Example:

console $ curl -s -o /dev/null -w “%{http_code}” 192.168.199.101:8080 200

console $ curl -s -o /dev/null -w “%{http_code}” 192.168.199.101:8080 200