Lokomotive is an open source project by Kinvolk which distributes pure upstream Kubernetes.
- Kubernetes v1.17.3 (upstream, via kubernetes-incubator/bootkube)
- Single or multi-master, Calico or flannel networking
- On-cluster etcd with TLS, RBAC-enabled, network policy
- Advanced features like worker pools and snippets customization
Lokomotive provides a Terraform Module for each supported operating system and platform. Flatcar Container Linux is a mature and reliable choice.
Platform | Operating System | Terraform Module | Status |
---|---|---|---|
AWS | Flatcar Container Linux | aws/flatcar-linux/kubernetes | stable |
Azure | Flatcar Container Linux | azure/flatcar-linux/kubernetes | alpha |
Bare-Metal | Flatcar Container Linux | bare-metal/flatcar-linux/kubernetes | stable |
Packet | Flatcar Container Linux | packet/flatcar-linux/kubernetes | beta |
- Architecture concepts and operating-systems
- Tutorials for AWS, Azure, Bare-Metal and Packet
Define a Kubernetes cluster by using the Terraform module for your chosen platform and operating system. Here's a minimal example.
module "aws-tempest" {
source = "git::https://github.com/kinvolk/lokomotive-kubernetes//aws/flatcar-linux/kubernetes?ref=master"
# AWS
cluster_name = "yavin"
dns_zone = "example.com"
dns_zone_id = "Z3PAABBCFAKEC0"
# configuration
ssh_keys = [
"ssh-rsa AAAAB3Nz...",
"ssh-rsa AAAAB3Nz...",
]
asset_dir = "/home/user/.secrets/clusters/yavin"
# optional
worker_count = 2
worker_type = "t3.small"
}
Initialize modules, plan the changes to be made, and apply the changes.
$ terraform init
$ terraform plan
Plan: 64 to add, 0 to change, 0 to destroy.
$ terraform apply
Apply complete! Resources: 64 added, 0 changed, 0 destroyed.
In 4-8 minutes (varies by platform), the cluster will be ready. This AWS example creates a yavin.example.com
DNS record to resolve to a network load balancer backed by controller instances.
$ export KUBECONFIG=/home/user/.secrets/clusters/yavin/auth/kubeconfig
$ kubectl get nodes
NAME ROLES STATUS AGE VERSION
yavin-controller-0.c.example-com.internal controller,master Ready 6m v1.14.1
yavin-worker-jrbf.c.example-com.internal node Ready 5m v1.14.1
yavin-worker-mzdm.c.example-com.internal node Ready 5m v1.14.1
List the pods.
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-node-1cs8z 2/2 Running 0 6m
kube-system calico-node-d1l5b 2/2 Running 0 6m
kube-system calico-node-sp9ps 2/2 Running 0 6m
kube-system coredns-1187388186-dkh3o 1/1 Running 0 6m
kube-system kube-apiserver-zppls 1/1 Running 0 6m
kube-system kube-controller-manager-3271970485-gh9kt 1/1 Running 0 6m
kube-system kube-controller-manager-3271970485-h90v8 1/1 Running 1 6m
kube-system kube-proxy-117v6 1/1 Running 0 6m
kube-system kube-proxy-9886n 1/1 Running 0 6m
kube-system kube-proxy-njn47 1/1 Running 0 6m
kube-system kube-scheduler-3895335239-5x87r 1/1 Running 0 6m
kube-system kube-scheduler-3895335239-bzrrt 1/1 Running 1 6m
kube-system pod-checkpointer-l6lrt 1/1 Running 0 6m
kube-system pod-checkpointer-l6lrt-controller-0 1/1 Running 0 6m
Flatcar Container Linux Edge is a Flatcar Container Linux channel that includes experimental bleeding-edge features.
To try it just add the following configuration option to the example above.
os_image = "flatcar-edge"
Ask questions on the IRC #lokomotive-k8s channel on freenode.net.