[Kubernetes] Kubernetes documentation
Change-Id: Ic6c8a0769bd92cd70e5ff42c5aecdf377c836f0c
This commit is contained in:
parent
931fd4406e
commit
f8be41a14c
124
Kubernetes/README.rst
Normal file
124
Kubernetes/README.rst
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
Google Kubernetes for Murano
|
||||||
|
============================
|
||||||
|
|
||||||
|
Packages in this folder are required to deploy both Google Kubernetes and
|
||||||
|
applications on top of it.
|
||||||
|
|
||||||
|
Contents of each folder need to be zipped and uploaded to Murano Catalog.
|
||||||
|
|
||||||
|
You will also need to build proper Ubuntu image for Kubernetes.
|
||||||
|
This can be done using diskimage-builder (https://github.com/openstack/diskimage-builder)
|
||||||
|
and DIB elements (https://github.com/stackforge/murano/tree/master/contrib/elements/kubernetes).
|
||||||
|
The image must has name ubuntu14.04-x64-kubernetes.qcow2
|
||||||
|
|
||||||
|
|
||||||
|
Kubernetes is an open-source container manager by Google. It is responsible to
|
||||||
|
schedule, run and manage docker containers into its own clustered setup.
|
||||||
|
|
||||||
|
Kubernetes consists of one or more master nodes running Kubernetes API and
|
||||||
|
one or more worker nodes (aka minions) that are used to schedule containers.
|
||||||
|
Containers are aggregated into pods. All containers in single pod are
|
||||||
|
guaranteed to be scheduled to a single node and share common port space.
|
||||||
|
Thus it can be considered as a container colocation.
|
||||||
|
|
||||||
|
Pods can be replicated. This is achieved by creation of Replication Controller
|
||||||
|
which creates and maintain fixed number of pod clones. In Murano replica
|
||||||
|
count is a property of KubernetesPod.
|
||||||
|
|
||||||
|
Currently Murano suports setups with only single API node and at least one
|
||||||
|
worker node. API node cannot be used as a worker node.
|
||||||
|
|
||||||
|
To establish required network connectivity model for the Kubernetes Murano
|
||||||
|
sets up an overlay network between Kubernetes nodes using Flannel networking.
|
||||||
|
See https://github.com/coreos/flannel for more information.
|
||||||
|
|
||||||
|
Because IP addresses of containers are in that internal network and not
|
||||||
|
accessible from outside in order to provide public endpoints Murano sets up
|
||||||
|
a third type of nodes: Gateway nodes.
|
||||||
|
|
||||||
|
Gateway nodes are connected to both Flannel and OpenStack Neutron networks
|
||||||
|
and serves as a gateway between them. Each gateway node runs HAProxy.
|
||||||
|
When application deploys all its public endpoint are automatically registered
|
||||||
|
on all gateway nodes. Thus if user chose to have more than one gateway
|
||||||
|
it will usually get several endpoints for the application. Then those endpoints
|
||||||
|
can be registered in physical load balancer or DNS.
|
||||||
|
|
||||||
|
|
||||||
|
KubernetesCluster
|
||||||
|
=================
|
||||||
|
|
||||||
|
This is the main application representing Kubernetes Cluster.
|
||||||
|
It is responsible for deployment of the Kubernetes and its nodes.
|
||||||
|
|
||||||
|
The procedure is:
|
||||||
|
|
||||||
|
#. Create VMs for all node types - 1 for Kubernetes API and requested number
|
||||||
|
for worker and gateway nodes.
|
||||||
|
#. Join them into etcd cluster. etcd is a distributed key-value storage
|
||||||
|
used by the Kubernetes to store and synchronize cluster state.
|
||||||
|
#. Setup Flannel network over etcd cluster. Flannel uses etcd to track network.
|
||||||
|
nodes as well.
|
||||||
|
#. Configure required services on master node.
|
||||||
|
#. Configure worker nodes. They will register themselves in master nodes using
|
||||||
|
etcd.
|
||||||
|
#. Setup HAProxy on each gateway node. Configure configd to watch etcd to
|
||||||
|
register public ports in HAProxy config file. Each time new Kubernetes
|
||||||
|
service created it regenerates HAProxy config.
|
||||||
|
|
||||||
|
|
||||||
|
Internally KubernetesCluster contains separate classes for all node types.
|
||||||
|
They all inherit from `KubernetesNode` that defines the common interface
|
||||||
|
for all nodes. The deployment of each node is split into several methods:
|
||||||
|
`deployInstance` -> `setupEtcd` -> `setupNode` -> `removeFromCluster` as
|
||||||
|
described above.
|
||||||
|
|
||||||
|
|
||||||
|
KubernetesPod
|
||||||
|
=============
|
||||||
|
|
||||||
|
KubernetesPod represents a single Kubernetes pod with its containers and
|
||||||
|
associated volumes. KubernetesPod provides an implementation of
|
||||||
|
`DockerContainerHost` interface defined in `DockerInterfacesLibrary`.
|
||||||
|
Thus each pod can be used as a drop-in replacement for regular Docker
|
||||||
|
host implementation (DockerStandaloneHost).
|
||||||
|
|
||||||
|
All pods must have a unique name within single `KubernetesCluster`
|
||||||
|
(which is selected for each pod).
|
||||||
|
|
||||||
|
Thus KubernetesCluster is an aggregation of Docker hosts (pods) which also
|
||||||
|
handles all inter-pod entities (services, endpoints).
|
||||||
|
|
||||||
|
KubernetesPod create Replication Controllers rather than pods. Replication
|
||||||
|
Controller with replica count equal to 1 will result in single pod being
|
||||||
|
created while it is always possible to increase/decrease replica count after
|
||||||
|
deployment. Replica count is specified using `replicas` input property.
|
||||||
|
|
||||||
|
Pods also may have labels to group them (for example into layers etc.)
|
||||||
|
|
||||||
|
|
||||||
|
Kubernetes actions
|
||||||
|
==================
|
||||||
|
|
||||||
|
Both KubernetesCluster and KubernetesPod expose number of actions that can
|
||||||
|
be used by both user (through the dashboard) and automation systems (through
|
||||||
|
API) to perform actions on the deployed applications.
|
||||||
|
|
||||||
|
See http://docs.openstack.org/developer/murano/draft/appdev-guide/murano_pl.html#murano-actions
|
||||||
|
and http://docs.openstack.org/developer/murano/specification/index.html#actions-api
|
||||||
|
for more details on actions API.
|
||||||
|
|
||||||
|
KubernetesCluster provides the following actions:
|
||||||
|
|
||||||
|
* `scaleNodesUp`: increase the number of worker nodes by 1.
|
||||||
|
* `scaleNodesDown`: decrease the number of worker nodes by 1.
|
||||||
|
* `scaleGatewaysUp`: increase the number of gateway nodes by 1.
|
||||||
|
* `scaleGatewaysDown`: decrease the number of gateway nodes by 1.
|
||||||
|
* `exportConfig`: returns an archive file containing shell script and data
|
||||||
|
files. Use the script to manually recreate Kubernetes entities (pods,
|
||||||
|
replication controllers and services) on another Kubernetes installation.
|
||||||
|
This is an experimental feature.
|
||||||
|
|
||||||
|
KubernetesPod has the following actions:
|
||||||
|
|
||||||
|
* `scalePodUp`: increase the number of pod replicas by 1.
|
||||||
|
* `scalePodDown`: decrease the number of pod replicas by 1.
|
@ -1,52 +0,0 @@
|
|||||||
# Google Kubernetes for Murano
|
|
||||||
|
|
||||||
Packages in this folder are required to deploy both Google Kubernetes and applications
|
|
||||||
on top of it.
|
|
||||||
|
|
||||||
Contents of each folder need to be zipped and uploaded to Murano Application Catalog.
|
|
||||||
You will also need to build proper Ubuntu image for Kubernetes.
|
|
||||||
This can be done using diskimage-builder (https://github.com/openstack/diskimage-builder) and
|
|
||||||
DIB elements (https://github.com/stackforge/murano/tree/master/contrib/elements/kubernetes).
|
|
||||||
|
|
||||||
Applications expect the following images:
|
|
||||||
|
|
||||||
* ubuntu14.04-x64-kubernetes.qcow2 for Kubernetes
|
|
||||||
* ubuntu14.04-x64-docker.qcow2 for Docker
|
|
||||||
|
|
||||||
Brief description of packages located here:
|
|
||||||
|
|
||||||
io.murano.apps.docker.kubernetes.KubernetesCluster – represents scalable
|
|
||||||
cluster of Kubernetes nodes
|
|
||||||
|
|
||||||
io.murano.apps.docker.kubernetes.KubernetesPod – Kubernetes host for Docker
|
|
||||||
containers. Several containers may be hosted in single Pod. Also
|
|
||||||
automatically manages Service endpoints and replication
|
|
||||||
|
|
||||||
io.murano.apps.docker.Interfaces – Interface classes for both Kubernetes and Docker
|
|
||||||
|
|
||||||
io.murano.apps.docker.kubernetes.static.KubernetesEntities – Kubernetes
|
|
||||||
instances that can be constructed from a JSON definition – Pod, Service
|
|
||||||
and ReplicationController
|
|
||||||
|
|
||||||
io.murano.apps.docker.DockerStandaloneHost - Docker host on standalone VM
|
|
||||||
|
|
||||||
Applications that can be hosted on both Kubernetes Pod and and Docker standalone host:
|
|
||||||
|
|
||||||
* io.murano.apps.docker.DockerHTTPd – Apache web server
|
|
||||||
* io.murano.apps.docker.DockerHTTPdSite – Apache web server with a site pulled from git repository
|
|
||||||
* io.murano.apps.docker.DockerNginx – Nginx web server
|
|
||||||
* io.murano.apps.docker.DockerNginxSite – Nginx web server with a site pulled from git repository
|
|
||||||
* io.murano.apps.docker.DockerCrate - Crate - The Distributed Database for Docker
|
|
||||||
* io.murano.apps.docker.DockerGlassFish - GlassFish - Java EE 7 Application Server
|
|
||||||
* io.murano.apps.docker.DockerTomcat - Tomcat - An open-source web server and servlet container
|
|
||||||
* io.murano.apps.docker.DockerInfluxDB - InfluxDB - An open-source, distributed, time series database
|
|
||||||
* io.murano.apps.docker.DockerGrafana - Grafana - Metrics dashboard for InfluxDB
|
|
||||||
* io.murano.apps.docker.DockerJenkins - Jenkins - An extensible open source continuous integration server
|
|
||||||
* io.murano.apps.docker.DockerMariaDB - MariaDB database
|
|
||||||
* io.murano.apps.docker.DockerMySQL - MySql database
|
|
||||||
* io.murano.apps.docker.DockerRedis - Redis - Key-value cache and store
|
|
||||||
* io.murano.apps.docker.DockerPostgreSQL - PostgreSQL database
|
|
||||||
* io.murano.apps.docker.DockerMongoDB - MongoDB NoSQL database
|
|
||||||
* io.murano.apps.docker.DockerPHPZendServer - Zend Server - The Complete PHP Application Platform
|
|
||||||
|
|
||||||
|
|
@ -24,6 +24,7 @@ run Docker applications:
|
|||||||
* Kubernetes: an open source container cluster manager by Google. It allows
|
* Kubernetes: an open source container cluster manager by Google. It allows
|
||||||
to schedule and run Docker applications on multiple clustered nodes.
|
to schedule and run Docker applications on multiple clustered nodes.
|
||||||
Application both installs Kubernetes and provides capabilities to run
|
Application both installs Kubernetes and provides capabilities to run
|
||||||
Docker applications similar to DockerStandaloneHost.
|
Docker applications similar to DockerStandaloneHost. See
|
||||||
|
Kubernetes/README.rst for more details.
|
||||||
|
|
||||||
* Applications: Examples of some of the most popular Docker applications.
|
* Applications: Examples of some of the most popular Docker applications.
|
||||||
|
Loading…
Reference in New Issue
Block a user