Deploying Kuma Service Mesh with Puppet Bolt
Tags: servicemesh, devops, puppet, kuma
Published: 2021-04-10 01:31:37

---
title: Deploying Kuma Service Mesh with Puppet Bolt
published: true
date: 2021-04-05 15:38:27 UTC
tags: servicemesh,devops,puppet,kuma
canonical_url: https://martezreed.medium.com/deploying-kuma-service-mesh-with-puppet-bolt-24badff059e3
---

![](https://cdn-images-1.medium.com/max/1024/1*kL6VfwfmmPLgD7ikWENsHQ.jpeg)

Kuma is a platform agnostic open-source control plane for service mesh and microservices management, with support for Kubernetes, VM, and bare metal environments. Kubernetes has quickly become the de facto platform on which new applications are being built to take advantage of the benefits that come with containerization. The challenge that many organizations are facing is integrating containerized workloads in Kubernetes with VM based workloads in a meaningful way. In this case Kuma service mesh can be used to provide the benefits of service mesh in a k8s/vm hybrid scenario.

In this blog post we’ll take a look at how to use Puppet Bolt to deploy the universal version of the Kuma service mesh control plane intended for virtual machines.

### Initialize the Bolt project

> _Ensure that the latest version of Puppet Bolt is installed before getting started._

Puppet Bolt utilizes **Project** directories as launching points for running Bolt operations. Create a directory for our Puppet Bolt project name **kumamesh.**

```
mkdir kumamesh
```

Change the working directory to **kumamesh** directory

```
cd kumamesh
```

Now that we have a directory for hosting our Bolt project, we need to initialize the project.

```
bolt project init
```

Add the **puppet-kuma** module from the associated Github repository to the bolt-project.yaml file.

```
---
name: kumamesh
modules:
  - git: [https://github.com/martezr/puppet-kuma.git](https://github.com/martezr/puppet-kuma.git)
    ref: 'main'
```

Install the module and its dependencies.

```
bolt module install
```

### Create the Bolt plan

In order to utilize plans in Bolt, we need to create a directory named  **plans**.

```
mkdir plans
```

Now that we have our plans directory created we’ll use the Kuma service mesh module to install the Kuma service mesh control plane backed by a PostgreSQL database.

Create a file named **controlplane.pp** with the following content in the **plans** directory.

```
plan kumamesh::controlplane (
  TargetSpec $targets
) {
  apply_prep($targets)
  apply($targets){

    class { 'kuma':
      version => '1.1.1',
    }

    class { 'kuma::controlplane':
      manage_postgres => true,
    }
  }
}
```

Now that we’ve created our plan we can ensure that it’s recognized by Bolt by running the following command.

```
bolt plan show
```

If the plan registers properly the output should include a **kumamesh_::controlplane_** entry.

```
Plans
  aggregate::count                    
  aggregate::targets                  
  canary                              
  facts                               
  facts::external                     
  facts::info                         
  **kumamesh::controlplane**              
  puppet_agent::run                   
  puppet_connect::test_input_data     
  puppetdb_fact                       
  reboot                              
  secure_env_vars                     
  terraform::apply
  terraform::destroy
```

With the plan registered we are now ready to run the plan by running the bolt plan run kumamesh::controlplane command. We’ve specified the target which is the node we want to install the control plane on. In this example we’ve used IP addresses but resolvable hostnames could have been used as well.

```
bolt plan run kumamesh::controlplane --target 10.0.0.111
```

If the plan ran successfully it should have generated output similar to that displayed below.

```
Starting: plan kumamesh::controlplane
Starting: install puppet and gather facts on 10.0.0.111
Finished: install puppet and gather facts with 0 failures in 12.07 sec
Starting: apply catalog on 10.0.0.111
Finished: apply catalog with 0 failures in 53.15 sec
Finished: plan kumamesh::controlplane in 1 min, 6 sec
Plan completed successfully with no result

Plan completed successfully with no result
```

Once the plan has completed successfully we can now view the control plane GUI by browsing to [http://controlplane\_ip:5681/gui](http://controlplane_ip:5681/gui).

![](https://cdn-images-1.medium.com/max/1024/1*a6nJqjK-Kgiip6IjoaZYEA.png)