• This repository has been archived on 22/Apr/2020
  • Stars
    star
    534
  • Rank 83,095 (Top 2 %)
  • Language
    Shell
  • License
    Apache License 2.0
  • Created about 9 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

[EOL] {concise,reliable,cross-platform} turnup of Kubernetes clusters

Kubernetes Anywhere

{concise,reliable,cross-platform} turnup of Kubernetes clusters

WARNING: kubernetes-anywhere is deprecated and will be retired in a future release.

Consider using some of these active projects instead:

Goals and Motivation

Learning how to deploy Kubernetes is hard because the default deployment automation cluster/kube-up.sh is opaque. We can do better, and by doing better we enable users to run Kubernetes in more places.

This implementation will be considered successful if it:

  • is portable across many deployment targets (e.g. at least GCE/AWS/Azure)
  • allows for an easy and reliable first experience with running multinode Kubernetes in the cloud
  • is transparent (the opposite of opaque) and can be used as a reference when creating deployments to new targets

Getting Started

If you want to deploy a cluster to kick the tires of Kubernetes, checkout one of the getting started guides for your preferred supported deployment target.

Diving Deeper

If you want to understand, read further about the design and implementation then dive into the code.

Deployment Design:

The input of the deployment is a cluster configuration object, specified as JSON object. We use Kconfig to describe the structure of this object and add configuration parameters. You may notice that scattered around this repository, there are Kconfig files that define configuration parameters. Running make config .config.json executes the configuration wizard and produces a file in the root of the repository, .config.json which stores this config object.

The deployment consists of three phases (not including generating the config object), provisioning, bootstrap and addon deployment:

  1. Resource Provisioning
  2. Node Bootstrap
  3. Addon Deployment

Phase 1: Resource Provisioning

Provisioning consists of creating the physical or virtual resources that the cluster will run on (ips, instances, persistent disks). Provisioning will be implemented per cloud provider. There will be an implementation of GCE/AWS/Azure provisioning that utilizes Terraform. This phase takes the cluster configuration object as input.

Phase 2: Node Bootstrap

Bootstrapping consists of on host installation and configuration. This process installs Docker and a single init unit for the kubelet running in a Docker container. On the master, it also places configuration files for master component static pods into the kubelet manifest directory, thus starting the control-plane.

The input to bootstrap phase is the cluster configuration object along with a small amount of other information (e.g. ip address of the master, cryptographic assets) that are output by phase 1. This step is currently implemented with a minimal Ignition configuration that runs in a Docker container that bootstraps the host over a chroot. This phase will ideally be implemented once for all deployment targets (with sufficient configuration parameters).

Phase 3: Deploying Cluster Addons

Addon deployment consists of deploying onto the Kubernetes cluster all the applications that make Kubernetes run. Examples of these apps are kube-dns, heapster monitoring, kube-proxy, a SDN node agent if the deployment calls for one. These applications are managed with kubectl apply and can be deployed and managed with a single command.

Tying it all together

Phase 1 should be sufficiently decoupled from phase 2 such that phase 2 could be used with minimal modification on deployment targets that don't have a phase 1 implemented for them (e.g. baremetal).

At the end of these two phases:

  • The master will be running a kubelet in a Docker container and (apiserver, controller-manager, scheduler, etcd and addon-manager) in static pods.
  • The nodes will be running a kubelet in a Docker container that is registered securely to the apiserver using TLS client key auth.

Deployment of fluentd, kube-proxy will happen with DaemonSets after this process through the addon manager. Deployment of heapster, kube-dns, all other addons will happen after this process through the addon manager.

There should be a reasonably portable default networking configuration. For this default: node connectivity will be configured during provisioning and pod connectivity will be configured during bootstrapping. Pod connectivity will (likely) use flannel and the kubelet cni network plugin. The pod networking configuration should be sufficiently decoupled from the rest of the bootstrapping configuration so that it can be swapped with minimal modification for other pod networking implementations.

Contributing

Please see CONTRIBUTING.md for instructions on how to contribute.

More Repositories

1

external-storage

[EOL] External storage plugins, provisioners, and helper libraries
Go
2,696
star
2

heapster

[EOL] Compute Resource Usage Analysis and Monitoring of Container Clusters
Go
2,626
star
3

kubefed

Kubernetes Cluster Federation
Go
2,484
star
4

contrib

[EOL] This is a place for various components in the Kubernetes ecosystem that aren't part of the Kubernetes core.
Go
2,467
star
5

bootkube

This project now lives at https://github.com/kinvolk/bootkube
Go
1,154
star
6

kube-aws

[EOL] A command-line tool to declaratively manage Kubernetes clusters on AWS
Go
1,130
star
7

kubeadm-dind-cluster

[EOL] A Kubernetes multi-node test cluster based on kubeadm
Shell
1,109
star
8

kube-batch

A batch scheduler of kubernetes for high performance workload, e.g. AI/ML, BigData, HPC
Go
1,065
star
9

service-catalog

Consume services in Kubernetes using the Open Service Broker API
Go
1,049
star
10

multi-tenancy

A working place for multi-tenancy related proposals and prototypes.
Go
950
star
11

frakti

The hypervisor-based container runtime for Kubernetes.
Go
670
star
12

kube-deploy

[EOL] A place for cluster deployment automation
Go
535
star
13

poseidon

[EOL] A Firmament-based Kubernetes scheduler
Go
409
star
14

kubernetes-bootcamp

[EOL] please see https://kubernetes.io/docs/tutorials/kubernetes-basics/ instead
JavaScript
268
star
15

cluster-registry

[EOL] Cluster Registry API
Go
237
star
16

kubernetes-docs-zh

[EOL] Chinese-language Kubernetes documentation
HTML
219
star
17

kubedash

[EOL] Analytics dashboard for Kubernetes
JavaScript
217
star
18

federation

[EOL] Cluster Federation
Go
209
star
19

kube-ui

[EOL] Deprecated Web UI for Kubernetes; please try dashboard instead
Go
150
star
20

drivers

[EOL] Example CSI Drivers
Go
139
star
21

rktlet

[EOL] The rkt implementation of the Kubernetes Container Runtime Interface
Go
138
star
22

kube-mesos-framework

[EOL] Kubernetes as a Mesos framework
HTML
108
star
23

minibroker

A minibroker for your minikube!
Go
89
star
24

csi-driver-image-populator

[EOL] CSI driver that uses a container image as a volume
Go
88
star
25

spartakus

[EOL] Anonymous Usage Collector
Go
75
star
26

nfs-provisioner

Go
71
star
27

cluster-api-bootstrap-provider-kubeadm

LEGACY REPO. NEW CODE IS https://github.com/kubernetes-sigs/cluster-api/tree/master/bootstrap/kubeadm
Go
62
star
28

go-open-service-broker-client

A golang client for service brokers implementing the Open Service Broker API
Go
60
star
29

cluster-api-provider-docker

A Cluster API Provider implementation using docker containers as the infra provider. Cluster API locally for a change!
Go
51
star
30

application-images

[EOL] Image build contents for Kubernetes applications.
Shell
48
star
31

kubernetes-docs-ko

[EOL] Korean-language Kubernetes documentation
HTML
34
star
32

testing_frameworks

[EOL] test frameworks for testing kubernetes
Go
34
star
33

csi-api

[EOL] CSIDriver CRD object
Go
23
star
34

mutating-trace-admission-controller

[EOL] a mutating admission controller which enables experimental tracing of kubernetes object lifecycle
Go
22
star
35

funding

Funding requests for project infrastructure, events, and consulting.
16
star
36

kubernetes-docs-ja

[EOL] Japanese-language Kubernetes documentation
HTML
16
star
37

k8s-gsm-tools

Controllers to sync and rotate kubernetes secrets with google secret manager
Go
14
star
38

contributor-tweets

Repo for automating tweets to the K8sContributor twitter account owned by the k8s Contributor Comms Team within SIG-contribex (https://github.com/kubernetes/community/tree/master/communication/contributor-comms)).
JavaScript
14
star
39

typescript

[EOL] see https://github.com/kubernetes-client/javascript instead
TypeScript
11
star
40

csi-driver-flex

[EOL] CSI Flexadapter driver and its build and dependent configuration files.
Shell
9
star
41

sig-usability

[EOL] SIG-Usability related docs and code
8
star
42

staging-noderesourcetopology-api

NodeResourceTopology API enables Topology aware scheduling in Kubernetes.
Shell
8
star
43

cosi-driver-minio

[EOL] Sample Driver that provides reference implementation for Container Object Storage Interface (COSI) API
Go
7
star
44

architecture-tracking

[EOL] Program management board for Kubernetes SIG-Architecture governed processes
7
star
45

csi-lib-fc

[EOL] A go package that can be imported to help CSI plugins with connecting to fibre channel devices
Go
6
star
46

csi-driver-fibre-channel

[EOL] Fibre Channel CSI Driver
Makefile
3
star
47

md-check

Go
2
star
48

kubernetes-csi-migration-library

[EOL] created due to https://github.com/kubernetes/org/issues/153
Go
1
star