---
title: Charmhub | Deploy MetalLB using Charmhub - The Open Operator Collection
description: Deploy the latest version of MetalLB on any cloud.
url: https://charmhub.io/metallb/docs/t-overview
---

# MetalLB

[Canonical Kubernetes](https://charmhub.io/publisher/containers "View all packages from Canonical Kubernetes")

* [Canonical Kubernetes](https://charmhub.io/publisher/containers "View all packages from Canonical Kubernetes")

Platform:

22.04

stable ddac181

```
juju deploy metallb
```

[Learn to deploy on juju >](https://juju.is/docs/juju/manage-applications)

---

#### Relevant links

* [Homepage](https://metallb.universe.tf/)

---

#### Contacts

* [Submit a bug](https://bugs.launchpad.net/operator-metallb)

---

Share your thoughts on this charm with the community on discourse.

[Join the discussion](https://discourse.charmhub.io/)

# Charmed MetalLB tutorial

The Charmed MetalLB Operator delivers automated operations management from day 0 to day 2
on the [MetalLB Load Balancer Implementation for Bare Metal Kubernetes](https://metallb.universe.tf/). It is an open source, production-ready charm on top of [Juju](https://juju.is/)

As a first step this tutorial shows you how to get Charmed MetalLB up and running, but the tutorial does not stop there. In this tutorial we will walk through how to:

* Set up an environment using Kubernetes and [Juju](https://juju.is/).
* Deploy MetalLB using a single command.
* Configure the IPAddressPool.

## [What you’ll need](https://charmhub.io/metallb/docs/t-overview#p-26953-what-youll-need)

While this tutorial intends to guide and teach you as you deploy Charmed MetalLB, it will be most beneficial if you already have a familiarity with:

* Basic terminal commands.
* MetalLB concepts.

Before we start, make sure you can meet the following requirements:

* Access to the internet for downloading the required charms and containers
* Access to a Kubernetes Cloud either
  + [deployed via microk8s](https://juju.is/docs/juju/get-started-with-juju#heading--prepare-your-cloud)
  + [deployed via charmed-kubernetes](https://ubuntu.com/kubernetes/docs/quickstart)
  + or otherwise deployed

## [Represent the cloud in juju](https://charmhub.io/metallb/docs/t-overview#p-26953-represent-the-cloud-in-juju)

Juju recognizes your MicroK8s cloud automatically. You can already see it if you run:

```
juju clouds
```

```
Cloud      Regions  Default    Type  Credentials  Source    Description
microk8s   1        localhost  k8s   1            built-in  A Kubernetes Cluster
```

If it is not there, you may add the cloud with:

```
KUBECONFIG=path/to/kubeconfig/file  juju add-k8s --client <k8s-cloud>
```

## [Deploy Charmed MetalLB](https://charmhub.io/metallb/docs/t-overview#p-26953-deploy-charmed-metallb)

The best way to deploy MetalLB in Layer 2 mode on Charmed Kubernetes is with the MetalLB charm, which activates both the metallb controller Deployment and metallb speaker DaemonSet.

Run the following command, which will fetch the charm from [Charmhub](https://charmhub.io/metallb?channel=1.28/stable) and deploy it to your model:

```
juju deploy metallb --channel 1.28/stable --trust
```

Juju will now fetch Charmed MetalLB and begin deploying it to the Kubernetes cluster. This process can take several minutes depending on how provisioned (RAM, CPU, etc) your machine is. You can track the progress by running:

```
juju status --watch 1s
```

This command is useful for checking the status of Charmed MetalLB and gathering information about the containers hosting Charmed MetalLB. Some of the helpful information it displays include IP addresses, ports, state, etc. The command updates the status of Charmed MetalLB every second and as the application starts you can watch the status and messages of Charmed MetalLB change. Wait until the application is ready - when it is ready, `juju status` will show:

```
Model         Controller       Cloud/Region                     Version  SLA          Timestamp
juju-metallb  overlord         k8s-cloud/default                3.1.5    unsupported  13:32:58-05:00

App      Version  Status  Scale  Charm    Channel      Rev  Address        Exposed  Message
metallb           active      1  metallb  1.28/stable  9    10.152.183.85  no

Unit        Workload  Agent  Address       Ports  Message
metallb/0*  active    idle   192.168.0.15
```

To exit the screen with `juju status --watch 1s`, enter `Ctrl+c`.
If you want to further inspect juju logs, can watch for logs with `juju debug-log`.
More info on logging at [juju logs](https://juju.is/docs/olm/juju-logs).

## [Configure MetalLB](https://charmhub.io/metallb/docs/t-overview#p-26953-configure-metallb)

You will need to change the IP addresses allocated to MetalLB to suit your environment. The IP addresses can be specified as a range, such as “192.168.1.88-192.168.1.89”, or as a comma-separated list of pools in CIDR notation, such as “192.168.1.240/28, 10.0.0.0/28”.

Configuring the IP addresses can be done either at time of deployment via single-line config or later by changing the charm config via Juju.

This will adjust the default `IPAddressPool.spec.addresses` created by the charm according to the [specification](https://metallb.universe.tf/configuration/_advanced_ipaddresspool_configuration/)

An example single-line config adjustment might look like:

```
juju deploy metallb --config iprange='192.168.1.88-192.168.1.89' --trust
```

Alternatively, you can change the config directly on the metallb charm at any time:

```
juju config metallb iprange="192.168.1.240/28, 10.0.0.0/28"
```

---
