Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/virtual-kubelet/nomad

HashiCorp Nomad Provider for Virtual Kubelet
https://github.com/virtual-kubelet/nomad

Last synced: about 1 month ago
JSON representation

HashiCorp Nomad Provider for Virtual Kubelet

Awesome Lists containing this project

README

        

# HashiCorp Nomad Provider for Virtual Kubelet

HashiCorp [Nomad](https://nomadproject.io) provider for Virtual Kubelet connects your Kubernetes cluster
with Nomad cluster by exposing the Nomad cluster as a node in Kubernetes. By
using the provider, pods that are scheduled on the virtual Nomad node
registered on Kubernetes will run as jobs on Nomad clients as they
would on a Kubernetes node.

**This is an experimental project. This project isn't production ready.**

## Demo

![Virtual Kubelet Nomad Provider Demo](./images/virtual-kubelet-nomad-provider-showcase.gif "Virtual Kubelet Nomad Provider Demo")

## Prerequisites

This guide assumes the following:

* A Nomad cluster up and running.
* A Kubernetes cluster up and running.
* The Nomad API is accessible from the Kubernetes cluster.
* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl) installed.

## Usage

The Nomad provider accepts the following two environment variables:

* `NOMAD_ADDR` - The Nomad API address. Set to `127.0.0.1:4646` by default.
* `NOMAD_REGION` - The Nomad region. Set to `global` by default.

```bash
export NOMAD_ADDR="127.0.0.1:4646"
export NOMAD_REGION="global"
```

### Run Virtual Kubelet with Nomad Provider

```bash
VK_TAINT_KEY="hashicorp.com/nomad" ./virtual-kubelet --provider="nomad"
```

Validate that the virtual kubelet node is registered.

```bash
kubectl get nodes
```

Expected output.

```bash
NAME STATUS ROLES AGE VERSION
minikube Ready master 55d v1.10.0
virtual-kubelet Ready agent 1m v1.13.1-vk-N/A
```

### Create a Pod in Kubernetes

```bash
kubectl apply -f pods/nginx-pod.yaml
```

Validate pod.

```bash
kubectl get pods
```

Expected output.

```bash
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 1m
```

Validate Nomad job.

```bash
nomad status
```

Expected output.

```bash
ID Type Priority Status Submit Date
nomad-virtual-kubelet-nginx service 100 running 2018-12-31T16:52:52+05:30
```

### Configuration Options

The Nomad provider has support for annotations to define Nomad [datacenters](https://www.nomadproject.io/docs/job-specification/job.html#datacenters).

Here is an example usage of the Nomad datacenter annotations in a pod spec.

```yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
annotations:
"nomad.hashicorp.com/datacenters": "us-east1,us-west1"
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
- containerPort: 443
dnsPolicy: ClusterFirst
nodeSelector:
kubernetes.io/role: agent
beta.kubernetes.io/os: linux
type: virtual-kubelet
tolerations:
- key: virtual-kubelet.io/provider
operator: Exists
- key: hashicorp.com/nomad
effect: NoSchedule
```