---
title: Charmhub | Deploy Opensearch K8S using Charmhub - The Open Operator Collection
description: Deploy the latest version of Opensearch K8S as a Kubernetes Operator
  on any cloud.
url: https://charmhub.io/opensearch-k8s/docs/t-set-up
---

# Opensearch K8S

[Canonical](https://charmhub.io/publisher/data-platform "View all packages from Canonical")

* [Canonical](https://charmhub.io/publisher/data-platform "View all packages from Canonical")

Platform:

2/edge 22

```
juju deploy opensearch-k8s --channel 2/edge
```

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

---

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

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

> [Charmed OpenSearch Tutorial](https://charmhub.io/opensearch-k8s/docs/tutorial) > 1. Set up the environment

# Set up the environment

In this step, we will set up a development environment with the required components for deploying Charmed OpenSearch.

> Before you start, make sure your machine meets the [minimum system requirements](https://charmhub.io/opensearch-k8s/docs/r-system-requirements).

## [Summary](https://charmhub.io/opensearch-k8s/docs/t-set-up#p-24545-summary)

* [Set up LXD](https://charmhub.io/opensearch-k8s/docs/t-set-up#set-up-lxd)
* [Set up Juju](https://charmhub.io/opensearch-k8s/docs/t-set-up#set-up-juju)
* [Set kernel parameters](https://charmhub.io/opensearch-k8s/docs/t-set-up#set-kernel-parameters)

---

## [Set up LXD](https://charmhub.io/opensearch-k8s/docs/t-set-up#p-24545-set-up-lxd)

The simplest way to get started with Charmed OpenSearch is to set up a local LXD cloud. [LXD](https://documentation.ubuntu.com/lxd/en/latest/) is a system container and virtual machine manager that comes pre-installed on Ubuntu. Juju interfaces with LXD to control the containers on which Charmed OpenSearch runs.

Verify if your Ubuntu system already has LXD installed with the command `which lxd`. If there is no output, then install LXD with

```
sudo snap install lxd
```

After installation, `lxd init` is run to perform post-installation tasks. For this tutorial, the default parameters are preferred and the network bridge should be set to have no IPv6 addresses since Juju does not support IPv6 addresses with LXD:

```
lxd init --auto
lxc network set lxdbr0 ipv6.address none
```

You can list all LXD containers by executing the command `lxc list`. At this point in the tutorial, none should exist, so you’ll only see this as output:

```
+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+
```

## [Set up Juju](https://charmhub.io/opensearch-k8s/docs/t-set-up#p-24545-set-up-juju)

[Juju](https://juju.is/docs/juju) is an Operator Lifecycle Manager (OLM) for clouds, bare metal, LXD or Kubernetes. We will be using it to deploy and manage Charmed OpenSearch.

As with LXD, Juju is installed using a snap package:

```
sudo snap install juju --channel 3.5/stable --classic
```

Juju already has a built-in knowledge of LXD and how it works, so there is no additional setup or configuration needed, however, because Juju 3.x is a [strictly confined snap](https://snapcraft.io/docs/classic-confinement), and is not allowed to create a `~/.local/share` directory, we need to create it manually.

```
mkdir -p ~/.local/share
```

To list the clouds available to Juju, run the following command:

```
juju clouds
```

The output will look as follows:

```
Clouds available on the client:
Cloud      Regions  Default    Type  Credentials  Source    Description
localhost  1        localhost  lxd   1            built-in  LXD Container Hypervisor
```

Notice that Juju already has a built-in knowledge of LXD and how it works, so there is no need for additional setup. A controller will be used to deploy and control Charmed OpenSearch.

Run the following command to bootstrap a Juju controller named `opensearch-demo` on LXD:

```
juju bootstrap localhost opensearch-demo
```

This bootstrapping process can take several minutes depending on your system resources.

The Juju controller exists within an LXD container. You can verify this by entering the command `lxc list`.

This will output the following:

```
+---------------+---------+-----------------------+------+-----------+-----------+
|     NAME      |  STATE  |         IPV4          | IPV6 |   TYPE    | SNAPSHOTS |
+---------------+---------+-----------------------+------+-----------+-----------+
| juju-<id>     | RUNNING | 10.105.164.235 (eth0) |      | CONTAINER | 0         |
+---------------+---------+-----------------------+------+-----------+-----------+
```

where `<id>` is a unique combination of numbers and letters such as `9d7e4e-0`

Set up a unique model for this tutorial named `tutorial`:

```
juju add-model tutorial
```

You can now view the model you created above by entering the command `juju status` into the command line. You should see the following:

```
Model     Controller       Cloud/Region         Version  SLA          Timestamp
tutorial  opensearch-demo  localhost/localhost  3.5.3    unsupported  11:26:13Z
```

## [Set kernel parameters](https://charmhub.io/opensearch-k8s/docs/t-set-up#p-24545-set-kernel-parameters)

Before deploying Charmed OpenSearch, we need to set some [kernel parameters](https://www.kernel.org/doc/Documentation/sysctl/vm.txt). These are requirements for OpenSearch to function correctly.

Since we are using LXD containers to deploy our charm, and containers share a kernel with their host, we need to set these kernel parameters on the host machine. We will save the default values, change them to the optimal values for OpenSearch, and add the parameters to the Juju model’s configuration.

### [Get default values](https://charmhub.io/opensearch-k8s/docs/t-set-up#p-24545-get-default-values)

First, we need to make note of the current parameters of the kernel because we will need to reset them after the tutorial (although rebooting your machine will also do the trick).

Let’s run `sysctl` and filter the output for the three specific parameters that we will be changing:

```
sudo sysctl -a | grep -E 'swappiness|max_map_count|tcp_retries2'
```

This command should return something like the following:

```
net.ipv4.tcp_retries2 = 15
vm.max_map_count = 262144
vm.swappiness = 60
```

Make note of the above variables so that you can reset them later to their original values. Using the host machine outside of this tutorial without resetting these kernel parameters manually or rebooting may have an impact on the host machine’s performance.

### [Set parameters on the host machine](https://charmhub.io/opensearch-k8s/docs/t-set-up#p-24545-set-parameters-on-the-host-machine)

Set the kernel parameters to the recommended values for OpenSearch with the following commands:

```
sudo tee -a /etc/sysctl.conf > /dev/null <<EOT
vm.max_map_count=262144
vm.swappiness=0
net.ipv4.tcp_retries2=5
fs.file-max=1048576
EOT

sudo sysctl -p
```

Please note that these values reset on system reboot, so if you complete this tutorial in multiple stages, you’ll need to set these values again each time you restart your host machine.

### [Add parameters to Juju model config](https://charmhub.io/opensearch-k8s/docs/t-set-up#p-24545-add-parameters-to-juju-model-config)

You also need to set the Juju model configuration to include these parameters.

To do so, run the following commands:

```
cat <<EOF > cloudinit-userdata.yaml
cloudinit-userdata: |
  postruncmd:
    - [ 'echo', 'vm.max_map_count=262144', '>>', '/etc/sysctl.conf' ]
    - [ 'echo', 'vm.swappiness=0', '>>', '/etc/sysctl.conf' ]
    - [ 'echo', 'net.ipv4.tcp_retries2=5', '>>', '/etc/sysctl.conf' ]
    - [ 'echo', 'fs.file-max=1048576', '>>', '/etc/sysctl.conf' ]
    - [ 'sysctl', '-p' ]
EOF

juju model-config --file=./cloudinit-userdata.yaml
```

> **Next step:** [2. Deploy OpenSearch](https://charmhub.io/opensearch-k8s/docs/t-deploy-opensearch).

---
