Files
virtual-kubelet/providers/nomad
Brian Goff a54753cb82 Move around some packages (#658)
* Move tracing exporter registration

This doesn't belong in the library and should be configured by the
consumer of the opencensus package.

* Rename `vkublet` package to `node`

`vkubelet` does not convey any information to the consumers of the
package.
Really it would be nice to move this package to the root of the repo,
but then you wind up with... interesting... import semantics due to the
repo name... and after thinking about it some, a subpackage is really
not so bad as long as it has a name that convey's some information.

`node` was chosen since this package deals with all the semantics of
operating a node in Kubernetes.
2019-06-12 13:11:49 +01:00
..
2019-01-07 11:48:11 -08:00
2019-01-07 11:48:11 -08:00
2019-06-12 13:11:49 +01:00

HashiCorp Nomad Provider for Virtual Kubelet

HashiCorp Nomad 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

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 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.
export NOMAD_ADDR="127.0.0.1:4646"
export NOMAD_REGION="global"

Run Virtual Kubelet with Nomad Provider

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

Validate that the virtual kubelet node is registered.

kubectl get nodes

Expected output.

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

kubectl apply -f pods/nginx-pod.yaml

Validate pod.

kubectl get pods

Expected output.

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

Validate Nomad job.

nomad status

Expected output.

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.

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

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