Merge branch 'master' of https://github.com/kubernetes/website into release-1.9

* 'master' of https://github.com/kubernetes/website: (549 commits)
  Update service.md (#7810)
  Prune inactive maintainers (#7830)
  add Amadeus to index page and add feature image (#7827)
  Update conventions.md (#7668)
  Adding Tenxcloud as KCSP and Hedvig typo (#7826)
  Update outdated documentation about secret key validation. (#7675)
  Update imperative-command.md (#7699)
  Update manage-deployment.md (#7774)
  Add the OCI runtime description. (#7769)
  fix flag (#7814)
  fix flag (#7813)
  Add files via upload (#7816)
  Remove CoreOS guide that use Kubernetes v0.15.0 (#7821)
  "Nagions" should be "Nagios“ (#7762)
  Update docker-cli-to-kubectl.md (#7748)
  adjust a note format (#7812)
  add a note when mount a configmap to pod (#7745)
  Make using sysctls a task instead of a concept (#6808)
  Partners page updates (#7802)
  Fix a missing word in endpoint reconciler section (#7804)
  ...
This commit is contained in:
Andrew Chen
2018-03-26 16:59:03 -07:00
2835 changed files with 20003 additions and 677613 deletions
+1 -1
View File
@@ -14,7 +14,7 @@
**Page to Update:**
http://kubernetes.io/...
https://kubernetes.io/...
<!--Optional Information (remove the comment tags around information you would like to include)-->
<!--Kubernetes Version:-->
+3
View File
@@ -1,3 +1,6 @@
>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> For 1.10 Features: set Milestone to 1.10 and Base Branch to release-1.10
>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> NOTE: After opening the PR, please *un-check and re-check* the ["Allow edits from maintainers"](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) box so that maintainers can work on your patch and speed up the review process. This is a temporary workaround to address a known issue with GitHub.>
>
> Please delete this note before submitting the pull request.
+1 -1
View File
@@ -27,7 +27,7 @@ group :jekyll_plugins do
gem "jekyll-github-metadata", "~> 2.2"
gem "jekyll-optional-front-matter", "~> 0.1"
gem "jekyll-readme-index", "0.0.3"
gem "jekyll-redirect-from", "~> 0.11"
gem "jekyll-redirect-from", "~> 0.13"
gem "jekyll-relative-links", "~> 0.2"
gem "jekyll-swiss", "~> 0.4"
gem "jekyll-theme-architect", "0.0.3"
+2 -2
View File
@@ -47,7 +47,7 @@ GEM
jekyll-paginate (1.1.0)
jekyll-readme-index (0.0.3)
jekyll (~> 3.0)
jekyll-redirect-from (0.12.1)
jekyll-redirect-from (0.13.0)
jekyll (~> 3.3)
jekyll-relative-links (0.5.1)
jekyll (~> 3.3)
@@ -145,7 +145,7 @@ DEPENDENCIES
jekyll-optional-front-matter (~> 0.1)
jekyll-paginate (= 1.1.0)
jekyll-readme-index (= 0.0.3)
jekyll-redirect-from (~> 0.11)
jekyll-redirect-from (~> 0.13)
jekyll-relative-links (~> 0.2)
jekyll-seo-tag
jekyll-sitemap
+7 -2
View File
@@ -1,6 +1,11 @@
reviewers:
- a-mccarthy
- abiogenesis-now
- tengqm
- zhangxiaoyu-zidif
- xiangpengzhao
approvers:
- heckj
- bradamant3
- bradtopol
- steveperry-53
- zacharysarah
- chenopis
+5 -6
View File
@@ -87,11 +87,11 @@ aliases:
- grodrigues3
- spxtr
sig-docs: #Team: documentation; GH: sig-docs-pr-reviews
- a-mccarthy
- abiogenesis-now
- bradamant3
- steveperry-53
- zacharysarah
- bradtopol
- heckj
sig-federation: #Team: Federation; e.g. Federated Clusters
- csbell
sig-gcp: #Google Cloud Platform; GH: sig-gcp-pr-reviews
@@ -149,9 +149,9 @@ aliases:
- feiskyer
- nebril
sig-openstack: #GH: sig-openstack-pr-reviews
- idvoretskyi
- xsgordon
- NickrenREN
- hogepodge
- dklyle
- rjmorse
sig-pm: #aka Product Management
- apsinha
- idvoretskyi
@@ -203,4 +203,3 @@ aliases:
- floreks
sig-windows:
- michmike
+2
View File
@@ -13,6 +13,7 @@ incremental: true
safe: false
lsi: false
latest: "v1.9"
defaults:
-
scope:
@@ -88,3 +89,4 @@ tocs:
- reference
- samples
- search
- imported
+17 -4
View File
@@ -1,12 +1,15 @@
bigheader: "Concepts"
abstract: "Detailed explanations of Kubernetes system concepts and abstractions."
landing_page: /docs/concepts/index/
toc:
- docs/concepts/index.md
- title: Overview
landing_page: /docs/concepts/overview/what-is-kubernetes/
section:
- docs/concepts/overview/what-is-kubernetes.md
- docs/concepts/overview/components.md
- docs/concepts/overview/kubernetes-api.md
- title: Working with Kubernetes Objects
section:
- docs/concepts/overview/working-with-objects/kubernetes-objects.md
@@ -14,15 +17,22 @@ toc:
- docs/concepts/overview/working-with-objects/namespaces.md
- docs/concepts/overview/working-with-objects/labels.md
- docs/concepts/overview/working-with-objects/annotations.md
- docs/concepts/overview/kubernetes-api.md
- title: Object Management Using kubectl
section:
- docs/concepts/overview/object-management-kubectl/overview.md
- docs/concepts/overview/object-management-kubectl/imperative-command.md
- docs/concepts/overview/object-management-kubectl/imperative-config.md
- docs/concepts/overview/object-management-kubectl/declarative-config.md
- title: Kubernetes Architecture
landing_page: /docs/concepts/architecture/nodes/
section:
- docs/concepts/architecture/nodes.md
- docs/concepts/architecture/master-node-communication.md
- docs/concepts/architecture/cloud-controller.md
- title: Extending Kubernetes
landing_page: /docs/concepts/api-extension/custom-resources/
section:
- docs/concepts/overview/extending.md
- title: Extending the Kubernetes API
@@ -33,16 +43,17 @@ toc:
section:
- docs/concepts/cluster-administration/network-plugins.md
- docs/concepts/cluster-administration/device-plugins.md
- docs/concepts/cluster-administration/sysctl-cluster.md
- docs/concepts/service-catalog/index.md
- title: Containers
landing_page: /docs/concepts/containers/images/
section:
- docs/concepts/containers/images.md
- docs/concepts/containers/container-environment-variables.md
- docs/concepts/containers/container-lifecycle-hooks.md
- title: Workloads
landing_page: /docs/concepts/workloads/pods/pod-overview/
section:
- title: Pods
section:
@@ -64,6 +75,7 @@ toc:
- docs/concepts/workloads/controllers/cron-jobs.md
- title: Configuration
landing_page: /docs/concepts/configuration/overview/
section:
- docs/concepts/configuration/overview.md
- docs/concepts/configuration/manage-compute-resources-container.md
@@ -74,6 +86,7 @@ toc:
- docs/concepts/configuration/pod-priority-preemption.md
- title: Services, Load Balancing, and Networking
landing_page: /docs/concepts/services-networking/service/
section:
- docs/concepts/services-networking/service.md
- docs/concepts/services-networking/dns-pod-service.md
@@ -83,6 +96,7 @@ toc:
- docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md
- title: Storage
landing_page: /docs/concepts/storage/volumes/
section:
- docs/concepts/storage/volumes.md
- docs/concepts/storage/persistent-volumes.md
@@ -90,6 +104,7 @@ toc:
- docs/concepts/storage/dynamic-provisioning.md
- title: Cluster Administration
landing_page: /docs/concepts/cluster-administration/cluster-administration-overview/
section:
- docs/concepts/cluster-administration/cluster-administration-overview.md
- docs/concepts/cluster-administration/certificates.md
@@ -110,5 +125,3 @@ toc:
section:
- docs/concepts/policy/resource-quotas.md
- docs/concepts/policy/pod-security-policy.md
+13 -7
View File
@@ -1,18 +1,16 @@
bigheader: "Documentation Home"
bigheader: "About"
abstract: "Documentation for using and learning about Kubernetes."
toc:
- docs/home/index.md
- title: Release Notes
path: https://git.k8s.io/kubernetes/CHANGELOG.md
- title: Release Roadmap
path: https://github.com/kubernetes/kubernetes/milestones/
- docs/tasks/debug-application-cluster/troubleshooting.md
- title: Supported Doc Versions
path: /docs/home/supported-doc-versions/
- title: Contributing to the Kubernetes Docs
landing_page: /editdocs/
section:
- editdocs.md
- docs/home/contribute/participating.md
- docs/home/contribute/create-pull-request.md
- docs/home/contribute/write-new-topic.md
- docs/home/contribute/stage-documentation-changes.md
@@ -20,3 +18,11 @@ toc:
- docs/home/contribute/review-issues.md
- docs/home/contribute/style-guide.md
- docs/home/contribute/includes.md
- docs/home/contribute/localization.md
- title: Updating Automatically Generated Reference Pages
section:
- docs/home/contribute/generated-reference/kubernetes-components.md
- docs/home/contribute/generated-reference/kubectl.md
- docs/home/contribute/generated-reference/kubernetes-api.md
- docs/home/contribute/generated-reference/federation-api.md
+1
View File
@@ -8,3 +8,4 @@ tocs:
- reference
- samples
- support
- imported
+1 -1
View File
@@ -1,6 +1,6 @@
id: _example
name: Example K8s Term
full-link: kubernetes.io/docs/link-to-long-dedicated-docs-page
full-link: /docs/link-to-long-dedicated-docs-page
aka:
- Slang K8s Term
- Misnomer
+1 -1
View File
@@ -1,6 +1,6 @@
id: annotation
name: Annotation
full-link: docs/concepts/overview/working-with-objects/annotations
full-link: /docs/concepts/overview/working-with-objects/annotations
tags:
- fundamental
short-description: >
+11
View File
@@ -0,0 +1,11 @@
id: certificate
name: Certificate
full-link: /docs/tasks/tls/managing-tls-in-a-cluster/
tags:
- security
short-description: >
A cryptographically secure file used to validate access to the Kubernetes cluster.
long-description: >
Certificates enable applications within a Kubernetes
cluster to access the Kubernetes API securely. Certificates validate that
clients are allowed to access the API.
@@ -0,0 +1,13 @@
id: cloud-controller-manager
name: Cloud Controller Manager
full-link: https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/
tags:
- core-object
- architecture
- operation
short-description: >
Cloud Controller Manager is an alpha feature in 1.8. In upcoming releases it will be the preferred way to integrate Kubernetes with any cloud.
long-description: >
Kubernetes v1.6 contains a new binary called cloud-controller-manager. cloud-controller-manager is a daemon that embeds cloud-specific control loops.
These cloud-specific control loops were originally in the kube-controller-manager. Since cloud providers develop and release at a different pace compared to the Kubernetes
project, abstracting the provider-specific code to the cloud-controller-manager binary allows cloud vendors to evolve independently from the core Kubernetes code.
+10
View File
@@ -0,0 +1,10 @@
id: cloud-provider
name: Cloud Provider
full-link: /docs/concepts/cluster-administration/cloud-providers
tags:
- community
short-description: >
Cloud provider is a company that offers cloud computing platform that can run Kubernetes clusters.
long-description: >
Cloud providers or sometime called Cloud Service Provider (CSPs) provides cloud computing platforms. They may offer services such as Infrastructure as a Service (IaaS) or Platform as a Service (PaaS). Cloud providers host the Kubernetes cluster and also provide services that interact with the cluster, such as Load Balancers, Storage Classes etc.
+1
View File
@@ -1,5 +1,6 @@
id: code-contributor
name: Code Contributor
full-link: /docs/imported/community/devel/
aka:
- Community Developer
tags:
@@ -0,0 +1,9 @@
id: container-env-variables
name: Container Environment Variables
full-link: /docs/concepts/containers/container-environment-variables.md
tags:
- fundamental
short-description: >
Container environment variables are name/value pairs that provide useful information into containers running in a Pod.
long-description: >
Container environment variables provide information that is required by the running containerized applications along with information about important resources to the [Containers] {% glossary_tooltip text="Containers" term_id="container" %}. For example, file system, information about the container itself and other cluster resources such as service endpoints, etc.
+12
View File
@@ -0,0 +1,12 @@
id: controller
name: Controller
full-link: /docs/admin/kube-controller-manager/
related:
- controller-manager
tags:
- architecture
- fundamental
short-description: >
A control loop that watches the shared state of the cluster through the {% glossary_tooltip text="apiserver" term_id="kube-apiserver" %} and makes changes attempting to move the current state towards the desired state.
long-description: >
Examples of controllers that ship with Kubernetes today are the replication controller, endpoints controller, namespace controller, and serviceaccounts controller.
@@ -0,0 +1,14 @@
id: CustomResourceDefinition
name: CustomResourceDefinition
aka:
- CRD
- Formerly Known as ThirdPartyResources (TPR)
tags:
- fundamental
- operation
- extension
full-link: docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/
short-description: >
Custom code that defines a resource to add to your Kubernetes API server without building a complete custom server.
long-description: >
Custom Resource Definitions let you extend the Kubernetes API for your environment if the publicly supported API resources can't meet your needs.
+2 -1
View File
@@ -3,8 +3,9 @@ name: DaemonSet
full-link: /docs/concepts/workloads/controllers/daemonset
tags:
- fundamental
- core-object
- workload
short-description: >
Ensures a copy of a {% glossary_tooltip term_id="pod" %} is running across a set of nodes in a {% glossary_tooltip term_id="cluster" %}.
Ensures a copy of a {% glossary_tooltip text="Pod" term_id="pod" %} is running across a set of nodes in a {% glossary_tooltip text="cluster" term_id="cluster" %}.
long-description: >
Used to deploy system daemons such as log collectors and monitoring agents that typically must run on every {% glossary_tooltip term_id="node" %}.
+9
View File
@@ -0,0 +1,9 @@
id: docker
name: docker
full-link: /docs/reference/kubectl/docker-cli-to-kubectl/
tags:
- fundamental
short-description: >
Docker is a software technology providing operating-system-level virtualization also known as containers.
long-description: >
Docker uses the resource isolation features of the Linux kernel such as cgroups and kernel namespaces, and a union-capable file system such as OverlayFS and others to allow independent "containers" to run within a single Linux instance, avoiding the overhead of starting and maintaining virtual machines (VMs).
@@ -0,0 +1,11 @@
id: dynamicvolumeprovisioning
name: Dynamic Volume Provisioning
full-link: /docs/concepts/storage/dynamic-provisioning
tags:
- core-object
- storage
short-description: >
Allows users to request automatic creation of storage {% glossary_tooltip text="Volumes" term_id="volume" %}.
long-description: >
Dynamic provisioning eliminates the need for cluster administrators to pre-provision storage. Instead, it automatically provisions storage by user request.
Dynamic volume provisioning is based on an API object, {% glossary_tooltip text="StorageClass" term_id="storage-class" %}, referring to a {% glossary_tooltip text="Volume Plugin" term_id="volume-plugin" %} that provisions a {% glossary_tooltip text="Volume" term_id="volume" %} and the set of parameters to pass to the Volume Plugin.
+11
View File
@@ -0,0 +1,11 @@
id: etcd
name: etcd
full-link: /docs/tasks/administer-cluster/configure-upgrade-etcd/
tags:
- architecture
- storage
short-description: >
Consistent and highly-available key value store used as Kubernetes' backing store for all cluster data.
long-description: >
Always have a backup plan for etcd's data for your Kubernetes cluster.
For in-depth information on etcd, see [etcd documentation](https://github.com/coreos/etcd/blob/master/Documentation/docs.md).
@@ -5,11 +5,13 @@ aka:
- HPA
related:
- pod
- replication-controller
- deployment
tags:
- operation
short-description: >
An API resource that automatically scales the number of pod replicas based on targeted CPU
utilization or custom metric targets.
long-description: >
HPA is typically used with replication controllers, deployments or replica sets and cannot be
applied to objects that cannot be scaled, for example DaemonSets.
HPA is typically used with {% glossary_tooltip text="Replication Controllers" term_id="replication-controller" %}, {% glossary_tooltip text="Deployments" term_id="deployment" %}, or Replica Sets.
It cannot be applied to objects that cannot be scaled, for example {% glossary_tooltip text="DaemonSets" term_id="daemonset" %}.
+8
View File
@@ -0,0 +1,8 @@
id: init-container
name: Init Container
tags:
- fundamental
short-description: >
One or more initialization containers that must run to completion before any app containers run.
long-description: >
Initialization (init) containers are like regular app containers, with one difference: init containers must run to completion before any app containers can start. Init containers run in series: each init container must run to completion before the next init container begins.
+2
View File
@@ -2,7 +2,9 @@ id: job
name: Job
full-link: /docs/concepts/workloads/controllers/jobs-run-to-completion
tags:
- fundamental
- core-object
- workload
short-description: >
A finite or batch task that runs to completion.
long-description: >
+12
View File
@@ -0,0 +1,12 @@
id: kube-apiserver
name: kube-apiserver
full-link: /docs/reference/generated/kube-apiserver/
aka:
- apiserver
tags:
- architecture
- fundamental
short-description: >
Component on the master that exposes the Kubernetes API. It is the front-end for the Kubernetes control plane.
long-description: >
It is designed to scale horizontally -- that is, it scales by deploying more instances. See [Building High-Availability Clusters](/docs/admin/high-availability/).
@@ -0,0 +1,14 @@
id: kube-controller-manager
name: kube-controller-manager
full-link: /docs/reference/generated/kube-controller-manager/
aka:
- controller-manager
related:
- controller
tags:
- architecture
- fundamental
short-description: >
Component on the master that runs {% glossary_tooltip text="controllers" term_id="controller" %}.
long-description: >
Logically, each {% glossary_tooltip text="controller" term_id="controller" %} is a separate process, but to reduce complexity, they are all compiled into a single binary and run in a single process.
+10
View File
@@ -0,0 +1,10 @@
id: kube proxy
name: kube-proxy
full-link: /docs/reference/generated/kube-proxy
tags:
- fundamental
- core-object
short-description: >
`kube-proxy` is a network proxy that runs on each node in the cluster.
long-description: >
`kube-proxy` is responsible for request forwarding. `kube-proxy` allows TCP and UDP stream forwarding or round robin TCP and UDP forwarding across a set of backend functions.
+13
View File
@@ -0,0 +1,13 @@
id: kube-scheduler
name: kube-scheduler
full-link: /docs/reference/generated/kube-scheduler/
aka:
- scheduler
tags:
- architecture
short-description: >
Component on the master that watches newly created pods that have no node assigned, and selects a node for them to run on.
long-description: >
Factors taken into account for scheduling decisions include individual and collective resource requirements,
hardware/software/policy constraints, affinity and anti-affinity specifications, data locality, inter-workload interference
and deadlines.
+1 -1
View File
@@ -1,6 +1,6 @@
id: kubelet
name: Kubelet
full-link: docs/reference/generated/kubelet
full-link: /docs/reference/generated/kubelet
tags:
- fundamental
- core-object
+10
View File
@@ -0,0 +1,10 @@
id: name
name: Name
full-link: /docs/concepts/overview/working-with-objects/names
tags:
- fundamental
short-description: >
A client-provided string that refers to an object in a resource URL, such as `/api/v1/pods/some-name`.
long-description: >
Only one object of a given kind can have a given name at a time.
However, if you delete the object, you can make a new object with the same name.
+1 -1
View File
@@ -4,7 +4,7 @@ full-link: /docs/concepts/overview/working-with-objects/namespaces
tags:
- fundamental
short-description: >
An abstraction used by Kubernetes to support multiple virtual clusters on the same physical {% glossary_tooltip term_id="cluster" %}.
An abstraction used by Kubernetes to support multiple virtual clusters on the same physical {% glossary_tooltip text="cluster" term_id="cluster" %}.
long-description: >
Namespaces are used to organize objects in a cluster and provide a way to divide cluster resources.
Names of resources need to be unique within a namespace, but not across namespaces.
+1 -1
View File
@@ -10,6 +10,6 @@ tags:
- core-object
- storage
short-description: >
Claims storage resources defined in a {% glossary_tooltip text="PersistentVolume (PV)" term_id="persistent-volume" %} so that it can be mounted as a volume in a container.
Claims storage resources defined in a PersistentVolume so that it can be mounted as a volume in a container.
long-description: |
Specifies the amount of storage, how the storage will be accessed (read-only, read-write and/or exclusive) and how it is reclaimed (retained, recycled or deleted). Details of the storage itself are in the PersistentVolume specification.
+2 -2
View File
@@ -10,8 +10,8 @@ tags:
- core-object
- storage
short-description: >
An API object that represents a piece of storage in the cluster. Available as a general, pluggable resource that persists beyond the lifecycle of any individual {% glossary_tooltip term_id="pod" %}.
An API object that represents a piece of storage in the cluster. Available as a general, pluggable resource that persists beyond the lifecycle of any individual {% glossary_tooltip text="Pod" term_id="pod" %}.
long-description: |
PersistentVolumes (PVs) provide an API that abstracts details of how storage is provided from how it is consumed.
PVs are used directly in scenarios where storage can be be created ahead of time (static provisioning).
PVs are used directly in scenarios where storage can be created ahead of time (static provisioning).
For scenarios that require on-demand storage (dynamic provisioning), PersistentVolumeClaims (PVCs) are used instead.
+12
View File
@@ -0,0 +1,12 @@
id: podpreset
name: PodPreset
tags:
- operation
short-description: >
An API object that injects information such as secrets, volume mounts,
and environment variables into pods at creation time.
long-description: >
This object chooses the pods to inject information into using
standard selectors. This allows the podspec definitions to be
nonspecific, decoupling the podspec from environment specific
configuration.
+2 -1
View File
@@ -4,8 +4,9 @@ full-link: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/
related:
- replication-controller
tags:
- fundamental
- core-object
- architecture
- workload
short-description: >
ReplicaSet is the next-generation Replication Controller.
long-description: >
+2 -1
View File
@@ -1,7 +1,8 @@
id: replication-controller
name: Replication Controller
tags:
- fundamental
- workload
- core-object
short-description: >
Kubernetes service that ensures a specific number of instances of a pod are always running.
long-description: >
+13
View File
@@ -0,0 +1,13 @@
id: selector
name: Selector
full-link: /docs/concepts/overview/working-with-objects/labels/
related:
- label
tags:
- fundamental
short-description: >
Allows users to filter a list of resources based on labels.
long-description: >
Selectors are applied when querying lists of resources to filter
them by {% glossary_tooltip text="Labels" term_id="label"
%}.
+1 -1
View File
@@ -5,6 +5,6 @@ tags:
- fundamental
- core-object
short-description: >
Provides an identity for processes that run in a Pod {% glossary_tooltip text="Pods" term_id="pod" %}.
Provides an identity for processes that run in a {% glossary_tooltip text="Pod" term_id="pod" %}.
long-description: >
When processes inside Pods access the cluster, they are authenticated by the API server as a particular service account, for example, `default`. When you create a Pod, if you do not specify a service account, it is automatically assigned the default service account in the same namespace {% glossary_tooltip text="Namespace" term_id="namespace" %}.
+1 -2
View File
@@ -1,12 +1,11 @@
id: statefulset
name: StatefulSet
full-link: /docs/concepts/workloads/controllers/statefulset/
aka:
- PetSet
related:
- deployment
- pod
tags:
- fundamental
- core-object
- workload
- storage
+11
View File
@@ -0,0 +1,11 @@
id: storageclass
name: Storage Class
full-link: /docs/concepts/storage/storage-classes
tags:
- core-object
- storage
short-description: >
A StorageClass provides a way for administrators to describe different available storage types.
long-description: >
StorageClasses can map to quality-of-service levels, backup policies, or to arbitrary policies determined by cluster administrators.
Each StorageClass contains the fields `provisioner`, `parameters`, and `reclaimPolicy`, which are used when a {% glossary_tooltip text="Persistent Volume" term_id="persistent-volume" %} belonging to the class needs to be dynamically provisioned. Users can request a particular class using the name of a StorageClass object.
+10
View File
@@ -0,0 +1,10 @@
id: uid
name: UID
full-link: /docs/concepts/overview/working-with-objects/names
tags:
- fundamental
short-description: >
A Kubernetes systems-generated string to uniquely identify objects.
long-description: >
Every object created over the whole lifetime of a Kubernetes cluster has a distinct UID.
It is intended to distinguish between historical occurrences of similar entities.
+11
View File
@@ -0,0 +1,11 @@
id: volumeplugin
name: Volume Plugin
tags:
- core-object
- storage
short-description: >
A Volume Plugin enables integration of storage within a {% glossary_tooltip text="Pod" term_id="pod" %}.
long-description: >
A Volume Plugin lets you attach and mount storage volumes for use by a {% glossary_tooltip text="Pod" term_id="pod" %}.
Volume plugins can be _in tree_ or _out of tree_. _In tree_ plugins are part of the Kubernetes code repository and follow its release cycle. _Out of tree_ plugins are developed independently.
+11
View File
@@ -0,0 +1,11 @@
bigheader: "Imported Docs"
abstract: "Docs imported from other Kubernetes SIGs and repos."
toc:
- docs/imported/index.md
- title: Community
section:
- docs/imported/community/guide.md
- docs/imported/community/devel.md
- docs/imported/community/mentoring.md
- docs/imported/community/keps.md
+15 -16
View File
@@ -1,10 +1,14 @@
bigheader: "Reference Documentation"
bigheader: "Reference"
abstract: "Design docs, concept definitions, and references for APIs and CLIs."
landing_page: /docs/reference/index/
toc:
- docs/reference/index.md
- docs/reference/glossary.md
- title: Standardized Glossary
path: /docs/reference/glossary/
- title: Using the API
landing_page: /docs/reference/api-overview/
section:
- docs/reference/api-overview.md
- docs/reference/client-libraries.md
@@ -23,10 +27,12 @@ toc:
- docs/admin/authorization/rbac.md
- docs/admin/authorization/node.md
- docs/admin/authorization/webhook.md
- docs/reference/api-concepts.md
- docs/reference/deprecation-policy.md
- docs/reference/workloads-18-19.md
- title: API Reference
landing_page: /docs/api-reference/v1.8/
section:
- title: v1.9
path: /docs/reference/generated/kubernetes-api/v1.9/
@@ -39,6 +45,7 @@ toc:
path: https://git.k8s.io/kubernetes/api/swagger-spec/
- title: Federation API
landing_page: /docs/reference/federation/v1/operations/
section:
- docs/reference/generated/federation/v1/operations.html
- docs/reference/generated/federation/v1/definitions.html
@@ -46,6 +53,7 @@ toc:
- docs/reference/generated/federation/extensions/v1beta1/definitions.html
- title: kubectl CLI
landing_page: /docs/user-guide/kubectl-overview/
section:
- docs/reference/kubectl/overview.md
- docs/reference/generated/kubectl/kubectl.md
@@ -57,6 +65,7 @@ toc:
- docs/reference/kubectl/cheatsheet.md
- title: Setup Tools Reference
landing_page: /docs/reference/setup-tools/kubeadm/kubeadm/
section:
- title: Kubeadm
section:
@@ -69,6 +78,7 @@ toc:
- docs/reference/setup-tools/kubeadm/kubeadm-token.md
- docs/reference/setup-tools/kubeadm/kubeadm-version.md
- docs/reference/setup-tools/kubeadm/kubeadm-alpha.md
- docs/reference/setup-tools/kubeadm/implementation-details.md
- title: Kubefed
section:
- docs/reference/generated/kubefed.md
@@ -79,7 +89,9 @@ toc:
- docs/reference/generated/kubefed_version.md
- title: Command-line Tools Reference
landing_page: /docs/admin/kubelet/
section:
- docs/reference/feature-gates.md
- docs/reference/generated/kubelet.md
- docs/admin/kubelet-authentication-authorization.md
- docs/reference/generated/kube-apiserver.md
@@ -91,21 +103,8 @@ toc:
- docs/reference/generated/federation-apiserver.md
- docs/reference/generated/federation-controller-manager.md
- title: Kubernetes Design Docs
section:
- title: Kubernetes Architecture
path: https://git.k8s.io/community/contributors/design-proposals/architecture/architecture.md
- title: Kubernetes Design Overview
path: https://github.com/kubernetes/kubernetes/tree/release-1.6/docs/design
- title: Kubernetes Identity and Access Management
path: https://git.k8s.io/community/contributors/design-proposals/auth/access.md
- docs/admin/ovs-networking.md
- title: Security Contexts
path: https://git.k8s.io/community/contributors/design-proposals/auth/security_context.md
- title: Security in Kubernetes
path: https://git.k8s.io/community/contributors/design-proposals/auth/security.md
- title: Kubernetes Issues and Security
landing_page: https://github.com/kubernetes/kubernetes/issues/
section:
- title: Kubernetes Issue Tracker on GitHub
path: https://github.com/kubernetes/kubernetes/issues/
+53 -26
View File
@@ -1,10 +1,18 @@
bigheader: "Setup"
abstract: "Instructions for setting up a Kubernetes cluster."
landing_page: /docs/setup/index/
toc:
- docs/setup/index.md
- docs/setup/pick-right-solution.md
- title: Downloading Kubernetes
landing_page: /docs/imported/release/notes/
section:
- docs/imported/release/notes.md
- docs/setup/building-from-source.md
- title: Independent Solutions
landing_page: /docs/getting-started-guides/minikube/
section:
- docs/getting-started-guides/minikube.md
@@ -13,11 +21,13 @@ toc:
- docs/setup/independent/install-kubeadm.md
- docs/setup/independent/create-cluster-kubeadm.md
- docs/setup/independent/troubleshooting-kubeadm.md
- docs/setup/independent/high-availability.md
- docs/getting-started-guides/scratch.md
- docs/getting-started-guides/alternatives.md
- title: Hosted Solutions
landing_page: /docs/setup/pick-right-solution/#hosted-solutions
section:
- title: Running Kubernetes on Google Kubernetes Engine
path: https://cloud.google.com/kubernetes-engine/docs/before-you-begin/
@@ -27,18 +37,19 @@ toc:
path: https://console.bluemix.net/docs/containers/container_index.html
- title: Turn-key Cloud Solutions
landing_page: /docs/getting-started-guides/alibaba-cloud/
section:
- docs/getting-started-guides/gce.md
- docs/getting-started-guides/alibaba-cloud.md
- docs/getting-started-guides/aws.md
- docs/getting-started-guides/azure.md
- docs/getting-started-guides/alibaba-cloud.md
- docs/getting-started-guides/clc.md
- docs/getting-started-guides/gce.md
- title: Running Kubernetes on IBM Cloud
path: https://github.com/patrocinio/kubernetes-softlayer
- docs/getting-started-guides/stackpoint.md
- title: Custom Solutions
landing_page: /docs/getting-started-guides/coreos/index/
section:
- title: Custom Cloud Solutions
section:
@@ -48,32 +59,19 @@ toc:
- docs/getting-started-guides/kubespray.md
- docs/getting-started-guides/running-cloud-controller.md
- title: On-Premise VMs
- title: On-Premises VMs
section:
- docs/getting-started-guides/coreos/index.md
- docs/getting-started-guides/cloudstack.md
- docs/getting-started-guides/vsphere.md
- docs/getting-started-guides/photon-controller.md
- title: VMware vSphere
path: https://vmware.github.io/vsphere-storage-for-kubernetes/documentation/
- docs/getting-started-guides/dcos.md
- docs/getting-started-guides/libvirt-coreos.md
- docs/getting-started-guides/ovirt.md
- docs/getting-started-guides/openstack-heat.md
- title: rkt
section:
- docs/getting-started-guides/rkt/index.md
- docs/getting-started-guides/rkt/notes.md
- docs/getting-started-guides/mesos/index.md
- docs/getting-started-guides/mesos-docker.md
- title: Bare Metal
section:
- docs/getting-started-guides/coreos/bare_metal_offline.md
- docs/getting-started-guides/fedora/fedora_ansible_config.md
- docs/getting-started-guides/fedora/fedora_manual_config.md
- docs/getting-started-guides/fedora/flannel_multi_node_cluster.md
- docs/getting-started-guides/centos/centos_manual_config.md
- docs/getting-started-guides/coreos/index.md
- docs/getting-started-guides/ubuntu/index.md
@@ -95,14 +93,43 @@ toc:
- docs/getting-started-guides/ubuntu/glossary.md
- docs/getting-started-guides/ubuntu/local.md
- docs/getting-started-guides/ubuntu/logging.md
- docs/getting-started-guides/ubuntu/rancher.md
- docs/getting-started-guides/windows/index.md
- docs/admin/node-conformance.md
- docs/concepts/cluster-administration/addons.md
- docs/admin/salt.md
- docs/admin/cluster-large.md
- docs/admin/multiple-zones.md
- docs/admin/high-availability/index.md
- docs/getting-started-guides/binary_release.md
- title: User Journeys
landing_page: /docs/home/
section:
- title: Application Developer
section:
- docs/user-journeys/users/application-developer/foundational.md
- docs/user-journeys/users/application-developer/intermediate.md
- docs/user-journeys/users/application-developer/advanced.md
- title: Cluster Operator
section:
- docs/user-journeys/users/cluster-operator/foundational.md
- docs/user-journeys/users/cluster-operator/intermediate.md
- title: Docs Contributor
path: /docs/home/?path=contributors&persona=docs-contributor&level=foundational
- title: Code Contributor
path: /docs/home/?path=contributors&persona=code-contributor&level=foundational
- title: Community Contributor
path: /docs/home/?path=contributors&persona=community-contributor&level=foundational
- title: Installing Addons
path: /docs/concepts/cluster-administration/addons/
- title: Configuring Kubernetes with Salt
path: /docs/admin/salt/
- title: Building Large Clusters
path: /docs/admin/cluster-large/
- title: Running in Multiple Zones
path: /docs/admin/multiple-zones/
- title: Building High-Availability Clusters
path: /docs/admin/high-availability/building/
+24 -8
View File
@@ -1,15 +1,18 @@
bigheader: "Tasks"
abstract: "Step-by-step instructions for performing operations with Kubernetes."
landing_page: /docs/tasks/index/
toc:
- docs/tasks/index.md
- title: Install Tools
landing_page: /docs/tasks/tools/install-kubectl/
section:
- docs/tasks/tools/install-kubectl.md
- docs/tasks/tools/install-minikube.md
- docs/setup/independent/install-kubeadm.md
- title: Configure Pods and Containers
landing_page: /docs/tasks/configure-pod-container/configure-pod-initialization/
section:
- docs/tasks/configure-pod-container/assign-memory-resource.md
- docs/tasks/configure-pod-container/assign-cpu-resource.md
@@ -32,6 +35,7 @@ toc:
- docs/tools/kompose/user-guide.md
- title: Inject Data Into Applications
landing_page: /docs/tasks/inject-data-application/define-environment-variable-container/
section:
- docs/tasks/inject-data-application/define-command-argument-container.md
- docs/tasks/inject-data-application/define-environment-variable-container.md
@@ -41,6 +45,7 @@ toc:
- docs/tasks/inject-data-application/podpreset.md
- title: Run Applications
landing_page: /docs/tasks/run-application/run-stateless-application-deployment/
section:
- docs/tasks/run-application/run-stateless-application-deployment.md
- docs/tasks/run-application/run-single-instance-stateful-application.md
@@ -56,12 +61,14 @@ toc:
- docs/tasks/run-application/configure-pdb.md
- title: Run Jobs
landing_page: /docs/tasks/job/parallel-processing-expansion/
section:
- docs/tasks/job/parallel-processing-expansion.md
- docs/tasks/job/coarse-parallel-processing-work-queue/index.md
- docs/tasks/job/fine-parallel-processing-work-queue/index.md
- title: Access Applications in a Cluster
landing_page: /docs/tasks/access-application-cluster/web-ui-dashboard/
section:
- docs/tasks/access-application-cluster/web-ui-dashboard.md
- docs/tasks/access-application-cluster/access-cluster.md
@@ -78,6 +85,7 @@ toc:
path: https://github.com/kubernetes/kubernetes/tree/release-1.5/examples/cluster-dns
- title: Monitor, Log, and Debug
landing_page: /docs/tasks/debug-application-cluster/resource-usage-monitoring/
section:
- docs/tasks/debug-application-cluster/core-metrics-pipeline.md
- docs/tasks/debug-application-cluster/resource-usage-monitoring.md
@@ -100,6 +108,7 @@ toc:
path: https://github.com/kubernetes/kubernetes/tree/release-1.5/examples/explorer
- title: Extend Kubernetes
landing_page: /docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/
section:
- docs/tasks/access-kubernetes-api/http-proxy-access-api.md
- docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions.md
@@ -111,11 +120,13 @@ toc:
- docs/tasks/service-catalog/install-service-catalog-using-sc.md
- title: TLS
landing_page: /docs/tasks/tls/managing-tls-in-a-cluster/
section:
- docs/tasks/tls/managing-tls-in-a-cluster.md
- docs/tasks/tls/certificate-rotation.md
- title: Administer a Cluster
landing_page: /docs/tasks/administer-cluster/memory-default-namespace/
section:
- title: Manage Memory, CPU, and API Resources
section:
@@ -132,6 +143,7 @@ toc:
- docs/tasks/administer-cluster/access-cluster-api.md
- docs/tasks/administer-cluster/access-cluster-services.md
- docs/tasks/administer-cluster/securing-a-cluster.md
- docs/tasks/administer-cluster/sysctl-cluster.md
- docs/tasks/administer-cluster/encrypt-data.md
- docs/tasks/administer-cluster/configure-upgrade-etcd.md
- docs/tasks/administer-cluster/static-pod.md
@@ -140,6 +152,7 @@ toc:
- docs/tasks/administer-cluster/kubeadm-upgrade-1-7.md
- docs/tasks/administer-cluster/kubeadm-upgrade-1-8.md
- docs/tasks/administer-cluster/kubeadm-upgrade-1-9.md
- docs/tasks/administer-cluster/kubeadm-upgrade-ha.md
- docs/tasks/administer-cluster/namespaces.md
- docs/tasks/administer-cluster/namespaces-walkthrough.md
- docs/tasks/administer-cluster/dns-horizontal-autoscaling.md
@@ -150,8 +163,6 @@ toc:
- docs/tasks/administer-cluster/reserve-compute-resources.md
- docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md
- docs/tasks/administer-cluster/declare-network-policy.md
- docs/tasks/administer-cluster/reconfigure-kubelet.md
- docs/tasks/administer-cluster/kubelet-config-file.md
- title: Install Network Policy Provider
section:
- docs/tasks/administer-cluster/calico-network-policy.md
@@ -159,6 +170,8 @@ toc:
- docs/tasks/administer-cluster/kube-router-network-policy.md
- docs/tasks/administer-cluster/romana-network-policy.md
- docs/tasks/administer-cluster/weave-network-policy.md
- docs/tasks/administer-cluster/reconfigure-kubelet.md
- docs/tasks/administer-cluster/kubelet-config-file.md
- docs/tasks/administer-cluster/change-pv-reclaim-policy.md
- docs/tasks/administer-cluster/configure-pod-disruption-budget.md
- docs/tasks/administer-cluster/limit-storage-consumption.md
@@ -169,9 +182,11 @@ toc:
- docs/tasks/administer-cluster/configure-multiple-schedulers.md
- docs/tasks/administer-cluster/ip-masq-agent.md
- docs/tasks/administer-cluster/dns-custom-nameservers.md
- docs/tasks/administer-cluster/dns-debugging-resolution.md
- docs/tasks/administer-cluster/pvc-protection.md
- title: Federation - Run an App on Multiple Clusters
landing_page: /docs/tasks/federation/set-up-cluster-federation-kubefed/
section:
- docs/tasks/federation/federation-service-discovery.md
- docs/tasks/federation/set-up-cluster-federation-kubefed.md
@@ -190,18 +205,19 @@ toc:
- docs/tasks/administer-federation/secret.md
- title: Manage Cluster Daemons
landing_page: /docs/tasks/manage-daemon/update-daemon-set/
section:
- docs/tasks/manage-daemon/update-daemon-set.md
- docs/tasks/manage-daemon/rollback-daemon-set.md
- title: Manage GPUs
section:
- docs/tasks/manage-gpus/scheduling-gpus.md
path: /docs/tasks/manage-gpus/scheduling-gpus/
- title: Manage HugePages
section:
- docs/tasks/manage-hugepages/scheduling-hugepages.md
path: /docs/tasks/manage-hugepages/scheduling-hugepages/
- title: Extend kubectl with plugins
section:
- docs/tasks/extend-kubectl/kubectl-plugins.md
path: /docs/tasks/extend-kubectl/kubectl-plugins/
- title: Troubleshooting
path: /docs/tasks/debug-application-cluster/troubleshooting/
+15 -9
View File
@@ -1,8 +1,10 @@
bigheader: "Tutorials"
abstract: "Detailed walkthroughs of common Kubernetes operations and workflows."
landing_page: /docs/tutorials/index/
toc:
- docs/tutorials/index.md
- title: Kubernetes Basics
landing_page: /docs/tutorials/kubernetes-basics/index/
section:
- docs/tutorials/kubernetes-basics/index.html
- title: 1. Create a Cluster
@@ -30,30 +32,32 @@ toc:
- docs/tutorials/kubernetes-basics/update-intro.html
- docs/tutorials/kubernetes-basics/update-interactive.html
- title: Online Training Courses
landing_page: /docs/tutorials/online-training/overview/
section:
- docs/tutorials/online-training/overview.md
- title: Scalable Microservices with Kubernetes (Udacity)
path: https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615
- title: Introduction to Kubernetes (edX)
path: https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x#
- docs/tutorials/stateless-application/hello-minikube.md
- docs/user-guide/walkthrough/index.md
- docs/user-guide/walkthrough/k8s201.md
- title: Hello Minikube
path: /docs/tutorials/stateless-application/hello-minikube/
- title: Kubernetes 101
path: /docs/user-guide/walkthrough/
- title: Kubernetes 201
path: /docs/user-guide/walkthrough/k8s201/
- title: Configuration
landing_page: /docs/tutorials/configuration/configure-redis-using-configmap/
section:
- docs/tutorials/configuration/configure-redis-using-configmap.md
- title: Object Management Using kubectl
section:
- docs/tutorials/object-management-kubectl/object-management.md
- docs/tutorials/object-management-kubectl/imperative-object-management-command.md
- docs/tutorials/object-management-kubectl/imperative-object-management-configuration.md
- docs/tutorials/object-management-kubectl/declarative-object-management-configuration.md
- title: Stateless Applications
landing_page: /docs/tutorials/stateless-application/guestbook/
section:
- docs/tasks/run-application/run-stateless-application-deployment.md
- docs/tutorials/stateless-application/guestbook.md
- docs/tasks/access-application-cluster/service-access-application-cluster.md
- docs/tutorials/stateless-application/expose-external-ip-address.md
- title: Stateful Applications
landing_page: /docs/tutorials/stateful-application/basic-stateful-set/
section:
- docs/tutorials/stateful-application/basic-stateful-set.md
- docs/tasks/run-application/run-single-instance-stateful-application.md
@@ -62,8 +66,10 @@ toc:
- docs/tutorials/stateful-application/cassandra.md
- docs/tutorials/stateful-application/zookeeper.md
- title: Clusters
landing_page: /docs/tutorials/clusters/apparmor/
section:
- docs/tutorials/clusters/apparmor.md
- title: Services
landing_page: /docs/tutorials/services/source-ip/
section:
- docs/tutorials/services/source-ip.md
@@ -0,0 +1,19 @@
id: code-contributor
name: Code Contributor
glossary_id: code-contributor
index: 0
foundational:
- label: "Read the Developer Guide"
icon: fa-book
url: "/docs/imported/community/devel/"
intermediate:
- label: "Learn about the Kubernetes Enhancement Proposal (KEP) process"
icon: fa-upload
url: "/docs/imported/community/keps/"
- label: "Understand the API conventions"
icon: fa-map-o
url: "https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md"
advanced:
- label: "Learn about the release process"
icon: fa-code-fork
url: "https://github.com/kubernetes/release/blob/master/README.md"
@@ -0,0 +1,19 @@
id: community-contributor
name: Community Contributor
short_desc: A person who works to build the Kubernetes community (e.g. by organizing meetups).
index: 1
foundational:
- label: "Contribute to the Kubernetes OSS project"
icon: fa-users
url: "/docs/imported/community/guide/"
- label: "Find out about mentoring initiatives"
icon: fa-graduation-cap
url: "/docs/imported/community/mentoring/"
intermediate:
- label: "Apply for community membership as a member, reviewer, approver, owner, or maintainer"
icon: fa-user-plus
url: "https://github.com/kubernetes/community/blob/master/community-membership.md"
advanced:
- label: "Learn about Kubernetes community governance"
icon: fa-gavel
url: "https://github.com/kubernetes/community/blob/master/governance.md"
@@ -0,0 +1,40 @@
id: docs-contributor
name: Docs Contributor
short_desc: A person who writes documentation for the Kubernetes project (e.g. this site).
index: 2
foundational:
- label: "Contribute to the Kubernetes documentation"
icon: fa-users
url: "/editdocs/"
- label: "Learn about documentation style"
icon: fa-book
url: "/docs/home/contribute/style-guide/"
- label: "Review documentation issues"
icon: fa-bug
url: "/docs/home/contribute/review-issues/"
- label: "Create a documentation pull request (PR)"
icon: fa-pencil-square-o
url: "/docs/home/contribute/create-pull-request/"
- label: "Stage documentation changes"
icon: fa-eye
url: "/docs/home/contribute/stage-documentation-changes/#staging-a-pull-request"
intermediate:
- label: "Write a new topic"
icon: fa-plus-circle
url: "/docs/home/contribute/write-new-topic/"
- label: "Stage documentation changes locally"
icon: fa-cloud-download
url: "/docs/home/contribute/stage-documentation-changes/#staging-locally-using-docker"
- label: "Apply page templates"
icon: fa-clone
url: "/docs/home/contribute/page-templates/"
- label: "Add callout formatting"
icon: fa-exclamation-circle
url: "/docs/home/contribute/style-guide/#callout-formatting"
advanced:
- label: "Add feature state tags"
icon: fa-tag
url: "/docs/home/contribute/includes/#feature-state"
- label: "Add tabs to display multiple flavors of content"
icon: fa-folder-o
url: "/docs/home/contribute/includes/#tabs"
@@ -0,0 +1,24 @@
id: docker-compose-swarm
name: Migrating from Docker Compose and Swarm
index: 1
foundational:
- label: "b1: foundational stuff"
url: "#"
- label: "b2: foundational stuff"
url: "#"
- label: "b3: foundational stuff"
url: "#"
intermediate:
- label: "b1: intermediate stuff"
url: "#"
- label: "b2: intermediate stuff"
url: "#"
- label: "b3: intermediate stuff"
url: "#"
advanced:
- label: "b1: advanced stuff"
url: "#"
- label: "b2: advanced stuff"
url: "#"
- label: "b3: advanced stuff"
url: "#"
+24
View File
@@ -0,0 +1,24 @@
id: heroku
name: Migrating from Heroku (PaaS)
index: 2
foundational:
- label: "c1: foundational stuff"
url: "#"
- label: "c2: foundational stuff"
url: "#"
- label: "c3: foundational stuff"
url: "#"
intermediate:
- label: "c1: intermediate stuff"
url: "#"
- label: "c2: intermediate stuff"
url: "#"
- label: "c3: intermediate stuff"
url: "#"
advanced:
- label: "c1: advanced stuff"
url: "#"
- label: "c2: advanced stuff"
url: "#"
- label: "c3: advanced stuff"
url: "#"
+24
View File
@@ -0,0 +1,24 @@
id: mesos
name: Migrating from Apache Mesos
index: 3
foundational:
- label: "d1: foundational stuff"
url: "#"
- label: "d2: foundational stuff"
url: "#"
- label: "d3: foundational stuff"
url: "#"
intermediate:
- label: "d1: intermediate stuff"
url: "#"
- label: "d2: intermediate stuff"
url: "#"
- label: "d3: intermediate stuff"
url: "#"
advanced:
- label: "d1: advanced stuff"
url: "#"
- label: "d2: advanced stuff"
url: "#"
- label: "d3: advanced stuff"
url: "#"
@@ -0,0 +1,24 @@
id: vmware-openstack
name: Migrating from VMware and/or OpenStack
index: 0
foundational:
- label: "a1: foundational stuff"
url: "#"
- label: "a2: foundational stuff"
url: "#"
- label: "a3: foundational stuff"
url: "#"
intermediate:
- label: "a1: intermediate stuff"
url: "#"
- label: "a2: intermediate stuff"
url: "#"
- label: "a3: intermediate stuff"
url: "#"
advanced:
- label: "a1: advanced stuff"
url: "#"
- label: "a2: advanced stuff"
url: "#"
- label: "a3: advanced stuff"
url: "#"
@@ -0,0 +1,40 @@
id: app-developer
name: Application Developer
glossary_id: application-developer
index: 0
foundational:
- label: Get started with a cluster
icon: fa-television
url: /docs/user-journeys/users/application-developer/foundational
- label: Deploy an application
icon: fa-retweet
url: /docs/user-journeys/users/application-developer/foundational#section-2
- label: Understand basic Kubernetes architecture
icon: fa-cog
url: /docs/user-journeys/users/application-developer/foundational#section-3
- label: Explore additional resources
icon: fa-book
url: /docs/user-journeys/users/application-developer/foundational#section-4
intermediate:
- label: Learn additional workload patterns
icon: fa-cogs
url: /docs/user-journeys/users/application-developer/intermediate
- label: Deploy a production-ready workload
icon: fa-retweet
url: /docs/user-journeys/users/application-developer/intermediate#section-2
- label: Improve your dev workflow with tooling
icon: fa-scissors
url: /docs/user-journeys/users/application-developer/intermediate#section-3
- label: Explore additional resources
icon: fa-book
url: /docs/user-journeys/users/application-developer/intermediate#section-4
advanced:
- label: Deploy an application with advanced features
icon: fa-sliders
url: /docs/user-journeys/users/application-developer/advanced
- label: Extend the Kubernetes API
icon: fa-arrows
url: /docs/user-journeys/users/application-developer/advanced#section-2
- label: Explore additional resources
icon: fa-book
url: /docs/user-journeys/users/application-developer/advanced#section-3
@@ -0,0 +1,43 @@
id: cluster-operator
name: Cluster Operator
glossary_id: cluster-operator
index: 1
foundational:
- label: Get an overview of Kubernetes
icon: fa-globe
url: /docs/user-journeys/users/cluster-operator/foundational
- label: Learn about Kubernetes basics
icon: fa-cog
url: /docs/user-journeys/users/cluster-operator/foundational#section-2
- label: Get information about my cluster
icon: fa-info-circle
url: /docs/user-journeys/users/cluster-operator/foundational#section-3
- label: Explore additional resources
icon: fa-compass
url: /docs/user-journeys/users/cluster-operator/foundational#section-4
intermediate:
- label: "Work with Ingress, Networking, Storage, Workloads"
icon: fa-sliders
url: /docs/user-journeys/users/cluster-operator/intermediate
- label: "Implement security best practices"
icon: fa-shield
url: /docs/user-journeys/users/cluster-operator/intermediate#section-2
- label: "Implement custom logging and monitoring"
icon: fa-heartbeat
url: /docs/user-journeys/users/cluster-operator/intermediate#section-3
- label: "Additional Resources"
icon: fa-book
url: /docs/user-journeys/users/cluster-operator/intermediate#section-4
advanced:
- label: "Connect to managed services using Service Catalog"
icon: fa-puzzle-piece
url: "/docs/concepts/service-catalog/"
- label: "Extend a Kubernetes cluster"
icon: fa-arrows
url: "/docs/concepts/overview/extending/"
- label: "Create a Pod Security Policy"
icon: fa-lock
url: "/docs/concepts/policy/pod-security-policy/"
- label: "Define a Resource Quota"
icon: fa-tachometer
url: "/docs/concepts/policy/resource-quotas/"
+1
View File
@@ -32,6 +32,7 @@ ga('send', 'pageview');
function hideNav(toc){
if (!toc) toc = document.querySelector('#docsToc')
if (!toc) return
var container = toc.querySelector('.container')
// container is built dynamically, so it may not be present on the first runloop
+10 -7
View File
@@ -5,13 +5,14 @@
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:400,100,100italic,300,300italic,400italic,500,500italic,700,700italic,900,900italic">
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto+Mono">
{% if page.case_study_styles %}<link rel="stylesheet" type="text/css" href="/css/case_study_styles.css"><!-- custom case_study_styles on -->{% else %}<link rel="stylesheet" type="text/css" href="/css/styles.css"><!-- default styles.css on -->{% endif %}
<link rel="stylesheet" type="text/css" href="/css/jquery-ui.min.css">
<link rel="stylesheet" type="text/css" href="/css/sweetalert.css">
<link rel="stylesheet" type="text/css" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.min.css">
<link rel="stylesheet" type="text/css" href="/css/callouts.css">
<link rel="stylesheet" type="text/css" href="/css/custom-jekyll/tags.css">
{% if page.deprecated %}<link rel="stylesheet" type="text/css" href="/css/deprecation-warning.css">{% endif %}
{% if page.class == "gridPage" %}<link rel="stylesheet" type="text/css" href="/css/gridpage.css">{% endif %}
{% if page.css %}<link rel="stylesheet" type="text/css" href="{{ page.css }}"><!-- custom css added -->{% else %}<!-- no custom css detected -->{% endif %}
{% if page.css %}{% assign csslist = page.css | split: ',' | compact %}{% for cssurl in csslist %}<link rel="stylesheet" type="text/css" href="{{ cssurl | strip }}">
{% endfor %}<!-- custom css added -->{% else %}<!-- no custom css detected -->{% endif %}
{% if page.description %}
<meta name="description" content="{{ page.description }}" />
@@ -19,11 +20,13 @@
<meta name="description" content="{{ page.title }}" />
{% endif %}
<script src="/js/jquery-2.2.0.min.js"></script>
<script src="/js/jquery-ui.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.min.js"></script>
<script src="/js/script.js"></script>
<script src="/js/sweetalert.min.js"></script>
<script src="/js/bootstrap.min.js"></script>
<script src="/js/custom-jekyll/tags.js"></script>
{% if page.js %}{% assign jslist = page.js | split: ',' | compact %}{% for jsurl in jslist %}<script src="{{ jsurl | strip }}"></script>
{% endfor %}<!-- custom js added -->{% else %}<!-- no custom js detected -->{% endif %}
{% seo %}
</head>
-1
View File
@@ -24,7 +24,6 @@
{% endfor %}
</ul>
</li>
</li>
</ul>
<!-- <a href="/docs/home" class="button" id="viewDocs" data-auto-burger-exclude>View Documentation</a> -->
<a href="/docs/tutorials/kubernetes-basics/" class="button" id="tryKubernetes" data-auto-burger-exclude>Try Kubernetes</a>
+281 -8
View File
@@ -208,7 +208,7 @@
name: 'Spotinst',
logo: 'spotinst',
link: 'http://blog.spotinst.com/2016/08/04/elastigroup-kubernetes-minions-steroids/',
blurb: 'Spotinst uses a prediction algorithm in the Amazon EC2 Spot allowing k8s clusters to increase performance and lower the infrastructure costs'
blurb: 'Your Kubernetes For 80% Less. Run K8s workloads on Spot Instances with 100% availability to save 80% + autoscale your Kubernetes with maximum efficiency in heterogenous environments.'
},
{
type: 2,
@@ -281,11 +281,11 @@
blurb: 'CloudPlex enables operations teams to visually deploy, orchestrate, manage, and monitor infrastructure, applications, and services in public or private cloud.'
},
{
type: 1,
type: 2,
name: 'Kumina',
logo: 'kumina',
link: 'https://www.kumina.nl/managed_kubernetes',
blurb: 'Kumina creates Kubernetes solutions on your choice of infrastructure with around-the-clock management and unlimited support.'
blurb: 'Kumina combines the power of Kubernetes with 10+ years of experience in IT operations. We create, build and support fully managed Kubernetes solutions on your choice of infrastructure. We also provide consulting and training.'
},
{
type: 0,
@@ -360,7 +360,7 @@
{
type: 0,
name: 'Mashape, Inc.',
logo: 'mashape',
logo: 'kong',
link: 'https://getkong.org/install/kubernetes/',
blurb: 'Kong is a scalable open source API layer that runs in front of any RESTful API and can be provisioned to a Kubernetes cluster.'
},
@@ -490,6 +490,13 @@
link: 'https://tenxcloud.com',
blurb: 'TenxCloud - TenxCloud Container Engine (TCE)'
},
{
type: 2,
name: 'TenxCloud',
logo: 'tenxcloud',
link: 'https://www.tenxcloud.com/',
blurb: 'Founded in October 2014, TenxCloud is a leading enterprise container cloud computing service provider in China, covering the areas such as container PaaS cloud platform, micro-service management, DevOps, development test, AIOps and so on. Provide private cloud PaaS products and solutions for financial, energy, operator, manufacturing, education and other industry customers.'
},
{
type: 0,
name: 'Twistlock',
@@ -582,7 +589,7 @@
blurb: 'Container security solution for small-to-medium size enterprises who plan to run Kubernetes on shared infrastructure.'
},
{
type: 1,
type: 2,
name: 'Creationline, Inc.',
logo: 'creationline',
link: 'https://www.creationline.com/ci',
@@ -705,7 +712,7 @@
name: 'Codefresh',
logo: 'codefresh',
link: 'https://codefresh.io/kubernetes-deploy/',
blurb: 'Codefresh is a complete tool chain for delivering containers to Kubernetes.'
blurb: 'Codefresh is a complete DevOps platform built for containers and Kubernetes. With CI/CD pipelines, image management, and deep integrations into Kubernetes and Helm.'
},
{
type: 0,
@@ -728,6 +735,13 @@
link: 'https://cloud.google.com/kubernetes-engine/',
blurb: 'Google - Google Kubernetes Engine'
},
{
type: 1,
name: 'Superorbital',
logo: 'superorbital',
link: 'https://superorbit.al/workshops/kubernetes/',
blurb: 'Helping companies navigate the Cloud Native waters through Kubernetes consulting and training.'
},
{
type: 3,
name: 'Apprenda',
@@ -1071,6 +1085,13 @@
link: 'http://www.alauda.cn/product/detail/id/68.html',
blurb: 'Alauda - Alauda EE'
},
{
type: 2,
name: 'Alauda',
logo: 'alauda',
link: 'www.alauda.io',
blurb: 'Alauda provides Kubernetes-Centric Enterprise Platform-as-a-Service offerings with a razor focus on delivering Cloud Native capabilities and DevOps best practices to enterprise customers across industries in China.'
},
{
type: 3,
name: 'EasyStack',
@@ -1125,7 +1146,7 @@
name: 'Pure Storage',
logo: 'pure_storage',
link: 'https://hub.docker.com/r/purestorage/k8s/',
blurb: 'Our flexvol driver and dynamic provisioner allow FlashArray/Flashblade storage devices to be consumed as first class persistent storage from within Kuberentes.'
blurb: 'Our flexvol driver and dynamic provisioner allow FlashArray/Flashblade storage devices to be consumed as first class persistent storage from within Kubernetes.'
},
{
type: 0,
@@ -1138,7 +1159,7 @@
type: 0,
name: 'Portworx',
logo: 'portworx',
link: 'https://docs.portworx.com/scheduler/kubernetes/install.html',
link: 'https://portworx.com/use-case/kubernetes-storage/',
blurb: 'With Portworx, you can manage any database or stateful service on any infrastructure using Kubernetes. You get a single data management layer for all of your stateful services, no matter where they run.'
},
{
@@ -1183,6 +1204,258 @@
link: 'https://cloudbourne.com/kubernetes-enterprise-hybrid-cloud/',
blurb: 'Want to achieve maximum build, deploy and monitoring automation using Kubernetes? We can help.'
},
{
type: 0,
name: 'CloudBourne',
logo: 'cloudbourne',
link: 'https://cloudbourne.com/',
blurb: 'Our AppZ Hybrid Cloud Platform can help you achieve your digital transformation goals using the powerful Kubernetes.'
},
{
type: 3,
name: 'BoCloud',
logo: 'bocloud',
link: 'http://www.bocloud.com.cn/en/index.html',
blurb: 'BoCloud - BeyondcentContainer'
},
{
type: 2,
name: 'Naitways',
logo: 'naitways',
link: 'https://www.naitways.com/',
blurb: 'Naitways is an Operator (AS57119), Integrator and Cloud Services Provider (our own !). We aim to provide value-added services through our mastering of the whole value chain (Infrastructure, Network, Human skills). Private and Public Cloud is available through Kubernetes managed or unmanaged.'
},
{
type: 2,
name: 'Kinvolk',
logo: 'kinvolk',
link: 'https://kinvolk.io/kubernetes/',
blurb: 'Kinvolk offers Kubernetes engineering & operations support from cluster to kernel. Leading cloud-native organizations turn to Kinvolk for deep-stack Linux expertise.'
},
{
type: 1,
name: 'Cascadeo Corporation',
logo: 'cascadeo',
link: 'http://www.cascadeo.com/',
blurb: 'Cascadeo designs, implements, and manages containerized workloads with Kubernetes, for both existing applications and greenfield development projects.'
},
{
type: 1,
name: 'Elastisys AB',
logo: 'elastisys',
link: 'https://elastisys.com/services/#kubernetes',
blurb: 'We design, build, and operate Kubernetes clusters. We are experts in highly available and self-optimizing Kubernetes infrastructures'
},
{
type: 1,
name: 'Greenfield Guild',
logo: 'greenfield',
link: 'http://greenfieldguild.com/',
blurb: 'The Greenfield Guild builds quality open source solutions on, and offers training and support for, Kubernetes in any environment.'
},
{
type: 1,
name: 'PolarSeven',
logo: 'polarseven',
link: 'https://polarseven.com/what-we-do/kubernetes/',
blurb: 'To get started up and running with Kubernetes (K8s) our PolarSeven consultants can help you with creating a fully functional dockerized environment to run and deploy your applications.'
},
{
type: 1,
name: 'Kloia',
logo: 'kloia',
link: 'https://kloia.com/kubernetes/',
blurb: 'Kloia is DevOps and Microservices Consultancy company that helps its customers to migrate their environment to cloud platforms for enabling more scalable and secure environments. We use Kubernetes to provide our customers all-in-one solutions in an cloud-agnostic way.'
},
{
type: 0,
name: 'Bluefyre',
logo: 'bluefyre',
link: 'https://www.bluefyre.io',
blurb: 'Bluefyre offers a developer-first security platform that is native to Kubernetes. Bluefyre helps your development team ship secure code on Kubernetes faster!'
},
{
type: 0,
name: 'Harness',
logo: 'harness',
link: 'https://harness.io/harness-continuous-delivery/secret-sauce/smart-automation/',
blurb: 'Harness offers Continuous Delivery As-A-Service will full support for containerized apps and Kubernetes clusters.'
},
{
type: 0,
name: 'VMware - Wavefront',
logo: 'wavefront',
link: 'https://www.wavefront.com/solutions/container-monitoring/',
blurb: 'The Wavefront platform provides metrics-driven analytics and monitoring for Kubernetes and container dashboards for DevOps and developer teams delivering visibility into high-level services as well as granular container metrics.'
},
{
type: 0,
name: 'Bloombase, Inc.',
logo: 'bloombase',
link: 'https://www.bloombase.com/go/kubernetes',
blurb: 'Bloombase provides high bandwidth, defense-in-depth data-at-rest encryption to lock down Kubernetes crown-jewels at scale.'
},
{
type: 0,
name: 'Kasten',
logo: 'kasten',
link: 'https://kasten.io/product/',
blurb: 'Kasten provides enterprise solutions specifically built to address the operational complexity of data management in cloud-native environments.'
},
{
type: 0,
name: 'Humio',
logo: 'humio',
link: 'https://humio.com',
blurb: 'Humio is a log aggregation database. We offer a Kubernetes integration that will give you insights to your logs across apps and instances.'
},
{
type: 0,
name: 'Outcold Solutions LLC',
logo: 'outcold',
link: 'https://www.outcoldsolutions.com/#monitoring-kubernetes',
blurb: 'Powerful Certified Splunk applications for Monitoring OpenShift, Kubernetes and Docker.'
},
{
type: 0,
name: 'SysEleven GmbH',
logo: 'syseleven',
link: 'http://www.syseleven.de/',
blurb: 'Enterprise Customers who are in need of bulletproof operations (High Performance E-Commerce and Enterprise Portals)'
},
{
type: 0,
name: 'Landoop',
logo: 'landoop',
link: 'http://lenses.stream',
blurb: 'Lenses for Apache Kafka, to deploy, manage and operate with confidence data streaming pipelines and topologies at scale with confidence and native Kubernetes integration.'
},
{
type: 0,
name: 'Redis Labs',
logo: 'redis',
link: 'https://redislabs.com/blog/getting-started-with-kubernetes-and-redis-using-redis-enterprise/',
blurb: 'Redis Enterprise extends open source Redis and delivers stable high performance and linear scaling required for building microservices on the Kubernetes platform.'
},
{
type: 3,
name: 'Diamanti',
logo: 'diamanti',
link: 'https://diamanti.com/',
blurb: 'Diamanti - Diamanti-D10'
},
{
type: 3,
name: 'Eking',
logo: 'eking',
link: 'http://www.eking-tech.com/',
blurb: 'Hainan eKing Technology Co. - eKing Cloud Container Platform'
},
{
type: 3,
name: 'Harmony Cloud',
logo: 'harmony',
link: 'http://harmonycloud.cn/products/rongqiyun/',
blurb: 'Harmonycloud - Harmonycloud Container Platform'
},
{
type: 3,
name: 'Woqutech',
logo: 'woqutech',
link: 'http://www.woqutech.com/product/product-16-247.html#sss',
blurb: 'Woqutech - QFusion'
},
{
type: 3,
name: 'Baidu',
logo: 'baidu',
link: 'https://cloud.baidu.com/product/cce.html',
blurb: 'Baidu Cloud - Baidu Cloud Container Engine'
},
{
type: 3,
name: 'ZTE',
logo: 'zte',
link: 'https://sdnfv.zte.com.cn/en/home',
blurb: 'ZTE - TECS OpenPalette'
},
{
type: 1,
name: 'Automatic Server AG',
logo: 'asag',
link: 'http://www.automatic-server.com/paas.html',
blurb: 'We install and operate Kubernetes in big enterprises, create deployment workflows and help to migrate.'
},
{
type: 1,
name: 'Circulo Siete',
logo: 'circulo',
link: 'https://circulosiete.com/consultoria/kubernetes/',
blurb: 'We are a Mexico based company offering training, consulting and support to migrate your workloads to Kubernetes, Cloud Native Microservices & Devops.'
},
{
type: 1,
name: 'DevOpsGuru',
logo: 'devopsguru',
link: 'http://devopsguru.ca/workshop',
blurb: 'DevOpsGuru work with small business to transform from physical to virtual to containerization.'
},
{
type: 1,
name: 'EIN Intelligence Co., Ltd',
logo: 'ein',
link: 'https://ein.io',
blurb: 'Startups and agile enterprises in South Korea.'
},
{
type: 0,
name: 'GuardiCore',
logo: 'guardicore',
link: 'https://www.guardicore.com/',
blurb: 'GuardiCore provided process level visibility and network policy enforcement on containerized assets on the Kubernetes platform.'
},
{
type: 0,
name: 'Hedvig',
logo: 'hedvig',
link: 'https://www.hedviginc.com/blog/provisioning-hedvig-storage-with-kubernetes',
blurb: 'Hedvig is software-defined storage that uses NFS or iSCSI for persistent volumes for provisioning shared storage for pods and containers.'
},
{
type: 0,
name: 'Hewlett Packard Enterprise',
logo: 'hpe',
link: ' https://www.hpe.com/us/en/storage/containers.html',
blurb: 'Persistent Storage that makes data as easy to manage as containers: dynamic provisioning, policy-based performance & protection, QoS, & more.'
},
{
type: 0,
name: 'JetBrains',
logo: 'jetbrains',
link: 'https://blog.jetbrains.com/teamcity/2017/10/teamcity-kubernetes-support-plugin/',
blurb: 'Run TeamCity cloud build agents in a Kubernetes cluster. Provides Helm support as a build step.'
},
{
type: 2,
name: 'Opensense',
logo: 'opensense',
link: 'http://www.opensense.fr/en/kubernetes-en/',
blurb: 'We provide Kubernetes services (integration, operation, training) as well as development of banking microservices based on our extended experience with cloud of containers, microservices, data management and financial sector.'
},
{
type: 2,
name: 'SAP SE',
logo: 'sap',
link: 'https://cloudplatform.sap.com',
blurb: 'The SAP Cloud Platform provides in-memory capabilities and unique business services for building and extending applications. With open sourced Project Gardener, SAP utilizes the power of Kubernetes to enable an open, robust, multi-cloud experience for our customers. You can use simple, modern cloud native design principles and leverage skills your organization already has to deliver agile and transformative applications, while integrating with the latest SAP Leonardo business features.'
},
{
type: 1,
name: 'Mobilise Cloud Services Limited',
logo: 'mobilise',
link: 'http://www.mobilise.cloud/services/serverless-application-delivery',
blurb: 'Mobilise helps organisations adopt Kubernetes and integrate with their CI/CD tooling.'
},
{
type: 0,
name: 'Logdna',
+2
View File
@@ -6,6 +6,8 @@ To write a glossary snippet, start with a copy of the template, [`/_data/glossar
* This field must match the name of the glossary file itself (without the `*.yml` extension). It is *not* intended to be displayed to users, and is only used programmatically.
* (Required) `name`
* The name of the term.
* (Optional) `full-link`
* The link to any specific long-form documentation, starting with `https://` if not within the website repo, and `/docs/...` if within the repo.
* (Required) `tags`
* Must be one of the tags listed in the [tags directory in the website repository](https://github.com/kubernetes/website/tree/master/_data/canonical-tags).
* (Required) `short description`
@@ -0,0 +1,26 @@
<div class="track">{{ page.track }}</div>
<div class="topheader">
Introduction
</div>
<div class="sections">sections in this doc</div>
<div id="user-journeys-toc" class="tablebar">
<!-- This TOC section is populated with Javascript, see js/user-journeys-toc.js -->
</div>
<div class="docsection1">
{% if overview %}
{{ overview | liquify | markdownify }}
{% else %}
{% include templates/_errorthrower.md missing_block='overview' purpose='provides an introduction of this level.' %}
{% endif %}
{% if body %}
{{ body | liquify | markdownify | replace: '<h2', '</div><h2' | replace: '</h2>', '</h2><div class="docsection1">'}}
{% else %}
{% include templates/_errorthrower.md missing_block='body' purpose='contains content for this level.' %}
{% endif %}
</div>
<script src="/js/user-journeys/toc.js"></script>
+6 -1
View File
@@ -6,7 +6,12 @@
{% if item.section %}
{% include tocsearch.html tree=item.section toc=include.toc %}
{% else %}
{% if item == page.path %}
{% if item.path %}
{% assign filename = item.path | replace: '/', ' ' | strip | replace: ' ', '/' | append: '.md' %}
{% else %}
{% assign filename = item %}
{% endif %}
{% if filename == page.path %}
{% assign found_toc = include.toc %}
{% break %}
{% endif %}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+66
View File
@@ -0,0 +1,66 @@
<!Doctype html>
<html id="docs" class="{{ toc.bigheader }}">
{% include head.html %}
<body>
{% include header.html %}
<!-- HERO -->
<section id="hero" class="light-text">
<h1>{{ toc.bigheader }}</h1>
<h5>{{ toc.abstract }}</h5>
<div id="vendorStrip" class="light-text">
<ul>
<li><a href="/docs/home/" {% if toc.bigheader == "Kubernetes Documentation" %}class="YAH"{% endif %}>HOME</a></li>
<li><a href="/docs/setup/" {% if toc.bigheader == "Setup" %}class="YAH"{% endif %}>SETUP</a></li>
<li><a href="/docs/concepts/" {% if toc.bigheader == "Concepts" %}class="YAH"{% endif %}>CONCEPTS</a></li>
<li><a href="/docs/tasks/" {% if toc.bigheader == "Tasks" %}class="YAH"{% endif %}>TASKS</a></li>
<li><a href="/docs/tutorials/" {% if toc.bigheader == "Tutorials" %}class="YAH"{% endif %}>TUTORIALS</a></li>
<li><a href="/docs/reference/" {% if toc.bigheader == "Reference Documentation" %}class="YAH"{% endif %}>REFERENCE</a></li>
</ul>
<div id="searchBox">
<input type="text" id="search" placeholder="Search" onkeydown="if (event.keyCode==13) window.location.replace('/docs/search/?q=' + this.value)" autofocus="autofocus">
</div>
</div>
</section>
{% include deprecation-warning.html %}
<section id="encyclopedia">
<div id="docsToc" style="display:none;"></div>
<div id="content">
{{ content }}
<div class="issue-button-container">
<p><a href=""><img src="https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/{{ page.path }}?pixel" alt="Analytics" /></a></p>
{% if page.url != "/404.html" and page.url != "/docs/search/" %}
{% unless page.no_issue %}
<script type="text/javascript">
PDRTJS_settings_8345992 = {
"id" : "8345992",
"unique_id" : "{{ page.url }}",
"title" : "{{ page.title }}",
"permalink" : "https://kubernetes.io{{ page.url }}"
};
(function(d,c,j){if(!document.getElementById(j)){var pd=d.createElement(c),s;pd.id=j;pd.src=('https:'==document.location.protocol)?'https://polldaddy.com/js/rating/rating.js':'http://i0.poll.fm/js/rating/rating.js';s=document.getElementsByTagName(c)[0];s.parentNode.insertBefore(pd,s);}}(document,'script','pd-rating-js'));
</script>
<a href="" onclick="window.open('https://github.com/kubernetes/website/issues/new?title=Issue%20with%20' +
'k8s.io'+window.location.pathname)" class="button issue">Create an Issue</a>
{% endunless %}
{% unless page.noedit %}
<a href="/editdocs#{{ page.path }}" class="button issue">Edit this Page</a>
{% endunless %}
{% endif %}
</div>
</div>
</section>
{% include_cached footer.html %}
{% include footer-scripts.html %}
</body>
</html>
+2 -2
View File
@@ -62,11 +62,11 @@
"id" : "8345992",
"unique_id" : "{{ page.url }}",
"title" : "{{ page.title }}",
"permalink" : "http://kubernetes.github.io{{ page.url }}"
"permalink" : "https://kubernetes.io{{ page.url }}"
};
(function(d,c,j){if(!document.getElementById(j)){var pd=d.createElement(c),s;pd.id=j;pd.src=('https:'==document.location.protocol)?'https://polldaddy.com/js/rating/rating.js':'http://i0.poll.fm/js/rating/rating.js';s=document.getElementsByTagName(c)[0];s.parentNode.insertBefore(pd,s);}}(document,'script','pd-rating-js'));
</script>
<a href="" onclick="window.open('https://github.com/kubernetes/kubernetes.github.io/issues/new?title=Issue%20with%20' +
<a href="" onclick="window.open('https://github.com/kubernetes/website/issues/new?title=Issue%20with%20' +
'k8s.io'+window.location.pathname)" class="button issue">Create an Issue</a>
{% endunless %}
{% unless page.noedit %}
+8 -6
View File
@@ -1,10 +1,12 @@
# Custom Jekyll Plugins
This directory contains `*.rb` files that extend the original Jekyll classes and provide custom formatting for the docs site:
This directory contains `*.rb` files that extend the original Jekyll
classes and provide custom formatting for the docs site:
### `glossary_tags.rb`
A full list of glossary terms is available on the [Standardized Glossary](https://kubernetes.io/docs/reference/glossary/?fundamental=true) page. For further information about term schemas, see the [README](../_includes/templates/glossary/README.md) and the provided [`_example.yml`](../_data/glossary/_example.yml).
A full list of glossary terms is available on the [Standardized Glossary](https://kubernetes.io/docs/reference/glossary/?fundamental=true) page.
For further information about term schemas, see the [README](../_includes/templates/glossary/README.md) and the provided [`_example.yml`](../_data/glossary/_example.yml).
*NOTE: The "tags" referenced here are Liquid tags like `{% include %}`, **not** the glossary canonical tags that are used to categorize terms.*
@@ -23,7 +25,7 @@ This renders the definition of the glossary term inside a `<div>`, preserving Ma
| Name | Default | Description |
| --- | --- | --- |
| `term_id` | N/A (Required) | The `id` of the glossary term whose definition will be used. (This `id` is the same as the filename of the term, i.e. `_data/glossary/<ID>.yml`.) |
| `term_id` | Not Applicable (Required) | The `id` of the glossary term whose definition will be used. (This `id` is the same as the filename of the term, i.e. `_data/glossary/<ID>.yml`.) |
| `length` | "short" | Specifies which term definition should be used ("short" for the `short-definition`, "long" for `long-description`, "all" when both should be included). |
| `prepend` | "Service Catalog is" | A prefix which can be attached in front of a term's short definition (which is one or more sentence fragments). |
@@ -47,7 +49,7 @@ This renders the following:
| Name | Default | Description |
| --- | --- | --- |
| `text` | the `name` of the glossary term | The text that the user will hover over to display the glossary definition. **You should include this if using the tooltip inside of a glossary term's YAML short-definition.** |
| `term_id` | N/A (Required) | The `id` of the associated glossary term. (This `id` is the same as the filename of the term, i.e. `_data/glossary/<ID>.yml`.) |
| `term_id` | Not Applicable (Required) | The `id` of the associated glossary term. (This `id` is the same as the filename of the term, i.e. `_data/glossary/<ID>.yml`.) |
#### (3) `glossary_injector` tag
@@ -71,6 +73,6 @@ This renders the following:
| Name | Default | Description |
| --- | --- | --- |
| `text` | the `name` of the glossary term | The text that the user will hover over to display the glossary definition. |
| `term_id` | N/A (Required) | The `id` of the glossary term whose definition will be used. (This `id` is the same as the filename of the term, i.e. `_data/glossary/<ID>.yml`.) |
| `placeholder_id` | N/A (Required) | The `id` of the HTML element whose contents will be populated with the definition of `term_id` |
| `term_id` | Not Applicable (Required) | The `id` of the glossary term whose definition will be used. (This `id` is the same as the filename of the term, i.e. `_data/glossary/<ID>.yml`.) |
| `placeholder_id` | Not Applicable (Required) | The `id` of the HTML element whose contents will be populated with the definition of `term_id` |
| `length` | "short" | Specifies which term definition should be used ("short" for the `short-definition`, "long" for `long-description`, "all" when both should be included). |
+2 -1
View File
@@ -1,3 +1,4 @@
require 'pry'
# See /_plugins/README.md for full documentation of these custom Jekyll tags
module Jekyll
module GlossaryTags
@@ -89,7 +90,7 @@ module Jekyll
gsub(NESTED_MARKDOWN_LINKS, '\2').
strip
"<a class='glossary-tooltip' href='#{external_link}'>" \
"<a class='glossary-tooltip' href='#{external_link}' target='_blank'>" \
"#{@args[:text] || term_info["name"]}" \
"<span class='tooltip-text'>" \
"#{tooltip}" \
+23 -25
View File
@@ -7,7 +7,6 @@
/api-ref/ https://github.com/kubernetes/kubernetes/milestones/ 301
/concepts/containers/container-lifecycle-hooks/ /docs/concepts/containers/container-lifecycle-hooks/ 301
/docs/ /docs/home/ 301
/docs/abstractions/controllers/petset/ /docs/concepts/workloads/controllers/statefulset/ 301
/docs/admin/ /docs/concepts/cluster-administration/cluster-administration-overview/ 301
/docs/admin/add-ons/ /docs/concepts/cluster-administration/addons/ 301
@@ -29,6 +28,7 @@
/docs/admin/garbage-collection/ /docs/concepts/cluster-administration/kubelet-garbage-collection/ 301
/docs/admin/ha-master-gce/ /docs/tasks/administer-cluster/highly-available-master/ 301
/docs/admin/ha-master-gce.md/ /docs/tasks/administer-cluster/highly-available-master/ 301
/docs/admin/high-availability/ /docs/admin/high-availability/building/ 301
/docs/admin/kubeadm-upgrade-1-7/ /docs/tasks/administer-cluster/kubeadm-upgrade-1-7/ 301
/docs/admin/limitrange/ /docs/tasks/administer-cluster/cpu-memory-limit/ 301
/docs/admin/limitrange/Limits/ /docs/tasks/administer-cluster/limit-storage-consumption/#limitrange-to-limit-requests-for-storage/ 301
@@ -50,7 +50,7 @@
/docs/admin/resourcequota/limitstorageconsumption/ /docs/tasks/administer-cluster/limit-storage-consumption/ 301
/docs/admin/resourcequota/walkthrough/ /docs/tasks/administer-cluster/quota-api-object/ 301
/docs/admin/static-pods/ /docs/tasks/administer-cluster/static-pod/ 301
/docs/admin/sysctls/ /docs/concepts/cluster-administration/sysctl-cluster/ 301
/docs/admin/sysctls/ /docs/tasks/administer-cluster/sysctl-cluster/ 301
/docs/admin/upgrade-1-6/ /docs/tasks/administer-cluster/upgrade-1-6/ 301
/docs/admin/resource-quota/ /docs/concepts/policy/resource-quotas/ 301
@@ -71,17 +71,15 @@
/docs/api-reference/policy/v1beta1/definitions/ https://v1-4.docs.kubernetes.io/docs/api-reference/policy/v1beta1/definitions/ 301
/docs/api-reference/README/ https://v1-4.docs.kubernetes.io/docs/api-reference/README/ 301
/docs/api-reference/storage.k8s.io/v1beta1/operations/ https://v1-4.docs.kubernetes.io/docs/api-reference/storage.k8s.io/v1beta1/operations/ 301
/docs/api-reference/v1.4/* https://v1-4.docs.kubernetes.io/docs/reference/ 301
/docs/api-reference/1_5/* https://v1-5.docs.kubernetes.io/docs/reference/ 301
/docs/api-reference/v1.5/* https://v1-5.docs.kubernetes.io/docs/reference/ 301
/docs/api-reference/v1.6/* https://v1-6.docs.kubernetes.io/docs/reference/ 301
/docs/api-reference/v1.7/* https://v1-7.docs.kubernetes.io/docs/reference/ 301
/docs/api-reference/v1.8/* https://v1-8.docs.kubernetes.io/docs/api-reference/v1.8/:splat 301
/docs/api-reference/v1.9/ /docs/reference/generated/kubernetes-api/v1.9/ 301
/docs/api-reference/v1/definitions/ /docs/api-reference/v1.9/ 301
/docs/api-reference/v1/operations/ /docs/api-reference/v1.9/ 301
/docs/api-reference/v1.9/ /docs/reference/generated/kubernetes-api/v1.9/ 301
/docs/concepts/abstractions/controllers/garbage-collection/ /docs/concepts/workloads/controllers/garbage-collection/ 301
/docs/concepts/abstractions/controllers/petsets/ /docs/concepts/workloads/controllers/statefulset/ 301
/docs/concepts/abstractions/controllers/statefulsets/ /docs/concepts/workloads/controllers/statefulset/ 301
/docs/concepts/abstractions/init-containers/ /docs/concepts/workloads/pods/init-containers/ 301
/docs/concepts/abstractions/overview/ /docs/concepts/overview/working-with-objects/kubernetes-objects/ 301
@@ -99,6 +97,7 @@
/docs/concepts/cluster-administration/multiple-clusters/ /docs/concepts/cluster-administration/federation/ 301
/docs/concepts/cluster-administration/out-of-resource/ /docs/tasks/administer-cluster/out-of-resource/ 301
/docs/concepts/cluster-administration/resource-usage-monitoring /docs/tasks/debug-application-cluster/resource-usage-monitoring/ 301
/docs/concepts/cluster-administration/sysctl-cluster/ /docs/tasks/administer-cluster/sysctl-cluster/ 301
/docs/concepts/cluster-administration/static-pod/ /docs/tasks/administer-cluster/static-pod/ 301
/docs/concepts/clusters/logging/ /docs/concepts/cluster-administration/logging/ 301
/docs/concepts/configuration/container-command-arg/ /docs/tasks/inject-data-application/define-command-argument-container/ 301
@@ -114,18 +113,15 @@
/docs/concepts/services-networking/networkpolicies/ /docs/concepts/services-networking/network-policies/ 301
/docs/concepts/storage/etcd-store-api-object/ /docs/tasks/administer-cluster/configure-upgrade-etcd/ 301
/docs/concepts/storage/volumes/emptyDirapiVersion/ /docs/concepts/storage/volumes/#emptydir/ 301
/docs/concepts/tools/kubectl/object-management-overview/ /docs/tutorials/object-management-kubectl/object-management/ 301
/docs/concepts/tools/kubectl/object-management-using-commands/ /docs/tutorials/object-management-kubectl/imperative-object-management-command/ 301
/docs/concepts/tools/kubectl/object-management-using-declarative-config/ /docs/tutorials/object-management-kubectl/declarative-object-management-configuration/ 301
/docs/concepts/tools/kubectl/object-management-using-imperative-commands/ /docs/tutorials/object-management-kubectl/imperative-object-management-command/ 301
/docs/concepts/tools/kubectl/object-management-using-imperative-config/ /docs/tutorials/object-management-kubectl/imperative-object-management-configuration/ 301
/docs/concepts/tools/kubectl/object-management-overview/ /docs/concepts/overview/object-management-kubectl/overview/ 301
/docs/concepts/tools/kubectl/object-management-using-commands/ /docs/concepts/overview/object-management-kubectl/imperative-command/ 301
/docs/concepts/tools/kubectl/object-management-using-declarative-config/ /docs/concepts/overview/object-management-kubectl/declarative-config/ 301
/docs/concepts/tools/kubectl/object-management-using-imperative-commands/ /docs/concepts/overview/object-management-kubectl/imperative-command/ 301
/docs/concepts/tools/kubectl/object-management-using-imperative-config/ /docs/concepts/overview/object-management-kubectl/imperative-config/ 301
/docs/concepts/workloads/controllers/cron-jobs/deployment/ /docs/concepts/workloads/controllers/cron-jobs/ 301
/docs/concepts/workloads/controllers/daemonset/docs/concepts/workloads/pods/pod/ /docs/concepts/workloads/pods/pod/ 301
/docs/concepts/workloads/controllers/deployment/docs/concepts/workloads/pods/pod/ /docs/concepts/workloads/pods/pod/ 301
/docs/concepts/workloads/controllers/deployment.md /docs/concepts/workloads/controllers/deployment/ 301
/docs/concepts/workloads/controllers/job/ /docs/concepts/workloads/controllers/jobs-run-to-completion/ 301
/docs/concepts/workloads/controllers/petset/ /docs/concepts/workloads/controllers/statefulset/ 301
/docs/concepts/workloads/controllers/petsets/ /docs/concepts/workloads/controllers/statefulset/ 301
/docs/concepts/workloads/controllers/statefulsets/ /docs/concepts/workloads/controllers/statefulset/ 301
/docs/concepts/workloads/controllers/statefulset.md /docs/concepts/workloads/controllers/statefulset/ 301
/docs/concepts/workloads/pods/init-containers/Kubernetes/ /docs/concepts/workloads/pods/init-containers/ 301
@@ -160,6 +156,7 @@
/docs/getting-started-guide/* /docs/setup/ 301
/docs/getting-started-guides/ /docs/setup/pick-right-solution/ 301
/docs/getting-started-guides/binary_release/ /docs/setup/building-from-source/ 301
/docs/getting-started-guides/coreos/azure/ /docs/getting-started-guides/coreos/ 301
/docs/getting-started-guides/coreos/bare_metal_calico/ /docs/getting-started-guides/coreos/ 301
/docs/getting-started-guides/docker-multinode/* /docs/setup/independent/create-cluster-kubeadm/ 301
@@ -180,7 +177,9 @@
/docs/getting-started-guides/ubuntu/automated/ /docs/getting-started-guides/ubuntu/ 301
/docs/getting-started-guides/ubuntu/calico/ /docs/getting-started-guides/ubuntu/ 301
/docs/getting-started-guides/vagrant/ /docs/getting-started-guides/alternatives/ 301
/docs/getting-started-guides/vsphere/ https://vmware.github.io/vsphere-storage-for-kubernetes/documentation/ 301
/docs/getting-started-guides/windows/While/ /docs/getting-started-guides/windows/ 301
/docs/getting-started-guides/centos/* /docs/setup/independent/create-cluster-kubeadm/ 301
/docs/hellonode/ /docs/tutorials/stateless-application/hello-minikube/ 301
/docs/home/coreos/ /docs/getting-started-guides/coreos/ 301
@@ -192,11 +191,10 @@
/docs/reference/federation/v1beta1/definitions/ /docs/reference/federation/extensions/v1beta1/definitions/ 301
/docs/reference/federation/v1beta1/operations/ /docs/reference/federation/extensions/v1beta1/operations/ 301
/docs/reference/generated/kubectl/kubectl-options/ /docs/reference/generated/kubectl/kubectl/ 301
/docs/reference/generated/kubectl/kubectl/kubectl_*.md /docs/reference/generated/kubectl/kubectl-commands#:splat 301
/docs/reporting-security-issues/ /security/ 301
/docs/resources-reference/1_5/* /docs/resources-reference/v1.5/ 301
/docs/resources-reference/1_5/* https://v1-5.docs.kubernetes.io/docs/resources-reference/v1.5/ 301
/docs/resources-reference/v1.5/node_modules/* https://v1-5.docs.kubernetes.io/docs/resources-reference/v1.5/ 301
/docs/resources-reference/1_6/* /docs/resources-reference/v1.6/ 301
/docs/resources-reference/1_7/* /docs/resources-reference/v1.7/ 301
/docs/resources-reference/v1.8/* /docs/api-reference/v1.8/:splat 301
@@ -272,6 +270,10 @@
/docs/tutorials/getting-started/scale-intro/ /docs/tutorials/kubernetes-basics/scale-intro/ 301
/docs/tutorials/getting-started/update-interactive/ /docs/tutorials/kubernetes-basics/update-interactive/ 301
/docs/tutorials/getting-started/update-intro/ /docs/tutorials/kubernetes-basics/ 301
/docs/tutorials/object-management-kubectl/declarative-object-management-configuration/ /docs/concepts/overview/object-management-kubectl/declarative-config/ 301
/docs/tutorials/object-management-kubectl/imperative-object-management-command/ /docs/concepts/overview/object-management-kubectl/imperative-command/ 301
/docs/tutorials/object-management-kubectl/imperative-object-management-configuration/ /docs/concepts/overview/object-management-kubectl/imperative-config/ 301
/docs/tutorials/object-management-kubectl/object-management/ /docs/concepts/overview/object-management-kubectl/overview/ 301
/docs/tutorials/stateful-application/run-replicated-stateful-application/ /docs/tasks/run-application/run-replicated-stateful-application/ 301
/docs/tutorials/stateful-application/run-stateful-application/ /docs/tasks/run-application/run-single-instance-stateful-application/ 301
/docs/tutorials/stateless-application/expose-external-ip-address-service/ /docs/tasks/access-application-cluster/service-access-application-cluster/ 301
@@ -286,9 +288,9 @@
/docs/user-guide/application-troubleshooting/ /docs/tasks/debug-application-cluster/debug-application/ 301
/docs/user-guide/compute-resources/ /docs/concepts/configuration/manage-compute-resources-container/ 301
/docs/user-guide/config-best-practices/ /docs/concepts/configuration/overview/ 301
/docs/user-guide/configmap/ /docs/tasks/configure-pod-container/configmap/ 301
/docs/user-guide/configmap/ /docs/tasks/configure-pod-container/configure-pod-configmap/ 301
/docs/user-guide/configmap/README/ /docs/tasks/configure-pod-container/configure-pod-configmap/ 301
/docs/user-guide/configuring-containers/ /docs/tasks/configure-pod-container/configmap/ 301
/docs/user-guide/configuring-containers/ /docs/tasks/configure-pod-container/configure-pod-configmap/ 301
/docs/user-guide/connecting-applications/ /docs/concepts/services-networking/connect-applications-service/ 301
/docs/user-guide/connecting-to-applications-port-forward/ /docs/tasks/access-application-cluster/port-forward-access-application-cluster/ 301
/docs/user-guide/connecting-to-applications-proxy/ /docs/tasks/access-kubernetes-api/http-proxy-access-api/ 301
@@ -344,9 +346,7 @@
/docs/user-guide/kubectl/v1.9/* /docs/reference/generated/kubectl/kubectl-commands/:splat 301
/docs/user-guide/kubectl-conventions/ /docs/reference/kubectl/conventions/
/docs/user-guide/kubectl-cheatsheet/ /docs/reference/kubectl/cheatsheet/
/docs/user-guide/kubectl/1_5/* https://v1-5.docs.kubernetes.io/docs/user-guide/kubectl/v1.5/ 301
/docs/user-guide/kubectl/kubectl_*/ /docs/reference/generated/kubectl/kubectl-commands#:splat 301
/docs/user-guide/kubectl/v1.5/node_modules/* https://v1-5.docs.kubernetes.io/docs/user-guide/kubectl/v1.5/ 301
/docs/user-guide/kubectl/v1.6/node_modules/* https://v1-6.docs.kubernetes.io/docs/user-guide/kubectl/v1.6/ 301
/docs/user-guide/labels/ /docs/concepts/overview/working-with-objects/labels/ 301
/docs/user-guide/liveness/ /docs/tasks/configure-pod-container/configure-liveness-readiness-probes/ 301
@@ -366,8 +366,6 @@
/docs/user-guide/persistent-volumes/index /docs/concepts/storage/persistent-volumes/ 301
/docs/user-guide/persistent-volumes/index.md /docs/concepts/storage/persistent-volumes/ 301
/docs/user-guide/persistent-volumes/walkthrough/ /docs/tasks/configure-pod-container/configure-persistent-volume-storage/ 301
/docs/user-guide/petset/ /docs/concepts/workloads/controllers/statefulset/ 301
/docs/user-guide/petset/bootstrapping/ /docs/concepts/workloads/controllers/statefulset/ 301
/docs/user-guide/pod-preset/ /docs/tasks/inject-data-application/podpreset/ 301
/docs/user-guide/pod-security-policy/ /docs/concepts/policy/pod-security-policy/ 301
/docs/user-guide/pod-states/ /docs/concepts/workloads/pods/pod-lifecycle/ 301
@@ -390,7 +388,7 @@
/docs/user-guide/secrets/walkthrough/ /docs/tasks/inject-data-application/distribute-credentials-secure/ 301
/docs/user-guide/security-context/ /docs/tasks/configure-pod-container/security-context/ 301
/docs/user-guide/service-accounts/ /docs/tasks/configure-pod-container/configure-service-account/ 301
/docs/user-guide/service-accounts/working-with-resources/ /docs/tutorials/object-management-kubectl/object-management/ 301
/docs/user-guide/service-accounts/working-with-resources/ /docs/concepts/overview/object-management-kubectl/overview/ 301
/docs/user-guide/services/ /docs/concepts/services-networking/service/ 301
/docs/user-guide/services-firewalls/ /docs/tasks/access-application-cluster/configure-cloud-provider-firewall/ 301
/docs/user-guide/services/operations/ /docs/tasks/access-application-cluster/connecting-frontend-backend/ 301
@@ -404,7 +402,7 @@
/docs/user-guide/update-demo/ /docs/tasks/run-application/rolling-update-replication-controller/ 301
/docs/user-guide/volumes/ /docs/concepts/storage/volumes/ 301
/docs/user-guide/working-with-resources/ /docs/tutorials/object-management-kubectl/object-management/ 301
/docs/user-guide/working-with-resources/ /docs/concepts/overview/object-management-kubectl/overview/ 301
/docs/whatisk8s/ /docs/concepts/overview/what-is-kubernetes/ 301
/events/ /docs/community 301
+1 -1
View File
@@ -554,7 +554,7 @@ section
font-weight: bold
li + li
margin-left: 20px
margin-left: 0
#docs
+5
View File
@@ -316,3 +316,8 @@ $video-section-height: 550px
@media screen and (min-width: 1300px)
#vendorStrip
padding-right: 100px
@media screen and (min-width: 456px)
#vendorStrip
li + li
margin-left: 20px
+105
View File
@@ -0,0 +1,105 @@
---
title: Amadeus Case Study
layout: basic
case_study_styles: true
cid: caseStudies
css: /css/style_amadeus.css
---
<div class="banner1">
<h1> CASE STUDY:<img src="/images/amadeus_logo.png" class="header_logo"><br> <div class="subhead">Another Technical Evolution for a 30-Year-Old Company
</div></h1>
</div>
<div class="details">
Company &nbsp;<b>Amadeus IT Group</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Location &nbsp;<b>Madrid, Spain</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Industry &nbsp;<b>Travel Technology</b>
</div>
<hr>
<section class="section1">
<div class="cols">
<div class="col1">
<h2>Challenge</h2>
In the past few years, Amadeus, which provides IT solutions to the travel industry around the world, found itself in need of a new platform for the 5,000 services supported by its service-oriented architecture. The 30-year-old company operates its own data center in Germany, and there were growing demands internally and externally for solutions that needed to be geographically dispersed. And more generally, "we had objectives of being even more highly available," says Eric Mountain, Senior Expert, Distributed Systems at Amadeus. Among the companys goals: to increase automation in managing its infrastructure, optimize the distribution of workloads, use data center resources more efficiently, and adopt new technologies more easily.
</div>
<div class="col2">
<h2>Solution</h2>
Mountain has been overseeing the companys migration to <a href="http://kubernetes.io/">Kubernetes</a>, using <a href="https://www.openshift.org/">OpenShift</a> Container Platform, <a href="https://www.redhat.com/en">Red Hat</a>s enterprise container platform.
<br><br>
<h2>Impact</h2>
One of the first projects the team deployed in Kubernetes was the Amadeus Airline Cloud Availability solution, which helps manage ever-increasing flight-search volume. "Its now handling in production several thousand transactions per second, and its deployed in multiple data centers throughout the world," says Mountain. "Its not a migration of an existing workload; its a whole new workload that we couldnt have done otherwise. [This platform] gives us access to market opportunities that we didnt have before."
</div>
</div>
</section>
<div class="banner2">
<div class="banner2text">
"We want multi-data center capabilities, and we want them for our mainstream system as well. We didnt think that we could achieve them with our existing system. We need new automation, things that Kubernetes and OpenShift bring."<br style="height:25px"><span style="font-size:14px;letter-spacing:2px;text-transform:uppercase;margin-top:5% !important;"><br>- Eric Mountain, Senior Expert, Distributed Systems at Amadeus IT Group</span>
</div>
</div>
<section class="section2">
<div class="fullcol">
<h2>In his two decades at Amadeus, Eric Mountain has been the migrations guy. </h2>
Back in the day, he worked on the companys move from Unix to Linux, and now hes overseeing the journey to cloud native. "Technology just keeps changing, and we embrace it," he says. "We are celebrating our 30 years this year, and we continue evolving and innovating to stay cost-efficient and enhance everyones travel experience, without interrupting workflows for the customers who depend on our technology."<br><br>
That was the challenge that Amadeus—which provides IT solutions to the travel industry around the world, from flight searches to hotel bookings to customer feedback—faced in 2014. The technology team realized it was in need of a new platform for the 5,000 services supported by its service-oriented architecture.<br><br>
The tipping point occurred when they began receiving many requests, internally and externally, for solutions that needed to be geographically outside the companys main data center in Germany. "Some requests were for running our applications on customer premises," Mountain says. "There were also new services we were looking to offer that required response time to the order of a few hundred milliseconds, which we couldnt achieve with transatlantic traffic. Or at least, not without eating into a considerable portion of the time available to our applications for them to process individual queries."<br><br>
More generally, the company was interested in leveling up on high availability, increasing automation in managing infrastructure, optimizing the distribution of workloads and using data center resources more efficiently. "We have thousands and thousands of servers," says Mountain. "These servers are assigned roles, so even if the setup is highly automated, the machine still has a given role. Its wasteful on many levels. For instance, an application doesnt necessarily use the machine very optimally. Virtualization can help a bit, but its not a silver bullet. If that machine breaks, you still want to repair it because it has that role and you cant simply say, Well, Ill bring in another machine and give it that role. Its not fast. Its not efficient. So we wanted the next level of automation."<br><br>
</div>
</section>
<div class="banner3">
<div class="banner3text">
"We hope that if we build on what others have built, what we do might actually be upstream-able. As Kubernetes and OpenShift progress, we see that we are indeed able to remove some of the additional layers we implemented to compensate for gaps we perceived earlier."
</div>
</div>
<section class="section3">
<div class="fullcol">
While mainly a C++ and Java shop, Amadeus also wanted to be able to adopt new technologies more easily. Some of its developers had started using languages like <a href="https://www.python.org/">Python</a> and databases like <a href="https://www.couchbase.com/">Couchbase</a>, but Mountain wanted still more options, he says, "in order to better adapt our technical solutions to the products we offer, and open up entirely new possibilities to our developers." Working with recent technologies and cool new things would also make it easier to attract new talent.
<br><br>
All of those needs led Mountain and his team on a search for a new platform. "We did a set of studies and proofs of concept over a fairly short period, and we considered many technologies," he says. "In the end, we were left with three choices: build everything on premise, build on top of <a href="http://kubernetes.io/">Kubernetes</a> whatever happens to be missing from our point of view, or go with <a href="https://www.openshift.com/">OpenShift</a> and build whatever remains there."
<br><br>
The team decided against building everything themselves—though theyd done that sort of thing in the past—because "people were already inventing things that looked good," says Mountain.
<br><br>
Ultimately, they went with OpenShift Container Platform, <a href="https://www.redhat.com/en">Red Hat</a>s Kubernetes-based enterprise offering, instead of building on top of Kubernetes because "there was a lot of synergy between what we wanted and the way Red Hat was anticipating going with OpenShift," says Mountain. "They were clearly developing Kubernetes, and developing certain things ahead of time in OpenShift, which were important to us, such as more security."
<br><br>
The hope was that those particular features would eventually be built into Kubernetes, and, in the case of security, Mountain feels that has happened. "We realize that theres always a certain amount of automation that we will probably have to develop ourselves to compensate for certain gaps," says Mountain. "The less we do that, the better for us. We hope that if we build on what others have built, what we do might actually be upstream-able. As Kubernetes and OpenShift progress, we see that we are indeed able to remove some of the additional layers we implemented to compensate for gaps we perceived earlier."
</div>
</section>
<div class="banner4">
<div class="banner4text">
"Its not a migration of an existing workload; its a whole new workload that we couldnt have done otherwise. [This platform] gives us access to market opportunities that we didnt have before."
</div>
</div>
<section class="section4">
<div class="fullcol">
The first project the team tackled was one that they knew had to run outside the data center in Germany. Because of the projects needs, "We couldnt rely only on the built-in Kubernetes service discovery; we had to layer on top of that an extra service discovery level that allows us to load balance at the operation level within our system," says Mountain. They also built a stream dedicated to monitoring, which at the time wasnt offered in the Kubernetes or OpenShift ecosystem. Now that <a href="https://www.prometheus.io/">Prometheus</a> and other products are available, Mountain says the company will likely re-evaluate their monitoring system: "We obviously always like to leverage what Kubernetes and OpenShift can offer."
<br><br>
The second project ended up going into production first: the Amadeus Airline Cloud Availability solution, which helps manage ever-increasing flight-search volume and was deployed in public cloud. Launched in early 2016, it is "now handling in production several thousand transactions per second, and its deployed in multiple data centers throughout the world," says Mountain. "Its not a migration of an existing workload; its a whole new workload that we couldnt have done otherwise. [This platform] gives us access to market opportunities that we didnt have before."
<br><br>
Having been through this kind of technical evolution more than once, Mountain has advice on how to handle the cultural changes. "Thats one aspect that we can tackle progressively," he says. "We have to go on supplying our customers with new features on our pre-existing products, and we have to keep existing products working. So we cant simply do absolutely everything from one day to the next. And we mustnt sell it that way."
<br><br>
The first order of business, then, is to pick one or two applications to demonstrate that the technology works. Rather than choosing a high-impact, high-risk project, Mountains team selected a smaller application that was representative of all the companys other applications in its complexity: "We just made sure we picked something thats complex enough, and we showed that it can be done."
</div>
</section>
<div class="banner5">
<div class="banner5text">
"The bottom line is we want these multi-data center capabilities, and we want them as well for our mainstream system," he says. "And we dont think that we can implement them with our previous system. We need the new automation, homogeneity, and scale that Kubernetes and OpenShift bring."
</div>
</div>
<section class="section5">
<div class="fullcol">
Next comes convincing people. "On the operations side and on the R&D side, there will be people who say quite rightly, There is a system, and it works, so why change?" Mountain says. "The only thing that really convinces people is showing them the value." For Amadeus, people realized that the Airline Cloud Availability product could not have been made available on the public cloud with the companys existing system. The question then became, he says, "Do we go into a full-blown migration? Is that something that is justified?"
<br><br>
"The bottom line is we want these multi-data center capabilities, and we want them as well for our mainstream system," he says. "And we dont think that we can implement them with our previous system. We need the new automation, homogeneity, and scale that Kubernetes and OpenShift bring."
<br><br>
So how do you get everyone on board? "Make sure you have good links between your R&D and your operations," he says. "Also make sure youre going to talk early on to the investors and stakeholders. Figure out what it is that they will be expecting from you, that will convince them or not, that this is the right way for your company."
<br><br>
His other advice is simply to make the technology available for people to try it. "Kubernetes and OpenShift Origin are open source software, so theres no complicated license key for the evaluation period and youre not limited to 30 days," he points out. "Just go and get it running." Along with that, he adds, "Youve got to be prepared to rethink how you do things. Of course making your applications as cloud native as possible is how youll reap the most benefits: 12 factors, CI/CD, which is continuous integration, continuous delivery, but also continuous deployment."
<br><br>
And while they explore that aspect of the technology, Mountain and his team will likely be practicing what he preaches to others taking the cloud native journey. "See what happens when you break it, because its important to understand the limits of the system," he says. Or rather, he notes, the advantages of it. "Breaking things on Kube is actually one of the nice things about it—it recovers. Its the only real way that youll see that you might be able to do things."
</div>
</section>
+112
View File
@@ -0,0 +1,112 @@
---
title: BlackRock Case Study
layout: basic
case_study_styles: true
cid: caseStudies
css: /css/style_blackrock.css
---
<div class="banner1">
<h1> CASE STUDY: <img src="/images/blackrock_logo.png" class="header_logo"><br>
<div class="subhead">Rolling Out Kubernetes in Production in 100 Days</div>
</h1>
</div>
<div class="details">
Company &nbsp;<b>BlackRock</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Location &nbsp;<b>New York, NY</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Industry &nbsp;<b>Financial Services</b>
</div>
<hr>
<section class="section1">
<div class="cols">
<div class="col1">
<h2>Challenge</h2>
The worlds largest asset manager, <a href="https://www.blackrock.com/investing">BlackRock</a> operates a very controlled static deployment scheme, which has allowed for scalability over the years. But in their data science division, there was a need for more dynamic access to resources. "We want to be able to give every investor access to data science, meaning <a href="https://www.python.org">Python</a> notebooks, or even something much more advanced, like a MapReduce engine based on <a href="https://spark.apache.org">Spark</a>," says Michael Francis, a Managing Director in BlackRocks Product Group, which runs the companys investment management platform. "Managing complex Python installations on users desktops is really hard because everyone ends up with slightly different environments. We have existing environments that do these things, but we needed to make it real, expansive and scalable. Being able to spin that up on demand, tear it down, make that much more dynamic, became a critical thought process for us. Its not so much that we had to solve our main core production problem, its how do we extend that? How do we evolve?"
</div>
<div class="col2">
<h2>Solution</h2>
Drawing from what they learned during a pilot done last year using <a href="https://www.docker.com">Docker</a> environments, Francis put together a cross-sectional team of 20 to build an investor research web app using <a href="https://kubernetes.io">Kubernetes</a> with the goal of getting it into production within one quarter.
<br><br>
<h2>Impact</h2>
"Our goal was: How do you give people tools rapidly without having to install them on their desktop?" says Francis. And the team hit the goal within 100 days. Francis is pleased with the results and says, "Were going to use this infrastructure for lots of other application workloads as time goes on. Its not just data science; its this style of application that needs the dynamism. But I think were 6-12 months away from making a [large scale] decision. We need to gain experience of running the system in production, we need to understand failure modes and how best to manage operational issues. Whats interesting is that just having this technology there is changing the way our developers are starting to think about their future development."
</div>
</div>
</section>
<div class="banner2">
<div class="banner2text">
"My message to other enterprises like us is you can actually integrate Kubernetes into an existing, well-orchestrated machinery. You dont have to throw out everything you do. And using Kubernetes made a complex problem significantly easier."<br style="height:25px"><span style="font-size:14px;letter-spacing:2px;text-transform:uppercase;margin-top:5% !important;"><br>- Michael Francis, Managing Director, BlackRock</span>
</div>
</div>
<section class="section2">
<div class="fullcol">
One of the management objectives for BlackRocks Product Group employees in 2017 was to "build cool stuff." Led by Managing Director Michael Francis, a cross-sectional group of 20 did just that: They rolled out a full production Kubernetes environment and released a new investor research web app on it. In 100 days.<br><br>
For a company thats the worlds largest asset manager, "just equipment procurement can take 100 days sometimes, let alone from inception to delivery," says Karl Wieman, a Senior System Administrator. "It was an aggressive schedule. But it moved the dial."
In fact, the project achieved two goals: It solved a business problem (creating the needed web app) as well as provided real-world, in-production experience with Kubernetes, a cloud-native technology that the company was eager to explore. "Its not so much that we had to solve our main core production problem, its how do we extend that? How do we evolve?" says Francis. The ultimate success of this project, beyond delivering the app, lies in the fact that "weve managed to integrate a radically new thought process into a controlled infrastructure that we didnt want to change."<br><br>
After all, in its three decades of existence, BlackRock has "a very well-established environment for managing our compute resources," says Francis. "We manage large cluster processes on machines, so we do a lot of orchestration and management for our main production processes in a way thats very cloudish in concept. Were able to manage them in a very controlled, static deployment scheme, and that has given us a huge amount of scalability."<br><br>
Though that works well for the core production, the company has found that some data science workloads require more dynamic access to resources. "Its a very bursty process," says Francis, who is head of data for the companys Aladdin investment management platform division.<br><br>
Aladdin, which connects the people, information and technology needed for money management in real time, is used internally and is also sold as a platform to other asset managers and insurance companies. "We want to be able to give every investor access to data science, meaning <a href="https://www.python.org">Python</a> notebooks, or even something much more advanced, like a MapReduce engine based on <a href="https://spark.apache.org">Spark</a>," says Francis. But "managing complex Python installations on users desktops is really hard because everyone ends up with slightly different environments. Docker allows us to flatten that environment."
</div>
</section>
<div class="banner3">
<div class="banner3text">
"We manage large cluster processes on machines, so we do a lot of orchestration and management for our main production processes in a way thats very cloudish in concept. Were able to manage them in a very controlled, static deployment scheme, and that has given us a huge amount of scalability."
</div>
</div>
<section class="section3">
<div class="fullcol">
Still, challenges remain. "If you have a shared cluster, you get this storming herd problem where everyone wants to do the same thing at the same time," says Francis. "You could put limits on it, but youd have to build an infrastructure to define limits for our processes, and the Python notebooks werent really designed for that. We have existing environments that do these things, but we needed to make it real, expansive, and scalable. Being able to spin that up on demand, tear it down, and make that much more dynamic, became a critical thought process for us."<br><br>
Made up of managers from technology, infrastructure, production operations, development and information security, Franciss team was able to look at the problem holistically and come up with a solution that made sense for BlackRock. "Our initial straw man was that we were going to build everything using <a href="https://www.ansible.com">Ansible</a> and run it all using some completely different distributed environment," says Francis. "That would have been absolutely the wrong thing to do. Had we gone off on our own as the dev team and developed this solution, it would have been a very different product. And it would have been very expensive. We would not have gone down the route of running under our existing orchestration system. Because we dont understand it. These guys [in operations and infrastructure] understand it. Having the multidisciplinary team allowed us to get to the right solutions and that actually meant we didnt build anywhere near the amount we thought we were going to end up building."<br><br>
In search of a solution in which they could manage usage on a user-by-user level, Franciss team gravitated to Red Hats <a href="https://www.openshift.com">OpenShift</a> Kubernetes offering. The company had already experimented with other cloud-native environments, but the team liked that Kubernetes was open source, and "we felt the winds were blowing in the direction of Kubernetes long term," says Francis. "Typically we make technology choices that we believe are going to be here in 5-10 years time, in some form. And right now, in this space, Kubernetes feels like the one thats going to be there." Adds Uri Morris, Vice President of Production Operations: "When you see that the non-Google committers to Kubernetes overtook the Google committers, thats an indicator of the momentum."<br><br>
Once that decision was made, the major challenge was figuring out how to make Kubernetes work within BlackRocks existing framework. "Its about understanding how we can operate, manage and support a platform like this, in addition to tacking it onto our existing technology platform," says Project Manager Michael Maskallis. "All the controls we have in place, the change management process, the software development lifecycle, onboarding processes we go through—how can we do all these things?"<br><br>
The first (anticipated) speed bump was working around issues behind BlackRocks corporate firewalls. "One of our challenges is there are no firewalls in most open source software," says Francis. "So almost all install scripts fail in some bizarre way, and pulling down packages doesnt necessarily work." The team ran into these types of problems using <a href="https://kubernetes.io/docs/getting-started-guides/minikube/">Minikube</a> and did a few small pushes back to the open source project.
</div>
</section>
<div class="banner4">
<div class="banner4text">
"Typically we make technology choices that we believe are going to be here in 5-10 years time, in some form. And right now, in this space, Kubernetes feels like the one thats going to be there."
</div>
</div>
<section class="section4">
<div class="fullcol">
There were also questions about service discovery. "You can think of Aladdin as a cloud of services with APIs between them that allows us to build applications rapidly," says Francis. "Its all on a proprietary message bus, which gives us all sorts of advantages but at the same time, how does that play in a third party [platform]?"<br><br>
Another issue they had to navigate was that in BlackRocks existing system, the messaging protocol has different instances in the different development, test and production environments. While Kubernetes enables a more DevOps-style model, it didnt make sense for BlackRock. "I think what we are very proud of is that the ability for us to push into production is still incredibly rapid in this [new] infrastructure, but we have the control points in place, and we didnt have to disrupt everything," says Francis. "A lot of the cost of this development was thinking how best to leverage our internal tools. So it was less costly than we actually thought it was going to be."<br><br>
The project leveraged tools associated with the messaging bus, for example. "The way that the Kubernetes cluster will talk to our internal messaging platform is through a gateway program, and this gateway program already has built-in checks and throttles," says Morris. "We can use them to control and potentially throttle the requests coming in from Kubernetess very elastic infrastructure to the production infrastructure. Well continue to go in that direction. It enables us to scale as we need to from the operational perspective."<br><br>
The solution also had to be complementary with BlackRocks centralized operational support team structure. "The core infrastructure components of Kubernetes are hooked into our existing orchestration framework, which means that anyone in our support team has both control and visibility to the cluster using the existing operational tools," Morris explains. "That means that I dont need to hire more people."<br><br>
With those points established, the team created a procedure for the project: "We rolled this out first to a development environment, then moved on to a testing environment and then eventually to two production environments, in that sequential order," says Maskallis. "That drove a lot of our learning curve. We have all these moving parts, the software components on the infrastructure side, the software components with Kubernetes directly, the interconnectivity with the rest of the environment that we operate here at BlackRock, and how we connect all these pieces. If we came across issues, we fixed them, and then moved on to the different environments to replicate that until we eventually ended up in our production environment where this particular cluster is supposed to live."<br><br>
The team had weekly one-hour working sessions with all the members (who are located around the world) participating, and smaller breakout or deep-dive meetings focusing on specific technical details. Possible solutions would be reported back to the group and debated the following week. "I think what made it a successful experiment was people had to work to learn, and they shared their experiences with others," says Vice President and Software Developer Fouad Semaan. Then, Francis says, "We gave our engineers the space to do what theyre good at. This hasnt been top-down."
</div>
</section>
<div class="banner5">
<div class="banner5text">
"The core infrastructure components of Kubernetes are hooked into our existing orchestration framework, which means that anyone in our support team has both control and visibility to the cluster using the existing operational tools. That means that I dont need to hire more people."
</div>
</div>
<section class="section5">
<div class="fullcol">
They were led by one key axiom: To stay focused and avoid scope creep. This meant that they wouldnt use features that werent in the core of Kubernetes and Docker. But if there was a real need, theyd build the features themselves. Luckily, Francis says, "Because of the rapidity of the development, a lot of things we thought we would have to build ourselves have been rolled into the core product. [The package manager<a href="https://helm.sh"> Helm</a> is one example]. People have similar problems."<br><br>
By the end of the 100 days, the app was up and running for internal BlackRock users. The initial capacity of 30 users was hit within hours, and quickly increased to 150. "People were immediately all over it," says Francis. In the next phase of this project, they are planning to scale up the cluster to have more capacity.<br><br>
Even more importantly, they now have in-production experience with Kubernetes that they can continue to build on—and a complete framework for rolling out new applications. "Were going to use this infrastructure for lots of other application workloads as time goes on. Its not just data science; its this style of application that needs the dynamism," says Francis. "Is it the right place to move our core production processes onto? It might be. Were not at a point where we can say yes or no, but we felt that having real production experience with something like Kubernetes at some form and scale would allow us to understand that. I think were 6-12 months away from making a [large scale] decision. We need to gain experience of running the system in production, we need to understand failure modes and how best to manage operational issues."<br><br>
For other big companies considering a project like this, Francis says commitment and dedication are key: "We got the signoff from [senior management] from day one, with the commitment that we were able to get the right people. If I had to isolate what makes something complex like this succeed, I would say senior hands-on people who can actually drive it make a huge difference." With that in place, he adds, "My message to other enterprises like us is you can actually integrate Kubernetes into an existing, well-orchestrated machinery. You dont have to throw out everything you do. And using Kubernetes made a complex problem significantly easier."
</div>
</section>
+112
View File
@@ -0,0 +1,112 @@
---
title: Haufe Group Case Study
layout: basic
case_study_styles: true
cid: caseStudies
css: /css/style_haufegroup.css
---
<div class="banner1">
<h1> CASE STUDY:<img src="/images/haufegroup_logo.png" class="header_logo"><br> <div class="subhead">Paving the Way for Cloud Native for Midsize Companies</div></h1>
</div>
<div class="details">
Company &nbsp;<b>Haufe Group</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Location &nbsp;<b>Freiburg, Germany</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Industry &nbsp;<b>Media and Software</b>
</div>
<hr>
<section class="section1">
<div class="cols">
<div class="col1">
<h2>Challenge</h2>
Founded in 1930 as a traditional publisher, Haufe Group has grown into a media and software company with 95 percent of its sales from digital products. Over the years, the company has gone from having "hardware in the basement" to outsourcing its infrastructure operations and IT. More recently, the development of new products, from Internet portals for tax experts to personnel training software, has created demands for increased speed, reliability and scalability. "We need to be able to move faster," says Solution Architect Martin Danielsson. "Adapting workloads is something that we really want to be able to do."
<br>
<br>
<h2>Solution</h2>
Haufe Group began its cloud-native journey when <a href="https://azure.microsoft.com/">Microsoft Azure</a> became available in Europe; the company needed cloud deployments for its desktop apps with bandwidth-heavy download services. "After that, it has been different projects trying out different things," says Danielsson. Two years ago, Holger Reinhardt joined Haufe Group as CTO and rapidly re-oriented the traditional host provider-based approach toward a cloud and API-first strategy.
</div>
<div class="col2">
A core part of this strategy was a strong mandate to embrace infrastructure-as-code across the entire software deployment lifecycle via Docker. The company is now getting ready to go live with two services in production using <a href="https://kubernetes.io/">Kubernetes</a> orchestration on <a href="https://azure.microsoft.com/">Microsoft Azure</a> and <a href="https://aws.amazon.com/">Amazon Web Services</a>. The team is also working on breaking up one of their core Java Enterprise desktop products into microservices to allow for better evolvability and dynamic scaling in the cloud.
<br>
<br>
<h2>Impact</h2>
With the ability to adapt workloads, Danielsson says, teams "will be able to scale down to around half the capacity at night, saving 30 percent of the hardware cost." Plus, shorter release times have had a major impact. "Before, we had to announce at least a week in advance when we wanted to do a release because there was a huge checklist of things that you had to do," he says. "By going cloud native, we have the infrastructure in place to be able to automate all of these things. Now we can get a new release done in half an hour instead of days."
</div>
</div>
</section>
<div class="banner2">
<div class="banner2text">
"Over the next couple of years, people wont even think that much about it when they want to run containers. Kubernetes is going to be the go-to solution."<br style="height:25px"><span style="font-size:14px;letter-spacing:2px;text-transform:uppercase;margin-top:5% !important;"><br>- Martin Danielsson, Solution Architect, Haufe Group</span>
</div>
</div>
<section class="section2">
<div class="fullcol">
<h2>More than 80 years ago, Haufe Group was founded as a traditional publishing company, printing books and commentary on paper.</h2> By the 1990s, though, the companys leaders recognized that the future was digital, and to their credit, were able to transform Haufe Group into a media and software business that now gets 95 percent of its sales from digital products. "Among the German companies doing this, we were one of the early adopters," says Martin Danielsson, Solution Architect for Haufe Group.<br><br>
And now theyre leading the way for midsize companies embracing cloud-native technology like Kubernetes. "The really big companies like Ticketmaster and Google get it right, and the startups get it right because theyre faster," says Danielsson. "Were in this big lump of companies in the middle with a lot of legacy, a lot of structure, a lot of culture that does not easily fit the cloud technologies. Were just 1,500 people, but we have hundreds of customer-facing applications. So were doing things that will be relevant for many companies of our size or even smaller."<br><br>
Many of those legacy challenges stemmed from simply following the technology trends of the times. "We used to do full DevOps," he says. In the 1990s and 2000s, "that meant that you had your hardware in the basement. And then 10 years ago, the hype of the moment was to outsource application operations, outsource everything, and strip down your IT department to take away the distraction of all these hardware things. Thats not our area of expertise. We didnt want to be an infrastructure provider. And now comes the backlash of that."<br><br>
Haufe Group began feeling the pain as they were developing more new products, from Internet portals for tax experts to personnel training software, that have created demands for increased speed, reliability and scalability. "Right now, we have this break in workflows, where we go from writing concepts to developing, handing it over to production and then handing that over to your host provider," he says. "And then when things go bad we have no clue what went wrong. We definitely want to take back control, and we want to move a lot faster. Adapting workloads is something that we really want to be able to do."<br><br>
Those needs led them to explore cloud-native technology. Their first foray into the cloud was doing deployments in <a href="https://azure.microsoft.com/">Microsoft Azure</a>, once it became available in Europe, for desktop products that had built-in download services. Hosting expenses for such bandwidth-heavy services were too high, so the company turned to the cloud. "After that, it has been different projects trying out different things," says Danielsson.
</div>
</section>
<div class="banner3">
<div class="banner3text">
"We have been doing containers for the last two years, and we really got the hang of how they work," says Danielsson. "But it was always for development and test, never in production, because we didnt fully understand how that would work. And to me, Kubernetes was definitely the technology that solved that."
</div>
</div>
<section class="section3">
<div class="fullcol">
Two years ago, Holger Reinhardt joined Haufe Group as CTO and rapidly re-oriented the traditional host provider-based approach toward a cloud and API-first strategy. A core part of this strategy was a strong mandate to embrace infrastructure-as-code across the entire software deployment lifecycle via Docker.
Some experiments went further than others; German regulations about sensitive data proved to be a road block in moving some workloads to Azure and Amazon Web Services. "Due to our history, Germany is really strict with things like personally identifiable data," Danielsson says.<br><br>
These experiments took on new life with the arrival of the Azure Sovereign Cloud for Germany (an Azure clone run by the German T-Systems provider). With the availability of Azure.de—which conforms to Germanys privacy regulations—teams started to seriously consider deploying production loads in Docker into the cloud. "We have been doing containers for the last two years, and we really got the hang of how they work," says Danielsson. "But it was always for development and test, never in production, because we didnt fully understand how that would work. And to me, Kubernetes was definitely the technology that solved that."<br><br>
In parallel, Danielsson had built an API management system with the aim of supporting CI/CD scenarios, aspects of which were missing in off-the-shelf API management products. With a foundation based on <a href="https://getkong.org/">Mashapes Kong</a> gateway, it is open-sourced as <a href="http://wicked.haufe.io/">wicked.haufe.io</a>. He put wicked.haufe.io to use with his product team.<br><br> Otherwise, Danielsson says his philosophy was "dont try to reinvent the wheel all the time. Go for whats there and 99 percent of the time it will be enough. And if you think you really need something custom or additional, think perhaps once or twice again. One of the things that I find so amazing with this cloud-native framework is that everything ties in."<br><br>
Currently, Haufe Group is working on two projects using Kubernetes in production. One is a new mobile application for researching legislation and tax laws. "We needed a way to take out functionality from a legacy core and put an application on top of that with an API gateway—a lot of moving parts that screams containers," says Danielsson. So the team moved the build pipeline away from "deploying to some old, huge machine that you could deploy anything to" and onto a Kubernetes cluster where there would be automatic CI/CD "with feature branches and all these things that were a bit tedious in the past."
</div>
</section>
<div class="banner4">
<div class="banner4text">
"Before, we had to announce at least a week in advance when we wanted to do a release because there was a huge checklist of things that you had to do," says Danielsson. "By going cloud native, we have the infrastructure in place to be able to automate all of these things. Now we can get a new release done in half an hour instead of days."
</div>
</div>
<section class="section4">
<div class="fullcol">
It was a proof of concept effort, and the proof was in the pudding. "Everyone was really impressed at what we accomplished in a week," says Danielsson. "We did these kinds of integrations just to make sure that we got a handle on how Kubernetes works. If you can create optimism and buzz around something, its half won. And if the developers and project managers know this is working, youre more or less done." Adds Reinhardt: "You need to create some very visible, quick wins in order to overcome the status quo."<br><br>
The impact on the speed of deployment was clear: "Before, we had to announce at least a week in advance when we wanted to do a release because there was a huge checklist of things that you had to do," says Danielsson. "By going cloud native, we have the infrastructure in place to be able to automate all of these things. Now we can get a new release done in half an hour instead of days." <br><br>
The potential impact on cost was another bonus. "Hosting applications is quite expensive, so moving to the cloud is something that we really want to be able to do," says Danielsson. With the ability to adapt workloads, teams "will be able to scale down to around half the capacity at night, saving 30 percent of the hardware cost." <br><br>
Just as importantly, Danielsson says, theres added flexibility: "When we try to move or rework applications that are really crucial, its often tricky to validate whether the path we want to take is going to work out well. In order to validate that, we would need to reproduce the environment and really do testing, and thats prohibitively expensive and simply not doable with traditional host providers. Cloud native gives us the ability to do risky changes and validate them in a cost-effective way."<br><br>
As word of the two successful test projects spread throughout the company, interest in Kubernetes has grown. "We want to be able to support our developers in running Kubernetes clusters but were not there yet, so we allow them to do it as long as theyre aware that they are on their own," says Danielsson. "So thats why we are also looking at things like [the managed Kubernetes platform] <a href="https://coreos.com/tectonic/">CoreOS Tectonic</a>, <a href="https://azure.microsoft.com/en-us/services/container-service/">Azure Container Service</a>, <a href="https://aws.amazon.com/ecs/">ECS</a>, etc. These kinds of services will be a lot more relevant to midsize companies that want to leverage cloud native but dont have the IT departments or the structure around that."<br><br>
In the next year and a half, Danielsson says the company will be working on moving one of their legacy desktop products, a web app for researching legislation and tax laws originally built in Java Enterprise, onto cloud-native technology. "Were doing a microservice split out right now so that we can independently deploy the different parts," he says. The main website, which provides free content for customers, is also moving to cloud native.
</div>
</section>
<div class="banner5">
<div class="banner5text">
"the execution of a strategy requires alignment of culture, structure and technology. Only if those three dimensions are aligned can you successfully execute a transformation into microservices and cloud-native architectures. And it is only then that the Cloud will pay the dividends in much faster speeds in product innovation and much lower operational costs."
</div>
</div>
<section class="section5">
<div class="fullcol">
But with these goals, Danielsson believes there are bigger cultural challenges that need to be constantly addressed. The move to new technology, not to mention a shift toward DevOps, means a lot of change for employees. "The roles were rather fixed in the past," he says. "You had developers, you had project leads, you had testers. And now you get into these really, really important things like test automation. Testers arent actually doing click testing anymore, and they have to write automated testing. And if you really want to go full-blown CI/CD, all these little pieces have to work together so that you get the confidence to do a check in, and know this check in is going to land in production, because if I messed up, some test is going to break. This is a really powerful thing because whatever you do, whenever you merge something into the trunk or to the master, this is going live. And thats where you either get the people or they run away screaming."
Danielsson understands that it may take some people much longer to get used to the new ways.<br><br>
"Culture is nothing that you can force on people," he says. "You have to live it for yourself. You have to evangelize. You have to show the advantages time and time again: This is how you can do it, this is what you get from it." To that end, his team has scheduled daylong workshops for the staff, bringing in outside experts to talk about everything from API to Devops to cloud. <br><br>
For every person who runs away screaming, many others get drawn in. "Get that foot in the door and make them really interested in this stuff," says Danielsson. "Usually it catches on. We have people you never would have expected chanting, Docker Docker Docker now. Its cool to see them realize that there is a world outside of their Python libraries. Its awesome to see them really work with Kubernetes."<br><br>
Ultimately, Reinhardt says, "the execution of a strategy requires alignment of culture, structure and technology. Only if those three dimensions are aligned can you successfully execute a transformation into microservices and cloud-native architectures. And it is only then that the Cloud will pay the dividends in much faster speeds in product innovation and much lower operational costs."
</div>
</section>
+101
View File
@@ -0,0 +1,101 @@
---
title: Huawei Case Study
layout: basic
case_study_styles: true
cid: caseStudies
css: /css/style_huawei.css
---
<div class="banner1">
<h1> CASE STUDY:<img src="/images/huawei_logo.png" class="header_logo"><br> <div class="subhead">Embracing Cloud Native as a User and a Vendor</div></h1>
</div>
<div class="details">
Company &nbsp;<b>Huawei</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Location &nbsp;<b>Shenzhen, China</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Industry &nbsp;<b>Telecommunications Equipment</b>
</div>
<hr>
<section class="section1">
<div class="cols">
<div class="col1">
<h2>Challenge</h2>
A multinational company thats the largest telecommunications equipment manufacturer in the world, Huawei has more than 180,000 employees. In order to support its fast business development around the globe, <a href="http://www.huawei.com/">Huawei</a> has eight data centers for its internal I.T. department, which have been running 800+ applications in 100K+ VMs to serve these 180,000 users. With the rapid increase of new applications, the cost and efficiency of management and deployment of VM-based apps all became critical challenges for business agility. "Its very much a distributed system so we found that managing all of the tasks in a more consistent way is always a challenge," says Peixin Hou, the companys Chief Software Architect and Community Director for Open Source. "We wanted to move into a more agile and decent practice."
</div>
<div class="col2">
<h2>Solution</h2>
After deciding to use container technology, Huawei began moving the internal I.T. departments applications to run on <a href="http://kubernetes.io/">Kubernetes</a>. So far, about 30 percent of these applications have been transferred to cloud native.
<br>
<br>
<h2>Impact</h2>
"By the end of 2016, Huaweis internal I.T. department managed more than 4,000 nodes with tens of thousands containers using a Kubernetes-based Platform as a Service (PaaS) solution," says Hou. "The global deployment cycles decreased from a week to minutes, and the efficiency of application delivery has been improved 10 fold." For the bottom line, he says, "We also see significant operating expense spending cut, in some circumstances 20-30 percent, which we think is very helpful for our business." Given the results Huawei has had internally and the demand it is seeing externally the company has also built the technologies into <a href="http://developer.huawei.com/ict/en/site-paas">FusionStage™</a>, the PaaS solution it offers its customers.
</div>
</div>
</section>
<div class="banner2">
<div class="banner2text">
"If youre a vendor, in order to convince your customer, you should use it yourself. Luckily because Huawei has a lot of employees, we can demonstrate the scale of cloud we can build using this technology."<br style="height:25px"><span style="font-size:14px;letter-spacing:2px;text-transform:uppercase;margin-top:5% !important;"><br>- Peixin Hou, chief software architect and community director for open source</span>
</div>
</div>
<section class="section2">
<div class="fullcol">
Huaweis Kubernetes journey began with one developer.
Over two years ago, one of the engineers employed by the networking and telecommunications giant became interested in <a href="http://kubernetes.io/">Kubernetes</a>, the technology for managing application containers across clusters of hosts, and started contributing to its open source community. As the technology developed and the community grew, he kept telling his managers about it.<br><br>
And as fate would have it, at the same time, Huawei was looking for a better orchestration system for its internal enterprise I.T. department, which supports every business flow processing. "We have more than 180,000 employees worldwide, and a complicated internal procedure, so probably every week this department needs to develop some new applications," says Peixin Hou, Huaweis Chief Software Architect and Community Director for Open Source. "Very often our I.T. departments need to launch tens of thousands of containers, with tasks running across thousands of nodes across the world. Its very much a distributed system, so we found that managing all of the tasks in a more consistent way is always a challenge."<br><br>
In the past, Huawei had used virtual machines to encapsulate applications, but "every time when we start a VM," Hou says, "whether because its a new service or because it was a service that was shut down because of some abnormal node functioning, it takes a lot of time." Huawei turned to containerization, so the timing was right to try Kubernetes. It took a year to adopt that engineers suggestion the process "is not overnight," says Hou but once in use, he says, "Kubernetes basically solved most of our problems. Before, the time of deployment took about a week, now it only takes minutes. The developers are happy. That department is also quite happy."<br><br>
Hou sees great benefits to the company that come with using this technology: "Kubernetes brings agility, scale-out capability, and DevOps practice to the cloud-based applications," he says. "It provides us with the ability to customize the scheduling architecture, which makes possible the affinity between container tasks that gives greater efficiency. It supports multiple container formats. It has extensive support for various container networking solutions and container storage."
</div>
</section>
<div class="banner3">
<div class="banner3text">
"Kubernetes basically solved most of our problems. Before, the time of deployment took about a week, now it only takes minutes. The developers are happy. That department is also quite happy."
</div>
</div>
<section class="section3">
<div class="fullcol">
And not least of all, theres an impact on the bottom line. Says Hou: "We also see significant operating expense spending cut in some circumstances 20-30 percent, which is very helpful for our business."<br><br>
Pleased with those initial results, and seeing a demand for cloud native technologies from its customers, Huawei doubled down on Kubernetes. In the spring of 2016, the company became not only a user but also a vendor.<br><br>
"We built the Kubernetes technologies into our solutions," says Hou, referring to Huaweis <a href="http://developer.huawei.com/ict/en/site-paas">FusionStage™</a> PaaS offering. "Our customers, from very big telecommunications operators to banks, love the idea of cloud native. They like Kubernetes technology. But they need to spend a lot of time to decompose their applications to turn them into microservice architecture, and as a solution provider, we help them. Weve started to work with some Chinese banks, and we see a lot of interest from our customers like <a href="http://www.chinamobileltd.com/">China Mobile</a> and <a href="https://www.telekom.com/en">Deutsche Telekom</a>."<br><br>
"If youre just a user, youre just a user," adds Hou. "But if youre a vendor, in order to even convince your customers, you should use it yourself. Luckily because Huawei has a lot of employees, we can demonstrate the scale of cloud we can build using this technology. We provide customer wisdom." While Huawei has its own private cloud, many of its customers run cross-cloud applications using Huaweis solutions. Its a big selling point that most of the public cloud providers now support Kubernetes. "This makes the cross-cloud transition much easier than with other solutions," says Hou.<br><br>
</div>
</section>
<div class="banner4">
<div class="banner4text">
"Our customers, from very big telecommunications operators to banks, love the idea of cloud native. They like Kubernetes technology. But they need to spend a lot of time to decompose their applications to turn them into microservice architecture, and as a solution provider, we help them."
</div>
</div>
<section class="section4">
<div class="fullcol">
Within Huawei itself, once his team completes the transition of the internal business procedure department to Kubernetes, Hou is looking to convince more departments to move over to the cloud native development cycle and practice. "We have a lot of software developers, so we will provide them with our platform as a service solution, our own product," he says. "We would like to see significant cuts in their iteration cycle."<br><br>
Having overseen the initial move to Kubernetes at Huawei, Hou has advice for other companies considering the technology: "When you start to design the architecture of your application, think about cloud native, think about microservice architecture from the beginning," he says. "I think you will benefit from that."<br><br>
But if you already have legacy applications, "start from some microservice-friendly part of those applications first, parts that are relatively easy to be decomposed into simpler pieces and are relatively lightweight," Hou says. "Dont think from day one that within how many days I want to move the whole architecture, or move everything into microservices. Dont put that as a kind of target. You should do it in a gradual manner. And I would say for legacy applications, not every piece would be suitable for microservice architecture. No need to force it."<br><br>
After all, as enthusiastic as Hou is about Kubernetes at Huawei, he estimates that "in the next 10 years, maybe 80 percent of the workload can be distributed, can be run on the cloud native environments. Theres still 20 percent thats not, but its fine. If we can make 80 percent of our workload really be cloud native, to have agility, its a much better world at the end of the day."
</div>
</section>
<div class="banner5">
<div class="banner5text">
"In the next 10 years, maybe 80 percent of the workload can be distributed, can be run on the cloud native environments. Theres still 20 percent thats not, but its fine. If we can make 80 percent of our workload really be cloud native, to have agility, its a much better world at the end of the day."
</div>
</div>
<section class="section5">
<div class="fullcol">
In the nearer future, Hou is looking forward to new features that are being developed around Kubernetes, not least of all the ones that Huawei is contributing to. Huawei engineers have worked on the federation feature (which puts multiple Kubernetes clusters in a single framework to be managed seamlessly), scheduling, container networking and storage, and a just-announced technology called <a href="http://containerops.org/">Container Ops</a>, which is a DevOps pipeline engine. "This will put every DevOps job into a container," he explains. "And then this container mechanism is running using Kubernetes, but is also used to test Kubernetes. With that mechanism, we can make the containerized DevOps jobs be created, shared and managed much more easily than before."<br><br>
Still, Hou sees this technology as only halfway to its full potential. First and foremost, hed like to expand the scale it can orchestrate, which is important for supersized companies like Huawei as well as some of its customers.<br><br>
Hou proudly notes that two years after that first Huawei engineer became a contributor to and evangelist for Kubernetes, Huawei is now a top contributor to the community. "Weve learned that the more you contribute to the community," he says, "the more you get back."
</div>
</section>
+20 -17
View File
@@ -15,28 +15,28 @@ cid: caseStudies
<div class="content">
<div class="case-studies">
<div class="case-study">
<img src="/images/case_studies/blablacar-logo.png" alt="blablacar">
<p class="quote">"[With Kubernetes] our infrastructure is much more resilient and we have better availability than before."</p>
<!--<p class="attrib">— Simon Lallemand, Infrastructure Engineer at BlaBlaCar</p>-->
<a href="/case-studies/blablacar/">Read about BlaBlaCar</a>
<img src="/images/case_studies/amadeus_feature.png" alt="amadeus">
<p class="quote">"We didnt think that we could achieve them with our existing system. We need new automation, things that Kubernetes and OpenShift bring."</p>
<!--<p class="attrib">— Eric Mountain, Senior Expert, Distributed Systems at Amadeus IT Group</p>-->
<a href="/case-studies/amadeus/">Read about Amadeus</a>
</div>
<div class="case-study">
<img src="/images/case_studies/peardeck.png" alt="peardeck">
<p class="quote">"In terms of the cloud, Kubernetes and Prometheus have so much to offer."</p>
<!--<p class="attrib">— Riley Eynon-Lynch, CEO of Pear Deck</p>-->
<a href="/case-studies/peardeck/">Read about Pear Deck</a>
<img src="/images/case_studies/huawei_feature.png" alt="huawei">
<p class="quote">"Kubernetes basically solved most of our problems. Before, the time of deployment took about a week, now it only takes minutes."</p>
<!--<p class="attrib">— Peixin Hou, Chief Software Architect and Community Director for Open Source at Huawei</p>-->
<a href="/case-studies/huawei/">Read about Huawei</a>
</div>
<div class="case-study">
<img src="/images/case_studies/buffer.png" alt="Buffer">
<p class="quote">"Its amazing that we can use the Kubernetes solution off the shelf with our team. And it just keeps getting better."</p>
<!--<p class="attrib">— Dan Farrelly, Buffer Architect</p>-->
<a href="/case-studies/buffer/">Read about Buffer</a>
<img src="/images/case_studies/haufegroup_logo_feature.png" alt="Haufe Group">
<p class="quote">"Over the next couple of years, people wont even think that much about it when they want to run containers. Kubernetes is going to be the go-to solution."</p>
<!--<p class="attrib">— Martin Danielsson, Solution Architect at Haufe Group</p>-->
<a href="/case-studies/haufegroup/">Read about Haufe Group</a>
</div>
<div class="case-study">
<img src="/images/case_studies/wink_logo.png" alt="Wink">
<p class="quote">"What you get by adopting CoreOS/Kubernetes is portability, to not be locked in to anyone. You can really make your own fate."</p>
<!--<p class="attrib">— Kit Klein, Head of Engineering at Wink</p>-->
<a href="/case-studies/wink/">Read about Wink</a>
<img src="/images/case_studies/blackrock.png" alt="BlackRock">
<p class="quote">"My message to other enterprises like us is you can actually integrate Kubernetes into an existing, well-orchestrated machinery."</p>
<!--<p class="attrib">— Michael Francis, Managing Director at BlackRock</p>-->
<a href="/case-studies/blackrock/">Read about BlackRock</a>
</div>
</div>
</div>
@@ -59,9 +59,10 @@ cid: caseStudies
<main>
<h3>Kubernetes Users</h3>
<div id="usersGrid">
<a target="_blank" href="http://www.nextplatform.com/2015/08/04/amadeus-takes-off-with-containers-and-clouds/"><img src="/images/case_studies/amadeus.png" alt="Amadeus"></a>
<a target="_blank" href="/case-studies/amadeus/"><img src="/images/case_studies/amadeus.png" alt="Amadeus"></a>
<a target="_blank" href="/case-studies/ancestry/"><img src="/images/case_studies/ancestry.png" alt="Ancestry.com"></a>
<a target="_blank" href="/case-studies/blablacar/"><img src="/images/case_studies/blablacar.png" alt="BlaBlaCar"></a>
<a target="_blank" href="/case-studies/blackrock/"><img src="/images/case_studies/blackrock2.png" alt="BlackRock"></a>
<a target="_blank" href="/case-studies/box/"><img src="/images/case_studies/box_logo.png" alt="box"></a>
<a target="_blank" href="/case-studies/buffer/"><img src="/images/case_studies/buffer_logo.png" alt="Buffer"></a>
<a target="_blank" href="https://cloud.google.com/customers/ccp-games/"><img src="/images/case_studies/ccp.png" alt="CCP Games"></a>
@@ -70,6 +71,8 @@ cid: caseStudies
<a target="_blank" href="http://www.nextplatform.com/2015/11/12/inside-ebays-shift-to-kubernetes-and-containers-atop-openstack/"><img src="/images/case_studies/ebay_logo.png" alt="Ebay"></a>
<a target="_blank" href="http://blogs.wsj.com/cio/2016/02/24/big-changes-in-goldmans-software-emerge-from-small-containers/"><img src="/images/case_studies/gs.png" alt="Goldman Sachs"></a>
<a target="_blank" href="/case-studies/golfnow/"><img src="/images/case_studies/golfnow_logo.png" alt="GolfNow"></a>
<a target="_blank" href="/case-studies/haufegroup/"><img src="/images/case_studies/haufegroup_logo.png" alt="Haufe Group"></a>
<a target="_blank" href="/case-studies/huawei/"><img src="/images/case_studies/huawei.png" alt="Huawei"></a>
<a target="_blank" href="http://blog.kubernetes.io/2017/02/inside-jd-com-shift-to-kubernetes-from-openstack.html"><img src="/images/case_studies/jd.png" alt="JD.COM"></a>
<a target="_blank" href="https://www.openstack.org/videos/video/running-kubernetes-on-openstack-at-liveperson"><img src="/images/case_studies/liveperson.png" alt="LivePerson"></a>
<a target="_blank" href="https://youtu.be/YkOY7DgXKyw"><img src="/images/case_studies/monzo_logo.png" alt="monzo"></a>
+1 -1
View File
@@ -135,7 +135,7 @@ system:serviceaccount:<namespace>:default
{"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:serviceaccount:kube-system:default","namespace":"*","resource":"*","apiGroup":"*"}}
```
需要重新启动 apitorver 以获取新的策略行.
需要重新启动 apiserver 以获取新的策略行.
{% endcapture %}
{% include templates/concept.md %}
@@ -58,7 +58,7 @@ service Registration {
```gRPC
service DevicePlugin {
// ListAndWatch returns a stream of List of Devices
// Whenever a Device state change or a Device disapears, ListAndWatch
// Whenever a Device state change or a Device disappears, ListAndWatch
// returns the new list
rpc ListAndWatch(Empty) returns (stream ListAndWatchResponse) {}
+1 -1
View File
@@ -195,7 +195,7 @@ $ kubectl describe pods/private-image-test-1 | grep "Failed"
**注意:** Google Kubernetes Engine,GCE及其他自动创建node的云平台上,推荐使用本方法。
Kuberentes支持在pod中指定仓库密钥。
Kubernetes支持在pod中指定仓库密钥。
#### 使用Docker Config创建Secret
@@ -91,7 +91,7 @@ Kubernetes 提供了很多的功能,总会有新的场景受益于新特性。
[Label](/docs/user-guide/labels/) 允许用户按照自己的方式组织管理对应的资源。 [注解](/docs/user-guide/annotations/) 使用户能够以自定义的描述信息来修饰资源,以适用于自己的工作流,并为管理工具提供检查点状态的简单方法。
此外,[Kubernetes 控制面 (Controll Plane)](/docs/admin/cluster-components) 是构建在相同的 [APIs](/docs/api/) 上面,开发人员和用户都可以用。用户可以编写自己的控制器, [调度器](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/docs/devel/scheduler.md)等等,如果这么做,根据新加的[自定义 API](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/design/extending-api.md) ,可以扩展当前的通用 [CLI 命令行工具](/docs/user-guide/kubectl-overview/)。
此外,[Kubernetes 控制面 (Control Plane)](/docs/admin/cluster-components) 是构建在相同的 [APIs](/docs/api/) 上面,开发人员和用户都可以用。用户可以编写自己的控制器, [调度器](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/docs/devel/scheduler.md)等等,如果这么做,根据新加的[自定义 API](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/design/extending-api.md) ,可以扩展当前的通用 [CLI 命令行工具](/docs/user-guide/kubectl-overview/)。
这种 [设计](https://git.k8s.io/community/contributors/design-proposals/architecture/principles.md) 使得许多其他系统可以构建在 Kubernetes 之上。
@@ -52,12 +52,12 @@ Kubernetes 系统读取 Deployment 规约,并启动我们所期望的该应用
### 描述 Kubernetes 对象
当创建 KUbernetes 对象时,必须提供对象的规约,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如名称)。
当使用 KUbernetes API 创建对象时(或者直接创建,或者基于`kubectl`),API 请求必须在请求体中包含 JSON 格式的信息。
当创建 Kubernetes 对象时,必须提供对象的规约,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如名称)。
当使用 Kubernetes API 创建对象时(或者直接创建,或者基于`kubectl`),API 请求必须在请求体中包含 JSON 格式的信息。
**大多数情况下,需要在 .yaml 文件中为 `kubectl` 提供这些信息**
`kubectl` 在发起 API 请求时,将这些信息转换成 JSON 格式。
这里有一个 `.yaml` 示例文件,展示了 KUbernetes Deployment 的必需字段和对象规约:
这里有一个 `.yaml` 示例文件,展示了 Kubernetes Deployment 的必需字段和对象规约:
{% include code.html language="yaml" file="nginx-deployment.yaml" ghlink="/docs/concepts/overview/working-with-objects/nginx-deployment.yaml" %}
@@ -78,7 +78,7 @@ deployment "nginx-deployment" created
### 必需字段
在想要创建的 KUbernetes 对象对应的 `.yaml` 文件中,需要配置如下的字段:
在想要创建的 Kubernetes 对象对应的 `.yaml` 文件中,需要配置如下的字段:
* `apiVersion` - 创建该对象所使用的 Kubernetes API 的版本
* `kind` - 想要创建的对象的类型
@@ -17,11 +17,14 @@ spec:
selector:
run: my-nginx
---
apiVersion: apps/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 1
template:
metadata:
@@ -1,8 +1,11 @@
apiVersion: apps/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
@@ -1,238 +0,0 @@
---
approvers:
- thockin
title: CentOS
---
* TOC
{:toc}
## 警告
本文档适用于Kubernetes 1.1.0,目前已经被[废弃](https://github.com/kubernetes/website/issues/1613)。相关内容请参阅最新版[指南](/docs/getting-started-guides/kubeadm/)。
## 前提条件
在CentOS上部署和配置Kubernetes,您需要在集群中拥有一台机器作为master节点,并拥有至少一台运行CentOS 7系统的主机作为集群节点(node)。
## 启动一个集群
本文档是一篇基于CentOS系统部署和配置Kubernetes的入门指南,内容涵盖一个手工的配置,以便于您了解所有的底层软件包、服务以及端口等信息。
Kubernetes由一系列服务构成,包括kube-apiserver、kube-scheduler、kube-controller-manager、kubelet以及kube-proxy等。这些服务由systemd管理,配置集中位于/etc/kubernetes。我们将在集群中的不同主机上部署不同的服务。其中,第一台主机,即centos-master,将被部署成为Kubernetes集群中的master节点。这台主机上将运行kube-apiserver、kube-controller-manager和kube-scheduler。 此外,master节点还将运行 _etcd_。集群中剩余的主机,即centos-minion-n节点,将运行kubelet、proxy、cadvisor和docker。
集群中的所有节点将运行flanneld来构建网络(networking overlay)。
**系统信息:**
主机:
请使用您真实环境中的信息替换以下配置中的各个主机IP
```conf
centos-master = 192.168.121.9
centos-minion-1 = 192.168.121.65
centos-minion-2 = 192.168.121.66
centos-minion-3 = 192.168.121.67
```
**配置主机环境:**
* 在集群所有节点上——centos-{master,minion-n},创建包含以下配置信息的/etc/yum.repos.d/virt7-docker-common-release.repo文件。
```conf
[virt7-docker-common-release]
name=virt7-docker-common-release
baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/
gpgcheck=0
```
* 在集群所有节点上——centos-{master,minion-n},安装Kubernetes、etcd和flanneld。这一过程也将同时在节点上安装docker和cadvisor。
```shell
yum -y install --enablerepo=virt7-docker-common-release kubernetes etcd flannel
```
* 将master节点和其他节点的主机名——IP映射添加到所有集群节点的/etc/hosts文件中(如果主机名已经在DNS中记录,则可略过此步)
```shell
echo "192.168.121.9 centos-master
192.168.121.65 centos-minion-1
192.168.121.66 centos-minion-2
192.168.121.67 centos-minion-3" >> /etc/hosts
```
* 编辑/etc/kubernetes/config文件以保证在集群所有主机上都包含以下内容:
```shell
# logging to stderr意为从systemd journal获取日志
KUBE_LOGTOSTDERR="--logtostderr=true"
# journal消息级别, 0代表debug
KUBE_LOG_LEVEL="--v=0"
# 是否允许集群运行privileged docker containers
KUBE_ALLOW_PRIV="--allow-privileged=false"
# 配置replication conrtoller和scheduler所需的kube-apiserver地址
KUBE_MASTER="--master=http://centos-master:8080"
```
* 由于docker与一些防火墙规则不兼容,需要在master节点及其他集群节点上禁用防火墙。在CentOS系统上,需要首先禁用SELinux,进而才能禁用防火墙。
```shell
setenforce 0
systemctl disable iptables-services firewalld
systemctl stop iptables-services firewalld
```
**配置master节点上的Kubernetes服务**
* 编辑/etc/etcd/etcd.conf文件内容如下:
```shell
# [member]
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
#[cluster]
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
```
* 编辑/etc/kubernetes/apiserver文件内容如下:
```shell
# 本地服务器监听地址
KUBE_API_ADDRESS="--address=0.0.0.0"
# 本地服务器监听端口
KUBE_API_PORT="--port=8080"
# Kubelet监听端口
KUBELET_PORT="--kubelet-port=10250"
# 以逗号间隔的etcd集群中各个节点的地址
KUBE_ETCD_SERVERS="--etcd-servers=http://centos-master:2379"
# Kubernetes服务IP地址网段
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
# 请添加您需要的Kubernetes API Server启动参数
KUBE_API_ARGS=""
```
* 启动ETCD并保存master节点的网络设置(network overlay configuration):
**警告** 请根据您的真实环境配置网络信息!在本文环境中,`172.30.0.0/16`网段是可用的。
```shell
systemctl start etcd
etcdctl mkdir /kube-centos/network
etcdctl mk /kube-centos/network/config "{ \"Network\": \"172.30.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }"
```
* 在master节点上配置/etc/sysconfig/flanneld文件使用flannel覆盖Docker网络 (需要在其他集群节点上完成相同配置,详见下文):
```shell
# Flanneld配置选项
# etcd url地址,指向运行etcd的服务器
FLANNEL_ETCD_ENDPOINTS="http://centos-master:2379"
# etcd配置秘钥,即flannel查询的配置秘钥
# 用于网段分配
FLANNEL_ETCD_PREFIX="/kube-centos/network"
# 其它需要的Flannel启动参数
#FLANNEL_OPTIONS=""
```
* 在master节点上启动相关服务:
```shell
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler flanneld; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
```
**在集群其他节点上配置Kubernetes服务**
***我们需要在集群其他节点上配置kubelet,启动kubelet和proxy服务***
* 编辑/etc/kubernetes/kubelet文件内容如下:
```shell
# info server的服务地址
KUBELET_ADDRESS="--address=0.0.0.0"
# info server的监听端口
KUBELET_PORT="--port=10250"
# 本字段可以设置空值以使用真实的主机名
# 注意节点序号(n
KUBELET_HOSTNAME="--hostname-override=centos-minion-n"
# api-server地址
KUBELET_API_SERVER="--api-servers=http://centos-master:8080"
# 添加您所需要的Kubelet参数
KUBELET_ARGS=""
```
* 在所有节点上配置/etc/sysconfig/flanneld文件设置使用flannel覆盖Docker网络:
```shell
# Flanneld配置选项
# etcd url地址,指向运行etcd的服务器
FLANNEL_ETCD_ENDPOINTS="http://centos-master:2379"
# etcd配置秘钥,即flannel查询的配置秘钥
# 用于网段分配
FLANNEL_ETCD_PREFIX="/kube-centos/network"
# 其他需要配置的选项
#FLANNEL_OPTIONS=""
```
* 在节点上启动相关服务(centos-minion-n
```shell
for SERVICES in kube-proxy kubelet flanneld docker; do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
```
* 配置kubectl
```shell
kubectl config set-cluster default-cluster --server=http://centos-master:8080
kubectl config set-context default-context --cluster=default-cluster --user=default-admin
kubectl config use-context default-context
```
*至此,Kubernetes在CentOS集群中的部署已经完成 !*
* 在centos-master节点上通过kubectl命令检查所有的Kubernetes节点已经到位
```shell
$ kubectl get nodes
NAME STATUS AGE VERSION
centos-minion-1 Ready 3d v1.6.0+fff5156
centos-minion-2 Ready 3d v1.6.0+fff5156
centos-minion-3 Ready 3d v1.6.0+fff5156
```
**现在,Kubernetes集群已经正常运行!可以创建测试pod验证集群了!**
## 支持级别
IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level
-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ----------------------------
Bare-metal | custom | CentOS | flannel | [docs](/docs/getting-started-guides/centos/centos_manual_config) | | Community ([@coolsvap](https://github.com/coolsvap))
有关所有解决方案的支持级别信息,请参阅[解决方案列表](/docs/getting-started-guides/#table-of-solutions)。
@@ -1,708 +0,0 @@
---
approvers:
- erictune
- thockin
title: Offline
---
本文档介绍了如何在CoreOS系统上部署Kubernetes。主要针对需要在离线环境下部署的场景,无论您是真实部署前的POC测试还是由于应用程序受限必须在离线环境中使用,本文档都是适用的。
* TOC
{:toc}
## 前提条件
1. 安装了 *CentOS 6* 系统的PXE服务器
2. 集群中需要至少两台物理裸机节点
## 概要设计
1. 管理tftp目录
* /tftpboot/(coreos)(centos)(RHEL)
* /tftpboot/pxelinux.0/(MAC) -> 链接到Linux镜像配置文件
2. 安装时更新pxelinux链接
3. 更新DHCP配置,添加所需要部署的主机的相关信息
4. 创建一个etcd集群
5. 确保集群处于离线环境[etcd discovery tool](https://discovery.etcd.io/).
6. 安装配置CoreOS slave节点作为Kubernetes节点
## 本文档定义的一些变量
| Node Description | MAC | IP |
| :---------------------------- | :---------------: | :---------: |
| CoreOS/etcd/Kubernetes Master | d0:00:67:13:0d:00 | 10.20.30.40 |
| CoreOS Slave 1 | d0:00:67:13:0d:01 | 10.20.30.41 |
| CoreOS Slave 2 | d0:00:67:13:0d:02 | 10.20.30.42 |
## 设置PXELINUX CentOS
请参阅[这篇指南](http://docs.fedoraproject.org/en-US/Fedora/7/html/Installation_Guide/ap-pxe-server.html)以了解完整的CentOS PXELINUX环境设置步骤。本节内容仅是上述指南文档的概要缩写版本。
1. 安装CentOS上所需要的相关软件包
```shell
sudo yum install tftp-server dhcp syslinux
```
2. 编辑`/etc/xinetd.d/tftp`文件以启用tftp服务
```conf
disable = no
```
3. 拷贝所需的syslinux镜像文件
```shell
su -
mkdir -p /tftpboot
cd /tftpboot
cp /usr/share/syslinux/pxelinux.0 /tftpboot
cp /usr/share/syslinux/menu.c32 /tftpboot
cp /usr/share/syslinux/memdisk /tftpboot
cp /usr/share/syslinux/mboot.c32 /tftpboot
cp /usr/share/syslinux/chain.c32 /tftpboot
/sbin/service dhcpd start
/sbin/service xinetd start
/sbin/chkconfig tftp on
```
4. 设置默认引导菜单
```shell
mkdir /tftpboot/pxelinux.cfg
touch /tftpboot/pxelinux.cfg/default
```
5. 编辑默认引导菜单`/tftpboot/pxelinux.cfg/default`
```conf
default menu.c32
prompt 0
timeout 15
ONTIMEOUT local
display boot.msg
MENU TITLE Main Menu
LABEL local
MENU LABEL Boot local hard drive
LOCALBOOT 0
```
至此,您应当已经配置好一个可用的PXELINUX环境用来运行CoreOS节点了。您可以使用VirtualBox或者在物理裸机上对PXELINUX环境所提供的服务进行验证。
## 添加CoreOS至PXE
本节描述在已有PXELINUX环境的前提下,如何配置CoreOS镜像与之并存。
1. 查找或者创建TFTP根目录,后续所有步骤都将基于此目录。
* 本文中我们假设`/tftpboot`是根目录。
2. tftp根目录准备好后,我们将为CoreOS镜像创建一个新的目录结构。
3. 下载由CoreOS团队提供的CoreOS PXE相关文件。
```shell
MY_TFTPROOT_DIR=/tftpboot
mkdir -p $MY_TFTPROOT_DIR/images/coreos/
cd $MY_TFTPROOT_DIR/images/coreos/
wget http://stable.release.core-os.net/amd64-usr/current/coreos_production_pxe.vmlinuz
wget http://stable.release.core-os.net/amd64-usr/current/coreos_production_pxe.vmlinuz.sig
wget http://stable.release.core-os.net/amd64-usr/current/coreos_production_pxe_image.cpio.gz
wget http://stable.release.core-os.net/amd64-usr/current/coreos_production_pxe_image.cpio.gz.sig
gpg --verify coreos_production_pxe.vmlinuz.sig
gpg --verify coreos_production_pxe_image.cpio.gz.sig
```
4. 再次编辑菜单`/tftpboot/pxelinux.cfg/default`
```conf
default menu.c32
prompt 0
timeout 300
ONTIMEOUT local
display boot.msg
MENU TITLE Main Menu
LABEL local
MENU LABEL Boot local hard drive
LOCALBOOT 0
MENU BEGIN CoreOS Menu
LABEL coreos-master
MENU LABEL CoreOS Master
KERNEL images/coreos/coreos_production_pxe.vmlinuz
APPEND initrd=images/coreos/coreos_production_pxe_image.cpio.gz cloud-config-url=http://<xxx.xxx.xxx.xxx>/pxe-cloud-config-single-master.yml
LABEL coreos-slave
MENU LABEL CoreOS Slave
KERNEL images/coreos/coreos_production_pxe.vmlinuz
APPEND initrd=images/coreos/coreos_production_pxe_image.cpio.gz cloud-config-url=http://<xxx.xxx.xxx.xxx>/pxe-cloud-config-slave.yml
MENU END
```
此文件配置了系统将从本地磁盘引导,但添加了从PXE CoreOS镜像引导的选项。
## DHCP配置
本节将介绍如何配置DHCP服务器分发新的镜像。这里我们假设集群中有其他的服务器需要从不同的CoreOS镜像引导。
1. 添加`filename`字段到 _host_ 或者 _subnet_ 部分。
```conf
filename "/tftpboot/pxelinux.0";
```
2. 现在,我们可以创建pxelinux配置文件,这些配置将来也可以作为其他不同CoreOS部署的模版。
```conf
subnet 10.20.30.0 netmask 255.255.255.0 {
next-server 10.20.30.242;
option broadcast-address 10.20.30.255;
filename "<other default image>";
...
# http://www.syslinux.org/wiki/index.php/PXELINUX
host core_os_master {
hardware ethernet d0:00:67:13:0d:00;
option routers 10.20.30.1;
fixed-address 10.20.30.40;
option domain-name-servers 10.20.30.242;
filename "/pxelinux.0";
}
host core_os_slave {
hardware ethernet d0:00:67:13:0d:01;
option routers 10.20.30.1;
fixed-address 10.20.30.41;
option domain-name-servers 10.20.30.242;
filename "/pxelinux.0";
}
host core_os_slave2 {
hardware ethernet d0:00:67:13:0d:02;
option routers 10.20.30.1;
fixed-address 10.20.30.42;
option domain-name-servers 10.20.30.242;
filename "/pxelinux.0";
}
...
}
```
稍后我们将介绍节点的配置。
## Kubernetes
部署以上配置前,需要首先创建一个`etcd`主节点(master)。为了做到这一点,我们需要使用一个特殊的cloud-config.yaml来pxe CoreOS,可以有两种方式:
1. 第一种方式是将云配置文件模版化,然后通过编程的方式为不同的集群提供不同的配置。
2. 第二种方式是运行一个服务发现协议从而可以在云环境中做服务的自动发现。
在本示例中,我们将通过静态方式创建一个etcd服务器,用于运行Kubernetes主控组件,并用作etcd主节点。
由于我们的集群处于一个离线的环境中,所以大部分的CoreOS和Kubernetes帮助进程是受限的。为了完成部署,我们需要下载Kubernetes的各个可执行文件到本地然后再启动运行。
一种简单的方案是在DHCP/TFTP主机上搭建一个简易的web服务器,从而环境中的CoreOS PXE机器可以从其上下载各个可执行文件。
为了达到这一目标,我们将启动一个`apache`服务器并提供运行Kubernetes所需要的各个可执行文件。
以下脚本运行在上文中准备好的PXE服务器上:
```shell
rm /etc/httpd/conf.d/welcome.conf
cd /var/www/html/
wget -O kube-register https://github.com/kelseyhightower/kube-register/releases/download/v0.0.2/kube-register-0.0.2-linux-amd64
wget -O setup-network-environment https://github.com/kelseyhightower/setup-network-environment/releases/download/v1.0.0/setup-network-environment
wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kubernetes
wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kube-apiserver
wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kube-controller-manager
wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kube-scheduler
wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kubectl
wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kubecfg
wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kubelet
wget https://storage.googleapis.com/kubernetes-release/release/v0.15.0/bin/linux/amd64/kube-proxy
wget -O flanneld https://storage.googleapis.com/k8s/flanneld
```
以上脚本将准备好运行Kubernetes所需的所有可执行文件。未来这些文件将可通过互联网直接进行更新。
现在可以开始准备部署了!
## 云平台配置
以下Kubernetes离线版本部署配置文件经过了一定的裁减。
以下内容基于配置文件: [master.yml](/docs/getting-started-guides/coreos/cloud-configs/master.yaml), 以及[node.yml](/docs/getting-started-guides/coreos/cloud-configs/node.yaml)
将文件中的一些占位字段做如下修改:
- 使用您的PXE服务器的ip地址替换文件中的`<PXE_SERVER_IP>` (例如10.20.30.242)
- 使用Kubernetes master节点的ip地址替换文件中的`<MASTER_SERVER_IP>` (例如10.20.30.40)
- 如果您使用私有docker镜像仓库,请使用您的镜像仓库DNS名字替换文件中的`rdocker.example.com`
- 如果您使用代理,请用代理服务器地址(包含端口)替换文件中的`rproxy.example.com`
- 在配置文件最后添加您的SSH公钥
### master.yml
在PXE服务器上创建并编辑文件`/var/www/html/coreos/pxe-cloud-config-master.yml`
```yaml
#cloud-config
---
write_files:
- path: /opt/bin/waiter.sh
owner: root
content: |
#! /usr/bin/bash
until curl http://127.0.0.1:4001/v2/machines; do sleep 2; done
- path: /opt/bin/kubernetes-download.sh
owner: root
permissions: 0755
content: |
#! /usr/bin/bash
/usr/bin/wget -N -P "/opt/bin" "http://<PXE_SERVER_IP>/kubectl"
/usr/bin/wget -N -P "/opt/bin" "http://<PXE_SERVER_IP>/kubernetes"
/usr/bin/wget -N -P "/opt/bin" "http://<PXE_SERVER_IP>/kubecfg"
chmod +x /opt/bin/*
- path: /etc/profile.d/opt-path.sh
owner: root
permissions: 0755
content: |
#! /usr/bin/bash
PATH=$PATH/opt/bin
coreos:
units:
- name: 10-eno1.network
runtime: true
content: |
[Match]
Name=eno1
[Network]
DHCP=yes
- name: 20-nodhcp.network
runtime: true
content: |
[Match]
Name=en*
[Network]
DHCP=none
- name: get-kube-tools.service
runtime: true
command: start
content: |
[Service]
ExecStartPre=-/usr/bin/mkdir -p /opt/bin
ExecStart=/opt/bin/kubernetes-download.sh
RemainAfterExit=yes
Type=oneshot
- name: setup-network-environment.service
command: start
content: |
[Unit]
Description=Setup Network Environment
Documentation=https://github.com/kelseyhightower/setup-network-environment
Requires=network-online.target
After=network-online.target
[Service]
ExecStartPre=-/usr/bin/mkdir -p /opt/bin
ExecStartPre=/usr/bin/wget -N -P /opt/bin http://<PXE_SERVER_IP>/setup-network-environment
ExecStartPre=/usr/bin/chmod +x /opt/bin/setup-network-environment
ExecStart=/opt/bin/setup-network-environment
RemainAfterExit=yes
Type=oneshot
- name: etcd.service
command: start
content: |
[Unit]
Description=etcd
Requires=setup-network-environment.service
After=setup-network-environment.service
[Service]
EnvironmentFile=/etc/network-environment
User=etcd
PermissionsStartOnly=true
ExecStart=/usr/bin/etcd \
--name ${DEFAULT_IPV4} \
--addr ${DEFAULT_IPV4}:4001 \
--bind-addr 0.0.0.0 \
--cluster-active-size 1 \
--data-dir /var/lib/etcd \
--http-read-timeout 86400 \
--peer-addr ${DEFAULT_IPV4}:7001 \
--snapshot true
Restart=always
RestartSec=10s
- name: fleet.socket
command: start
content: |
[Socket]
ListenStream=/var/run/fleet.sock
- name: fleet.service
command: start
content: |
[Unit]
Description=fleet daemon
Wants=etcd.service
After=etcd.service
Wants=fleet.socket
After=fleet.socket
[Service]
Environment="FLEET_ETCD_SERVERS=http://127.0.0.1:4001"
Environment="FLEET_METADATA=role=master"
ExecStart=/usr/bin/fleetd
Restart=always
RestartSec=10s
- name: etcd-waiter.service
command: start
content: |
[Unit]
Description=etcd waiter
Wants=network-online.target
Wants=etcd.service
After=etcd.service
After=network-online.target
Before=flannel.service
Before=setup-network-environment.service
[Service]
ExecStartPre=/usr/bin/chmod +x /opt/bin/waiter.sh
ExecStart=/usr/bin/bash /opt/bin/waiter.sh
RemainAfterExit=true
Type=oneshot
- name: flannel.service
command: start
content: |
[Unit]
Wants=etcd-waiter.service
After=etcd-waiter.service
Requires=etcd.service
After=etcd.service
After=network-online.target
Wants=network-online.target
Description=flannel is an etcd backed overlay network for containers
[Service]
Type=notify
ExecStartPre=-/usr/bin/mkdir -p /opt/bin
ExecStartPre=/usr/bin/wget -N -P /opt/bin http://<PXE_SERVER_IP>/flanneld
ExecStartPre=/usr/bin/chmod +x /opt/bin/flanneld
ExecStartPre=-/usr/bin/etcdctl mk /coreos.com/network/config '{"Network":"10.100.0.0/16", "Backend": {"Type": "vxlan"}}'
ExecStart=/opt/bin/flanneld
- name: kube-apiserver.service
command: start
content: |
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
Requires=etcd.service
After=etcd.service
[Service]
ExecStartPre=-/usr/bin/mkdir -p /opt/bin
ExecStartPre=/usr/bin/wget -N -P /opt/bin http://<PXE_SERVER_IP>/kube-apiserver
ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-apiserver
ExecStart=/opt/bin/kube-apiserver \
--address=0.0.0.0 \
--port=8080 \
--service-cluster-ip-range=10.100.0.0/16 \
--etcd-servers=http://127.0.0.1:4001 \
--logtostderr=true
Restart=always
RestartSec=10
- name: kube-controller-manager.service
command: start
content: |
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes
Requires=kube-apiserver.service
After=kube-apiserver.service
[Service]
ExecStartPre=/usr/bin/wget -N -P /opt/bin http://<PXE_SERVER_IP>/kube-controller-manager
ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-controller-manager
ExecStart=/opt/bin/kube-controller-manager \
--master=127.0.0.1:8080 \
--logtostderr=true
Restart=always
RestartSec=10
- name: kube-scheduler.service
command: start
content: |
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes
Requires=kube-apiserver.service
After=kube-apiserver.service
[Service]
ExecStartPre=/usr/bin/wget -N -P /opt/bin http://<PXE_SERVER_IP>/kube-scheduler
ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-scheduler
ExecStart=/opt/bin/kube-scheduler --master=127.0.0.1:8080
Restart=always
RestartSec=10
- name: kube-register.service
command: start
content: |
[Unit]
Description=Kubernetes Registration Service
Documentation=https://github.com/kelseyhightower/kube-register
Requires=kube-apiserver.service
After=kube-apiserver.service
Requires=fleet.service
After=fleet.service
[Service]
ExecStartPre=/usr/bin/wget -N -P /opt/bin http://<PXE_SERVER_IP>/kube-register
ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-register
ExecStart=/opt/bin/kube-register \
--metadata=role=node \
--fleet-endpoint=unix:///var/run/fleet.sock \
--healthz-port=10248 \
--api-endpoint=http://127.0.0.1:8080
Restart=always
RestartSec=10
update:
group: stable
reboot-strategy: off
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAAD...
```
### node.yml
在PXE服务器上创建并编辑文件`/var/www/html/coreos/pxe-cloud-config-slave.yml`
```yaml
#cloud-config
---
write_files:
- path: /etc/default/docker
content: |
DOCKER_EXTRA_OPTS='--insecure-registry="rdocker.example.com:5000"'
coreos:
units:
- name: 10-eno1.network
runtime: true
content: |
[Match]
Name=eno1
[Network]
DHCP=yes
- name: 20-nodhcp.network
runtime: true
content: |
[Match]
Name=en*
[Network]
DHCP=none
- name: etcd.service
mask: true
- name: docker.service
drop-ins:
- name: 50-insecure-registry.conf
content: |
[Service]
Environment="HTTP_PROXY=http://rproxy.example.com:3128/" "NO_PROXY=localhost,127.0.0.0/8,rdocker.example.com"
- name: fleet.service
command: start
content: |
[Unit]
Description=fleet daemon
Wants=fleet.socket
After=fleet.socket
[Service]
Environment="FLEET_ETCD_SERVERS=http://<MASTER_SERVER_IP>:4001"
Environment="FLEET_METADATA=role=node"
ExecStart=/usr/bin/fleetd
Restart=always
RestartSec=10s
- name: flannel.service
command: start
content: |
[Unit]
After=network-online.target
Wants=network-online.target
Description=flannel is an etcd backed overlay network for containers
[Service]
Type=notify
ExecStartPre=-/usr/bin/mkdir -p /opt/bin
ExecStartPre=/usr/bin/wget -N -P /opt/bin http://<PXE_SERVER_IP>/flanneld
ExecStartPre=/usr/bin/chmod +x /opt/bin/flanneld
ExecStart=/opt/bin/flanneld -etcd-endpoints http://<MASTER_SERVER_IP>:4001
- name: docker.service
command: start
content: |
[Unit]
After=flannel.service
Wants=flannel.service
Description=Docker Application Container Engine
Documentation=http://docs.docker.io
[Service]
EnvironmentFile=-/etc/default/docker
EnvironmentFile=/run/flannel/subnet.env
ExecStartPre=/bin/mount --make-rprivate /
ExecStart=/usr/bin/docker -d --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU} -s=overlay -H fd:// ${DOCKER_EXTRA_OPTS}
[Install]
WantedBy=multi-user.target
- name: setup-network-environment.service
command: start
content: |
[Unit]
Description=Setup Network Environment
Documentation=https://github.com/kelseyhightower/setup-network-environment
Requires=network-online.target
After=network-online.target
[Service]
ExecStartPre=-/usr/bin/mkdir -p /opt/bin
ExecStartPre=/usr/bin/wget -N -P /opt/bin http://<PXE_SERVER_IP>/setup-network-environment
ExecStartPre=/usr/bin/chmod +x /opt/bin/setup-network-environment
ExecStart=/opt/bin/setup-network-environment
RemainAfterExit=yes
Type=oneshot
- name: kube-proxy.service
command: start
content: |
[Unit]
Description=Kubernetes Proxy
Documentation=https://github.com/kubernetes/kubernetes
Requires=setup-network-environment.service
After=setup-network-environment.service
[Service]
ExecStartPre=/usr/bin/wget -N -P /opt/bin http://<PXE_SERVER_IP>/kube-proxy
ExecStartPre=/usr/bin/chmod +x /opt/bin/kube-proxy
ExecStart=/opt/bin/kube-proxy \
--etcd-servers=http://<MASTER_SERVER_IP>:4001 \
--logtostderr=true
Restart=always
RestartSec=10
- name: kube-kubelet.service
command: start
content: |
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/kubernetes/kubernetes
Requires=setup-network-environment.service
After=setup-network-environment.service
[Service]
EnvironmentFile=/etc/network-environment
ExecStartPre=/usr/bin/wget -N -P /opt/bin http://<PXE_SERVER_IP>/kubelet
ExecStartPre=/usr/bin/chmod +x /opt/bin/kubelet
ExecStart=/opt/bin/kubelet \
--address=0.0.0.0 \
--port=10250 \
--hostname-override=${DEFAULT_IPV4} \
--api-servers=<MASTER_SERVER_IP>:8080 \
--healthz-bind-address=0.0.0.0 \
--healthz-port=10248 \
--logtostderr=true
Restart=always
RestartSec=10
update:
group: stable
reboot-strategy: off
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAAD...
```
## 创建pxelinux.cfg相关文件
_slave_ 节点创建一个pxelinux目标文件: `vi /tftpboot/pxelinux.cfg/coreos-node-slave`
```conf
default coreos
prompt 1
timeout 15
display boot.msg
label coreos
menu default
kernel images/coreos/coreos_production_pxe.vmlinuz
append initrd=images/coreos/coreos_production_pxe_image.cpio.gz cloud-config-url=http://<pxe-host-ip>/coreos/pxe-cloud-config-slave.yml console=tty0 console=ttyS0 coreos.autologin=tty1 coreos.autologin=ttyS0
```
_master_ 节点也创建一个: `vi /tftpboot/pxelinux.cfg/coreos-node-master`
```conf
default coreos
prompt 1
timeout 15
display boot.msg
label coreos
menu default
kernel images/coreos/coreos_production_pxe.vmlinuz
append initrd=images/coreos/coreos_production_pxe_image.cpio.gz cloud-config-url=http://<pxe-host-ip>/coreos/pxe-cloud-config-master.yml console=tty0 console=ttyS0 coreos.autologin=tty1 coreos.autologin=ttyS0
```
## 指定pxelinux目标
在上一步骤中我们已经设置了master和slave节点的目标, 我们需要将特定的主机配置为这些目标。为实现这一点,我们可以通过将指定的MAC地址配置到指定的pxelinux.cfg文件的方法来解决。
参照本文开始时的MAC地址列表,可以做出下文中的修改。更多细节信息请参阅[相关文档](http://www.syslinux.org/wiki/index.php/PXELINUX).
```shell
cd /tftpboot/pxelinux.cfg
ln -s coreos-node-master 01-d0-00-67-13-0d-00
ln -s coreos-node-slave 01-d0-00-67-13-0d-01
ln -s coreos-node-slave 01-d0-00-67-13-0d-02
```
重启这些服务器令这些镜像PXE化并准备开始运行容器!
## 创建测试pod
现在,Kubernetes已经成功部署在CoreOS上了,我们可以创建一些pod来测试部署。
请参考[一个简单的nginx样例部署](/docs/user-guide/simple-nginx)来测试集群环境。
更多完整的应用程序示例,请参阅[示例目录](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/examples/)中的各种例子。
## 一些用于调试的帮助命令
列出etcd中的所有关键字:
```shell
etcdctl ls --recursive
```
列出所有fleet集群中的机器:
```shell
fleetctl list-machines
```
查阅master节点上各种Kubernetes服务的系统状态:
```shell
systemctl status kube-apiserver
systemctl status kube-controller-manager
systemctl status kube-scheduler
systemctl status kube-register
```
查阅集群节点上各种服务的系统状态:
```shell
systemctl status kube-kubelet
systemctl status docker.service
```
列举Kubernetes环境中的各种对象:
```shell
kubectl get pods
kubectl get nodes
```
结束Kubernetes中的所有pod
```shell
for i in `kubectl get pods | awk '{print $1}'`; do kubectl delete pod $i; done
```
## 支持级别
IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level
-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ----------------------------
Bare-metal (Offline) | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/coreos/bare_metal_offline) | | Community ([@jeffbean](https://github.com/jeffbean))
有关所有解决方案的支持级别信息,请参阅[解决方案列表](/docs/getting-started-guides/#table-of-solutions)。
@@ -1,4 +1,4 @@
apiVersion: apps/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:
name: kube-dns-autoscaler
@@ -6,6 +6,9 @@ metadata:
labels:
k8s-app: kube-dns-autoscaler
spec:
selector:
matchLabels:
k8s-app: kube-dns-autoscaler
template:
metadata:
labels:
@@ -13,7 +16,7 @@ spec:
spec:
containers:
- name: autoscaler
image: k8s.gcr.io/cluster-proportional-autoscaler-amd64:1.0.0
image: k8s.gcr.io/cluster-proportional-autoscaler-amd64:1.1.1
resources:
requests:
cpu: "20m"

Some files were not shown because too many files have changed in this diff Show More