K8s

K8s - Kubernetes API Client for Elixir

Build StatusCoverage StatusHex.pmDocumentationHex.pm

Features

Installation

The package can be installed by adding k8s to your list of dependencies in mix.exs:

def deps do
[
{:k8s, "~> 0.5"}
]
end

Usage

Check out the Usage Guide for in-depth examples.

Most functions are also written using doctests.

If you are interested in building Kubernetes Operators or Schedulers, check out Bonny.

tl;dr Examples

Configure a cluster

There are many ways to configure cluster connections. Check out the guide for additional options.

In config.exs:

config :k8s,
clusters: %{
prod_us_east1: %{ # <- this can be any name, used to load connections later
# Path to kube config
conn: "~/.kube/config",
# By default current context will be used, you can change the user or cluster
conn_opts: [user: "some-user", cluster: "prod-cluster"]
}
}

Creating a deployment

{:ok, conn} = K8s.Conn.lookup(:prod_us_east1)
opts = [namespace: "default", name: "nginx", image: "nginx:nginx:1.7.9"]
{:ok, resource} = K8s.Resource.from_file("priv/deployment.yaml", opts)
operation = K8s.Client.create(resource)
{:ok, deployment} = K8s.Client.run(operation, conn)

Listing deployments

In a namespace:

{:ok, conn} = K8s.Conn.lookup(:prod_us_east1)
operation = K8s.Client.list("apps/v1", "Deployment", namespace: "prod")
{:ok, deployments} = K8s.Client.run(operation, conn)

Across all namespaces:

{:ok, conn} = K8s.Conn.lookup(:prod_us_east1)
operation = K8s.Client.list("apps/v1", "Deployment", namespace: :all)
{:ok, deployments} = K8s.Client.run(operation, conn)

Getting a deployment

{:ok, conn} = K8s.Conn.lookup(:prod_us_east1)
operation = K8s.Client.get("apps/v1", :deployment, [namespace: "default", name: "nginx-deployment"])
{:ok, deployment} = K8s.Client.run(operation, conn)