Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1274670dea | |||
| 37e1b9819c | |||
| 95002f4314 | |||
| a5d01ae6b6 | |||
| fd975899a6 | |||
| d00396ef79 | |||
| 68a6b91536 | |||
| 157fc38669 | |||
| 748fcec13a | |||
| 7b662446b3 | |||
| 377e7e2364 | |||
| 0bc73b8e9b | |||
| 4e995f55a9 | |||
| 571d2324db | |||
| 5524edba2a | |||
| cf14a29b53 |
@@ -1,10 +0,0 @@
|
||||
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
> For 1.8 Features: set Milestone to `1.8` and Base Branch to `release-1.8`
|
||||
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
>
|
||||
> NOTE: Please check the “Allow edits from maintainers” box (see image below) to
|
||||
> [allow reviewers to fix problems](https://help.github.com/articles/allowing-changes-to-a-pull-request-branch-created-from-a-fork/) on your patch and speed up the review process.
|
||||
>
|
||||
> Please delete this note before submitting the pull request.
|
||||
|
||||

|
||||
-19
@@ -5,22 +5,3 @@ _site/**
|
||||
.sass-cache/**
|
||||
CNAME
|
||||
.travis.yml
|
||||
.idea/
|
||||
|
||||
# Vim ignore
|
||||
# source: https://github.com/github/gitignore/blob/master/Global/Vim.gitignore
|
||||
|
||||
# swap
|
||||
[._]*.s[a-v][a-z]
|
||||
[._]*.sw[a-p]
|
||||
[._]s[a-v][a-z]
|
||||
[._]sw[a-p]
|
||||
# session
|
||||
Session.vim
|
||||
# temporary
|
||||
.netrwhist
|
||||
*~
|
||||
# auto-generated tag files
|
||||
tags
|
||||
|
||||
kubernetes.github.io.iml
|
||||
|
||||
+11
-8
@@ -1,21 +1,24 @@
|
||||
language: go
|
||||
go:
|
||||
- 1.8.3
|
||||
- 1.8.1
|
||||
|
||||
# Don't want default ./... here:
|
||||
install:
|
||||
- export PATH=$GOPATH/bin:$PATH
|
||||
- mkdir -p $HOME/gopath/src/k8s.io
|
||||
- mv $TRAVIS_BUILD_DIR $HOME/gopath/src/k8s.io/website
|
||||
- cd $HOME/gopath/src/k8s.io/website
|
||||
- mv $TRAVIS_BUILD_DIR $HOME/gopath/src/k8s.io/kubernetes.github.io
|
||||
|
||||
# (1) Fetch dependencies for us to run the tests in test/examples_test.go
|
||||
- pushd $GOPATH/src/k8s.io && git clone https://github.com/kubernetes/kubernetes && popd
|
||||
- pushd $GOPATH/src/k8s.io/kubernetes && git checkout release-1.7 && popd
|
||||
- go get -t -v k8s.io/kubernetes.github.io/test
|
||||
|
||||
# Simplified deduplication of dependencies.
|
||||
- cp -L -R $GOPATH/src/k8s.io/kubernetes/vendor/ $GOPATH/src/
|
||||
- rm -r $GOPATH/src/k8s.io/kubernetes/vendor/
|
||||
- go get -t -v k8s.io/website/test
|
||||
|
||||
# (2) Fetch md-check along with all its dependencies.
|
||||
- git clone --depth=50 --branch=master https://github.com/kubernetes/md-check $HOME/gopath/src/k8s.io/md-check
|
||||
- go get -t -v k8s.io/md-check
|
||||
|
||||
script:
|
||||
- go test -v k8s.io/website/test
|
||||
- ./verify-docs-format.sh
|
||||
- go test -v k8s.io/kubernetes.github.io/test
|
||||
- $GOPATH/bin/md-check --root-dir=$HOME/gopath/src/k8s.io/kubernetes.github.io
|
||||
|
||||
@@ -3,7 +3,6 @@ layout: docwithnav
|
||||
title: 404 Error!
|
||||
permalink: /404.html
|
||||
no_canonical: true
|
||||
sitemap: false
|
||||
---
|
||||
|
||||
<script src="/js/redirects.js"></script>
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@ The [Kubernetes SIG Docs Discussion Group](https://groups.google.com/forum/#!for
|
||||
|
||||
### Style Guides and Templates
|
||||
|
||||
Before submitting a pull request to create new content, please review the [Kubernetes.io style guide](http://kubernetes.io/docs/home/contribute/style-guide/) and follow the [instructions for using page templates](http://kubernetes.io/docs/home/contribute/page-templates/).
|
||||
Before submitting a pull request to create new content, please review the [Kubernetes.io style guide](http://kubernetes.io/docs/contribute/style-guide/) and follow the [instructions for using page templates](http://kubernetes.io/docs/contribute/page-templates/).
|
||||
|
||||
|
||||
## Contributing to Documentation
|
||||
@@ -33,4 +33,4 @@ Note that code issues should be filed against the main kubernetes repository, wh
|
||||
|
||||
### Submitting Documentation Pull Requests
|
||||
|
||||
If you're fixing an issue in the existing documentation, you should submit a PR against the master branch. Follow [these instructions to create a documentation pull request against the kubernetes.io repository](http://kubernetes.io/docs/home/contribute/create-pull-request/).
|
||||
If you’re fixing an issue in the existing documentation, you should submit a PR against the master branch. Follow [these instructions to create a documentation pull request against the kubernetes.io repository](http://kubernetes.io/docs/contribute/create-pull-request/).
|
||||
|
||||
@@ -1,4 +1,20 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "github-pages", group: :jekyll_plugins
|
||||
gem "jekyll-include-cache", "~> 0.1"
|
||||
gem "jekyll", "3.2.1"
|
||||
gem "jekyll-sass-converter", "1.3.0"
|
||||
gem "minima", "1.1.0"
|
||||
gem "kramdown", "1.11.1"
|
||||
gem "liquid", "3.0.6"
|
||||
gem "rouge", "1.11.1"
|
||||
gem "jemoji", "0.7.0"
|
||||
gem "jekyll-mentions", "1.2.0"
|
||||
gem "jekyll-redirect-from", "0.11.0"
|
||||
gem "jekyll-sitemap", "0.10.0"
|
||||
gem "jekyll-feed", "0.5.1"
|
||||
gem "jekyll-gist", "1.4.0"
|
||||
gem "jekyll-paginate", "1.1.0"
|
||||
gem "jekyll-coffeescript", "1.0.1"
|
||||
gem "jekyll-seo-tag", "2.0.0"
|
||||
gem "jekyll-github-metadata", "2.0.2"
|
||||
gem "listen", "3.0.6"
|
||||
gem "activesupport", "4.2.7"
|
||||
|
||||
+42
-126
@@ -7,75 +7,23 @@ GEM
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
addressable (2.5.0)
|
||||
public_suffix (~> 2.0, >= 2.0.2)
|
||||
addressable (2.4.0)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.12.2)
|
||||
coffee-script-source (1.10.0)
|
||||
colorator (1.1.0)
|
||||
ethon (0.10.1)
|
||||
ffi (>= 1.3.0)
|
||||
execjs (2.7.0)
|
||||
faraday (0.10.0)
|
||||
faraday (0.9.2)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
ffi (1.9.14)
|
||||
forwardable-extended (2.6.0)
|
||||
gemoji (2.1.0)
|
||||
github-pages (112)
|
||||
activesupport (= 4.2.7)
|
||||
github-pages-health-check (= 1.3.0)
|
||||
jekyll (= 3.3.1)
|
||||
jekyll-avatar (= 0.4.2)
|
||||
jekyll-coffeescript (= 1.0.1)
|
||||
jekyll-default-layout (= 0.1.4)
|
||||
jekyll-feed (= 0.8.0)
|
||||
jekyll-gist (= 1.4.0)
|
||||
jekyll-github-metadata (= 2.2.0)
|
||||
jekyll-mentions (= 1.2.0)
|
||||
jekyll-optional-front-matter (= 0.1.2)
|
||||
jekyll-paginate (= 1.1.0)
|
||||
jekyll-readme-index (= 0.0.3)
|
||||
jekyll-redirect-from (= 0.11.0)
|
||||
jekyll-relative-links (= 0.2.1)
|
||||
jekyll-sass-converter (= 1.3.0)
|
||||
jekyll-seo-tag (= 2.1.0)
|
||||
jekyll-sitemap (= 0.12.0)
|
||||
jekyll-swiss (= 0.4.0)
|
||||
jekyll-theme-architect (= 0.0.3)
|
||||
jekyll-theme-cayman (= 0.0.3)
|
||||
jekyll-theme-dinky (= 0.0.3)
|
||||
jekyll-theme-hacker (= 0.0.3)
|
||||
jekyll-theme-leap-day (= 0.0.3)
|
||||
jekyll-theme-merlot (= 0.0.3)
|
||||
jekyll-theme-midnight (= 0.0.3)
|
||||
jekyll-theme-minimal (= 0.0.3)
|
||||
jekyll-theme-modernist (= 0.0.3)
|
||||
jekyll-theme-primer (= 0.1.5)
|
||||
jekyll-theme-slate (= 0.0.3)
|
||||
jekyll-theme-tactile (= 0.0.3)
|
||||
jekyll-theme-time-machine (= 0.0.3)
|
||||
jekyll-titles-from-headings (= 0.1.3)
|
||||
jemoji (= 0.7.0)
|
||||
kramdown (= 1.11.1)
|
||||
liquid (= 3.0.6)
|
||||
listen (= 3.0.6)
|
||||
mercenary (~> 0.3)
|
||||
minima (= 2.0.0)
|
||||
rouge (= 1.11.1)
|
||||
terminal-table (~> 1.4)
|
||||
github-pages-health-check (1.3.0)
|
||||
addressable (~> 2.3)
|
||||
net-dns (~> 0.8)
|
||||
octokit (~> 4.0)
|
||||
public_suffix (~> 2.0)
|
||||
typhoeus (~> 0.7)
|
||||
html-pipeline (2.4.2)
|
||||
activesupport (>= 2)
|
||||
nokogiri (>= 1.4)
|
||||
i18n (0.7.0)
|
||||
jekyll (3.3.1)
|
||||
addressable (~> 2.4)
|
||||
jekyll (3.2.1)
|
||||
colorator (~> 1.0)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
jekyll-watch (~> 1.1)
|
||||
@@ -85,69 +33,26 @@ GEM
|
||||
pathutil (~> 0.9)
|
||||
rouge (~> 1.7)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-avatar (0.4.2)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-coffeescript (1.0.1)
|
||||
coffee-script (~> 2.2)
|
||||
jekyll-default-layout (0.1.4)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-feed (0.8.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-feed (0.5.1)
|
||||
jekyll-gist (1.4.0)
|
||||
octokit (~> 4.2)
|
||||
jekyll-github-metadata (2.2.0)
|
||||
jekyll-github-metadata (2.0.2)
|
||||
jekyll (~> 3.1)
|
||||
octokit (~> 4.0, != 4.4.0)
|
||||
jekyll-include-cache (0.1.0)
|
||||
jekyll (~> 3.3)
|
||||
octokit (~> 4.0)
|
||||
jekyll-mentions (1.2.0)
|
||||
activesupport (~> 4.0)
|
||||
html-pipeline (~> 2.3)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-optional-front-matter (0.1.2)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-paginate (1.1.0)
|
||||
jekyll-readme-index (0.0.3)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-redirect-from (0.11.0)
|
||||
jekyll (>= 2.0)
|
||||
jekyll-relative-links (0.2.1)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sass-converter (1.3.0)
|
||||
sass (~> 3.2)
|
||||
jekyll-seo-tag (2.1.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sitemap (0.12.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-swiss (0.4.0)
|
||||
jekyll-theme-architect (0.0.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-cayman (0.0.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-dinky (0.0.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-hacker (0.0.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-leap-day (0.0.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-merlot (0.0.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-midnight (0.0.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-minimal (0.0.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-modernist (0.0.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-primer (0.1.5)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-slate (0.0.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-tactile (0.0.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-time-machine (0.0.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-titles-from-headings (0.1.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-seo-tag (2.0.0)
|
||||
jekyll (~> 3.1)
|
||||
jekyll-sitemap (0.10.0)
|
||||
jekyll-watch (1.5.0)
|
||||
listen (~> 3.0, < 3.1)
|
||||
jemoji (0.7.0)
|
||||
@@ -155,7 +60,7 @@ GEM
|
||||
gemoji (~> 2.0)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (>= 3.0)
|
||||
json (1.8.6)
|
||||
json (1.8.3)
|
||||
kramdown (1.11.1)
|
||||
liquid (3.0.6)
|
||||
listen (3.0.6)
|
||||
@@ -163,41 +68,52 @@ GEM
|
||||
rb-inotify (>= 0.9.7)
|
||||
mercenary (0.3.6)
|
||||
mini_portile2 (2.1.0)
|
||||
minima (2.0.0)
|
||||
minitest (5.10.1)
|
||||
minima (1.1.0)
|
||||
minitest (5.9.0)
|
||||
multipart-post (2.0.0)
|
||||
net-dns (0.8.0)
|
||||
nokogiri (1.6.8.1)
|
||||
nokogiri (1.6.8)
|
||||
mini_portile2 (~> 2.1.0)
|
||||
octokit (4.6.2)
|
||||
sawyer (~> 0.8.0, >= 0.5.3)
|
||||
pkg-config (~> 1.1.7)
|
||||
octokit (4.3.0)
|
||||
sawyer (~> 0.7.0, >= 0.5.3)
|
||||
pathutil (0.14.0)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (2.0.4)
|
||||
rb-fsevent (0.9.8)
|
||||
pkg-config (1.1.7)
|
||||
rb-fsevent (0.9.7)
|
||||
rb-inotify (0.9.7)
|
||||
ffi (>= 0.5.0)
|
||||
rouge (1.11.1)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.4.23)
|
||||
sawyer (0.8.1)
|
||||
addressable (>= 2.3.5, < 2.6)
|
||||
faraday (~> 0.8, < 1.0)
|
||||
terminal-table (1.7.3)
|
||||
unicode-display_width (~> 1.1.1)
|
||||
sass (3.4.22)
|
||||
sawyer (0.7.0)
|
||||
addressable (>= 2.3.5, < 2.5)
|
||||
faraday (~> 0.8, < 0.10)
|
||||
thread_safe (0.3.5)
|
||||
typhoeus (0.8.0)
|
||||
ethon (>= 0.8.0)
|
||||
tzinfo (1.2.2)
|
||||
thread_safe (~> 0.1)
|
||||
unicode-display_width (1.1.2)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
github-pages
|
||||
jekyll-include-cache (~> 0.1)
|
||||
activesupport (= 4.2.7)
|
||||
jekyll (= 3.2.1)
|
||||
jekyll-coffeescript (= 1.0.1)
|
||||
jekyll-feed (= 0.5.1)
|
||||
jekyll-gist (= 1.4.0)
|
||||
jekyll-github-metadata (= 2.0.2)
|
||||
jekyll-mentions (= 1.2.0)
|
||||
jekyll-paginate (= 1.1.0)
|
||||
jekyll-redirect-from (= 0.11.0)
|
||||
jekyll-sass-converter (= 1.3.0)
|
||||
jekyll-seo-tag (= 2.0.0)
|
||||
jekyll-sitemap (= 0.10.0)
|
||||
jemoji (= 0.7.0)
|
||||
kramdown (= 1.11.1)
|
||||
liquid (= 3.0.6)
|
||||
listen (= 3.0.6)
|
||||
minima (= 1.1.0)
|
||||
rouge (= 1.11.1)
|
||||
|
||||
BUNDLED WITH
|
||||
1.15.2
|
||||
1.11.2
|
||||
|
||||
@@ -378,7 +378,7 @@ Section 8 -- Interpretation.
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the "Licensor." The text of the Creative Commons
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.PHONY: all build build-preview help serve
|
||||
.PONY: all build build-preview help serve
|
||||
|
||||
help: ## Show this help.
|
||||
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
||||
@@ -6,13 +6,10 @@ help: ## Show this help.
|
||||
all: build ## Build site with production settings and put deliverables in _site.
|
||||
|
||||
build: ## Build site with production settings and put deliverables in _site.
|
||||
bundle exec jekyll build
|
||||
jekyll build
|
||||
|
||||
build-preview: ## Build site with drafts and future posts enabled.
|
||||
bundle exec jekyll build --drafts --future
|
||||
jekyll build --drafts --future
|
||||
|
||||
serve: ## Boot the development server.
|
||||
bundle exec jekyll serve
|
||||
|
||||
stage: ## Run the Jekyll staging container.
|
||||
docker run -ti --rm -v "${PWD}":/k8sdocs -p 4000:4000 gcr.io/google-samples/k8sdocs:1.1
|
||||
jekyll serve
|
||||
|
||||
@@ -1,21 +1,7 @@
|
||||
# Reviewers can /lgtm /approve but not sufficient for auto-merge without an
|
||||
# approver
|
||||
reviewers:
|
||||
- rajakavitha1
|
||||
- stewart-yu
|
||||
- xiangpengzhao
|
||||
- zhangxiaoyu-zidif
|
||||
|
||||
# Approvers have all the ability of reviewers but their /approve makes
|
||||
# auto-merge happen if a /lgtm exists, or vice versa, or they can do both
|
||||
# No need for approvers to also be listed as reviewers
|
||||
approvers:
|
||||
- bradamant3
|
||||
- bradtopol
|
||||
- chenopis
|
||||
- kbarnard10
|
||||
- mistyhacks
|
||||
- steveperry-53
|
||||
- tengqm
|
||||
- zacharysarah
|
||||
- zparnold
|
||||
assignees:
|
||||
- lavalamp
|
||||
- smarterclayton
|
||||
- janetkuo
|
||||
- pwittrock
|
||||
- kelseyhightower
|
||||
- jaredbhatti
|
||||
|
||||
@@ -1,20 +1,182 @@
|
||||
## Instructions for Contributing to the Kubernetes Documentation
|
||||
## Instructions for Contributing to the Docs/Website
|
||||
|
||||
Welcome! We are very pleased you want to contribute to the Kubernetes documentation.
|
||||
Welcome! We are very pleased you want to contribute to the documentation and/or website for Kubernetes.
|
||||
|
||||
You can click the **Fork** button in the upper-right area of the screen to create a copy of this repository in your GitHub account called a *fork*. Make any changes you want in your fork, and when you are ready to send those changes to us, go to your fork and create a new pull request to let us know about it.
|
||||
You can click the "Fork" button in the upper-right area of the screen to create a copy of our site on your GitHub account called a "fork." Make any changes you want in your fork, and when you are ready to send those changes to us, go to the index page for your fork and click "New Pull Request" to let us know about it.
|
||||
|
||||
For more information about contributing to the Kubernetes documentation, see:
|
||||
|
||||
* [Contributing to the Kubernetes Documentation](http://kubernetes.io/editdocs/)
|
||||
* [Creating a Documentation Pull Request](http://kubernetes.io/docs/home/contribute/create-pull-request/)
|
||||
* [Writing a New Topic](http://kubernetes.io/docs/home/contribute/write-new-topic/)
|
||||
* [Review Issues](http://kubernetes.io/docs/home/contribute/review-issues/)
|
||||
* [Staging Your Documentation Changes](http://kubernetes.io/docs/home/contribute/stage-documentation-changes/)
|
||||
* [Using Page Templates](http://kubernetes.io/docs/home/contribute/page-templates/)
|
||||
* [Documentation Style Guide](http://kubernetes.io/docs/home/contribute/style-guide/)
|
||||
* [Creating a Documentation Pull Request](http://kubernetes.io/docs/contribute/create-pull-request/)
|
||||
* [Writing a New Topic](http://kubernetes.io/docs/contribute/write-new-topic/)
|
||||
* [Staging Your Documentation Changes](http://kubernetes.io/docs/contribute/stage-documentation-changes/)
|
||||
* [Using Page Templates](http://kubernetes.io/docs/contribute/page-templates/)
|
||||
|
||||
## Automatic Staging for Pull Requests
|
||||
|
||||
When you create a pull request (either against master or the upcoming release), your changes are staged in a custom subdomain on Netlify so that you can see your changes in rendered form before the PR is merged. You can use this to verify that everything is correct before the PR gets merged. To view your changes:
|
||||
|
||||
- Scroll down to the PR's list of Automated Checks
|
||||
- Click "Show All Checks"
|
||||
- Look for "deploy/netlify"; you'll see "Deploy Preview Ready!" if staging was successful
|
||||
- Click "Details" to bring up the staged site and navigate to your changes
|
||||
|
||||
## Branch structure and staging
|
||||
|
||||
The current version of the website is served out of the `master` branch. To make changes to the live docs, such as bug fixes, broken links, typos, etc, **target your pull request to the master branch**
|
||||
|
||||
The `release-1.x` branch stores changes for **upcoming releases of Kubernetes**. For example, the `release-1.5` branch has changes for the 1.5 release. These changes target branches (and *not* master) to avoid publishing documentation updates prior to the release for which they're relevant. If you have a change for an upcoming release of Kubernetes, **target your pull request to the appropriate release branch**.
|
||||
|
||||
The staging site for the next upcoming Kubernetes release is here: [http://kubernetes-io-vnext-staging.netlify.com/](http://kubernetes-io-vnext-staging.netlify.com/). The staging site reflects the current state of what's been merged in the release branch, or in other words, what the docs will look like for the next upcoming release. It's automatically updated as new PRs get merged.
|
||||
|
||||
## Staging the site locally (using Docker)
|
||||
|
||||
Don't like installing stuff? Download and run a local staging server with a single `docker run` command.
|
||||
|
||||
git clone https://github.com/kubernetes/kubernetes.github.io.git
|
||||
cd kubernetes.github.io
|
||||
docker run -ti --rm -v "$PWD":/k8sdocs -p 4000:4000 gcr.io/google-samples/k8sdocs:1.0
|
||||
|
||||
Then visit [http://localhost:4000](http://localhost:4000) to see our site. Any changes you make on your local machine will be automatically staged.
|
||||
|
||||
If you're interested you can view [the Dockerfile for this image](https://github.com/kubernetes/kubernetes.github.io/blob/master/staging-container/Dockerfile).
|
||||
|
||||
## Staging the site locally (from scratch setup)
|
||||
|
||||
The below commands to setup your environment for running GitHub pages locally. Then, any edits you make will be viewable
|
||||
on a lightweight webserver that runs on your local machine.
|
||||
|
||||
This will typically be the fastest way (by far) to iterate on docs changes and see them staged, once you get this set up, but it does involve several install steps that take awhile to complete, and makes system-wide modifications.
|
||||
|
||||
Install Ruby 2.2 or higher. If you're on Linux, run these commands:
|
||||
|
||||
apt-get install software-properties-common
|
||||
apt-add-repository ppa:brightbox/ruby-ng
|
||||
apt-get install ruby2.2
|
||||
apt-get install ruby2.2-dev
|
||||
|
||||
* If you're on a Mac, follow [these instructions](https://gorails.com/setup/osx/).
|
||||
* If you're on a Windows machine you can use the [Ruby Installer](http://rubyinstaller.org/downloads/). During the installation make sure to check the option for *Add Ruby executables to your PATH*.
|
||||
|
||||
The remainder of the steps should work the same across operating systems.
|
||||
|
||||
To confirm you've installed Ruby correctly, at the command prompt run `gem --version` and you should get a response with your version number. Likewise you can confirm you have Git installed properly by running `git --version`, which will respond with your version of Git.
|
||||
|
||||
Install the GitHub Pages package, which includes Jekyll:
|
||||
|
||||
gem install github-pages
|
||||
|
||||
Clone our site:
|
||||
|
||||
git clone https://github.com/kubernetes/kubernetes.github.io.git
|
||||
|
||||
Make any changes you want. Then, to see your changes locally:
|
||||
|
||||
cd kubernetes.github.io
|
||||
jekyll serve
|
||||
|
||||
Your copy of the site will then be viewable at: [http://localhost:4000](http://localhost:4000)
|
||||
(or wherever Jekyll tells you).
|
||||
|
||||
## GitHub help
|
||||
|
||||
If you're a bit rusty with git/GitHub, you might want to read
|
||||
[this](http://readwrite.com/2013/10/02/github-for-beginners-part-2) for a refresher.
|
||||
|
||||
## Common Tasks
|
||||
|
||||
### Edit Page Titles or Change the Left Navigation
|
||||
|
||||
Edit the yaml files in `/_data/` for the Guides, Reference, Samples, or Support areas.
|
||||
|
||||
You may have to exit and `jekyll clean` before restarting the `jekyll serve` to
|
||||
get changes to files in `/_data/` to show up.
|
||||
|
||||
### Add Images
|
||||
|
||||
Put the new image in `/images/docs/` if it's for the documentation, and just `/images/` if it's for the website.
|
||||
|
||||
**For diagrams, we greatly prefer SVG files!**
|
||||
|
||||
### Include code from another file
|
||||
|
||||
To include a file that is hosted on this GitHub repo, insert this code:
|
||||
|
||||
<pre>{% include code.html language="<LEXERVALUE>" file="<RELATIVEPATH>" ghlink="<PATHFROMROOT>" %}</pre>
|
||||
|
||||
* `LEXERVALUE`: The language in which the file was written; must be [a value supported by Rouge](https://github.com/jneen/rouge/wiki/list-of-supported-languages-and-lexers).
|
||||
* `RELATIVEPATH`: The path to the file you're including, relative to the current file.
|
||||
* `PATHFROMROOT`: The path to the file relative to root, e.g. `/docs/admin/foo.yaml`
|
||||
|
||||
To include a file that is hosted in the external, main Kubernetes repo, make sure it's added to [/update-imported-docs.sh](https://github.com/kubernetes/kubernetes.github.io/blob/master/update-imported-docs.sh), and run it so that the file gets downloaded, then enter:
|
||||
|
||||
<pre>{% include code.html language="<LEXERVALUE>" file="<RELATIVEPATH>" k8slink="<PATHFROMK8SROOT>" %}</pre>
|
||||
|
||||
* `PATHFROMK8SROOT`: The path to the file relative to the root of [the Kubernetes repo](https://github.com/kubernetes/kubernetes/tree/release-1.2), e.g. `/examples/rbd/foo.yaml`
|
||||
|
||||
## Using tabs for multi-language examples
|
||||
|
||||
By specifying some inline CSV in a varable called `tabspec`, you can include a file
|
||||
called `tabs.html` that generates tabs showing code examples in multiple langauges.
|
||||
|
||||
<pre>{% capture tabspec %}servicesample
|
||||
JSON,json,service-sample.json,/docs/user-guide/services/service-sample.json
|
||||
YAML,yaml,service-sample.yaml,/docs/user-guide/services/service-sample.yaml{% endcapture %}
|
||||
{% include tabs.html %}</pre>
|
||||
|
||||
In English, this would read: "Create a set of tabs with the alias `servicesample`,
|
||||
and have tabs visually labeled "JSON" and "YAML" that use `json` and `yaml` Rouge syntax highlighting, which display the contents of
|
||||
`service-sample.{extension}` on the page, and link to the file in GitHub at (full path)."
|
||||
|
||||
Example file: [Pods: Multi-Container](http://kubernetes.io/docs/user-guide/pods/multi-container/).
|
||||
|
||||
## Use a global variable
|
||||
|
||||
The `/_config.yml` file defines some useful variables you can use when editing docs.
|
||||
|
||||
* `page.githubbranch`: The name of the GitHub branch on the Kubernetes repo that is associated with this branch of the docs. e.g. `release-1.2`
|
||||
* `page.version` The version of Kubernetes associated with this branch of the docs. e.g. `v1.2`
|
||||
* `page.docsbranch` The name of the GitHub branch on the Docs/Website repo that you are currently using. e.g. `release-1.1` or `master`
|
||||
|
||||
This keeps the docs you're editing aligned with the Kubernetes version you're talking about. For example, if you define a link like so, you'll never have to worry about it going stale in future doc branches:
|
||||
|
||||
<pre>View the README [here](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/README.md).</pre>
|
||||
|
||||
That, of course, will send users to:
|
||||
|
||||
[http://releases.k8s.io/release-1.2/cluster/addons/README.md](http://releases.k8s.io/release-1.2/cluster/addons/README.md)
|
||||
|
||||
(Or whatever Kubernetes release that docs branch is associated with.)
|
||||
|
||||
## Config yaml guidelines
|
||||
|
||||
Guidelines for config yamls that are included in the site docs. These
|
||||
are the yaml or json files that contain Kubernetes object
|
||||
configuration to be used with `kubectl create -f` Config yamls should
|
||||
be:
|
||||
|
||||
* Separate deployable files, not embedded in the document, unless very
|
||||
small variations of a full config.
|
||||
* Included in the doc with the include code
|
||||
[above.](#include-code-from-another-file)
|
||||
* In the same directory as the doc that they are being used in
|
||||
* If you are re-using a yaml from another doc, that is OK, just
|
||||
leave it there, don't move it up to a higher level directory.
|
||||
* Tested in
|
||||
[test/examples_test.go](https://github.com/kubernetes/kubernetes.github.io/blob/master/test/examples_test.go)
|
||||
* Follows
|
||||
[best practices.](http://kubernetes.io/docs/user-guide/config-best-practices/)
|
||||
|
||||
Don't assume the reader has this repository checked out, use `kubectl
|
||||
create -f https://github...` in example commands. For Docker images
|
||||
used in config yamls, try to use an image from an existing Kubernetes
|
||||
example. If creating an image for a doc, follow the
|
||||
[example guidelines](https://github.com/kubernetes/kubernetes/blob/master/examples/guidelines.md#throughout)
|
||||
section on "Docker images" from the Kubernetes repository.
|
||||
|
||||
## Partners
|
||||
Kubernetes partners refers to the companies who contribute to the Kubernetes core codebase, extend their platform to support Kubernetes or provide managed services to users centered around the Kubernetes platform. Partners can get their services and offerings added to the [partner page](https://k8s.io/partners) by completing and submitting the [partner request form](https://goo.gl/qcSnZF). Once the information and assets are verified, the partner product/services will be listed in the partner page. This would typically take 7-10 days.
|
||||
|
||||
## Thank you!
|
||||
|
||||
Kubernetes thrives on community participation, and we really appreciate your
|
||||
Kubernetes thrives on community participation and we really appreciate your
|
||||
contributions to our site and our documentation!
|
||||
|
||||
+24
-51
@@ -1,13 +1,11 @@
|
||||
name: Kubernetes
|
||||
title: Kubernetes
|
||||
url: https://kubernetes.io
|
||||
description: Production-Grade Container Orchestration
|
||||
markdown: kramdown
|
||||
kramdown:
|
||||
input: GFM
|
||||
html_to_native: true
|
||||
hard_wrap: false
|
||||
syntax_highlighter: rouge
|
||||
baseurl: /
|
||||
incremental: true
|
||||
|
||||
safe: false
|
||||
@@ -18,36 +16,35 @@ defaults:
|
||||
scope:
|
||||
path: ""
|
||||
values:
|
||||
fullversion: "v1.7.3"
|
||||
version: "v1.7"
|
||||
githubbranch: "v1.7.3"
|
||||
docsbranch: "release-1.7"
|
||||
version: "v1.4"
|
||||
githubbranch: "v1.4.12"
|
||||
docsbranch: "release-1.4"
|
||||
versions:
|
||||
- fullversion: "v1.11.0"
|
||||
version: "v1.11"
|
||||
githubbranch: "v1.11.0"
|
||||
docsbranch: "release-1.11"
|
||||
url: https://kubernetes.io/docs/
|
||||
- fullversion: "v1.10.0"
|
||||
version: "v1.10"
|
||||
githubbranch: "v1.10.0"
|
||||
docsbranch: "release-1.10"
|
||||
url: https://v1-10.docs.kubernetes.io/
|
||||
- fullversion: "v1.9.0"
|
||||
version: "v1.9"
|
||||
githubbranch: "v1.9.0"
|
||||
docsbranch: "release-1.9"
|
||||
url: https://v1-9.docs.kubernetes.io/docs/home/
|
||||
- fullversion: "v1.8.4"
|
||||
- fullversion: "v1.8.0"
|
||||
version: "v1.8"
|
||||
githubbranch: "v1.8.4"
|
||||
githubbranch: "v1.8.0"
|
||||
docsbranch: "release-1.8"
|
||||
url: https://v1-8.docs.kubernetes.io/docs/home/
|
||||
url: https://kubernetes.io/docs/home/
|
||||
- fullversion: "v1.7.3"
|
||||
version: "v1.7"
|
||||
githubbranch: "v1.7.3"
|
||||
docsbranch: "release-1.7"
|
||||
url: https://v1-7.docs.kubernetes.io/docs/home/
|
||||
- fullversion: "v1.6.8"
|
||||
version: "v1.6"
|
||||
githubbranch: "v1.6.8"
|
||||
docsbranch: "release-1.6"
|
||||
url: https://v1-6.docs.kubernetes.io/docs/home/
|
||||
- fullversion: "v1.5.7"
|
||||
version: "v1.5"
|
||||
githubbranch: "v1.5.7"
|
||||
docsbranch: "release-1.5"
|
||||
url: https://v1-5.docs.kubernetes.io/docs/
|
||||
- fullversion: "v1.4.12"
|
||||
version: "v1.4"
|
||||
githubbranch: "v1.4.12"
|
||||
docsbranch: "release-1.4"
|
||||
url: https://v1-4.docs.kubernetes.io/docs/
|
||||
deprecated: true
|
||||
currentUrl: https://kubernetes.io/docs/home/
|
||||
nextUrl: http://kubernetes-io-vnext-staging.netlify.com/
|
||||
@@ -61,30 +58,6 @@ defaults:
|
||||
permalink: pretty
|
||||
|
||||
gems:
|
||||
- jekyll-feed
|
||||
- jekyll-sitemap
|
||||
- jekyll-seo-tag
|
||||
- jekyll-include-cache
|
||||
# disabled gems
|
||||
# - jekyll-redirect-from
|
||||
- jekyll-redirect-from
|
||||
|
||||
include: [_redirects,_headers]
|
||||
|
||||
# SEO
|
||||
logo: /images/favicon.png
|
||||
twitter:
|
||||
username: kubernetesio
|
||||
|
||||
# empty array for tabs
|
||||
emptyArray: []
|
||||
|
||||
# Tables of contents, stored in the _data folder, that control the sidebar nav
|
||||
tocs:
|
||||
- docs-home
|
||||
- setup
|
||||
- tasks
|
||||
- tutorials
|
||||
- concepts
|
||||
- reference
|
||||
- samples
|
||||
- search
|
||||
include: [_headers]
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
- Fundamental
|
||||
- API Object
|
||||
- Metadata
|
||||
- Configuration
|
||||
- Security
|
||||
- Networking
|
||||
- Storage
|
||||
- Operation
|
||||
- Workload
|
||||
- Component
|
||||
- API
|
||||
- Extension
|
||||
+5
-97
@@ -1,101 +1,9 @@
|
||||
bigheader: "Concepts"
|
||||
abstract: "Detailed explanations of Kubernetes system concepts and abstractions."
|
||||
toc:
|
||||
- docs/concepts/index.md
|
||||
|
||||
- title: Overview
|
||||
- title: Concepts
|
||||
path: /docs/concepts/
|
||||
- title: Object Metadata
|
||||
section:
|
||||
- docs/concepts/overview/what-is-kubernetes.md
|
||||
- docs/concepts/overview/components.md
|
||||
- title: Working with Kubernetes Objects
|
||||
section:
|
||||
- docs/concepts/overview/working-with-objects/kubernetes-objects.md
|
||||
- docs/concepts/overview/working-with-objects/names.md
|
||||
- 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: Kubernetes Architecture
|
||||
section:
|
||||
- docs/concepts/architecture/nodes.md
|
||||
- docs/concepts/architecture/master-node-communication.md
|
||||
|
||||
- title: Extending the Kubernetes API
|
||||
section:
|
||||
- docs/concepts/api-extension/custom-resources.md
|
||||
- docs/concepts/api-extension/apiserver-aggregation.md
|
||||
|
||||
- title: Containers
|
||||
section:
|
||||
- docs/concepts/containers/images.md
|
||||
- docs/concepts/containers/container-environment-variables.md
|
||||
- docs/concepts/containers/container-lifecycle-hooks.md
|
||||
|
||||
- title: Workloads
|
||||
section:
|
||||
- title: Pods
|
||||
section:
|
||||
- docs/concepts/workloads/pods/pod-overview.md
|
||||
- docs/concepts/workloads/pods/pod.md
|
||||
- docs/concepts/workloads/pods/pod-lifecycle.md
|
||||
- docs/concepts/workloads/pods/init-containers.md
|
||||
- docs/concepts/workloads/pods/disruptions.md
|
||||
- title: Controllers
|
||||
section:
|
||||
- docs/concepts/workloads/controllers/replicaset.md
|
||||
- docs/concepts/workloads/controllers/replicationcontroller.md
|
||||
- docs/concepts/workloads/controllers/deployment.md
|
||||
- docs/concepts/workloads/controllers/statefulset.md
|
||||
- docs/concepts/workloads/controllers/petset.md
|
||||
- docs/concepts/workloads/controllers/daemonset.md
|
||||
- docs/concepts/workloads/controllers/garbage-collection.md
|
||||
- docs/concepts/workloads/controllers/jobs-run-to-completion.md
|
||||
- docs/concepts/workloads/controllers/cron-jobs.md
|
||||
|
||||
- title: Configuration
|
||||
section:
|
||||
- docs/concepts/configuration/overview.md
|
||||
- docs/concepts/configuration/manage-compute-resources-container.md
|
||||
- docs/concepts/configuration/assign-pod-node.md
|
||||
- docs/concepts/configuration/taint-and-toleration.md
|
||||
- docs/concepts/configuration/secret.md
|
||||
- docs/concepts/configuration/organize-cluster-access-kubeconfig.md
|
||||
|
||||
- title: Services, Load Balancing, and Networking
|
||||
section:
|
||||
- docs/concepts/services-networking/service.md
|
||||
- docs/concepts/services-networking/dns-pod-service.md
|
||||
- docs/concepts/services-networking/connect-applications-service.md
|
||||
- docs/concepts/services-networking/ingress.md
|
||||
- docs/concepts/services-networking/network-policies.md
|
||||
- docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases.md
|
||||
|
||||
- title: Storage
|
||||
section:
|
||||
- docs/concepts/storage/volumes.md
|
||||
- docs/concepts/storage/persistent-volumes.md
|
||||
- title: Dynamic Provisioning
|
||||
path: http://blog.kubernetes.io/2016/10/dynamic-provisioning-and-storage-in-kubernetes.html
|
||||
|
||||
- title: Cluster Administration
|
||||
section:
|
||||
- docs/concepts/cluster-administration/cluster-administration-overview.md
|
||||
- docs/concepts/cluster-administration/cloud-providers.md
|
||||
- docs/concepts/cluster-administration/manage-deployment.md
|
||||
- docs/concepts/cluster-administration/networking.md
|
||||
- docs/concepts/cluster-administration/network-plugins.md
|
||||
- docs/concepts/cluster-administration/logging.md
|
||||
- docs/concepts/cluster-administration/kubelet-garbage-collection.md
|
||||
- docs/concepts/cluster-administration/federation.md
|
||||
- docs/concepts/cluster-administration/sysctl-cluster.md
|
||||
- docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig.md
|
||||
- docs/concepts/cluster-administration/master-node-communication.md
|
||||
- docs/concepts/cluster-administration/proxies.md
|
||||
- docs/concepts/cluster-administration/controller-metrics.md
|
||||
- title: Policies
|
||||
section:
|
||||
- docs/concepts/policy/resource-quotas.md
|
||||
- docs/concepts/policy/pod-security-policy.md
|
||||
|
||||
|
||||
- title: Annotations
|
||||
path: /docs/concepts/object-metadata/annotations/
|
||||
|
||||
+3
-21
@@ -1,23 +1,5 @@
|
||||
bigheader: "Documentation Home"
|
||||
bigheader: "Kubernetes Documentation"
|
||||
abstract: "Documentation for using and learning about Kubernetes."
|
||||
toc:
|
||||
- docs/home/index.md
|
||||
|
||||
- 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: Contributing to the Kubernetes Docs
|
||||
section:
|
||||
- editdocs.md
|
||||
- docs/home/contribute/create-pull-request.md
|
||||
- docs/home/contribute/write-new-topic.md
|
||||
- docs/home/contribute/stage-documentation-changes.md
|
||||
- docs/home/contribute/page-templates.md
|
||||
- docs/home/contribute/review-issues.md
|
||||
- docs/home/contribute/style-guide.md
|
||||
- title: Kubernetes Documentation
|
||||
path: /docs/
|
||||
|
||||
+2
-2
@@ -1,10 +1,10 @@
|
||||
tocs:
|
||||
- docs-home
|
||||
- guides
|
||||
- setup
|
||||
- tasks
|
||||
- tutorials
|
||||
- tasks
|
||||
- concepts
|
||||
- reference
|
||||
- tools
|
||||
- samples
|
||||
- support
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
id: _example
|
||||
name: Example K8s Term
|
||||
formerly:
|
||||
- Slang K8s Term
|
||||
- Misnomer
|
||||
- Formerly Known as Prince
|
||||
related:
|
||||
- Less Fancy K8s Term
|
||||
- Tangential Term
|
||||
- Commonly Used With
|
||||
tags:
|
||||
- Some Tag
|
||||
short-description: |
|
||||
Required. One or two lines that provide a minimum definition. Do not repeat the term. Write about the plural of the term. Prefer fragments. Model after tooltips. End with a period.
|
||||
long-description: |
|
||||
Optional. Longer additional text to appear after (in conjunction with) short description. Provide where the short description is not sufficient as the intro paragraph to a topic. Write complete but concise sentences.
|
||||
**See /_includes/templates/glossary/README.md for the official style guide.**
|
||||
@@ -1,18 +0,0 @@
|
||||
id: statefulset
|
||||
name: StatefulSet
|
||||
formerly:
|
||||
- PetSet
|
||||
related:
|
||||
- Deployment
|
||||
- Pod
|
||||
tags:
|
||||
- Storage
|
||||
- Workload
|
||||
- API Object
|
||||
short-description: |
|
||||
Manage the deployment and scaling of a set of Pods, *and provide guarantees about ordering*. They do so by maintaining a *unique*, sticky identity for each of their Pods.
|
||||
|
||||
long-description: |
|
||||
Like Deployments, StatefulSets manage Pods that are based on an identical container spec. However, although their specs are the same, the Pods in a StatefulSet are not interchangeable. Each Pod has a persistent identifier that it maintains across any rescheduling.
|
||||
|
||||
StatefulSets also operate according to the Controller pattern. You define your desired state in a StatefulSet *object*, and the StatefulSet *controller* makes any necessary updates to the get there from the current state.
|
||||
@@ -0,0 +1,304 @@
|
||||
bigheader: "Guides"
|
||||
abstract: "How to get started, and accomplish tasks, using Kubernetes."
|
||||
toc:
|
||||
- title: Guides
|
||||
path: /docs/user-guide/
|
||||
|
||||
- title: Getting Started
|
||||
section:
|
||||
- title: What is Kubernetes?
|
||||
path: /docs/whatisk8s/
|
||||
- title: Installing Kubernetes on Linux with kubeadm
|
||||
path: /docs/getting-started-guides/kubeadm/
|
||||
- title: Installing Kubernetes on AWS with kops
|
||||
path: /docs/getting-started-guides/kops/
|
||||
- title: Hello World on Google Container Engine
|
||||
path: /docs/hellonode/
|
||||
- title: Installing kubectl
|
||||
path: /docs/getting-started-guides/kubectl/
|
||||
- title: Downloading or Building Kubernetes
|
||||
path: /docs/getting-started-guides/binary_release/
|
||||
- title: Online Training Course
|
||||
path: https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615
|
||||
|
||||
- title: Accessing the Cluster
|
||||
section:
|
||||
- title: Installing and Setting up kubectl
|
||||
path: /docs/user-guide/prereqs/
|
||||
- title: Accessing Clusters
|
||||
path: /docs/user-guide/accessing-the-cluster/
|
||||
- title: Sharing Cluster Access with kubeconfig
|
||||
path: /docs/user-guide/sharing-clusters/
|
||||
- title: Authenticating Across Clusters with kubeconfig
|
||||
path: /docs/user-guide/kubeconfig-file/
|
||||
|
||||
- title: User Guide
|
||||
path: /docs/user-guide/
|
||||
|
||||
- title: Web UI (Dashboard)
|
||||
path: /docs/user-guide/ui/
|
||||
|
||||
- title: Workload Deployment and Management
|
||||
section:
|
||||
- title: Launching, Exposing, and Killing Applications
|
||||
path: /docs/user-guide/quick-start/
|
||||
- title: Deploying Applications
|
||||
path: /docs/user-guide/deploying-applications/
|
||||
- title: Managing Resources
|
||||
path: /docs/user-guide/managing-deployments/
|
||||
- title: Replication Controller Operations
|
||||
path: /docs/user-guide/replication-controller/operations/
|
||||
- title: Resizing a Replication Controller
|
||||
path: /docs/user-guide/resizing-a-replication-controller/
|
||||
- title: Rolling Updates
|
||||
path: /docs/user-guide/rolling-updates/
|
||||
- title: Rolling Update Demo
|
||||
path: /docs/user-guide/update-demo/
|
||||
- title: Secrets Walkthrough
|
||||
path: /docs/user-guide/secrets/walkthrough/
|
||||
- title: Using ConfigMap
|
||||
path: /docs/user-guide/configmap/
|
||||
- title: Horizontal Pod Autoscaling
|
||||
path: /docs/user-guide/horizontal-pod-autoscaling/walkthrough/
|
||||
- title: Best Practices for Configuration
|
||||
path: /docs/user-guide/config-best-practices/
|
||||
- title: Using kubectl to Manage Resources
|
||||
path: /docs/user-guide/working-with-resources/
|
||||
- title: Garbage Collection (Beta)
|
||||
path: /docs/user-guide/garbage-collection/
|
||||
- title: Using NetworkPolicy
|
||||
section:
|
||||
- title: Example Walkthrough
|
||||
path: /docs/getting-started-guides/network-policy/walkthrough/
|
||||
- title: Using Calico for NetworkPolicy
|
||||
path: /docs/getting-started-guides/network-policy/calico/
|
||||
- title: Using Romana for NetworkPolicy
|
||||
path: /docs/getting-started-guides/network-policy/romana/
|
||||
|
||||
- title: Batch Jobs
|
||||
section:
|
||||
- title: Jobs
|
||||
path: /docs/user-guide/jobs/
|
||||
- title: Parallel Processing using Expansions
|
||||
path: /docs/user-guide/jobs/expansions/
|
||||
- title: Coarse Parallel Processing using a Work Queue
|
||||
path: /docs/user-guide/jobs/work-queue-1/
|
||||
- title: Fine Parallel Processing using a Work Queue
|
||||
path: /docs/user-guide/jobs/work-queue-2/
|
||||
- title: Cron Jobs
|
||||
path: /docs/user-guide/cron-jobs/
|
||||
|
||||
- title: Service Discovery and Load Balancing
|
||||
section:
|
||||
- title: Connecting Applications with Services
|
||||
path: /docs/user-guide/connecting-applications/
|
||||
- title: Service Operations
|
||||
path: /docs/user-guide/services/operations/
|
||||
- title: Creating an External Load Balancer
|
||||
path: /docs/user-guide/load-balancer/
|
||||
- title: Configuring Your Cloud Provider's Firewalls
|
||||
path: /docs/user-guide/services-firewalls/
|
||||
- title: Cross-cluster Service Discovery using Federated Services
|
||||
path: /docs/user-guide/federation/federated-services/
|
||||
|
||||
- title: Containers and Pods
|
||||
section:
|
||||
- title: Running Your First Containers
|
||||
path: /docs/user-guide/simple-nginx/
|
||||
- title: Creating Single-Container Pods
|
||||
path: /docs/user-guide/pods/single-container/
|
||||
- title: Creating Multi-Container Pods
|
||||
path: /docs/user-guide/pods/multi-container/
|
||||
- title: Configuring Containers
|
||||
path: /docs/user-guide/configuring-containers/
|
||||
- title: Working with Containers in Production
|
||||
path: /docs/user-guide/production-pods/
|
||||
- title: Commands and Capabilities
|
||||
path: /docs/user-guide/containers/
|
||||
- title: Using Environment Variables
|
||||
path: /docs/user-guide/environment-guide/
|
||||
- title: Managing Compute Resources
|
||||
path: /docs/user-guide/compute-resources/
|
||||
- title: The Lifecycle of a Pod
|
||||
path: /docs/user-guide/pod-states/
|
||||
- title: Checking Pod Health
|
||||
path: /docs/user-guide/liveness/
|
||||
- title: Container Lifecycle Hooks
|
||||
path: /docs/user-guide/container-environment/
|
||||
- title: Assigning Pods to Nodes
|
||||
path: /docs/user-guide/node-selection/
|
||||
- title: Using the Downward API to Convey Pod Properties
|
||||
path: /docs/user-guide/downward-api/
|
||||
- title: Downward API Volumes
|
||||
path: /docs/user-guide/downward-api/volume
|
||||
- title: Persistent Volumes Walkthrough
|
||||
path: /docs/user-guide/persistent-volumes/walkthrough/
|
||||
- title: Bootstrapping Pet Sets
|
||||
path: /docs/user-guide/petset/bootstrapping/
|
||||
|
||||
- title: Monitoring, Logging, and Debugging Containers
|
||||
section:
|
||||
- title: Resource Usage Monitoring
|
||||
path: /docs/user-guide/monitoring/
|
||||
- title: Logging
|
||||
path: /docs/getting-started-guides/logging/
|
||||
- title: Logging with Elasticsearch and Kibana
|
||||
path: /docs/getting-started-guides/logging-elasticsearch/
|
||||
- title: Running Commands in a Container with kubectl exec
|
||||
path: /docs/user-guide/getting-into-containers/
|
||||
- title: Connect with Proxies
|
||||
path: /docs/user-guide/connecting-to-applications-proxy/
|
||||
- title: Connect with Port Forwarding
|
||||
path: /docs/user-guide/connecting-to-applications-port-forward/
|
||||
- title: Using Explorer to Examine the Runtime Environment
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/explorer
|
||||
|
||||
- title: Creating a Cluster
|
||||
section:
|
||||
- title: Picking the Right Solution
|
||||
path: /docs/getting-started-guides/
|
||||
- title: Running Kubernetes on Your Local Machine
|
||||
section:
|
||||
- title: Running Kubernetes Locally via Minikube
|
||||
path: /docs/getting-started-guides/minikube/
|
||||
- title: Deprecated Alternatives
|
||||
path: /docs/getting-started-guides/alternatives/
|
||||
- title: Running Kubernetes on Turn-key Cloud Solutions
|
||||
section:
|
||||
- title: Running Kubernetes on Google Container Engine
|
||||
path: https://cloud.google.com/container-engine/docs/before-you-begin/
|
||||
- title: Running Kubernetes on Google Compute Engine
|
||||
path: /docs/getting-started-guides/gce/
|
||||
- title: Running Kubernetes on AWS EC2
|
||||
path: /docs/getting-started-guides/aws/
|
||||
- title: Running Kubernetes on Azure
|
||||
path: /docs/getting-started-guides/azure/
|
||||
- title: Running Kubernetes on Azure (Weave-based)
|
||||
path: /docs/getting-started-guides/coreos/azure/
|
||||
- title: Running Kubernetes on CenturyLink Cloud
|
||||
path: /docs/getting-started-guides/clc/
|
||||
- title: Running Kubernetes on IBM SoftLayer
|
||||
path: https://github.com/patrocinio/kubernetes-softlayer
|
||||
- title: Running Kubernetes on Custom Solutions
|
||||
section:
|
||||
- title: Creating a Custom Cluster from Scratch
|
||||
path: /docs/getting-started-guides/scratch/
|
||||
- title: Custom Cloud Solutions
|
||||
section:
|
||||
- title: CoreOS on AWS or GCE
|
||||
path: /docs/getting-started-guides/coreos/
|
||||
- title: Ubuntu on AWS or Joyent
|
||||
path: /docs/getting-started-guides/juju/
|
||||
- title: CoreOS on Rackspace
|
||||
path: /docs/getting-started-guides/rackspace/
|
||||
- title: On-Premise VMs
|
||||
section:
|
||||
- title: CoreOS on Vagrant
|
||||
path: /docs/getting-started-guides/coreos/
|
||||
- title: Cloudstack
|
||||
path: /docs/getting-started-guides/cloudstack/
|
||||
- title: VMware vSphere
|
||||
path: /docs/getting-started-guides/vsphere/
|
||||
- title: VMware Photon Controller
|
||||
path: /docs/getting-started-guides/photon-controller/
|
||||
- title: Juju
|
||||
path: /docs/getting-started-guides/juju/
|
||||
- title: DCOS
|
||||
path: /docs/getting-started-guides/dcos/
|
||||
- title: CoreOS on libvirt
|
||||
path: /docs/getting-started-guides/libvirt-coreos/
|
||||
- title: oVirt
|
||||
path: /docs/getting-started-guides/ovirt/
|
||||
- title: OpenStack Heat
|
||||
path: /docs/getting-started-guides/openstack-heat/
|
||||
- title: rkt
|
||||
section:
|
||||
- title: Running Kubernetes with rkt
|
||||
path: /docs/getting-started-guides/rkt/
|
||||
- title: Known Issues when Using rkt
|
||||
path: /docs/getting-started-guides/rkt/notes/
|
||||
- title: Kubernetes on Mesos
|
||||
path: /docs/getting-started-guides/mesos/
|
||||
- title: Kubernetes on Mesos on Docker
|
||||
path: /docs/getting-started-guides/mesos-docker/
|
||||
- title: Bare Metal
|
||||
section:
|
||||
- title: Offline
|
||||
path: /docs/getting-started-guides/coreos/bare_metal_offline/
|
||||
- title: Fedora via Ansible
|
||||
path: /docs/getting-started-guides/fedora/fedora_ansible_config/
|
||||
- title: Fedora (Single Node)
|
||||
path: /docs/getting-started-guides/fedora/fedora_manual_config/
|
||||
- title: Fedora (Multi Node)
|
||||
path: /docs/getting-started-guides/fedora/flannel_multi_node_cluster/
|
||||
- title: CentOS
|
||||
path: /docs/getting-started-guides/centos/centos_manual_config/
|
||||
- title: CoreOS
|
||||
path: /docs/getting-started-guides/coreos
|
||||
- title: Ubuntu
|
||||
path: /docs/getting-started-guides/ubuntu/
|
||||
- title: Validate Node Setup
|
||||
path: /docs/admin/node-conformance
|
||||
- title: Portable Multi-Node Cluster
|
||||
path: /docs/getting-started-guides/docker-multinode/
|
||||
- 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/
|
||||
|
||||
- title: Administering Clusters
|
||||
section:
|
||||
- title: Admin Guide
|
||||
path: /docs/admin/
|
||||
- title: Cluster Management Guide
|
||||
path: /docs/admin/cluster-management/
|
||||
- title: kubeadm reference
|
||||
path: /docs/admin/kubeadm/
|
||||
- title: Installing Addons
|
||||
path: /docs/admin/addons/
|
||||
- title: Sharing a Cluster with Namespaces
|
||||
path: /docs/admin/namespaces/
|
||||
- title: Namespaces Walkthrough
|
||||
path: /docs/admin/namespaces/walkthrough/
|
||||
- title: Setting Pod CPU and Memory Limits
|
||||
path: /docs/admin/limitrange/
|
||||
- title: Understanding Resource Quotas
|
||||
path: /docs/admin/resourcequota/
|
||||
- title: Applying Resource Quotas and Limits
|
||||
path: /docs/admin/resourcequota/walkthrough/
|
||||
- title: Kubernetes Components
|
||||
path: /docs/admin/cluster-components/
|
||||
- title: Configuring Kubernetes Use of etcd
|
||||
path: /docs/admin/etcd/
|
||||
- title: Federating Clusters
|
||||
path: /docs/admin/federation/
|
||||
- title: Using Multiple Clusters
|
||||
path: /docs/admin/multi-cluster/
|
||||
- title: Changing Cluster Size
|
||||
path: https://github.com/kubernetes/kubernetes/wiki/User-FAQ#how-do-i-change-the-size-of-my-cluster/
|
||||
- title: Configuring Multiple Schedulers
|
||||
path: /docs/admin/multiple-schedulers/
|
||||
- title: Networking in Kubernetes
|
||||
path: /docs/admin/networking/
|
||||
- title: Using DNS Pods and Services
|
||||
path: /docs/admin/dns/
|
||||
- title: Setting Up and Configuring DNS
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/cluster-dns
|
||||
- title: Master <-> Node Communication
|
||||
path: /docs/admin/master-node-communication/
|
||||
- title: Network Plugins
|
||||
path: /docs/admin/network-plugins/
|
||||
- title: Static Pods
|
||||
path: /docs/admin/static-pods/
|
||||
- title: Configuring kubelet Garbage Collection
|
||||
path: /docs/admin/garbage-collection/
|
||||
- title: Configuring Out Of Resource Handling
|
||||
path: /docs/admin/out-of-resource/
|
||||
- title: Configuring Kubernetes with Salt
|
||||
path: /docs/admin/salt/
|
||||
- title: Monitoring Node Health
|
||||
path: /docs/admin/node-problem/
|
||||
- title: AppArmor
|
||||
path: /docs/admin/apparmor/
|
||||
@@ -1,4 +1,6 @@
|
||||
overrides:
|
||||
- path: docs/api-reference
|
||||
- path: docs/user-guide/kubectl
|
||||
- path: docs/admin/federation-apiserver.md
|
||||
- path: docs/admin/federation-controller-manager.md
|
||||
- path: docs/admin/kube-apiserver.md
|
||||
@@ -6,4 +8,12 @@ overrides:
|
||||
- path: docs/admin/kube-proxy.md
|
||||
- path: docs/admin/kube-scheduler.md
|
||||
- path: docs/admin/kubelet.md
|
||||
- changedpath: docs/api-reference/extensions/v1beta1/definitions.html _includes/v1.4/extensions-v1beta1-definitions.html
|
||||
- changedpath: docs/api-reference/extensions/v1beta1/operations.html _includes/v1.4/extensions-v1beta1-operations.html
|
||||
- changedpath: docs/api-reference/v1/definitions.html _includes/v1.4/v1-definitions.html
|
||||
- changedpath: docs/api-reference/v1/operations.html _includes/v1.4/v1-operations.html
|
||||
- copypath: k8s/federation/docs/api-reference/ docs/federation/
|
||||
- copypath: k8s/cluster/saltbase/salt/fluentd-gcp/fluentd-gcp.yaml docs/getting-started-guides/fluentd-gcp.yaml
|
||||
- copypath: k8s/examples/blog-logging/counter-pod.yaml docs/getting-started-guides/counter-pod.yaml
|
||||
- copypath: k8s/examples/blog-logging/counter-pod.yaml docs/user-guide/counter-pod.yaml
|
||||
|
||||
|
||||
+247
-79
@@ -1,106 +1,274 @@
|
||||
bigheader: "Reference Documentation"
|
||||
abstract: "Design docs, concept definitions, and references for APIs and CLIs."
|
||||
toc:
|
||||
- docs/reference/index.md
|
||||
- title: Reference Documentation
|
||||
path: /docs/reference/
|
||||
|
||||
- title: Using the API
|
||||
- title: Kubernetes API
|
||||
section:
|
||||
- docs/reference/api-overview.md
|
||||
- docs/reference/client-libraries.md
|
||||
- title: Kubernetes API Overview
|
||||
path: /docs/api/
|
||||
- title: Accessing the API
|
||||
section:
|
||||
- docs/admin/accessing-the-api.md
|
||||
- docs/admin/authentication.md
|
||||
- docs/admin/bootstrap-tokens.md
|
||||
- docs/admin/admission-controllers.md
|
||||
- docs/admin/extensible-admission-controllers.md
|
||||
- docs/admin/service-accounts-admin.md
|
||||
- title: Authorization
|
||||
section:
|
||||
- docs/admin/authorization/index.md
|
||||
- docs/admin/authorization/abac.md
|
||||
- docs/admin/authorization/rbac.md
|
||||
- docs/admin/authorization/node.md
|
||||
- docs/admin/authorization/webhook.md
|
||||
- docs/reference/deprecation-policy.md
|
||||
- title: Overview
|
||||
path: /docs/admin/accessing-the-api/
|
||||
- title: Authenticating
|
||||
path: /docs/admin/authentication/
|
||||
- title: Using Authorization Plugins
|
||||
path: /docs/admin/authorization/
|
||||
- title: Using Admission Controllers
|
||||
path: /docs/admin/admission-controllers/
|
||||
- title: Managing Service Accounts
|
||||
path: /docs/admin/service-accounts-admin/
|
||||
- title: Kubernetes API Operations
|
||||
path: /docs/api-reference/v1/operations/
|
||||
- title: Kubernetes API Definitions
|
||||
path: /docs/api-reference/v1/definitions/
|
||||
- title: Kubernetes API Swagger Spec
|
||||
path: /kubernetes/third_party/swagger-ui/
|
||||
|
||||
- title: API Reference
|
||||
- title: Autoscaling API
|
||||
section:
|
||||
- title: v1.7
|
||||
path: /docs/api-reference/v1.7/
|
||||
- docs/reference/labels-annotations-taints.md
|
||||
- title: OpenAPI and Swagger
|
||||
section:
|
||||
- title: OpenAPI Spec
|
||||
path: https://git.k8s.io/kubernetes/api/openapi-spec/
|
||||
- title: Swagger Spec
|
||||
path: https://git.k8s.io/kubernetes/api/swagger-spec/
|
||||
- title: Autoscaling API Operations
|
||||
path: /docs/api-reference/autoscaling/v1/operations/
|
||||
- title: Autoscaling API Definitions
|
||||
path: /docs/api-reference/autoscaling/v1/definitions/
|
||||
|
||||
- title: Federation API
|
||||
- title: Batch API
|
||||
section:
|
||||
- docs/reference/federation/v1/operations.html
|
||||
- docs/reference/federation/v1/definitions.html
|
||||
- docs/reference/federation/v1beta1/operations.html
|
||||
- docs/reference/federation/v1beta1/definitions.html
|
||||
- docs/reference/federation/extensions/v1beta1/operations.html
|
||||
- docs/reference/federation/extensions/v1beta1/definitions.html
|
||||
- title: Batch API Operations
|
||||
path: /docs/api-reference/batch/v1/operations/
|
||||
- title: Batch API Definitions
|
||||
path: /docs/api-reference/batch/v1/definitions/
|
||||
|
||||
- title: Extensions API
|
||||
section:
|
||||
- title: Extensions API Operations
|
||||
path: /docs/api-reference/extensions/v1beta1/operations/
|
||||
- title: Extensions API Definitions
|
||||
path: /docs/api-reference/extensions/v1beta1/definitions/
|
||||
|
||||
- title: kubectl CLI
|
||||
section:
|
||||
- docs/user-guide/kubectl-overview.md
|
||||
- title: v1.7 Commands
|
||||
path: /docs/user-guide/kubectl/v1.7/
|
||||
- title: v1.6 Commands
|
||||
path: /docs/user-guide/kubectl/v1.6/
|
||||
- title: v1.5 Commands
|
||||
path: /docs/user-guide/kubectl/v1.5/
|
||||
- docs/user-guide/docker-cli-to-kubectl.md
|
||||
- docs/user-guide/kubectl-conventions.md
|
||||
- docs/user-guide/jsonpath.md
|
||||
- docs/user-guide/kubectl-cheatsheet.md
|
||||
|
||||
- title: Setup Tools
|
||||
section:
|
||||
- title: Kubeadm
|
||||
path: /docs/admin/kubeadm/
|
||||
- title: Kubefed
|
||||
path: /docs/admin/kubefed/
|
||||
- title: kubectl Overview
|
||||
path: /docs/user-guide/kubectl-overview/
|
||||
- title: kubectl for Docker Users
|
||||
path: /docs/user-guide/docker-cli-to-kubectl/
|
||||
- title: kubectl Usage Conventions
|
||||
path: /docs/user-guide/kubectl-conventions/
|
||||
- title: JSONpath Support
|
||||
path: /docs/user-guide/jsonpath/
|
||||
- title: kubectl Cheat Sheet
|
||||
path: /docs/user-guide/kubectl-cheatsheet/
|
||||
- title: kubectl Commands
|
||||
section:
|
||||
- docs/admin/kubefed.md
|
||||
- docs/admin/kubefed_options.md
|
||||
- docs/admin/kubefed_init.md
|
||||
- docs/admin/kubefed_join.md
|
||||
- docs/admin/kubefed_unjoin.md
|
||||
- docs/admin/kubefed_version.md
|
||||
- title: kubectl
|
||||
path: /docs/user-guide/kubectl/
|
||||
- title: kubectl annotate
|
||||
path: /docs/user-guide/kubectl/kubectl_annotate/
|
||||
- title: kubectl api-versions
|
||||
path: /docs/user-guide/kubectl/kubectl_api-versions/
|
||||
- title: kubectl apply
|
||||
path: /docs/user-guide/kubectl/kubectl_apply/
|
||||
- title: kubectl attach
|
||||
path: /docs/user-guide/kubectl/kubectl_attach/
|
||||
- title: kubectl autoscale
|
||||
path: /docs/user-guide/kubectl/kubectl_autoscale/
|
||||
- title: kubectl cluster-info
|
||||
path: /docs/user-guide/kubectl/kubectl_cluster-info/
|
||||
- title: kubectl config
|
||||
path: /docs/user-guide/kubectl/kubectl_config/
|
||||
- title: kubectl config current-context
|
||||
path: /docs/user-guide/kubectl/kubectl_config_current-context/
|
||||
- title: kubectl config set-cluster
|
||||
path: /docs/user-guide/kubectl/kubectl_config_set-cluster/
|
||||
- title: kubectl config set-context
|
||||
path: /docs/user-guide/kubectl/kubectl_config_set-context/
|
||||
- title: kubectl config set-credentials
|
||||
path: /docs/user-guide/kubectl/kubectl_config_set-credentials/
|
||||
- title: kubectl config set
|
||||
path: /docs/user-guide/kubectl/kubectl_config_set/
|
||||
- title: kubectl config unset
|
||||
path: /docs/user-guide/kubectl/kubectl_config_unset/
|
||||
- title: kubectl config use-context
|
||||
path: /docs/user-guide/kubectl/kubectl_config_use-context/
|
||||
- title: kubectl config view
|
||||
path: /docs/user-guide/kubectl/kubectl_config_view/
|
||||
- title: kubectl convert
|
||||
path: /docs/user-guide/kubectl/kubectl_convert/
|
||||
- title: kubectl cordon
|
||||
path: /docs/user-guide/kubectl/kubectl_cordon/
|
||||
- title: kubectl create
|
||||
path: /docs/user-guide/kubectl/kubectl_create/
|
||||
- title: kubectl create configmap
|
||||
path: /docs/user-guide/kubectl/kubectl_create_configmap/
|
||||
- title: kubectl create namespace
|
||||
path: /docs/user-guide/kubectl/kubectl_create_namespace/
|
||||
- title: kubectl create secret docker-registry
|
||||
path: /docs/user-guide/kubectl/kubectl_create_secret_docker-registry/
|
||||
- title: kubectl create secret
|
||||
path: /docs/user-guide/kubectl/kubectl_create_secret/
|
||||
- title: kubectl create secret generic
|
||||
path: /docs/user-guide/kubectl/kubectl_create_secret_generic/
|
||||
- title: kubectl create serviceaccount
|
||||
path: /docs/user-guide/kubectl/kubectl_create_serviceaccount/
|
||||
- title: kubectl delete
|
||||
path: /docs/user-guide/kubectl/kubectl_delete/
|
||||
- title: kubectl describe
|
||||
path: /docs/user-guide/kubectl/kubectl_describe/
|
||||
- title: kubectl drain
|
||||
path: /docs/user-guide/kubectl/kubectl_drain/
|
||||
- title: kubectl edit
|
||||
path: /docs/user-guide/kubectl/kubectl_edit/
|
||||
- title: kubectl exec
|
||||
path: /docs/user-guide/kubectl/kubectl_exec/
|
||||
- title: kubectl explain
|
||||
path: /docs/user-guide/kubectl/kubectl_explain/
|
||||
- title: kubectl expose
|
||||
path: /docs/user-guide/kubectl/kubectl_expose/
|
||||
- title: kubectl get
|
||||
path: /docs/user-guide/kubectl/kubectl_get/
|
||||
- title: kubectl label
|
||||
path: /docs/user-guide/kubectl/kubectl_label/
|
||||
- title: kubectl logs
|
||||
path: /docs/user-guide/kubectl/kubectl_logs/
|
||||
- title: kubectl patch
|
||||
path: /docs/user-guide/kubectl/kubectl_patch/
|
||||
- title: kubectl port-forward
|
||||
path: /docs/user-guide/kubectl/kubectl_port-forward/
|
||||
- title: kubectl proxy
|
||||
path: /docs/user-guide/kubectl/kubectl_proxy/
|
||||
- title: kubectl replace
|
||||
path: /docs/user-guide/kubectl/kubectl_replace/
|
||||
- title: kubectl rolling-update
|
||||
path: /docs/user-guide/kubectl/kubectl_rolling-update/
|
||||
- title: kubectl rollout
|
||||
path: /docs/user-guide/kubectl/kubectl_rollout/
|
||||
- title: kubectl rollout history
|
||||
path: /docs/user-guide/kubectl/kubectl_rollout_history/
|
||||
- title: kubectl rollout pause
|
||||
path: /docs/user-guide/kubectl/kubectl_rollout_pause/
|
||||
- title: kubectl rollout resume
|
||||
path: /docs/user-guide/kubectl/kubectl_rollout_resume/
|
||||
- title: kubectl rollout undo
|
||||
path: /docs/user-guide/kubectl/kubectl_rollout_undo/
|
||||
- title: kubectl run
|
||||
path: /docs/user-guide/kubectl/kubectl_run/
|
||||
- title: kubectl scale
|
||||
path: /docs/user-guide/kubectl/kubectl_scale/
|
||||
- title: kubectl uncordon
|
||||
path: /docs/user-guide/kubectl/kubectl_uncordon/
|
||||
- title: kubectl version
|
||||
path: /docs/user-guide/kubectl/kubectl_version/
|
||||
- title: Superseded and Deprecated Commands
|
||||
section:
|
||||
- title: kubectl namespace
|
||||
path: /docs/user-guide/kubectl/kubectl_namespace/
|
||||
- title: kubectl stop
|
||||
path: /docs/user-guide/kubectl/kubectl_stop/
|
||||
|
||||
- title: Config Reference
|
||||
- title: Kubernetes Components
|
||||
section:
|
||||
- docs/admin/kubelet.md
|
||||
- docs/admin/kube-apiserver.md
|
||||
- docs/admin/kube-controller-manager.md
|
||||
- docs/admin/kube-proxy.md
|
||||
- docs/admin/kube-scheduler.md
|
||||
- docs/admin/federation-apiserver.md
|
||||
- docs/admin/federation-controller-manager.md
|
||||
- title: kube-apiserver
|
||||
path: /docs/admin/kube-apiserver/
|
||||
- title: kube-controller-manager
|
||||
path: /docs/admin/kube-controller-manager/
|
||||
- title: kube-proxy
|
||||
path: /docs/admin/kube-proxy/
|
||||
- title: kube-scheduler
|
||||
path: /docs/admin/kube-scheduler/
|
||||
- title: kubelet
|
||||
path: /docs/admin/kubelet/
|
||||
|
||||
- title: Glossary
|
||||
section:
|
||||
- title: Annotations
|
||||
path: /docs/user-guide/annotations/
|
||||
- title: Daemon Sets
|
||||
path: /docs/admin/daemons/
|
||||
- title: Deployments
|
||||
path: /docs/user-guide/deployments/
|
||||
- title: Horizontal Pod Autoscaling
|
||||
path: /docs/user-guide/horizontal-pod-autoscaling/
|
||||
- title: Images
|
||||
path: /docs/user-guide/images/
|
||||
- title: Ingress Resources
|
||||
path: /docs/user-guide/ingress/
|
||||
- title: Jobs
|
||||
path: /docs/user-guide/jobs/
|
||||
- title: Labels and Selectors
|
||||
path: /docs/user-guide/labels/
|
||||
- title: Names
|
||||
path: /docs/user-guide/identifiers/
|
||||
- title: Namespaces
|
||||
path: /docs/user-guide/namespaces/
|
||||
- title: Network Policies
|
||||
path: /docs/user-guide/networkpolicies/
|
||||
- title: Nodes
|
||||
path: /docs/admin/node/
|
||||
- title: Persistent Volumes
|
||||
path: /docs/user-guide/persistent-volumes/
|
||||
- title: Pet Sets
|
||||
path: /docs/user-guide/petset/
|
||||
- title: Pods
|
||||
path: /docs/user-guide/pods/
|
||||
- title: Pod Security Policies
|
||||
path: /docs/user-guide/pod-security-policy/
|
||||
- title: Replica Sets
|
||||
path: /docs/user-guide/replicasets/
|
||||
- title: Replication Controller
|
||||
path: /docs/user-guide/replication-controller/
|
||||
- title: Resource Quotas
|
||||
path: /docs/admin/resourcequota/
|
||||
- title: Cron Jobs
|
||||
path: /docs/user-guide/cron-jobs/
|
||||
- title: Secrets
|
||||
path: /docs/user-guide/secrets/
|
||||
- title: Security Context
|
||||
path: /docs/user-guide/security-context/
|
||||
- title: Services
|
||||
path: /docs/user-guide/services/
|
||||
- title: Service Accounts
|
||||
path: /docs/user-guide/service-accounts/
|
||||
- title: Third Party Resources
|
||||
path: /docs/user-guide/thirdpartyresources/
|
||||
- title: Volumes
|
||||
path: /docs/user-guide/volumes/
|
||||
|
||||
- title: Kubernetes Design Docs
|
||||
section:
|
||||
- title: Kubernetes Architecture
|
||||
path: https://git.k8s.io/community/contributors/design-proposals/architecture/architecture.md
|
||||
path: https://github.com/kubernetes/kubernetes/blob/release-1.3/docs/design/architecture.md
|
||||
- title: Kubernetes Design Overview
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.6/docs/design
|
||||
path: https://github.com/kubernetes/kubernetes/blob/release-1.3/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
|
||||
path: https://github.com/kubernetes/kubernetes/blob/release-1.3/docs/design/access.md
|
||||
- title: Kubernetes OpenVSwitch GRE/VxLAN networking
|
||||
path: /docs/admin/ovs-networking/
|
||||
- title: Security Contexts
|
||||
path: https://git.k8s.io/community/contributors/design-proposals/auth/security_context.md
|
||||
path: https://github.com/kubernetes/kubernetes/blob/release-1.3/docs/design/security_context.md
|
||||
- title: Security in Kubernetes
|
||||
path: https://git.k8s.io/community/contributors/design-proposals/auth/security.md
|
||||
path: https://github.com/kubernetes/kubernetes/blob/release-1.3/docs/design/security.md
|
||||
|
||||
- title: Kubernetes Issues and Security
|
||||
- title: Federation
|
||||
section:
|
||||
- title: Kubernetes Issue Tracker on GitHub
|
||||
path: https://github.com/kubernetes/kubernetes/issues/
|
||||
- docs/reference/security.md
|
||||
|
||||
|
||||
- title: Federation User Guide
|
||||
path: /docs/user-guide/federation/
|
||||
- title: Federated Events
|
||||
path: /docs/user-guide/federation/events/
|
||||
- title: Federated Ingress
|
||||
path: /docs/user-guide/federation/federated-ingress/
|
||||
- title: Federated Namespaces
|
||||
path: /docs/user-guide/federation/namespaces/
|
||||
- title: Federated ReplicaSets
|
||||
path: /docs/user-guide/federation/replicasets/
|
||||
- title: Federated Secrets
|
||||
path: /docs/user-guide/federation/secrets/
|
||||
- title: Federation API
|
||||
path: /docs/federation/api-reference/README/
|
||||
- title: Federation Components
|
||||
section:
|
||||
- title: federation-apiserver
|
||||
path: /docs/admin/federation-apiserver
|
||||
- title : federation-controller-mananger
|
||||
path: /docs/admin/federation-controller-manager
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
bigheader: "Samples"
|
||||
abstract: "A collection of example applications that show how to use Kubernetes."
|
||||
toc:
|
||||
- title: Samples
|
||||
path: /docs/samples/
|
||||
|
||||
- title: Storage / Database / KV
|
||||
section:
|
||||
- title: Apache Cassandra Database
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/cassandra
|
||||
- title: Ceph
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/rbd/
|
||||
- title: CephFS
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/cephfs/
|
||||
- title: CockroachDB
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.4/examples/cockroachdb/
|
||||
- title: GlusterFS
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/glusterfs/
|
||||
- title: Hazelcast
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/hazelcast
|
||||
- title: iSCSI
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/iscsi/
|
||||
- title: MySQL Galera
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/mysql-galera
|
||||
- title: NFS
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/nfs/
|
||||
- title: Redis
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/redis/
|
||||
- title: RethinkDB
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/rethinkdb/
|
||||
- title: Vitess
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/vitess/
|
||||
|
||||
- title: Big Data
|
||||
section:
|
||||
- title: Apache Spark
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/spark
|
||||
- title: Apache Storm
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/storm
|
||||
|
||||
- title: Messaging / Queueing
|
||||
section:
|
||||
- title: Celery + RabbitMQ
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/celery-rabbitmq
|
||||
- title: Hazelcast
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/hazelcast
|
||||
|
||||
- title: Miscellaneous
|
||||
section:
|
||||
- title: Meteor Applications
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/meteor/
|
||||
- title: OpenShift Origin
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/openshift-origin/
|
||||
- title: Selenium
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/selenium/
|
||||
|
||||
- title: Monitoring and Logging
|
||||
section:
|
||||
- title: Elasticsearch
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/elasticsearch/
|
||||
- title: NewRelic
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/newrelic
|
||||
|
||||
- title: Multi-tier Applications
|
||||
section:
|
||||
- title: Guestbook - Go Server
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/guestbook-go/
|
||||
- title: GuestBook - PHP Server
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/guestbook/
|
||||
- title: MEAN stack on Google Cloud Platform
|
||||
path: /docs/getting-started-guides/meanstack/
|
||||
- title: MySQL + Wordpress
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/mysql-wordpress-pd/
|
||||
- title: MySQL + Phabricator Server
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/phabricator/
|
||||
- title: Nodejs + Mongo
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/nodesjs-mongodb
|
||||
- title: Petstore
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.3/examples/k8petstore/
|
||||
@@ -1,4 +0,0 @@
|
||||
bigheader: ""
|
||||
abstract: ""
|
||||
toc:
|
||||
- docs/search.md
|
||||
-107
@@ -1,107 +0,0 @@
|
||||
bigheader: "Setup"
|
||||
abstract: "Instructions for setting up a Kubernetes cluster."
|
||||
toc:
|
||||
- docs/setup/index.md
|
||||
- docs/setup/pick-right-solution.md
|
||||
|
||||
- title: Independent Solutions
|
||||
section:
|
||||
- docs/getting-started-guides/minikube.md
|
||||
|
||||
- title: Bootstrapping Clusters with kubeadm
|
||||
section:
|
||||
- docs/setup/independent/install-kubeadm.md
|
||||
- docs/setup/independent/create-cluster-kubeadm.md
|
||||
|
||||
- docs/getting-started-guides/scratch.md
|
||||
- docs/getting-started-guides/alternatives.md
|
||||
|
||||
- title: Hosted Solutions
|
||||
section:
|
||||
- title: Running Kubernetes on Google Container Engine
|
||||
path: https://cloud.google.com/container-engine/docs/before-you-begin/
|
||||
- title: Running Kubernetes on Azure Container Service
|
||||
path: https://docs.microsoft.com/en-us/azure/container-service/container-service-kubernetes-walkthrough
|
||||
- title: Running Kubernetes on IBM Bluemix Container Service
|
||||
path: https://console.ng.bluemix.net/docs/containers/container_index.html
|
||||
|
||||
- title: Turn-key Cloud Solutions
|
||||
section:
|
||||
- docs/getting-started-guides/gce.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
|
||||
- title: Running Kubernetes on IBM Bluemix
|
||||
path: https://github.com/patrocinio/kubernetes-softlayer
|
||||
- docs/getting-started-guides/stackpoint.md
|
||||
|
||||
- title: Custom Solutions
|
||||
|
||||
section:
|
||||
- title: Custom Cloud Solutions
|
||||
section:
|
||||
- docs/getting-started-guides/coreos/index.md
|
||||
- docs/getting-started-guides/ubuntu/index.md
|
||||
- docs/getting-started-guides/kops.md
|
||||
- docs/getting-started-guides/kubespray.md
|
||||
- docs/getting-started-guides/running-cloud-controller.md
|
||||
|
||||
- title: On-Premise 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
|
||||
- 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
|
||||
|
||||
- title: Ubuntu
|
||||
section:
|
||||
- docs/getting-started-guides/ubuntu/index.md
|
||||
- docs/getting-started-guides/ubuntu/validation.md
|
||||
- docs/getting-started-guides/ubuntu/backups.md
|
||||
- docs/getting-started-guides/ubuntu/upgrades.md
|
||||
- docs/getting-started-guides/ubuntu/scaling.md
|
||||
- docs/getting-started-guides/ubuntu/installation.md
|
||||
- docs/getting-started-guides/ubuntu/monitoring.md
|
||||
- docs/getting-started-guides/ubuntu/networking.md
|
||||
- docs/getting-started-guides/ubuntu/security.md
|
||||
- docs/getting-started-guides/ubuntu/storage.md
|
||||
- docs/getting-started-guides/ubuntu/troubleshooting.md
|
||||
- docs/getting-started-guides/ubuntu/decommissioning.md
|
||||
- docs/getting-started-guides/ubuntu/operational-considerations.md
|
||||
- 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/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
|
||||
@@ -0,0 +1,55 @@
|
||||
bigheader: "Support"
|
||||
abstract: "Troubleshooting resources, frequently asked questions, and community support channels."
|
||||
toc:
|
||||
- title: Support
|
||||
path: /docs/troubleshooting/
|
||||
|
||||
- title: Contributing to the Kubernetes Docs
|
||||
section:
|
||||
- title: Creating a Documentation Pull Request
|
||||
path: /docs/contribute/create-pull-request/
|
||||
- title: Writing a New Topic
|
||||
path: /docs/contribute/write-new-topic/
|
||||
- title: Staging Your Documentation Changes
|
||||
path: /docs/contribute/stage-documentation-changes/
|
||||
- title: Using Page Templates
|
||||
path: /docs/contribute/page-templates/
|
||||
- title: Documentation Style Guide
|
||||
path: /docs/contribute/style-guide/
|
||||
|
||||
- title: Troubleshooting
|
||||
section:
|
||||
- title: Debugging Pods and Replication Controllers
|
||||
path: /docs/user-guide/debugging-pods-and-replication-controllers/
|
||||
- title: Application Introspection and Debugging
|
||||
path: /docs/user-guide/introspection-and-debugging/
|
||||
- title: Retrieving Logs
|
||||
path: /docs/user-guide/logging/
|
||||
- title: Troubleshooting Applications
|
||||
path: /docs/user-guide/application-troubleshooting/
|
||||
- title: Troubleshooting Clusters
|
||||
path: /docs/admin/cluster-troubleshooting/
|
||||
- title: Debugging Services
|
||||
path: /docs/user-guide/debugging-services/
|
||||
|
||||
- title: Frequently Asked Questions
|
||||
section:
|
||||
- title: User FAQ
|
||||
path: https://github.com/kubernetes/kubernetes/wiki/User-FAQ/
|
||||
- title: Debugging FAQ
|
||||
path: https://github.com/kubernetes/kubernetes/wiki/Debugging-FAQ/
|
||||
- title: Services FAQ
|
||||
path: https://github.com/kubernetes/kubernetes/wiki/Services-FAQ/
|
||||
|
||||
- title: Other Resources
|
||||
section:
|
||||
- title: Kubernetes Issue Tracker on GitHub
|
||||
path: https://github.com/kubernetes/kubernetes/issues/
|
||||
- title: Report a Security Vulnerability
|
||||
path: /docs/reporting-security-issues/
|
||||
- title: Release Notes
|
||||
path: https://github.com/kubernetes/kubernetes/releases/
|
||||
- title: Release Roadmap
|
||||
path: https://github.com/kubernetes/kubernetes/milestones/
|
||||
- title: Contributing to Kubernetes Documentation
|
||||
path: /editdocs/
|
||||
+23
-174
@@ -1,185 +1,34 @@
|
||||
bigheader: "Tasks"
|
||||
abstract: "Step-by-step instructions for performing operations with Kubernetes."
|
||||
abstract: "Step-by-step instructions for performing operations with Kuberentes."
|
||||
toc:
|
||||
- docs/tasks/index.md
|
||||
|
||||
- title: Install Tools
|
||||
- title: Tasks
|
||||
path: /docs/tasks/
|
||||
- title: Configuring Pods and Containers
|
||||
section:
|
||||
- docs/tasks/tools/install-kubectl.md
|
||||
- docs/tasks/tools/install-minikube.md
|
||||
- docs/setup/independent/install-kubeadm.md
|
||||
|
||||
- title: Configure Pods and Containers
|
||||
- title: Defining Environment Variables for a Container
|
||||
path: /docs/tasks/configure-pod-container/define-environment-variable-container/
|
||||
- title: Defining a Command and Arguments for a Container
|
||||
path: /docs/tasks/configure-pod-container/define-command-argument-container/
|
||||
- title: Assigning CPU and RAM Resources to a Container
|
||||
path: /docs/tasks/configure-pod-container/assign-cpu-ram-container/
|
||||
- title: Accessing Applications in a Cluster
|
||||
section:
|
||||
- docs/tasks/configure-pod-container/assign-memory-resource.md
|
||||
- docs/tasks/configure-pod-container/assign-cpu-resource.md
|
||||
- docs/tasks/configure-pod-container/quality-service-pod.md
|
||||
- docs/tasks/configure-pod-container/assign-cpu-ram-container.md
|
||||
- docs/tasks/configure-pod-container/opaque-integer-resource.md
|
||||
- docs/tasks/configure-pod-container/configure-volume-storage.md
|
||||
- docs/tasks/configure-pod-container/configure-persistent-volume-storage.md
|
||||
- docs/tasks/configure-pod-container/configure-projected-volume-storage.md
|
||||
- docs/tasks/configure-pod-container/projected-volume.md
|
||||
- docs/tasks/configure-pod-container/security-context.md
|
||||
- docs/tasks/configure-pod-container/environment-variable-expose-pod-information.md
|
||||
- docs/tasks/configure-pod-container/configure-service-account.md
|
||||
- docs/tasks/configure-pod-container/pull-image-private-registry.md
|
||||
- docs/tasks/configure-pod-container/configure-liveness-readiness-probes.md
|
||||
- docs/tasks/configure-pod-container/assign-pods-nodes.md
|
||||
- docs/tasks/configure-pod-container/configure-pod-initialization.md
|
||||
- docs/tasks/configure-pod-container/attach-handler-lifecycle-event.md
|
||||
- docs/tasks/configure-pod-container/configmap.md
|
||||
- docs/tasks/configure-pod-container/configure-pod-configmap.md
|
||||
- docs/tools/kompose/user-guide.md
|
||||
- title: Using Port Forwarding to Access Applications in a Cluster
|
||||
path: /docs/tasks/access-application-cluster/port-forward-access-application-cluster/
|
||||
|
||||
- title: Inject Data Into Applications
|
||||
section:
|
||||
- docs/tasks/inject-data-application/define-command-argument-container.md
|
||||
- docs/tasks/inject-data-application/define-environment-variable-container.md
|
||||
- docs/tasks/inject-data-application/environment-variable-expose-pod-information.md
|
||||
- docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md
|
||||
- docs/tasks/inject-data-application/distribute-credentials-secure.md
|
||||
- docs/tasks/inject-data-application/podpreset.md
|
||||
|
||||
- title: Run Applications
|
||||
- title: Debugging Applications in a Cluster
|
||||
section:
|
||||
- docs/tasks/run-application/run-stateless-application-deployment.md
|
||||
- docs/tasks/run-application/run-single-instance-stateful-application.md
|
||||
- docs/tasks/run-application/run-replicated-stateful-application.md
|
||||
- docs/tasks/run-application/update-api-object-kubectl-patch.md
|
||||
- docs/tasks/run-application/upgrade-pet-set-to-stateful-set.md
|
||||
- docs/tasks/run-application/scale-stateful-set.md
|
||||
- docs/tasks/run-application/delete-stateful-set.md
|
||||
- docs/tasks/run-application/force-delete-stateful-set-pod.md
|
||||
- docs/tasks/run-application/rolling-update-replication-controller.md
|
||||
- docs/tasks/run-application/horizontal-pod-autoscale.md
|
||||
- docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md
|
||||
- docs/tasks/run-application/configure-pdb.md
|
||||
- title: Determining the Reason for Pod Failure
|
||||
path: /docs/tasks/debug-application-cluster/determine-reason-pod-failure/
|
||||
|
||||
- title: Run Jobs
|
||||
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
|
||||
- title: Accessing the Kubernetes API
|
||||
section:
|
||||
- docs/tasks/access-application-cluster/web-ui-dashboard.md
|
||||
- docs/tasks/access-application-cluster/access-cluster.md
|
||||
- docs/tasks/access-application-cluster/configure-access-multiple-clusters.md
|
||||
- docs/tasks/access-application-cluster/port-forward-access-application-cluster.md
|
||||
- docs/tasks/access-application-cluster/load-balance-access-application-cluster.md
|
||||
- docs/tasks/access-application-cluster/service-access-application-cluster.md
|
||||
- docs/tasks/access-application-cluster/connecting-frontend-backend.md
|
||||
- docs/tasks/access-application-cluster/create-external-load-balancer.md
|
||||
- docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md
|
||||
- docs/tasks/access-application-cluster/list-all-running-container-images.md
|
||||
- docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md
|
||||
- title: Configuring DNS for a Cluster
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.5/examples/cluster-dns
|
||||
- title: Using an HTTP Proxy to Access the Kubernetes API
|
||||
path: /docs/tasks/access-kubernetes-api/http-proxy-access-api/
|
||||
- title: Administering a Cluster
|
||||
section:
|
||||
- title: Assigning Pods to Nodes
|
||||
path: /docs/tasks/administer-cluster/assign-pods-nodes/
|
||||
|
||||
- title: Monitor, Log, and Debug
|
||||
section:
|
||||
- docs/tasks/debug-application-cluster/resource-usage-monitoring.md
|
||||
- docs/tasks/debug-application-cluster/get-shell-running-container.md
|
||||
- docs/tasks/debug-application-cluster/monitor-node-health.md
|
||||
- docs/tasks/debug-application-cluster/logging-stackdriver.md
|
||||
- docs/tasks/debug-application-cluster/events-stackdriver.md
|
||||
- docs/tasks/debug-application-cluster/logging-elasticsearch-kibana.md
|
||||
- docs/tasks/debug-application-cluster/determine-reason-pod-failure.md
|
||||
- docs/tasks/debug-application-cluster/debug-init-containers.md
|
||||
- docs/tasks/debug-application-cluster/debug-pod-replication-controller.md
|
||||
- docs/tasks/debug-application-cluster/debug-service.md
|
||||
- docs/tasks/debug-application-cluster/debug-cluster.md
|
||||
- docs/tasks/debug-application-cluster/debug-application.md
|
||||
- docs/tasks/debug-application-cluster/debug-stateful-set.md
|
||||
- docs/tasks/debug-application-cluster/debug-application-introspection.md
|
||||
- docs/tasks/debug-application-cluster/audit.md
|
||||
- title: Use Explorer to Examine the Runtime Environment
|
||||
path: https://github.com/kubernetes/kubernetes/tree/release-1.5/examples/explorer
|
||||
|
||||
- title: Access and Extend the Kubernetes API
|
||||
section:
|
||||
- docs/tasks/access-kubernetes-api/http-proxy-access-api.md
|
||||
- docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions.md
|
||||
- docs/tasks/access-kubernetes-api/extend-api-third-party-resource.md
|
||||
- docs/tasks/access-kubernetes-api/migrate-third-party-resource.md
|
||||
- docs/tasks/access-kubernetes-api/configure-aggregation-layer.md
|
||||
- docs/tasks/access-kubernetes-api/setup-extension-api-server.md
|
||||
|
||||
- title: TLS
|
||||
section:
|
||||
- docs/tasks/tls/managing-tls-in-a-cluster.md
|
||||
|
||||
- title: Administer a Cluster
|
||||
section:
|
||||
- title: Manage Memory, CPU, and API Resources
|
||||
section:
|
||||
- docs/tasks/administer-cluster/memory-default-namespace.md
|
||||
- docs/tasks/administer-cluster/cpu-default-namespace.md
|
||||
- docs/tasks/administer-cluster/memory-constraint-namespace.md
|
||||
- docs/tasks/administer-cluster/cpu-constraint-namespace.md
|
||||
- docs/tasks/administer-cluster/apply-resource-quota-limit.md
|
||||
- docs/tasks/administer-cluster/quota-memory-cpu-namespace.md
|
||||
- docs/tasks/administer-cluster/quota-pod-namespace.md
|
||||
- docs/tasks/administer-cluster/quota-api-object.md
|
||||
- docs/tasks/administer-cluster/opaque-integer-resource-node.md
|
||||
- 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/encrypt-data.md
|
||||
- docs/tasks/administer-cluster/configure-upgrade-etcd.md
|
||||
- docs/tasks/administer-cluster/static-pod.md
|
||||
- docs/tasks/administer-cluster/cluster-management.md
|
||||
- docs/tasks/administer-cluster/upgrade-1-6.md
|
||||
- docs/tasks/administer-cluster/kubeadm-upgrade-1-7.md
|
||||
- docs/tasks/administer-cluster/namespaces.md
|
||||
- docs/tasks/administer-cluster/namespaces-walkthrough.md
|
||||
- docs/tasks/administer-cluster/dns-horizontal-autoscaling.md
|
||||
- docs/tasks/administer-cluster/safely-drain-node.md
|
||||
- docs/tasks/administer-cluster/cpu-memory-limit.md
|
||||
- docs/tasks/administer-cluster/out-of-resource.md
|
||||
- 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
|
||||
- title: Install Network Policy Provider
|
||||
section:
|
||||
- docs/tasks/administer-cluster/calico-network-policy.md
|
||||
- docs/tasks/administer-cluster/cilium-network-policy.md
|
||||
- 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/change-pv-reclaim-policy.md
|
||||
- docs/tasks/administer-cluster/configure-pod-disruption-budget.md
|
||||
- docs/tasks/administer-cluster/limit-storage-consumption.md
|
||||
- docs/tasks/administer-cluster/change-default-storage-class.md
|
||||
- docs/tasks/administer-cluster/running-cloud-controller.md
|
||||
- docs/tasks/administer-cluster/highly-available-master.md
|
||||
- docs/tasks/administer-cluster/configure-multiple-schedulers.md
|
||||
- docs/tasks/administer-cluster/ip-masq-agent.md
|
||||
- docs/tasks/administer-cluster/dns-custom-nameservers.md
|
||||
|
||||
- title: Federation - Run an App on Multiple Clusters
|
||||
section:
|
||||
- docs/tasks/federation/federation-service-discovery.md
|
||||
- docs/tasks/federation/set-up-cluster-federation-kubefed.md
|
||||
- docs/tasks/federation/set-up-coredns-provider-federation.md
|
||||
- docs/tasks/federation/set-up-placement-policies-federation.md
|
||||
- docs/tasks/administer-federation/cluster.md
|
||||
- docs/tasks/administer-federation/configmap.md
|
||||
- docs/tasks/administer-federation/daemonset.md
|
||||
- docs/tasks/administer-federation/deployment.md
|
||||
- docs/tasks/administer-federation/events.md
|
||||
- docs/tasks/administer-federation/ingress.md
|
||||
- docs/tasks/administer-federation/namespaces.md
|
||||
- docs/tasks/administer-federation/replicaset.md
|
||||
- docs/tasks/administer-federation/secret.md
|
||||
|
||||
- title: Manage Cluster Daemons
|
||||
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
|
||||
|
||||
+2
-19
@@ -1,22 +1,5 @@
|
||||
bigheader: "Tools"
|
||||
abstract: "Tools to help you use and enhance Kubernetes."
|
||||
toc:
|
||||
- docs/tools/index.md
|
||||
|
||||
- title: Native Tools
|
||||
section:
|
||||
- title: Kubectl
|
||||
path: /docs/user-guide/kubectl/
|
||||
- title: Kubeadm
|
||||
path: /docs/getting-started-guides/kubeadm
|
||||
- title: Kubefed
|
||||
path: /docs/admin/federation/kubefed/
|
||||
- title: Kubernetes Dashboard
|
||||
path: /docs/user-guide/ui/
|
||||
|
||||
- title: Third-Party Tools
|
||||
section:
|
||||
- docs/tools/kompose/index.md
|
||||
- docs/tools/kompose/user-guide.md
|
||||
- title: Helm
|
||||
path: https://github.com/kubernetes/helm
|
||||
- title: Tools
|
||||
path: /docs/tools/
|
||||
|
||||
+36
-46
@@ -1,67 +1,57 @@
|
||||
bigheader: "Tutorials"
|
||||
abstract: "Detailed walkthroughs of common Kubernetes operations and workflows."
|
||||
toc:
|
||||
- docs/tutorials/index.md
|
||||
- title: Tutorials
|
||||
path: /docs/tutorials/
|
||||
- title: Kubernetes Basics
|
||||
section:
|
||||
- docs/tutorials/kubernetes-basics/index.html
|
||||
- title: Overview
|
||||
path: /docs/tutorials/kubernetes-basics/
|
||||
- title: 1. Create a Cluster
|
||||
section:
|
||||
- docs/tutorials/kubernetes-basics/cluster-intro.html
|
||||
- docs/tutorials/kubernetes-basics/cluster-interactive.html
|
||||
- title: Using Minikube to Create a Cluster
|
||||
path: /docs/tutorials/kubernetes-basics/cluster-intro/
|
||||
- title: Interactive Tutorial - Creating a Cluster
|
||||
path: /docs/tutorials/kubernetes-basics/cluster-interactive/
|
||||
- title: 2. Deploy an App
|
||||
section:
|
||||
- docs/tutorials/kubernetes-basics/deploy-intro.html
|
||||
- docs/tutorials/kubernetes-basics/deploy-interactive.html
|
||||
- title: Using kubectl to Create a Deployment
|
||||
path: /docs/tutorials/kubernetes-basics/deploy-intro/
|
||||
- title: Interactive Tutorial - Deploying an App
|
||||
path: /docs/tutorials/kubernetes-basics/deploy-interactive/
|
||||
- title: 3. Explore Your App
|
||||
section:
|
||||
- docs/tutorials/kubernetes-basics/explore-intro.html
|
||||
- docs/tutorials/kubernetes-basics/explore-interactive.html
|
||||
- title: Viewing Pods and Nodes
|
||||
path: /docs/tutorials/kubernetes-basics/explore-intro/
|
||||
- title: Interactive Tutorial - Exploring Your App
|
||||
path: /docs/tutorials/kubernetes-basics/explore-interactive/
|
||||
- title: 4. Expose Your App Publicly
|
||||
section:
|
||||
- docs/tutorials/kubernetes-basics/expose-intro.html
|
||||
- docs/tutorials/kubernetes-basics/expose-interactive.html
|
||||
- title: Using a Service to Expose Your App
|
||||
path: /docs/tutorials/kubernetes-basics/expose-intro/
|
||||
- title: Interactive Tutorial - Exposing Your App
|
||||
path: /docs/tutorials/kubernetes-basics/expose-interactive/
|
||||
- title: 5. Scale Your App
|
||||
section:
|
||||
- docs/tutorials/kubernetes-basics/scale-intro.html
|
||||
- docs/tutorials/kubernetes-basics/scale-interactive.html
|
||||
- title: Running Multiple Instances of Your App
|
||||
path: /docs/tutorials/kubernetes-basics/scale-intro/
|
||||
- title: Interactive Tutorial - Scaling Your App
|
||||
path: /docs/tutorials/kubernetes-basics/scale-interactive/
|
||||
- title: 6. Update Your App
|
||||
section:
|
||||
- docs/tutorials/kubernetes-basics/update-intro.html
|
||||
- docs/tutorials/kubernetes-basics/update-interactive.html
|
||||
- title: Online Training Courses
|
||||
section:
|
||||
- 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
|
||||
- title: Configuration
|
||||
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: Performing a Rolling Update
|
||||
path: /docs/tutorials/kubernetes-basics/update-intro/
|
||||
- title: Interactive Tutorial - Updating Your App
|
||||
path: /docs/tutorials/kubernetes-basics/update-interactive/
|
||||
- title: Stateless Applications
|
||||
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: Running a Stateless Application Using a Deployment
|
||||
path: /docs/tutorials/stateless-application/run-stateless-application-deployment/
|
||||
- title: Using a Service to Access an Application in a Cluster
|
||||
path: /docs/tutorials/stateless-application/expose-external-ip-address-service/
|
||||
- title: Exposing an External IP Address to Access an Application in a Cluster
|
||||
path: /docs/tutorials/stateless-application/expose-external-ip-address/
|
||||
- title: Stateful Applications
|
||||
section:
|
||||
- docs/tutorials/stateful-application/basic-stateful-set.md
|
||||
- docs/tasks/run-application/run-single-instance-stateful-application.md
|
||||
- docs/tasks/run-application/run-replicated-stateful-application.md
|
||||
- docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md
|
||||
- docs/tutorials/stateful-application/cassandra.md
|
||||
- docs/tutorials/stateful-application/zookeeper.md
|
||||
- title: Clusters
|
||||
section:
|
||||
- docs/tutorials/clusters/apparmor.md
|
||||
- title: Services
|
||||
section:
|
||||
- docs/tutorials/services/source-ip.md
|
||||
- title: Running a Single-Instance Stateful Application
|
||||
path: /docs/tutorials/stateful-application/run-stateful-application/
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
The topics in the `/docs/api-reference/` section of the Kubernetes docs
|
||||
are being moved to the [Reference](/docs/reference/) section. The content in this topic has moved to:
|
||||
@@ -0,0 +1,313 @@
|
||||
<style>
|
||||
#caseStudyTitle {
|
||||
margin-top: 1em !important;
|
||||
}
|
||||
|
||||
.gridPage p {
|
||||
color: rgb(26,26,26) !important;
|
||||
margin-left: 0 !important;
|
||||
padding-left: 0 !important;
|
||||
font-weight: 300 !important;
|
||||
}
|
||||
|
||||
.gridPage #mainContent {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.gridPage #mainContent .content {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.gridPage main {
|
||||
max-width: 1100px !important;
|
||||
}
|
||||
|
||||
.gridPage .content {
|
||||
position: relative;
|
||||
margin: 0 auto 50px;
|
||||
max-width: 90%;
|
||||
}
|
||||
|
||||
.gridPage .content p {
|
||||
line-height: 24px !important;
|
||||
}
|
||||
|
||||
.gridPage .content h3 {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.gridPage #hero h5 {
|
||||
padding-left: 20px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.case-studies {
|
||||
position: relative;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.case-study {
|
||||
position: relative;
|
||||
width: 50%;
|
||||
padding: 0 40px 0 242px;
|
||||
margin-bottom: 60px;
|
||||
min-height: 152px;
|
||||
}
|
||||
|
||||
.case-study:nth-child(3), .case-study:nth-child(4) {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.case-study img {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.gridPage #mainContent .content .case-study p {
|
||||
font-family: "Roboto", sans-serif;
|
||||
font-size: 16px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
p.attrib {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.gridPage #video {
|
||||
background: #f9f9f9;
|
||||
height: auto;
|
||||
/*height: 340px;*/
|
||||
}
|
||||
|
||||
.gridPage #video main {
|
||||
position: relative;
|
||||
max-width: 900px !important;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 50px 20px;
|
||||
}
|
||||
|
||||
.gridPage #video main > div {
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.gridPage #video main #zulilyLogo {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.gridPage #video main img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.gridPage #video h3 {
|
||||
font-size: 32px;
|
||||
font-weight: 300;
|
||||
line-height: 38px;
|
||||
max-width: 80%;
|
||||
margin: 0 0 1em 0;
|
||||
}
|
||||
|
||||
.gridPage #video p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.gridPage #video p.attrib {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.gridPage #video button > h6 {
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
margin: 1em 0;
|
||||
color: #326de6;
|
||||
}
|
||||
|
||||
.gridPage #users {
|
||||
padding: 50px;
|
||||
}
|
||||
|
||||
.gridPage #users main {
|
||||
max-width: 1150px !important;
|
||||
}
|
||||
|
||||
.gridPage #users main h3 {
|
||||
padding-left: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.gridPage #usersGrid {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.gridPage #usersGrid a {
|
||||
display: inline-block;
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
.gridPage #usersGrid a img {
|
||||
box-shadow: 1px 1px 2px transparent;
|
||||
transition: box-shadow 0.25s;
|
||||
}
|
||||
|
||||
.gridPage #usersGrid a img:hover {
|
||||
box-shadow: 1px 1px 2px #cccccc;
|
||||
}
|
||||
|
||||
.gridPage #usersGrid a:last-child img,
|
||||
.gridPage #usersGrid a:last-child img:hover {
|
||||
box-shadow: 1px 1px 2px transparent;
|
||||
}
|
||||
|
||||
.tell-your-story {
|
||||
border: 1px solid #dddddd;
|
||||
border-radius: 6px;
|
||||
box-shadow: 1px 2px 2px #dddddd;
|
||||
}
|
||||
|
||||
.gridPage .feature {
|
||||
position: relative;
|
||||
padding: 20px 0 20px 242px;
|
||||
}
|
||||
|
||||
.gridPage .feature img {
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
section.bullets {
|
||||
background-color: #eeeeee;
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
|
||||
section.bullets main {
|
||||
position: relative;
|
||||
max-width: 1100px;
|
||||
padding: 50px 0;
|
||||
}
|
||||
|
||||
section.bullets .content {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.bullet {
|
||||
position: relative;
|
||||
width: 50%;
|
||||
padding: 15px 30px;
|
||||
}
|
||||
|
||||
.bullet h4 {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
.bullet li {
|
||||
margin-left: 1.25em;
|
||||
list-style: disc;
|
||||
font-weight: 300;
|
||||
color: rgb(26,26,26);
|
||||
line-height: 1.5em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
.details h4, p {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
.gridPage .feature p.quote {
|
||||
font-size: 20px;
|
||||
line-height: 28px !important;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1024px){
|
||||
.case-study {
|
||||
padding: 0 10%;
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
|
||||
.case-study img {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.case-study p.quote {
|
||||
margin-top: 20px !important;
|
||||
}
|
||||
|
||||
.case-study p.attrib {
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 900px){
|
||||
.gridPage #video main {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.gridPage #video main > div {
|
||||
width: 400px;
|
||||
}
|
||||
|
||||
.gridPage #video main > div + div {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.gridPage #video h3 {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 640px){
|
||||
.case-study {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.case-study:nth-child(3) {
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
.case-study img {
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
.gridPage .feature {
|
||||
margin-top: 50px;
|
||||
padding: 180px 0 0;
|
||||
}
|
||||
|
||||
.gridPage .feature img {
|
||||
top: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 480px){
|
||||
.gridPage #hero {
|
||||
padding-right: 20px;
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.gridPage #video main > div {
|
||||
width: 80%;
|
||||
min-width: 280px;
|
||||
}
|
||||
|
||||
.bullet {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
+2
-17
@@ -7,20 +7,5 @@
|
||||
```
|
||||
{: id="{{include.file | handleize}}"}
|
||||
{% endcapture %}
|
||||
<table class="includecode">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
{% if ghlink %}<a href="{{ghlink}}" download="{{include.file}}">{% endif %}
|
||||
<code>{{include.file}}</code>
|
||||
{% if ghlink %}</a>{% endif %}
|
||||
<img src="/images/copycode.svg" style="max-height:24px" onclick="copyCode('{{include.file | handleize}}')" title="Copy {{include.file}} to clipboard">
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ mysample | markdownify }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table class="includecode"><thead><tr><th>{% if ghlink %}<a href="{{ghlink}}" download="{{include.file}}">{% endif %}<code>{{include.file}}</code></a><img src="/images/copycode.svg" style="max-height:24px" onClick="copyCode('{{include.file | handleize}}')" title="Copy {{include.file}} to clipboard"></th></tr></thead>
|
||||
<tr><td>{{ mysample | markdownify }}</td></tr></table>
|
||||
@@ -1,6 +0,0 @@
|
||||
You need to either have a dynamic PersistentVolume provisioner with a default
|
||||
[StorageClass](/docs/user-guide/persistent-volumes/#storageclasses),
|
||||
or [statically provision PersistentVolumes](/docs/user-guide/persistent-volumes/#provisioning)
|
||||
yourself to satisfy the [PersistentVolumeClaims](/docs/user-guide/persistent-volumes/#persistentvolumeclaims)
|
||||
used here.
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<a href="#" id="feature-state-dialog-link" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-newwin"></span>{{ dialog_title }}</a>
|
||||
<div id="feature-state-dialog" class="ui-dialog-content" title="{{ dialog_title }}">
|
||||
{{ dialog_content | markdownify }}
|
||||
</div>
|
||||
{% raw %}<script>
|
||||
$(function(){
|
||||
|
||||
$( "#feature-state-dialog" ).dialog({
|
||||
autoOpen: false,
|
||||
width: {% endraw %}{{ dialog_width | default: "600" }}{% raw %},
|
||||
buttons: [
|
||||
{
|
||||
text: "Ok",
|
||||
click: function() {
|
||||
$( this ).dialog( "close" );
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
// Link to open the dialog
|
||||
$( "#feature-state-dialog-link" ).click(function( event ) {
|
||||
$( "#feature-state-dialog" ).dialog( "open" );
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
});
|
||||
</script>{% endraw %}
|
||||
@@ -1,13 +0,0 @@
|
||||
{% assign dialog_title = "alpha" %}
|
||||
{% capture dialog_content %}
|
||||
This feature is currently in a *alpha* state, meaning:
|
||||
|
||||
* The version names contain alpha (e.g. v1alpha1).
|
||||
* Might be buggy. Enabling the feature may expose bugs. Disabled by default.
|
||||
* Support for feature may be dropped at any time without notice.
|
||||
* The API may change in incompatible ways in a later software release without notice.
|
||||
* Recommended for use only in short-lived testing clusters, due to increased risk of bugs and lack of long-term support.
|
||||
|
||||
{% endcapture %}
|
||||
|
||||
**FEATURE STATE:** `Kubernetes {{ for_k8s_version | default: page.version }}` {% include feature-dialog.md %}
|
||||
@@ -1,14 +0,0 @@
|
||||
{% assign dialog_title = "beta" %}
|
||||
{% capture dialog_content %}
|
||||
This feature is currently in a *beta* state, meaning:
|
||||
|
||||
* The version names contain beta (e.g. v2beta3).
|
||||
* Code is well tested. Enabling the feature is considered safe. Enabled by default.
|
||||
* Support for the overall feature will not be dropped, though details may change.
|
||||
* The schema and/or semantics of objects may change in incompatible ways in a subsequent beta or stable release. When this happens, we will provide instructions for migrating to the next version. This may require deleting, editing, and re-creating API objects. The editing process may require some thought. This may require downtime for applications that rely on the feature.
|
||||
* Recommended for only non-business-critical uses because of potential for incompatible changes in subsequent releases. If you have multiple clusters that can be upgraded independently, you may be able to relax this restriction.
|
||||
* **Please do try our beta features and give feedback on them! After they exit beta, it may not be practical for us to make more changes.**
|
||||
|
||||
{% endcapture %}
|
||||
|
||||
**FEATURE STATE:** `Kubernetes {{ for_k8s_version | default: page.version }}` {% include feature-dialog.md %}
|
||||
@@ -1,6 +0,0 @@
|
||||
{% assign dialog_title = "deprecated" %}
|
||||
{% capture dialog_content %}
|
||||
This feature is *deprecated*. For more information on this state, see the [Kubernetes Deprecation Policy](/docs/reference/deprecation-policy/).
|
||||
{% endcapture %}
|
||||
|
||||
**DEPRECATION NOTICE:** As of `Kubernetes {{ for_k8s_version | default: page.version }}`, this has been {% include feature-dialog.md %}
|
||||
@@ -1,10 +0,0 @@
|
||||
{% assign dialog_title = "stable" %}
|
||||
{% capture dialog_content %}
|
||||
This feature is *stable*, meaning:
|
||||
|
||||
* The version name is vX where X is an integer.
|
||||
* Stable versions of features will appear in released software for many subsequent versions.
|
||||
|
||||
{% endcapture %}
|
||||
|
||||
**FEATURE STATE:** `Kubernetes {{ for_k8s_version | default: page.version }}` {% include feature-dialog.md %}
|
||||
@@ -1,8 +0,0 @@
|
||||
This guide assumes that you have a running Kubernetes Cluster
|
||||
Federation installation. If not, then head over to the
|
||||
[federation admin guide](/docs/tutorials/federation/set-up-cluster-federation-kubefed/) to learn how to
|
||||
bring up a cluster federation (or have your cluster administrator do
|
||||
this for you).
|
||||
Other tutorials, such as Kelsey Hightower's
|
||||
[Federated Kubernetes Tutorial](https://github.com/kelseyhightower/kubernetes-cluster-federation),
|
||||
might also help you create a Federated Kubernetes cluster.
|
||||
@@ -1,2 +0,0 @@
|
||||
The topics in the [Federation API](/docs/federation/api-reference/) section of the Kubernetes docs
|
||||
are being moved to the [Reference](/docs/reference/) section. The content in this topic has moved to:
|
||||
@@ -2,19 +2,19 @@
|
||||
|
||||
<style>
|
||||
.cse .gsc-control-cse, .gsc-control-cse, {
|
||||
padding: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.gsc-control-cse table, .gsc-control-cse-en table {
|
||||
margin:0px !important;
|
||||
margin:0px !important;
|
||||
}
|
||||
.gsc-above-wrapper-area {
|
||||
border-bottom: 0;
|
||||
border-bottom: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||
ga('create', 'UA-36037335-10', 'auto');
|
||||
@@ -22,32 +22,32 @@ ga('send', 'pageview');
|
||||
|
||||
// hide docs nav area if no nav is present, or if nav only contains a link to the current page
|
||||
(function () {
|
||||
window.addEventListener('DOMContentLoaded', init)
|
||||
window.addEventListener('DOMContentLoaded', init)
|
||||
|
||||
// play nice with our neighbors
|
||||
function init() {
|
||||
window.removeEventListener('DOMContentLoaded', init)
|
||||
hideNav()
|
||||
}
|
||||
// play nice with our neighbors
|
||||
function init() {
|
||||
window.removeEventListener('DOMContentLoaded', init)
|
||||
hideNav()
|
||||
}
|
||||
|
||||
function hideNav(toc){
|
||||
if (!toc) toc = document.querySelector('#docsToc')
|
||||
var container = toc.querySelector('.container')
|
||||
function hideNav(toc){
|
||||
if (!toc) toc = document.querySelector('#docsToc')
|
||||
var container = toc.querySelector('.container')
|
||||
|
||||
// container is built dynamically, so it may not be present on the first runloop
|
||||
if (container) {
|
||||
if (container.childElementCount === 0 || toc.querySelectorAll('a.item').length === 1) {
|
||||
toc.style.display = 'none'
|
||||
document.getElementById('docsContent').style.width = '100%'
|
||||
}
|
||||
} else {
|
||||
requestAnimationFrame(function () {
|
||||
hideNav(toc)
|
||||
})
|
||||
}
|
||||
}
|
||||
// container is built dynamically, so it may not be present on the first runloop
|
||||
if (container) {
|
||||
if (container.childElementCount === 0 || toc.querySelectorAll('a.item').length === 1) {
|
||||
toc.style.display = 'none'
|
||||
document.getElementById('docsContent').style.width = '100%'
|
||||
}
|
||||
} else {
|
||||
requestAnimationFrame(function () {
|
||||
hideNav(toc)
|
||||
})
|
||||
}
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
|
||||
<!-- Commenting out AnswerDash for now; we need to work on our list of questions/answers/design first
|
||||
<!-- Start of AnswerDash script <script>var AnswerDash;!function(e,t,n,s,a){if(!t.getElementById(s)){var i,r=t.createElement(n),c=t.getElementsByTagName(n)[0];e[a]||(i=e[a]=function(){i.__oninit.push(arguments)},i.__oninit=[]),r.type="text/javascript",r.async=!0,r.src="https://p1.answerdash.com/answerdash.min.js?siteid=756",r.setAttribute("id",s),c.parentNode.insertBefore(r,c)}}(window,document,"script","answerdash-script","AnswerDash");</script> <!-- End of AnswerDash script -->
|
||||
<!-- Start of AnswerDash script <script>var AnswerDash;!function(e,t,n,s,a){if(!t.getElementById(s)){var i,r=t.createElement(n),c=t.getElementsByTagName(n)[0];e[a]||(i=e[a]=function(){i.__oninit.push(arguments)},i.__oninit=[]),r.type="text/javascript",r.async=!0,r.src="https://p1.answerdash.com/answerdash.min.js?siteid=756",r.setAttribute("id",s),c.parentNode.insertBefore(r,c)}}(window,document,"script","answerdash-script","AnswerDash");</script> <!-- End of AnswerDash script -->
|
||||
+27
-32
@@ -1,34 +1,29 @@
|
||||
<footer>
|
||||
<main class="light-text">
|
||||
<nav>
|
||||
<a href="/docs/tutorials/stateless-application/hello-minikube/">Get Started</a>
|
||||
<a href="/docs/home/">Documentation</a>
|
||||
<a href="http://blog.kubernetes.io/">Blog</a>
|
||||
<a href="/partners/">Partners</a>
|
||||
<a href="/community/">Community</a>
|
||||
<a href="/case-studies/">Case Studies</a>
|
||||
</nav>
|
||||
<div class="social">
|
||||
<div>
|
||||
<a href="https://twitter.com/kubernetesio" class="twitter"><span>twitter</span></a>
|
||||
<a href="https://github.com/kubernetes/kubernetes" class="github"><span>Github</span></a>
|
||||
<a href="http://slack.k8s.io/" class="slack"><span>Slack</span></a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="http://stackoverflow.com/questions/tagged/kubernetes" class="stack-overflow"><span>Stack Overflow</span></a>
|
||||
<a href="https://groups.google.com/forum/#!forum/kubernetes-users" class="mailing-list"><span>Mailing List</span></a>
|
||||
<a href="https://calendar.google.com/calendar/embed?src=nt2tcnbtbied3l6gi2h29slvc0%40group.calendar.google.com" class="calendar"><span>Events Calendar</span></a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="/docs/setup/pick-right-solution/" class="button">Get Kubernetes</a>
|
||||
<a href="https://github.com/kubernetes/kubernetes" class="button">Contribute</a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="miceType" class="center">
|
||||
© {{ 'now' | date: "%Y" }} The Kubernetes Authors | Documentation Distributed under <a href="https://git.k8s.io/kubernetes.github.io/LICENSE" class="light-text">CC BY 4.0</a>
|
||||
</div>
|
||||
<div id="miceType" class="center">
|
||||
Copyright © {{ 'now' | date: "%Y" }} The Linux Foundation®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page: <a href="https://www.linuxfoundation.org/trademark-usage" class="light-text">https://www.linuxfoundation.org/trademark-usage</a>
|
||||
</div>
|
||||
</main>
|
||||
<main class="light-text">
|
||||
<nav>
|
||||
<a href="/docs/hellonode/">Get Started</a>
|
||||
<a href="/docs/">Documentation</a>
|
||||
<a href="http://blog.kubernetes.io/">Blog</a>
|
||||
<a href="/partners/">Partners</a>
|
||||
<a href="/community/">Community</a>
|
||||
<a href="/case-studies/">Case Studies</a>
|
||||
</nav>
|
||||
<div class="social">
|
||||
<div>
|
||||
<a href="https://twitter.com/kubernetesio" class="twitter"><span>twitter</span></a>
|
||||
<a href="https://github.com/kubernetes/kubernetes" class="github"><span>Github</span></a>
|
||||
<a href="http://slack.k8s.io/" class="slack"><span>Slack</span></a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="http://stackoverflow.com/questions/tagged/kubernetes" class="stack-overflow"><span>Stack Overflow</span></a>
|
||||
<a href="https://groups.google.com/forum/#!forum/kubernetes-users" class="mailing-list"><span>Mailing List</span></a>
|
||||
<a href="https://calendar.google.com/calendar/embed?src=nt2tcnbtbied3l6gi2h29slvc0%40group.calendar.google.com" class="calendar"><span>Events Calendar</span></a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="//get.k8s.io" class="button">Download K8s</a>
|
||||
<a href="https://github.com/kubernetes/kubernetes" class="button">Contribute to the K8s codebase</a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="miceType" class="center">© {{ 'now' | date: "%Y" }} The Kubernetes Authors | Distributed under <a href="https://github.com/kubernetes/kubernetes.github.io/blob/master/LICENSE" class="light-text">CC BY 4.0</a></div>
|
||||
</main>
|
||||
</footer>
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
{% if page.title %}{% assign title=page.title %}{% endif %}
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
{% if !page.no_canonical %}<link rel="canonical" href="http://kubernetes.io{{page.url}}" />{% endif %}
|
||||
<link rel="shortcut icon" type="image/png" href="/images/favicon.png">
|
||||
<link href='https://fonts.googleapis.com/css?family=Roboto:400,100,100italic,300,300italic,400italic,500,500italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
|
||||
<link rel="stylesheet" href='https://fonts.googleapis.com/css?family=Roboto+Mono' type='text/css'>
|
||||
<link rel="stylesheet" href="/css/styles.css"/>
|
||||
<link rel="stylesheet" href="/css/jquery-ui.min.css">
|
||||
<link rel="stylesheet" href="/css/sweetalert.css">
|
||||
<script src="/js/jquery-2.2.0.min.js"></script>
|
||||
<script src="/js/jquery-ui.min.js"></script>
|
||||
<script src="/js/script.js"></script>
|
||||
<script src="/js/sweetalert.min.js"></script>
|
||||
<script src="/js/bootstrap.min.js"></script>
|
||||
<title>Kubernetes - {{ title }}</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="cellophane" onclick="kub.toggleMenu()"></div>
|
||||
<header>
|
||||
<a href="/" class="logo"></a>
|
||||
<div class="nav-buttons" data-auto-burger="primary">
|
||||
<ul class="global-nav">
|
||||
<li>
|
||||
<a href="#">
|
||||
{{page.version}} <span class="ui-icon ui-icon-carat-1-s"></span>
|
||||
</a>
|
||||
<ul>
|
||||
{% for version in page.versions %}
|
||||
<li><a href="{{ version.url }}">{{ version.version }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</li>
|
||||
</li>
|
||||
</ul>
|
||||
<a href="/docs/" class="button" id="viewDocs" data-auto-burger-exclude>View Documentation</a>
|
||||
<a href="/docs/hellonode/" class="button" id="tryKubernetes" data-auto-burger-exclude>Try Kubernetes</a>
|
||||
<button id="hamburger" onclick="kub.toggleMenu()" data-auto-burger-exclude><div></div></button>
|
||||
</div>
|
||||
|
||||
<nav id="mainNav">
|
||||
<main data-auto-burger="primary">
|
||||
<div class="nav-box">
|
||||
<h3><a href="/docs/hellonode/">Get Started</a></h3>
|
||||
<p>Ready to get your hands dirty? Build a simple Kubernetes cluster that runs "Hello World" for Node.js.</p>
|
||||
</div>
|
||||
<div class="nav-box">
|
||||
<h3><a href="/docs/">Documentation</a></h3>
|
||||
<p>Learn how to use Kubernetes with the use of walkthroughs, samples, and reference documentation. You can even <a href="/editdocs/" data-auto-burger-exclude>help contribute to the docs</a>!</p>
|
||||
</div>
|
||||
<div class="nav-box">
|
||||
<h3><a href="/community/">Community</a></h3>
|
||||
<p>If you need help, you can connect with other Kubernetes users and the Kubernetes authors, attend community events, and watch video presentations from around the web.</p>
|
||||
</div>
|
||||
<div class="nav-box">
|
||||
<h3><a href="http://blog.kubernetes.io">Blog</a></h3>
|
||||
<p>Read the latest news for Kubernetes and the containers space in general, and get technical how-tos hot off the presses.</p>
|
||||
</div>
|
||||
</main>
|
||||
<main data-auto-burger="primary">
|
||||
<div class="left">
|
||||
<h5 class="github-invite">Interested in hacking on the core Kubernetes code base?</h5>
|
||||
<a href="https://github.com/kubernetes/kubernetes" class="button" data-auto-burger-exclude>View On Github</a>
|
||||
</div>
|
||||
|
||||
<div class="right">
|
||||
<h5 class="github-invite">Explore the community</h5>
|
||||
<div class="social">
|
||||
<a href="https://twitter.com/kubernetesio" class="twitter"><span>Twitter</span></a>
|
||||
<a href="https://github.com/kubernetes/kubernetes" class="github"><span>Github</span></a>
|
||||
<a href="http://slack.k8s.io/" class="slack"><span>Slack</span></a>
|
||||
<a href="http://stackoverflow.com/questions/tagged/kubernetes" class="stack-overflow"><span>Stack Overflow</span></a>
|
||||
<a href="https://groups.google.com/forum/#!forum/kubernetes-users" class="mailing-list"><span>Mailing List</span></a>
|
||||
<a href="https://calendar.google.com/calendar/embed?src=nt2tcnbtbied3l6gi2h29slvc0%40group.calendar.google.com" class="calendar"><span>Events Calendar</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear" style="clear: both"></div>
|
||||
</main>
|
||||
</nav>
|
||||
</header>
|
||||
+15
-25
@@ -1,27 +1,17 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="shortcut icon" type="image/png" href="/images/favicon.png">
|
||||
<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="/css/callouts.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.description %}
|
||||
<meta name="description" content="{{ page.description }}" />
|
||||
{% else %}
|
||||
<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="/js/script.js"></script>
|
||||
<script src="/js/sweetalert.min.js"></script>
|
||||
<script src="/js/bootstrap.min.js"></script>
|
||||
{% seo %}
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="shortcut icon" type="image/png" href="/images/favicon.png">
|
||||
<link href='https://fonts.googleapis.com/css?family=Roboto:400,100,100italic,300,300italic,400italic,500,500italic,700,700italic,900,900italic' rel='stylesheet' type='text/css'>
|
||||
<link rel="stylesheet" href='https://fonts.googleapis.com/css?family=Roboto+Mono' type='text/css'>
|
||||
<link rel="stylesheet" href="/css/styles.css"/>
|
||||
<link rel="stylesheet" href="/css/jquery-ui.min.css">
|
||||
<link rel="stylesheet" href="/css/sweetalert.css">
|
||||
{% if page.deprecated %}<link rel="stylesheet" type="text/css" href="/css/deprecation-warning.css">{% endif %}
|
||||
{% if page.class == "gridPage" %}<link rel="stylesheet" href="/css/gridpage.css">{% endif %}
|
||||
<script src="/js/jquery-2.2.0.min.js"></script>
|
||||
<script src="/js/jquery-ui.min.js"></script>
|
||||
<script src="/js/script.js"></script>
|
||||
<script src="/js/sweetalert.min.js"></script>
|
||||
<script src="/js/bootstrap.min.js"></script>
|
||||
</head>
|
||||
|
||||
@@ -5,11 +5,9 @@
|
||||
|
||||
<div class="nav-buttons" data-auto-burger="primary">
|
||||
<ul class="global-nav">
|
||||
<li><a href="/docs/home/">Documentation</a></li>
|
||||
<li><a href="/docs/">Documentation</a></li>
|
||||
<li><a href="http://blog.kubernetes.io/">Blog</a></li>
|
||||
<li><a href="/partners/">Partners</a></li>
|
||||
<li><a href="/community/">Community</a></li>
|
||||
<li><a href="/case-studies/">Case Studies</a></li>
|
||||
<li>
|
||||
<a href="#">
|
||||
{{page.version}} <span class="ui-icon ui-icon-carat-1-s"></span>
|
||||
|
||||
+49
-373
@@ -1,14 +1,21 @@
|
||||
;(function () {
|
||||
var partners = [
|
||||
{
|
||||
type: 2,
|
||||
type: 0,
|
||||
name: 'CoreOS',
|
||||
logo: 'core_os',
|
||||
link: 'https://tectonic.com/',
|
||||
blurb: 'Tectonic is the enterprise-ready Kubernetes product, by CoreOS. It adds key features to allow you to manage, update, and control clusters in production.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
type: 0,
|
||||
name: 'Deis',
|
||||
logo: 'deis',
|
||||
link: 'https://deis.com',
|
||||
blurb: 'Deis the creators of Helm, Workflow, and Steward, helps developers and operators build, deploy, manage and scale their applications on top of Kubernetes.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'StackPointCloud',
|
||||
logo: 'stackpoint',
|
||||
link: 'https://stackpoint.io',
|
||||
@@ -32,7 +39,7 @@
|
||||
type: 0,
|
||||
name: 'Citrix',
|
||||
logo: 'citrix',
|
||||
link: 'https://www.citrix.com/networking/microservices.html',
|
||||
link: 'http://wercker.com/workflows/partners/kubernetes/',
|
||||
blurb: 'Netscaler CPX gives app developers all the features they need to load balance their microservices and containerized apps with Kubernetes.'
|
||||
},
|
||||
{
|
||||
@@ -42,6 +49,13 @@
|
||||
link: 'https://www.cockroachlabs.com/blog/running-cockroachdb-on-kubernetes/',
|
||||
blurb: 'CockroachDB is a distributed SQL database whose built-in replication and survivability model pair with Kubernetes to truly make data easy.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'Skippbox',
|
||||
logo: 'skippbox',
|
||||
link: 'http://www.skippbox.com/tag/products/',
|
||||
blurb: 'Creator of Cabin the first mobile application for Kubernetes, and kompose. Skippbox’s solutions distill all the power of k8s in simple easy to use interfaces.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'Weave Works',
|
||||
@@ -53,15 +67,15 @@
|
||||
type: 0,
|
||||
name: 'Wercker',
|
||||
logo: 'wercker',
|
||||
link: 'http://www.wercker.com/integrations/kubernetes',
|
||||
link: 'http://wercker.com/workflows/partners/kubernetes/',
|
||||
blurb: 'Wercker automates your build, test and deploy pipelines for launching containers and triggering rolling updates on your Kubernetes cluster. '
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'Rancher Labs',
|
||||
logo: 'rancher-labs',
|
||||
name: 'Rancher',
|
||||
logo: 'rancher',
|
||||
link: 'http://rancher.com/kubernetes/',
|
||||
blurb: 'Rancher is an open-source, production-ready container management platform that makes it easy to deploy and manage Kubernetes.'
|
||||
blurb: 'Rancher is an open-source, production-ready container management platform that makes it easy to deploy and leverage Kubernetes in the enterprise.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
@@ -120,7 +134,7 @@
|
||||
blurb: 'Deep, automated security for your containers running on Kubernetes.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
type: 0,
|
||||
name: 'Canonical',
|
||||
logo: 'canonical',
|
||||
link: 'https://jujucharms.com/canonical-kubernetes/',
|
||||
@@ -169,14 +183,14 @@
|
||||
blurb: 'Aporeto makes cloud-native applications secure by default without impacting developer velocity and works at any scale, on any cloud.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
type: 0,
|
||||
name: 'Giant Swarm',
|
||||
logo: 'giant_swarm',
|
||||
link: 'https://giantswarm.io',
|
||||
blurb: 'Giant Swarm provides fully-managed Kubernetes Clusters in your location of choice, so you can focus on your product.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
type: 0,
|
||||
name: 'Mirantis',
|
||||
logo: 'mirantis',
|
||||
link: 'https://content.mirantis.com/Containerizing-OpenStack-on-Kubernetes-Video-Landing-Page.html',
|
||||
@@ -204,28 +218,42 @@
|
||||
blurb: 'ReactiveOps has written automation on best practices for infrastructure as code on GCP & AWS using Kubernetes, helping you build and maintain a world-class infrastructure at a fraction of the price of an internal hire.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
type: 1,
|
||||
name: 'Livewyer',
|
||||
logo: 'livewyer',
|
||||
link: 'https://livewyer.io/services/kubernetes-experts/',
|
||||
blurb: 'Kubernetes experts that on-board applications and empower IT teams to get the most out of containerised technology.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
type: 1,
|
||||
name: 'Deis',
|
||||
logo: 'deis',
|
||||
link: 'https://deis.com/services/',
|
||||
blurb: 'Deis provides professional services and 24x7 operational support for any Kubernetes cluster managed by our global cluster operations team.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'StackPointCloud',
|
||||
logo: 'stackpoint',
|
||||
link: 'https://stackpoint.io',
|
||||
blurb: 'StackPointCloud offers a wide range of support plans for managed Kubernetes clusters built through its universal control plane for Kubernetes Anywhere.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'Samsung SDS',
|
||||
logo: 'samsung_sds',
|
||||
link: 'http://www.samsungsdsa.com/cloud-infrastructure_kubernetes',
|
||||
blurb: 'Samsung SDS’s Cloud Native Computing Team offers expert consulting across the range of technical aspects involved in building services targeted at a Kubernetes cluster.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
type: 1,
|
||||
name: 'Container Solutions',
|
||||
logo: 'container_solutions',
|
||||
link: 'http://container-solutions.com/resources/kubernetes/',
|
||||
blurb: 'Container Solutions is a premium software consultancy that focuses on programmable infrastructure, offering our expertise in software development, strategy and operations to help you innovate at speed and scale.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
type: 1,
|
||||
name: 'Jetstack',
|
||||
logo: 'jetstack',
|
||||
link: 'https://www.jetstack.io/',
|
||||
@@ -235,7 +263,7 @@
|
||||
type: 0,
|
||||
name: 'Tigera',
|
||||
logo: 'tigera',
|
||||
link: 'http://docs.projectcalico.org/latest/getting-started/kubernetes/',
|
||||
link: 'http://docs.projectcalico.org/v1.5/getting-started/kubernetes/',
|
||||
blurb: 'Tigera builds high performance, policy driven, cloud native networking solutions for Kubernetes.'
|
||||
},
|
||||
{
|
||||
@@ -251,360 +279,16 @@
|
||||
logo: 'harbur',
|
||||
link: 'https://harbur.io/',
|
||||
blurb: 'Based in Barcelona, Harbur is a consulting firm that helps companies deploy self-healing solutions empowered by Container technologies'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
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'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'InwinSTACK',
|
||||
logo: 'inwinstack',
|
||||
link: 'http://www.inwinstack.com/index.php/en/solutions-en/',
|
||||
blurb: 'Our container service leverages OpenStack-based infrastructure and its container orchestration engine Magnum to manage Kubernetes clusters.'
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'Semantix',
|
||||
logo: 'semantix',
|
||||
link: 'http://www.semantix.com.br/',
|
||||
blurb: 'Semantix is a company that works with data analytics and distributed systems. Kubernetes is used to orchestrate services for our customers.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'ASM Technologies Limited',
|
||||
logo: 'asm',
|
||||
link: 'http://www.asmtech.com/',
|
||||
blurb: 'Our technology supply chain portfolio enables your software products to be accessible, viable and available more effectively.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'InfraCloud Technologies',
|
||||
logo: 'infracloud',
|
||||
link: 'http://blog.infracloud.io/state-of-kubernetes/',
|
||||
blurb: 'InfraCloud Technologies is software consultancy which provides services in Containers, Cloud and DevOps.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'SignalFx',
|
||||
logo: 'signalfx',
|
||||
link: 'https://github.com/signalfx/integrations/tree/master/kubernetes',
|
||||
blurb: 'Gain real-time visibility across metrics & the most intelligent alerts for todays architectures, including deep integration with Kubernetes'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'NATS',
|
||||
logo: 'nats',
|
||||
link: 'https://github.com/pires/kubernetes-nats-cluster',
|
||||
blurb: 'NATS is a simple, secure, and scalable cloud native messaging system.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'RX-M',
|
||||
logo: 'rxm',
|
||||
link: 'http://rx-m.com/training/kubernetes-training/',
|
||||
blurb: 'Market neutral Kubernetes Dev, DevOps and Production training and consulting services'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'Emerging Technology Advisors',
|
||||
logo: 'eta',
|
||||
link: 'https://www.emergingtechnologyadvisors.com/services/kubernetes.html',
|
||||
blurb: 'ETA helps companies architect, implement, and manage scalable applications using Kubernetes on on public or private cloud.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'CloudPlex.io',
|
||||
logo: 'cloudplex',
|
||||
link: 'http://www.cloudplex.io',
|
||||
blurb: 'CloudPlex enables operations teams to visually deploy, orchestrate, manage, and monitor infrastructure, applications, and services in public or private cloud.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
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.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'CA Technologies',
|
||||
logo: 'ca',
|
||||
link: 'https://www.ca.com/us/products/application-deployment.html',
|
||||
blurb: 'The RA CDE Kubernetes plugin enables an automated process for pushing changes to production by applying standard Kubernetes YAML files'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'CoScale',
|
||||
logo: 'coscale',
|
||||
link: 'http://www.coscale.com/blog/how-to-monitor-your-kubernetes-cluster',
|
||||
blurb: 'Full stack monitoring of containers and microservices orchestrated by Kubernetes. Powered by anomaly detection to find problems faster.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'Supergiant.io',
|
||||
logo: 'supergiant',
|
||||
link: 'https://supergiant.io/blog/supergiant-packing-algorithm-unique-save-money',
|
||||
blurb: 'Supergiant autoscales hardware for Kubernetes. Open-source, it makes HA, distributed, stateful apps easy to deploy, manage, and scale.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'Avi Networks',
|
||||
logo: 'avinetworks',
|
||||
link: 'https://kb.avinetworks.com/avi-vantage-openshift-installation-guide/',
|
||||
blurb: 'Avis elastic application services fabric provides scalable, feature rich & integrated L4-7 networking for K8S environments.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'codecrux web technologies pvt ltd',
|
||||
logo: 'codecrux',
|
||||
link: 'http://codecrux.com/kubernetes/',
|
||||
blurb: 'At CodeCrux we help your organization get the most out of Containers and Kubernetes, regardless of where you are in your journey'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'Greenqloud',
|
||||
logo: 'qstack',
|
||||
link: 'https://www.qstack.com/application-orchestration/',
|
||||
blurb: 'Qstack provides self-serviceable on-site Kubernetes clusters with an intuitive User Interface for Infrastructure and Kubernetes management.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'StackOVerdrive.io',
|
||||
logo: 'stackoverdrive',
|
||||
link: 'http://www.stackoverdrive.net/kubernetes-consulting/',
|
||||
blurb: 'We are a devops consulting firm and we do alot of work with containers and Kunbernetes is one of our go to tools.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'StackIQ, Inc.',
|
||||
logo: 'stackiq',
|
||||
link: 'https://www.stackiq.com/kubernetes/',
|
||||
blurb: 'With Stacki and the Stacki Pallet for Kubernetes, you can go from bare metal to containers in one step very quickly and easily.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'Cobe',
|
||||
logo: 'cobe',
|
||||
link: 'https://cobe.io/product-page/',
|
||||
blurb: 'Manage Kubernetes clusters with a live, searchable model that captures all relationships and performance data in full visualised context.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'Datawire',
|
||||
logo: 'datawire',
|
||||
link: 'http://www.datawire.io',
|
||||
blurb: 'Datawires open source tools let your microservices developers be awesomely productive on Kubernetes, while letting ops sleep at night.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'Mashape, Inc.',
|
||||
logo: 'mashape',
|
||||
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.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'F5 Networks',
|
||||
logo: 'f5networks',
|
||||
link: 'http://github.com/f5networks',
|
||||
blurb: 'We have a LB integration into Kubernetes.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'Lovable Tech',
|
||||
logo: 'lovable',
|
||||
link: 'http://lovable.tech/',
|
||||
blurb: 'World class engineers, designers, and strategic consultants helping you ship Lovable web & mobile technology.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'StackState',
|
||||
logo: 'stackstate',
|
||||
link: 'http://stackstate.com/platform/container-monitoring',
|
||||
blurb: 'Operational Analytics across teams and tools. Includes topology visualization, root cause analysis and anomaly detection for Kubernetes.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'INEXCCO INC',
|
||||
logo: 'inexcco',
|
||||
link: 'https://www.inexcco.com/',
|
||||
blurb: 'Strong DevOps and Cloud talent working with couple clients on kubernetes and helm implementations. '
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'Bitnami',
|
||||
logo: 'bitnami',
|
||||
link: 'http://bitnami.com/kubernetes',
|
||||
blurb: 'Bitnami brings a catalog of trusted, up to date, and easy to use applications and application building blocks to Kubernetes.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'Nebulaworks',
|
||||
logo: 'nebulaworks',
|
||||
link: 'http://www.nebulaworks.com/container-platforms',
|
||||
blurb: 'Nebulaworks provides services to help the enterprise adopt modern container platforms and optimized processes to enable innovation at scale.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'EASYNUBE LTD',
|
||||
logo: 'easynube',
|
||||
link: 'https://www.carrefour.es/supermercado/?ic_source=portal-home&ic_medium=menu-links&ic_content=section-home',
|
||||
blurb: 'Provide consultancy, architecture and implementation'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'Opcito Technologies',
|
||||
logo: 'opcito',
|
||||
link: 'http://www.opcito.com/kubernetes/',
|
||||
blurb: 'Opcito is a software consultancy that uses Kubernetes to help organisations build, architect & deploy highly scalable applications.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'Huawei Technologies Co., Ltd.',
|
||||
logo: 'huawei',
|
||||
link: 'http://developer.huawei.com/ict/en/site-paas',
|
||||
blurb: 'FusionStage is an enterprise-grade PaaS, the core of which is based on open source container technology including Kubernetes and Docker.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: '{code} by Dell EMC',
|
||||
logo: 'codedellemc',
|
||||
link: 'https://blog.codedellemc.com',
|
||||
blurb: 'Respected as a thought leader in storage persistence for containerized applications. Contributed significant work to K8 and Ecosystem'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'SUSE Llc.',
|
||||
logo: 'suse',
|
||||
link: 'https://www.suse.com/products/caas-platform/',
|
||||
blurb: 'SUSE delivers Kubernetes as part of SUSE CaaS Platform and SUSE OpenStack Cloud, for enterprises that want truly open, open source solutions for cloud-native applications.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'Instana',
|
||||
logo: 'instana',
|
||||
link: 'https://www.instana.com/supported-technologies/',
|
||||
blurb: 'Instana monitors the infrastructure, containers and services deployed on a Kubernetes cluster.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'Netsil',
|
||||
logo: 'netsil',
|
||||
link: 'https://netsil.com/kubernetes/',
|
||||
blurb: 'Generate a real-time, auto-discovered application topology map! Monitor Kubernetes pods and namespaces without any code instrumentation.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'Treasure Data',
|
||||
logo: 'treasure-data',
|
||||
link: 'https://fluentd.treasuredata.com/kubernetes-logging/',
|
||||
blurb: 'Fluentd Enterprise brings smart, secure logging to Kubernetes, and brings integrations with backends such as Splunk, Kafka, or AWS S3.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'IBM',
|
||||
logo: 'IBM',
|
||||
link: 'https://www.ibm.com/cloud-computing/bluemix/containers',
|
||||
blurb: 'IBM Container Service is a managed k8s environment with built-in cluster security and isolation while leveraging services including Watson, IoT, Weather, etc.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'Kenzan',
|
||||
logo: 'Kenzan',
|
||||
link: 'http://kenzan.com/?ref=kubernetes',
|
||||
blurb: 'Kenzan is a software engineering and full-service consulting firm that provides customized, end-to-end solutions that drive change through digital transformation.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'Kublr',
|
||||
logo: 'kublr',
|
||||
link: 'http://kublr.com',
|
||||
blurb: 'Simplify your Kubernetes experience with a fully production-ready, enterprise-grade cluster management platform.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'Endocode AG',
|
||||
logo: 'endocode',
|
||||
link: 'https://endocode.com/kubernetes/',
|
||||
name: 'Endocode',
|
||||
logo: 'endocode',
|
||||
link: 'https://endocode.com/kubernetes/',
|
||||
blurb: 'Endocode practices and teaches the open source way. Kernel to cluster - Dev to Ops. We offer Kubernetes trainings, services and support.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'Accenture',
|
||||
logo: 'accenture',
|
||||
link: 'https://www.accenture.com/us-en/service-application-containers',
|
||||
blurb: 'Architecture, implementation and operation of world-class Kubernetes solutions for cloud-native clients.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'Biarca',
|
||||
logo: 'biarca',
|
||||
link: 'http://biarca.io/',
|
||||
blurb: 'Biarca is a cloud services provider and key focus areas Key areas of focus for Biarca include Cloud Adoption Services, Infrastructure Services, DevOps Services and Application Services. Biarca leverages Kubernetes to deliver containerized solutions.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'Claranet',
|
||||
logo: 'claranet',
|
||||
link: 'http://www.claranet.co.uk/hosting/google-cloud-platform-consulting-managed-services',
|
||||
blurb: 'Claranet helps people migrate to the cloud and take full advantage of the new world it offers. We consult, design, build and proactively manage the right infrastructure and automation tooling for clients to achieve this.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'CloudKite',
|
||||
logo: 'cloudkite',
|
||||
link: 'https://cloudkite.io/',
|
||||
blurb: 'CloudKite.io helps companies build and maintain highly automated, resilient, and impressively performing software on Kubernetes.'
|
||||
},
|
||||
{
|
||||
type: 1,
|
||||
name: 'CloudOps',
|
||||
logo: 'CloudOps',
|
||||
link: 'https://www.cloudops.com/services/docker-and-kubernetes-workshops/',
|
||||
blurb: 'CloudOps gets you hands-on with the K8s ecosystem via workshop/lab. Get prod ready K8s in cloud(s) of your choice with our managed services.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'Ghostcloud',
|
||||
logo: 'ghostcloud',
|
||||
link: 'https://www.ghostcloud.cn/ecos-kubernetes',
|
||||
blurb: 'EcOS is an enterprise-grade PaaS / CaaS based on Docker and Kubernetes, which makes it easier to configure, deploy and manage containerized applications.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'Contino',
|
||||
logo: 'contino',
|
||||
link: 'https://www.contino.io/',
|
||||
blurb: 'We help enterprise organizations adopt DevOps, containers and cloud computing. Contino is a global consultancy that enables regulated organizations to accelerate innovation through the adoption of modern approaches to software delivery.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'Heptio',
|
||||
logo: 'heptio',
|
||||
link: 'http://heptio.com',
|
||||
blurb: 'Heptio helps businesses of all sizes get closer to the vibrant Kubernetes community.'
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
name: 'Booz Allen Hamilton',
|
||||
logo: 'boozallenhamilton',
|
||||
link: 'https://www.boozallen.com/',
|
||||
blurb: 'Booz Allen partners with public and private sector clients to solve their most difficult challenges through a combination of consulting, analytics, mission operations, technology, systems delivery, cybersecurity, engineering, and innovation expertise.'
|
||||
},
|
||||
{
|
||||
type: 0,
|
||||
name: 'Applatix',
|
||||
logo: 'applatix',
|
||||
link: 'https://applatix.com/applatix-product/',
|
||||
blurb: 'Applatix helps build and run containerized apps on public cloud using Docker and Kubernetes.'
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
var kcspContainer = document.getElementById('kcspContainer')
|
||||
var isvContainer = document.getElementById('isvContainer')
|
||||
var servContainer = document.getElementById('servContainer')
|
||||
|
||||
@@ -637,15 +321,7 @@
|
||||
box.appendChild(img)
|
||||
box.appendChild(div)
|
||||
|
||||
var container;
|
||||
if (obj.type === 0) {
|
||||
container = isvContainer;
|
||||
} else if (obj.type === 1) {
|
||||
container = servContainer;
|
||||
} else if (obj.type === 2) {
|
||||
container = kcspContainer;
|
||||
}
|
||||
|
||||
var container = obj.type ? servContainer : isvContainer
|
||||
container.appendChild(box)
|
||||
})
|
||||
})();
|
||||
|
||||
@@ -1,65 +1,5 @@
|
||||
/* SECTIONS */
|
||||
.section {
|
||||
clear: both;
|
||||
padding: 0px;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
/* COLUMN SETUP */
|
||||
.col {
|
||||
display: block;
|
||||
float:left;
|
||||
margin: 1% 0 1% 1.6%;
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
.col:first-child { margin-left: 0; }
|
||||
|
||||
|
||||
/* GROUPING */
|
||||
.group:before,
|
||||
.group:after {
|
||||
content:"";
|
||||
display:table;
|
||||
}
|
||||
.group:after {
|
||||
clear:both;
|
||||
}
|
||||
.group {
|
||||
zoom:1; /* For IE 6/7 */
|
||||
}
|
||||
|
||||
/* GRID OF THREE */
|
||||
.span_3_of_3 {
|
||||
width: 32.2%;
|
||||
background-color: #f9f9f9;
|
||||
padding: 20px;
|
||||
}
|
||||
.span_2_of_3 {
|
||||
width: 32.2%;
|
||||
background-color: #f9f9f9;
|
||||
padding: 20px;
|
||||
}
|
||||
.span_1_of_3 {
|
||||
width: 32.2%;
|
||||
background-color: #f9f9f9;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
/* GO FULL WIDTH AT LESS THAN 480 PIXELS */
|
||||
|
||||
@media only screen and (max-width: 480px) {
|
||||
.col { margin: 1% 0 1% 0%;}
|
||||
.span_3_of_3, .span_2_of_3, .span_1_of_3 { width: 100%; }
|
||||
}
|
||||
|
||||
.button{
|
||||
max-width: 100%;
|
||||
line-height: 14px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 16px;
|
||||
font-size: 18px;
|
||||
line-height: 1.5em;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
@@ -69,7 +9,7 @@ h5 {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
|
||||
#kcspContainer, #isvContainer, #servContainer {
|
||||
#isvContainer, #servContainer {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
@@ -81,10 +21,6 @@ h5 {
|
||||
margin-bottom: 80px;
|
||||
}
|
||||
|
||||
#kcspContainer {
|
||||
margin-bottom: 80px;
|
||||
}
|
||||
|
||||
.partner-box {
|
||||
position: relative;
|
||||
width: 47%;
|
||||
@@ -122,7 +58,7 @@ h5 {
|
||||
}
|
||||
|
||||
@media screen and (max-width: 568px) {
|
||||
#kcspContainer, #isvContainer, #servContainer {
|
||||
#isvContainer, #servContainer {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
@@ -140,7 +76,7 @@ h5 {
|
||||
}
|
||||
|
||||
@media screen and (max-width: 568px) {
|
||||
#kcspContainer, #isvContainer, #servContainer {
|
||||
#isvContainer, #servContainer {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
{% assign tabsraw = tabspec | newline_to_br | split: '<br />' %}
|
||||
{% assign tabsetname = tabsraw[0] %}
|
||||
<script>$(function(){$("#{{tabsetname}}").tabs();});</script>
|
||||
<div id="{{tabsetname}}">
|
||||
<ul>{% for tab in tabsraw offset:1 %}{% assign thisTab = tab | split: ',' %}
|
||||
<li><a href="#{{ thisTab[0] | strip | handleize }}">{{ thisTab[0] | strip}}</a></li>{% endfor %}
|
||||
</ul>
|
||||
{% for tab in tabsraw offset:1 %}
|
||||
{% assign thisTab = tab | split: ',' %}
|
||||
{% assign tabLang=thisTab[1] %}
|
||||
{% assign tabFile=thisTab[2] %}
|
||||
{% assign tabGHLink=thisTab[3] %}
|
||||
<div id="{{ thisTab[0] | strip | handleize }}">
|
||||
{% include code.html language=tabLang file=tabFile ghlink=tabGHLink %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
@@ -1,15 +0,0 @@
|
||||
{% comment %} See /docs/tabs-example.md for usage example. {% endcomment %}
|
||||
{% assign tab_set_id = tab_set_name | default: "tabset" | slugify %}
|
||||
<div id="{{tab_set_id}}">
|
||||
<ul>
|
||||
{% for name in tab_names %}
|
||||
<li><a href="#{{tab_set_id}}-{{forloop.index0}}">{{ name | strip }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% for content in tab_contents %}
|
||||
<div id="{{tab_set_id}}-{{forloop.index0}}">
|
||||
{{ content | markdownify }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<script>$(function(){$("#{{tab_set_id}}").tabs();});</script>
|
||||
@@ -1,15 +0,0 @@
|
||||
<!-- Use include_cached when incorporating this file, in order to reduce computation/build time -->
|
||||
|
||||
{% assign glossary_terms = site.data.glossary | where_exp: "term", "term.id != '_example'" %}
|
||||
|
||||
{% assign tag_map = "" | split: " " %}
|
||||
|
||||
{% for tag in site.data.canonical-tags %}
|
||||
|
||||
{% assign term_list = glossary_terms | where_exp:"term", "term.tags contains tag" | map: "id" %}
|
||||
|
||||
{% assign tag_obj = "" | split: " " | push: tag | push: term_list %}
|
||||
|
||||
{% assign tag_map = tag_map | push: tag_obj %}
|
||||
|
||||
{% endfor %}
|
||||
@@ -1,8 +1,4 @@
|
||||
You need to have a Kubernetes cluster, and the kubectl command-line tool must
|
||||
be configured to communicate with your cluster. If you do not already have a
|
||||
cluster, you can create one by using
|
||||
[Minikube](/docs/getting-started-guides/minikube),
|
||||
or you can use one of these Kubernetes playgrounds:
|
||||
|
||||
* [Katacoda](https://www.katacoda.com/courses/kubernetes/playground)
|
||||
* [Play with Kubernetes](http://labs.play-with-k8s.com/)
|
||||
[Minikube](/docs/getting-started-guides/minikube).
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
{% if whatsnext %}
|
||||
|
||||
## What's next
|
||||
### What's next
|
||||
|
||||
{{ whatsnext }}
|
||||
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
# Kubernetes Glossary
|
||||
|
||||
To write a glossary snippet, start with a copy of the template, [`/_data/glossary/_example.yml`](/_data/glossary/_example.yml). Make sure to provide (or omit) values for the following fields:
|
||||
|
||||
* (Required) `id`.
|
||||
* 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.
|
||||
* (Required) `tags`.
|
||||
* Must be one of the tags listed in kubernetes.github.io/_data/canonical-terms-tags.yml.
|
||||
* (Required) `short description`.
|
||||
* Make sure to replace the instructional text in the template with your content.
|
||||
* (Optional) `formerly` and `related`.
|
||||
* If you do not provide these values, remove the fields.
|
||||
* (Optional) `long description`.
|
||||
* If you do not provide a long description, remove the field -- that is, the complete key-value pair.
|
||||
|
||||
The `_example.yml` template also contains basic information about how to write your snippet. For additional guidance, continue reading this readme.
|
||||
|
||||
## Glossary snippet style guide
|
||||
|
||||
This style guide supplements the guidance provided in the glossary template. It's intended to help you think about what and how to write glossary definitions. For more general guidance on style, consult [the core docs style guide](https://kubernetes.io/docs/home/contribute/style-guide/).
|
||||
|
||||
### Minimum viable snippet:
|
||||
|
||||
Every snippet must include at least the short description. The long description is optional, but should be provided for terms that need additional clarification. For consistency with existing *Concept* definitions, *write your definitions as if the term is plural*.
|
||||
|
||||
**short-description** (Required): One line (or two short lines) that provides a minimum definition. Do not repeat the term. Prefer fragments. Model after tooltips. End with a period.
|
||||
|
||||
**long-description** (Optional): Longer additional text to appear after (in conjunction with) short description. Provide in cases where the short description is not sufficient for the intro paragraph to a topic. Write complete but concise sentences.
|
||||
|
||||
### Examples
|
||||
|
||||
```yaml
|
||||
- name: Pod
|
||||
- tags:
|
||||
- Fundamental
|
||||
- Workload
|
||||
- API Object
|
||||
- short-description: The smallest and simplest Kubernetes objects. Represent a set of running processes on your cluster.
|
||||
- long-description: Pods most often run only a single container, and are managed by a Deployment.
|
||||
```
|
||||
|
||||
```yaml
|
||||
- name: Deployment
|
||||
- tags:
|
||||
- Fundamental
|
||||
- Workload
|
||||
- API Object
|
||||
- short-description: Controllers that provide declarative updates for Pods and ReplicaSets.
|
||||
- long-description: Deployments are responsible for creating and updating instances of an application.
|
||||
```
|
||||
|
||||
### Thinking about definitions
|
||||
|
||||
* **Think of the short description as it would appear in a tooltip.** Is it sufficient to get the reader started? Is it short enough to be read inside a small UI element?
|
||||
|
||||
*Tip*: look at the API reference doc content (for example, https://kubernetes.io/docs/api-reference/v1.7/). Note, however, that this content should be used with care. The concept docs for Pod, for example, are clearer than the reference docs.
|
||||
|
||||
* **The long description should follow the short description to make a complete introduction to a topic.** (This is the content that appears at the top of the content, before any generated TOC.) Does it provide information that's not already clear from the short description? Does it provide information that readers should have a general sense of before they dive into the details of the topic it helps introduce?
|
||||
|
||||
*Tip:* the long description does not need to be long; it's intended to extend but not replace the short description. Look through current related docs for ideas. (The Deployment long description is taken from a tutorial, for example.)
|
||||
@@ -1,10 +0,0 @@
|
||||
### ERROR: You must define a <span style="font-family: monospace">`{{ include.missing_block }}`</span> field
|
||||
{: style="color:red" }
|
||||
|
||||
The glossary template requires that you provide text that {{ include.purpose }}.
|
||||
|
||||
To get rid of this message and take advantage of this template, define the `{{ include.missing_block }}`
|
||||
field for the `{{ include.term }}` glossary term and populate it with content.
|
||||
|
||||
See `_data/glossary/_example.yml` for reference.
|
||||
<!-- TEMPLATE_ERROR -->
|
||||
@@ -1,25 +0,0 @@
|
||||
{% assign term_data = site.data.glossary.[include.term] %}
|
||||
|
||||
{% if term_data.short-description %}
|
||||
|
||||
{{ term_data.short-description | markdownify }}
|
||||
|
||||
{% else %}
|
||||
|
||||
{% include templates/glossary/_error.md term=term_data.name missing_block='short-description' purpose='concisely describes the key term in 1-2 lines' %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if include.length == "long" %}
|
||||
|
||||
{% if term_data.long-description %}
|
||||
|
||||
{{ term_data.long-description | markdownify }}
|
||||
|
||||
{% else %}
|
||||
|
||||
{% include templates/glossary/_error.md term=term_data.name missing_block='long-description' purpose='describes the key term in greater depth, supplementing the short-description' %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
@@ -0,0 +1,121 @@
|
||||
{% if page.cards %}<!-- check for this before going any further; if not present, skip to else at bottom -->
|
||||
<style>
|
||||
h2, h3, h4 {
|
||||
border-bottom: 0px !important;
|
||||
font-size: 22px !important;
|
||||
padding-bottom: 20px !important;
|
||||
}
|
||||
.colContainer {
|
||||
padding-top:2px;
|
||||
padding-left: 2px;
|
||||
overflow: auto;
|
||||
}
|
||||
#samples a {
|
||||
color: #000;
|
||||
}
|
||||
.col3rd {
|
||||
display: block;
|
||||
float: left;
|
||||
margin-right: 30px;
|
||||
margin-bottom: 30px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.col3rd h3, .col2nd h3 {
|
||||
margin-bottom: 0px !important;
|
||||
}
|
||||
.col3rd .button, .col2nd .button {
|
||||
margin-top: 20px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.col3rd p, .col2nd p {
|
||||
margin-left: 2px;
|
||||
}
|
||||
.col2nd {
|
||||
display: block;
|
||||
width: 400px;
|
||||
float: left;
|
||||
margin-right: 30px;
|
||||
margin-bottom: 30px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.shadowbox {
|
||||
width: 250px;
|
||||
display: inline;
|
||||
float: left;
|
||||
text-transform: none;
|
||||
font-weight: bold;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
line-height: 24px;
|
||||
position: relative;
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
box-shadow: 0 2px 2px rgba(0,0,0,.24),0 0 2px rgba(0,0,0,.12);
|
||||
border-radius: 5px;
|
||||
background: #fff;
|
||||
transition: all .3s;
|
||||
padding: 16px;
|
||||
margin: 0 16px 16px 0;
|
||||
text-decoration: none;
|
||||
letter-spacing: .01em;
|
||||
height: 220px;
|
||||
}
|
||||
.shadowbox img {
|
||||
min-width: 100px;
|
||||
max-width: 100px;
|
||||
max-height: 50px;
|
||||
margin-right: 5px;
|
||||
margin-bottom: 5px;
|
||||
float: left;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="colContainer">
|
||||
{% for card in page.cards %}{% if card.title %}
|
||||
<div class="col3rd shadowbox">
|
||||
<h3>{{card.title}}</h3>
|
||||
<p>{% if card.image %}<img src="{{card.image}}">{% endif %}{{card.description}}</p>
|
||||
</div>
|
||||
{% endif %}{% endfor %}
|
||||
</div>
|
||||
|
||||
{% else %}
|
||||
|
||||
### ERROR: You must define "cards" front-matter YAML
|
||||
{: style="color:red" }
|
||||
|
||||
This template requires that you insert YAML at the top of your document
|
||||
that defines the "cards" you'd like to display on the page. The cards will
|
||||
render in clickable boxes.
|
||||
|
||||
To get rid of this message and take advantage of this template, define `cards`:
|
||||
|
||||
```yaml
|
||||
---
|
||||
cards:
|
||||
- progression: no
|
||||
- card:
|
||||
title: Mean Stack
|
||||
image: /docs/meanstack/image_0.png
|
||||
description: Lorem ipsum dolor it verberum.
|
||||
- card:
|
||||
title: Guestbook + Redis
|
||||
image: /images/docs/redis.svg
|
||||
description: Lorem ipsum dolor it verberum.
|
||||
- card:
|
||||
title: Cloud Native Cassandra
|
||||
image: /images/docs/cassandra.svg
|
||||
description: Lorem ipsum dolor it verberum.
|
||||
- card:
|
||||
title: WordPress + MySQL
|
||||
image: /images/docs/wordpress.svg
|
||||
description: Lorem ipsum dolor it verberum.
|
||||
---
|
||||
```
|
||||
|
||||
**Note:** If `progression` is set to `yes` then a "Start Here!" icon will be
|
||||
placed on the first card and arrows suggesting linear reading will be overlayed
|
||||
between the other cards, telling the reader that they should explore the content
|
||||
in a certain order.
|
||||
|
||||
{% endif %}
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
{% if prerequisites %}
|
||||
|
||||
## Before you begin
|
||||
### Before you begin
|
||||
|
||||
{{ prerequisites }}
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
{% if whatsnext %}
|
||||
|
||||
## What's next
|
||||
### What's next
|
||||
|
||||
{{ whatsnext }}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
{% if objectives %}
|
||||
|
||||
## Objectives
|
||||
### Objectives
|
||||
|
||||
{{ objectives }}
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
{% if prerequisites %}
|
||||
|
||||
## Before you begin
|
||||
### Before you begin
|
||||
|
||||
{{ prerequisites }}
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
{% if cleanup %}
|
||||
|
||||
## Cleaning up
|
||||
### Cleaning up
|
||||
|
||||
{{ cleanup }}
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
{% if whatsnext %}
|
||||
|
||||
## What's next
|
||||
### What's next
|
||||
|
||||
{{ whatsnext }}
|
||||
|
||||
|
||||
@@ -1,15 +1 @@
|
||||
{% capture whitespace %}
|
||||
{% for item in include.tree %}
|
||||
{% if found_toc %}
|
||||
{% break %}
|
||||
{% endif %}
|
||||
{% if item.section %}
|
||||
{% include tocsearch.html tree=item.section toc=include.toc %}
|
||||
{% else %}
|
||||
{% if item == page.path %}
|
||||
{% assign found_toc = include.toc %}
|
||||
{% break %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endcapture %}
|
||||
{% for item in tree %}{% if item.section %}{% assign tree = item.section %}{% include tocsearch.html %}{% else %}{% if item.path == page.url %}{% assign foundTOC = thistoc %}{% assign title = item.title %}{% break %}{% endif %}{% endif %}{% endfor %}
|
||||
+6
-25
@@ -1,25 +1,6 @@
|
||||
{% for item in include.tree %}
|
||||
{% if item.section %}
|
||||
<div class="item" data-title="{{ item.title }}">
|
||||
<div class="container">
|
||||
{% include_cached tree.html tree=item.section %}
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
|
||||
{% capture whitespace %}
|
||||
{% if item.path %}
|
||||
{% assign path = item.path %}
|
||||
{% assign title = item.title %}
|
||||
{% else %}
|
||||
{% assign found_page = site.pages | where: "path", item | first %}
|
||||
{% assign title = found_page.title %}
|
||||
{% assign path = found_page.url %}
|
||||
{% endif %}
|
||||
{% endcapture %}
|
||||
|
||||
{% if path %}
|
||||
<a class="item" data-title="{{ title }}" href="{{ path }}"></a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% for item in tree %}{% if item.section %}
|
||||
<div class="item" data-title="{{ item.title }}">
|
||||
<div class="container">{% assign tree = item.section %}{% include tree.html %}
|
||||
</div>
|
||||
</div>{% else %}{% assign prefix = item.path | slice: 0, 4 %}{% if prefix == "http" %}{% assign target=" target='_blank'" %}{% else %}{% assign target="" %}{% endif %}
|
||||
<a class="item" data-title="{{ item.title }}" href="{{ item.path }}"{{ target }}></a>{% endif %}{% endfor %}
|
||||
@@ -1,3 +0,0 @@
|
||||
The topics in the [User Guide](/docs/user-guide/) section of the Kubernetes docs
|
||||
are being moved to the [Tasks](/docs/tasks/), [Tutorials](/docs/tutorials/), and
|
||||
[Concepts](/docs/concepts) sections. The content in this topic has moved to:
|
||||
@@ -1,12 +0,0 @@
|
||||
|
||||
|
||||
<table style="background-color:#eeeeee">
|
||||
<tr>
|
||||
<td>
|
||||
<p><b>NOTICE</b></p>
|
||||
<p>As of March 14, 2017, the Kubernetes SIG-Docs-Maintainers group have begun migration of the User Guide content as announced previously to the <a href="https://git.k8s.io/community/sig-docs">SIG Docs community</a> through the <a href="https://groups.google.com/forum/#!forum/kubernetes-sig-docs">kubernetes-sig-docs</a> group and <a href="https://kubernetes.slack.com/messages/sig-docs/">kubernetes.slack.com #sig-docs</a> channel.</p>
|
||||
<p>The user guides within this section are being refactored into topics within Tutorials, Tasks, and Concepts. Anything that has been moved will have a notice placed in its previous location as well as a link to its new location. The reorganization implements a new table of contents and should improve the documentation's findability and readability for a wider range of audiences.</p>
|
||||
<p>For any questions, please contact: <a href="mailto:kubernetes-sig-docs@googlegroups.com">kubernetes-sig-docs@googlegroups.com</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -2079,7 +2079,7 @@ Populated by the system when a graceful deletion is requested. Read-only. More i
|
||||
<div class="sect2">
|
||||
<h3 id="_v1_flexvolumesource">v1.FlexVolumeSource</h3>
|
||||
<div class="paragraph">
|
||||
<p>FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.</p>
|
||||
<p>FlexVolume represents a generic volume resource that is provisioned/attached using a exec based plugin. This is an alpha feature and may change in future.</p>
|
||||
</div>
|
||||
<table class="tableblock frame-all grid-all" style="width:100%; ">
|
||||
<colgroup>
|
||||
@@ -2535,7 +2535,7 @@ Populated by the system when a graceful deletion is requested. Read-only. More i
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">flexVolume</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">FlexVolume represents a generic volume resource that is provisioned/attached using a exec based plugin. This is an alpha feature and may change in future.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_flexvolumesource">v1.FlexVolumeSource</a></p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
@@ -4275,10 +4275,10 @@ Populated by the system when a graceful deletion is requested. Read-only. More i
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">host</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the "host" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the<br>
|
||||
IP in the Spec of the parent Ingress.<br>
|
||||
IP in the Spec of the parent Ingress.<br>
|
||||
2. The <code>:</code> delimiter is not respected because ports are not allowed.<br>
|
||||
Currently the port of an Ingress is implicitly :80 for http and<br>
|
||||
:443 for https.<br>
|
||||
Currently the port of an Ingress is implicitly :80 for http and<br>
|
||||
:443 for https.<br>
|
||||
Both these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
|
||||
@@ -5867,7 +5867,7 @@ Both these may change in the future. Incoming requests are matched against the h
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">path</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional "path" part of a URL as defined by RFC 3986. Paths must begin with a <em>/</em>. If unspecified, the path defaults to a catch all sending traffic to the backend.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Path is a extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional "path" part of a URL as defined by RFC 3986. Paths must begin with a <em>/</em>. If unspecified, the path defaults to a catch all sending traffic to the backend.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
@@ -5578,7 +5578,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_create_a_ingress">create an Ingress</h3>
|
||||
<h3 id="_create_a_ingress">create a Ingress</h3>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>POST /apis/extensions/v1beta1/namespaces/{namespace}/ingresses</pre>
|
||||
@@ -5959,7 +5959,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_delete_a_ingress">delete an Ingress</h3>
|
||||
<h3 id="_delete_a_ingress">delete a Ingress</h3>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>DELETE /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}</pre>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
@@ -2560,7 +2560,7 @@ The resulting set of endpoints can be viewed as:<br>
|
||||
<div class="sect2">
|
||||
<h3 id="_v1_flexvolumesource">v1.FlexVolumeSource</h3>
|
||||
<div class="paragraph">
|
||||
<p>FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.</p>
|
||||
<p>FlexVolume represents a generic volume resource that is provisioned/attached using a exec based plugin. This is an alpha feature and may change in future.</p>
|
||||
</div>
|
||||
<table class="tableblock frame-all grid-all" style="width:100%; ">
|
||||
<colgroup>
|
||||
@@ -3268,7 +3268,7 @@ The resulting set of endpoints can be viewed as:<br>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">flexVolume</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">FlexVolume represents a generic volume resource that is provisioned/attached using a exec based plugin. This is an alpha feature and may change in future.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_flexvolumesource">v1.FlexVolumeSource</a></p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
@@ -5555,7 +5555,7 @@ The resulting set of endpoints can be viewed as:<br>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">flexVolume</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">FlexVolume represents a generic volume resource that is provisioned/attached using a exec based plugin. This is an alpha feature and may change in future.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_flexvolumesource">v1.FlexVolumeSource</a></p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
@@ -2676,7 +2676,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_create_a_endpoints">create an Endpoints</h3>
|
||||
<h3 id="_create_a_endpoints">create a Endpoints</h3>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>POST /api/v1/namespaces/{namespace}/endpoints</pre>
|
||||
@@ -3057,7 +3057,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_delete_a_endpoints">delete an Endpoints</h3>
|
||||
<h3 id="_delete_a_endpoints">delete a Endpoints</h3>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>DELETE /api/v1/namespaces/{namespace}/endpoints/{name}</pre>
|
||||
@@ -3619,7 +3619,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_create_a_event">create an Event</h3>
|
||||
<h3 id="_create_a_event">create a Event</h3>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>POST /api/v1/namespaces/{namespace}/events</pre>
|
||||
@@ -4000,7 +4000,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_delete_a_event">delete an Event</h3>
|
||||
<h3 id="_delete_a_event">delete a Event</h3>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>DELETE /api/v1/namespaces/{namespace}/events/{name}</pre>
|
||||
|
||||
@@ -4393,10 +4393,10 @@ Populated by the system when a graceful deletion is requested. Read-only. More i
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">host</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the "host" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the<br>
|
||||
IP in the Spec of the parent Ingress.<br>
|
||||
IP in the Spec of the parent Ingress.<br>
|
||||
2. The <code>:</code> delimiter is not respected because ports are not allowed.<br>
|
||||
Currently the port of an Ingress is implicitly :80 for http and<br>
|
||||
:443 for https.<br>
|
||||
Currently the port of an Ingress is implicitly :80 for http and<br>
|
||||
:443 for https.<br>
|
||||
Both these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
|
||||
@@ -6054,7 +6054,7 @@ Both these may change in the future. Incoming requests are matched against the h
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">path</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e. this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional "path" part of a URL as defined by RFC 3986. Paths must begin with a <em>/</em>. If unspecified, the path defaults to a catch all sending traffic to the backend.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional "path" part of a URL as defined by RFC 3986. Paths must begin with a <em>/</em>. If unspecified, the path defaults to a catch all sending traffic to the backend.</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
@@ -5578,7 +5578,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_create_a_ingress">create an Ingress</h3>
|
||||
<h3 id="_create_a_ingress">create a Ingress</h3>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>POST /apis/extensions/v1beta1/namespaces/{namespace}/ingresses</pre>
|
||||
@@ -5959,7 +5959,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_delete_a_ingress">delete an Ingress</h3>
|
||||
<h3 id="_delete_a_ingress">delete a Ingress</h3>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>DELETE /apis/extensions/v1beta1/namespaces/{namespace}/ingresses/{name}</pre>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
@@ -2676,7 +2676,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_create_a_endpoints">create an Endpoints</h3>
|
||||
<h3 id="_create_a_endpoints">create a Endpoints</h3>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>POST /api/v1/namespaces/{namespace}/endpoints</pre>
|
||||
@@ -3057,7 +3057,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_delete_a_endpoints">delete an Endpoints</h3>
|
||||
<h3 id="_delete_a_endpoints">delete a Endpoints</h3>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>DELETE /api/v1/namespaces/{namespace}/endpoints/{name}</pre>
|
||||
@@ -3619,7 +3619,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_create_a_event">create an Event</h3>
|
||||
<h3 id="_create_a_event">create a Event</h3>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>POST /api/v1/namespaces/{namespace}/events</pre>
|
||||
@@ -4000,7 +4000,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_delete_a_event">delete an Event</h3>
|
||||
<h3 id="_delete_a_event">delete a Event</h3>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>DELETE /api/v1/namespaces/{namespace}/events/{name}</pre>
|
||||
@@ -7885,7 +7885,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect2">
|
||||
<h3 id="_create_eviction_of_a_eviction">create eviction of an Eviction</h3>
|
||||
<h3 id="_create_eviction_of_a_eviction">create eviction of a Eviction</h3>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre>POST /api/v1/namespaces/{namespace}/pods/{name}/eviction</pre>
|
||||
|
||||
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
@@ -1,15 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html id="{{ page.cid }}" lang="en" class="{{ page.class }}">
|
||||
|
||||
{% include head.html %}
|
||||
|
||||
<body>
|
||||
{% include header.html %}
|
||||
|
||||
{{ content }}
|
||||
|
||||
{% include footer.html %}
|
||||
|
||||
{% include footer-scripts.html %}
|
||||
</body>
|
||||
</html>
|
||||
+55
-50
@@ -1,10 +1,10 @@
|
||||
{% for current_toc in site.tocs %}
|
||||
{% if found_toc %}
|
||||
{% break %}
|
||||
{% else %}
|
||||
{% assign toc=site.data[current_toc] %}
|
||||
{% include tocsearch.html tree=toc.toc toc=toc %}
|
||||
{% endif %}
|
||||
{% if found_toc %}
|
||||
{% break %}
|
||||
{% else %}
|
||||
{% assign toc=site.data[current_toc] %}
|
||||
{% include tocsearch.html tree=toc.toc toc=toc %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<!Doctype html>
|
||||
@@ -18,61 +18,66 @@
|
||||
|
||||
<!-- 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>
|
||||
<h1>{{ toc.bigheader }}</h1>
|
||||
<h5>{{ toc.abstract }}</h5>
|
||||
<div id="vendorStrip" class="light-text">
|
||||
<ul>
|
||||
<li><a href="/docs/" {% if toc.bigheader == "Kubernetes Documentation" %}class="YAH"{% endif %}>DOCS HOME</a></li>
|
||||
<li><a href="/docs/user-guide/" {% if toc.bigheader == "Guides" %}class="YAH"{% endif %}>GUIDES</a></li>
|
||||
<li><a href="/docs/tutorials/" {% if toc.bigheader == "Tutorials" %}class="YAH"{% endif %}>TUTORIALS</a></li>
|
||||
<li><a href="/docs/tasks/" {% if toc.bigheader == "Tasks" %}class="YAH"{% endif %}>TASKS</a></li>
|
||||
<li><a href="/docs/concepts/" {% if toc.bigheader == "Concepts" %}class="YAH"{% endif %}>CONCEPTS</a></li>
|
||||
<li><a href="/docs/reference/" {% if toc.bigheader == "Reference Documentation" %}class="YAH"{% endif %}>REFERENCE</a></li>
|
||||
<li><a href="/docs/tools/" {% if toc.bigheader == "Tools" %}class="YAH"{% endif %}>TOOLS</a></li>
|
||||
<li><a href="/docs/samples/" {% if toc.bigheader == "Samples" %}class="YAH"{% endif %}>SAMPLES</a></li>
|
||||
<li><a href="/docs/troubleshooting/" {% if toc.bigheader == "Support" %}class="YAH"{% endif %}>SUPPORT</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">
|
||||
<div class="pi-accordion">
|
||||
{% include_cached tree.html tree=toc.toc %}
|
||||
</div> <!-- /pi-accordion -->
|
||||
<button class="push-menu-close-button" onclick="kub.toggleToc()"></button>
|
||||
</div> <!-- /docsToc -->
|
||||
<div id="docsToc">
|
||||
<div class="pi-accordion">
|
||||
{% if toc.bigheader != "Kubernetes Documentation" %}
|
||||
{% include tree.html tree=toc.toc %}
|
||||
{% endif %}
|
||||
</div> <!-- /pi-accordion -->
|
||||
<button class="push-menu-close-button" onclick="kub.toggleToc()"></button>
|
||||
</div> <!-- /docsToc -->
|
||||
|
||||
<div id="docsContent">
|
||||
<p><a href="/editdocs#{{ page.path }}" id="editPageButton">Edit This Page</a></p>
|
||||
<div id="docsContent">
|
||||
<p><a href="/editdocs#{{ page.path }}" id="editPageButton">Edit This Page</a></p>
|
||||
|
||||
{% unless page.notitle %}
|
||||
<h1>{{ page.title }}</h1>
|
||||
{% endunless %}
|
||||
{% unless page.notitle %}
|
||||
<h1>{{ page.title }}</h1>
|
||||
{% endunless %}
|
||||
|
||||
{{ content }}
|
||||
{{ content }}
|
||||
|
||||
<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/" %}
|
||||
<script type="text/javascript">
|
||||
PDRTJS_settings_8345992 = {
|
||||
"id" : "8345992",
|
||||
"unique_id" : "{{ page.url }}",
|
||||
"title" : "{{ page.title }}",
|
||||
"permalink" : "http://kubernetes.github.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' +
|
||||
'k8s.io'+window.location.pathname)" class="button issue">Create an Issue</a>
|
||||
<a href="/editdocs#{{ page.path }}" class="button issue">Edit this Page</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
<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/" %}
|
||||
<script type="text/javascript">
|
||||
PDRTJS_settings_8345992 = {
|
||||
"id" : "8345992",
|
||||
"unique_id" : "{{ page.url }}",
|
||||
"title" : "{{ page.title }}",
|
||||
"permalink" : "http://kubernetes.github.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' +
|
||||
window.location.pathname)" class="button issue">Create an Issue</a>
|
||||
<a href="/editdocs#{{ page.path }}" class="button issue">Edit this Page</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{% include_cached footer.html %}
|
||||
{% include footer.html %}
|
||||
{% include footer-scripts.html %}
|
||||
|
||||
</body>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
{{ content }}
|
||||
-450
@@ -1,450 +0,0 @@
|
||||
###############################################
|
||||
# set server-side redirects in this file #
|
||||
# see https://www.netlify.com/docs/redirects/ #
|
||||
# test at https://play.netlify.com/redirects #
|
||||
###############################################
|
||||
|
||||
############################
|
||||
# pattern matching redirects
|
||||
#
|
||||
|
||||
/docs/user-guide/kubectl/kubectl_*/ /docs/user-guide/kubectl/v1.7/#:splat 200
|
||||
/v1.1/docs/* /docs/ 301
|
||||
/docs/user-guide/kubectl/1_5/* https://v1-5.docs.kubernetes.io/docs/user-guide/kubectl/v1.5/ 301
|
||||
/docs/user-guide/kubectl/v1.5/node_modules/* https://v1-5.docs.kubernetes.io/docs/user-guide/kubectl/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/user-guide/kubectl/v1.6/node_modules/* https://v1-6.docs.kubernetes.io/docs/user-guide/kubectl/v1.6/ 301
|
||||
/docs/api-reference/v1.7/node_modules/* /docs/api-reference/v1.7/ 301
|
||||
/docs/getting-started-guides/docker-multinode/* /docs/setup/independent/create-cluster-kubeadm/ 301
|
||||
/docs/admin/resourcequota/* /docs/concepts/policy/resource-quotas/ 301
|
||||
/docs/getting-started-guide/* /docs/setup/ 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/resources-reference/1_5/* /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/templatedemos/* /docs/home/contribute/page-templates/ 301
|
||||
/docs/tutorials/getting-started/* /docs/tutorials/kubernetes-basics/ 301
|
||||
/docs/user-guide/federation/* /docs/concepts/cluster-administration/federation/ 301
|
||||
/docs/user-guide/garbage-collector/* /docs/concepts/workloads/controllers/garbage-collection/ 301
|
||||
/docs/user-guide/horizontal-pod-autoscaler/* /docs/tasks/run-application/horizontal-pod-autoscale/ 301
|
||||
/kubernetes-bootcamp/* /docs/tutorials/kubernetes-basics/ 301
|
||||
/swagger-spec/* https://github.com/kubernetes/kubernetes/tree/master/api/swagger-spec/ 301
|
||||
/third_party/swagger-ui/* /docs/reference/ 301
|
||||
|
||||
############################
|
||||
# individual redirects
|
||||
#
|
||||
|
||||
/gettingstarted/ /docs/home/ 301
|
||||
|
||||
/docs/admin/addons/ /docs/concepts/cluster-administration/addons/ 301
|
||||
/docs/admin/apparmor/ /docs/tutorials/clusters/apparmor/ 301
|
||||
/docs/admin/audit/ /docs/tasks/debug-application-cluster/audit/ 301
|
||||
//docs/admin/authorization/rbac.md /docs/admin/authorization/rbac/ 301
|
||||
/docs/admin/cluster-components/ /docs/concepts/overview/components/ 301
|
||||
/docs/admin/cluster-management/ /docs/tasks/administer-cluster/cluster-management/ 301
|
||||
/docs/admin/cluster-troubleshooting/ /docs/tasks/debug-application-cluster/debug-cluster/ 301
|
||||
/docs/admin/daemons/ /docs/concepts/workloads/controllers/daemonset/ 301
|
||||
/docs/admin/disruptions/ /docs/concepts/workloads/pods/disruptions/ 301
|
||||
/docs/admin/dns/ /docs/concepts/services-networking/dns-pod-service/ 301
|
||||
/docs/admin/etcd/ /docs/tasks/administer-cluster/configure-upgrade-etcd/ 301
|
||||
/docs/admin/etcd_upgrade/ /docs/tasks/administer-cluster/configure-upgrade-etcd/ 301
|
||||
/docs/admin/federation/kubefed/ /docs/tasks/federation/set-up-cluster-federation-kubefed/ 301
|
||||
/docs/admin/federation/kubefed.md /docs/tasks/federation/set-up-cluster-federation-kubefed/ 301
|
||||
/docs/tasks/federation/set-up-cluster-federation-kubefed.md /docs/tasks/federation/set-up-cluster-federation-kubefed/ 301
|
||||
/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/ /docs/concepts/cluster-administration/cluster-administration-overview/ 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/master-node-communication/ /docs/concepts/architecture/master-node-communication/ 301
|
||||
/docs/admin/multi-cluster/ /docs/concepts/cluster-administration/federation/ 301
|
||||
/docs/admin/multiple-schedulers/ /docs/tasks/administer-cluster/configure-multiple-schedulers/ 301
|
||||
/docs/admin/namespaces/ /docs/tasks/administer-cluster/namespaces/ 301
|
||||
/docs/admin/namespaces/walkthrough/ /docs/tasks/administer-cluster/namespaces-walkthrough/ 301
|
||||
/docs/admin/network-plugins/ /docs/concepts/cluster-administration/network-plugins/ 301
|
||||
/docs/admin/networking/ /docs/concepts/cluster-administration/networking/ 301
|
||||
/docs/admin/node/ /docs/concepts/architecture/nodes/ 301
|
||||
/docs/admin/node-allocatable/ /docs/tasks/administer-cluster/reserve-compute-resources/ 301
|
||||
//docs/admin/node-allocatable.md /docs/tasks/administer-cluster/reserve-compute-resources/ 301
|
||||
/docs/admin/node-conformance.md /docs/admin/node-conformance/ 301
|
||||
/docs/admin/node-problem/ /docs/tasks/debug-application-cluster/monitor-node-health/ 301
|
||||
/docs/admin/out-of-resource/ /docs/tasks/administer-cluster/out-of-resource/ 301
|
||||
/docs/admin/rescheduler/ /docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/ 301
|
||||
/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/upgrade-1-6/ /docs/tasks/administer-cluster/upgrade-1-6/ 301
|
||||
|
||||
/docs/api/ /docs/concepts/overview/kubernetes-api/ 301
|
||||
|
||||
/docs/concepts/abstractions/controllers/garbage-collection/ /docs/concepts/workloads/controllers/garbage-collection/ 301
|
||||
/docs/concepts/abstractions/controllers/petsets/ /docs/concepts/workloads/controllers/petset/ 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
|
||||
/docs/concepts/abstractions/pod/ /docs/concepts/workloads/pods/pod-overview/ 301
|
||||
|
||||
/docs/concepts/cluster-administration/access-cluster/ /docs/tasks/access-application-cluster/access-cluster/ 301
|
||||
/docs/concepts/cluster-administration/audit/ /docs/tasks/debug-application-cluster/audit/ 301
|
||||
/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/ /docs/tasks/access-application-cluster/authenticate-across-clusters-kubeconfig/ 301
|
||||
/docs/concepts/cluster-administration/cluster-management/ /docs/tasks/administer-cluster/cluster-management/ 301
|
||||
/docs/concepts/cluster-administration/configure-etcd/ /docs/tasks/administer-cluster/configure-upgrade-etcd/ 301
|
||||
/docs/concepts/cluster-administration/etcd-upgrade/ /docs/tasks/administer-cluster/configure-upgrade-etcd/ 301
|
||||
/docs/concepts/cluster-administration/federation-service-discovery/ /docs/tasks/federation/federation-service-discovery/ 301
|
||||
/docs/concepts/cluster-administration/guaranteed-scheduling-critical-addon-pods/ /docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/ 301
|
||||
/docs/concepts/cluster-administration/master-node-communication/ /docs/concepts/architecture/master-node-communication/ 301
|
||||
/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/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
|
||||
/docs/concepts/ecosystem/thirdpartyresource/ /docs/tasks/access-kubernetes-api/extend-api-third-party-resource/ 301
|
||||
/docs/concepts/jobs/cron-jobs/ /docs/concepts/workloads/controllers/cron-jobs/ 301
|
||||
/docs/concepts/jobs/run-to-completion-finite-workloads/ /docs/concepts/workloads/controllers/jobs-run-to-completion/ 301
|
||||
/docs/concepts/nodes/node/ /docs/concepts/architecture/nodes/ 301
|
||||
/docs/concepts/storage/etcd-store-api-object/ /docs/tasks/administer-cluster/configure-upgrade-etcd/ 301
|
||||
/docs/concepts/tools/kubectl/object-management-overview/ /docs/tutorials/object-management-kubectl/object-management/ 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/getting-started-guides/ /docs/setup/pick-right-solution/ 301
|
||||
/docs/getting-started-guides/kubeadm/ /docs/setup/independent/create-cluster-kubeadm/ 301
|
||||
/docs/getting-started-guides/network-policy/calico/ /docs/tasks/administer-cluster/calico-network-policy/ 301
|
||||
/docs/getting-started-guides/network-policy/romana/ /docs/tasks/administer-cluster/romana-network-policy/ 301
|
||||
/docs/getting-started-guides/network-policy/walkthrough/ /docs/tasks/administer-cluster/declare-network-policy/ 301
|
||||
/docs/getting-started-guides/network-policy/weave/ /docs/tasks/administer-cluster/weave-network-policy/ 301
|
||||
/docs/getting-started-guides/running-cloud-controller/ /docs/tasks/administer-cluster/running-cloud-controller/ 301
|
||||
/docs/getting-started-guides/ubuntu/calico/ /docs/getting-started-guides/ubuntu/ 301
|
||||
|
||||
/docs/hellonode/ /docs/tutorials/stateless-application/hello-minikube/ 301
|
||||
/docs/ /docs/home/ 301
|
||||
/docs/home/coreos/ /docs/getting-started-guides/coreos/ 301
|
||||
/docs/samples/ /docs/tutorials/ 301
|
||||
|
||||
/docs/tasks/administer-cluster/apply-resource-quota-limit/ /docs/tasks/administer-cluster/quota-api-object/ 301
|
||||
/docs/tasks/administer-cluster/assign-pods-nodes/ /docs/tasks/configure-pod-container/assign-pods-nodes/ 301
|
||||
/docs/tasks/administer-cluster/overview/ /docs/concepts/cluster-administration/cluster-administration-overview/ 301
|
||||
/docs/tasks/administer-cluster/cpu-memory-limit/ /docs/tasks/administer-cluster/memory-default-namespace/ 301
|
||||
/docs/tasks/administer-cluster/share-configuration/ /docs/tasks/access-application-cluster/configure-access-multiple-clusters/ 301
|
||||
|
||||
/docs/tasks/configure-pod-container/apply-resource-quota-limit/ /docs/tasks/administer-cluster/apply-resource-quota-limit/ 301
|
||||
/docs/tasks/configure-pod-container/calico-network-policy/ /docs/tasks/administer-cluster/calico-network-policy/ 301
|
||||
/docs/tasks/configure-pod-container/communicate-containers-same-pod/ /docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/ 301
|
||||
/docs/tasks/configure-pod-container/declare-network-policy/ /docs/tasks/administer-cluster/declare-network-policy/ 301
|
||||
/docs/tasks/configure-pod-container/define-environment-variable-container/ /docs/tasks/inject-data-application/define-environment-variable-container/ 301
|
||||
/docs/tasks/configure-pod-container/distribute-credentials-secure/ /docs/tasks/inject-data-application/distribute-credentials-secure/ 301
|
||||
/docs/tasks/configure-pod-container/downward-api-volume-expose-pod-information/ /docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/ 301
|
||||
/docs/tasks/configure-pod-container/environment-variable-expose-pod-information/ /docs/tasks/inject-data-application/environment-variable-expose-pod-information/ 301
|
||||
/docs/tasks/configure-pod-container/limit-range/ /docs/tasks/administer-cluster/cpu-memory-limit/ 301
|
||||
/docs/tasks/configure-pod-container/romana-network-policy/ /docs/tasks/administer-cluster/romana-network-policy/ 301
|
||||
/docs/tasks/configure-pod-container/weave-network-policy/ /docs/tasks/administer-cluster/weave-network-policy/ 301
|
||||
/docs/tasks/configure-pod-container/assign-cpu-ram-container/ /docs/tasks/configure-pod-container/assign-memory-resource/ 301
|
||||
|
||||
/docs/tasks/kubectl/get-shell-running-container/ /docs/tasks/debug-application-cluster/get-shell-running-container/ 301
|
||||
/docs/tasks/kubectl/install/ /docs/tasks/tools/install-kubectl/ 301
|
||||
/docs/tasks/kubectl/list-all-running-container-images/ /docs/tasks/access-application-cluster/list-all-running-container-images/ 301
|
||||
|
||||
/docs/tasks/manage-stateful-set/debugging-a-statefulset/ /docs/tasks/debug-application-cluster/debug-stateful-set/ 301
|
||||
/docs/tasks/manage-stateful-set/delete-pods/ /docs/tasks/run-application/force-delete-stateful-set-pod/ 301
|
||||
/docs/tasks/manage-stateful-set/deleting-a-statefulset/ /docs/tasks/run-application/delete-stateful-set/ 301
|
||||
/docs/tasks/manage-stateful-set/scale-stateful-set/ /docs/tasks/run-application/scale-stateful-set/ 301
|
||||
/docs/tasks/manage-stateful-set/upgrade-pet-set-to-stateful-set/ /docs/tasks/run-application/upgrade-pet-set-to-stateful-set/ 301
|
||||
|
||||
/docs/tasks/run-application/podpreset/ /docs/tasks/inject-data-application/podpreset/ 301
|
||||
/docs/tasks/troubleshoot/debug-init-containers/ /docs/tasks/debug-application-cluster/debug-init-containers/ 301
|
||||
/docs/tasks/web-ui-dashboard/ /docs/tasks/access-application-cluster/web-ui-dashboard/ 301
|
||||
/docs/templatedemos/ /docs/home/contribute/page-templates/ 301
|
||||
/docs/tools/kompose/ /docs/tools/kompose/user-guide/ 301
|
||||
|
||||
/docs/tutorials/clusters/multiple-schedulers/ /docs/tasks/administer-cluster/configure-multiple-schedulers/ 301
|
||||
/docs/tutorials/connecting-apps/connecting-frontend-backend/ /docs/tasks/access-application-cluster/connecting-frontend-backend/ 301
|
||||
/docs/tutorials/federation/set-up-cluster-federation-kubefed/ /docs/tasks/federation/set-up-cluster-federation-kubefed/ 301
|
||||
//docs/tutorials/federation/set-up-cluster-federation-kubefed.md /docs/tasks/federation/set-up-cluster-federation-kubefed/ 301
|
||||
/docs/tutorials/federation/set-up-coredns-provider-federation/ /docs/tasks/federation/set-up-coredns-provider-federation/ 301
|
||||
/docs/tutorials/federation/set-up-placement-policies-federation/ /docs/tasks/federation/set-up-placement-policies-federation/ 301
|
||||
/docs/tutorials/getting-started/create-cluster/ /docs/tutorials/kubernetes-basics/cluster-intro/ 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
|
||||
/docs/tutorials/stateless-application/run-stateless-ap-replication-controller/ /docs/tasks/run-application/run-stateless-application-deployment/ 301
|
||||
/docs/tutorials/stateless-application/run-stateless-application-deployment/ /docs/tasks/run-application/run-stateless-application-deployment/ 301
|
||||
|
||||
/docs/user-guide/accessing-the-cluster/ /docs/tasks/access-application-cluster/access-cluster/ 301
|
||||
/docs/user-guide/add-entries-to-pod-etc-hosts-with-host-aliases/ /docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ 301
|
||||
/docs/user-guide/annotations/ /docs/concepts/overview/working-with-objects/annotations/ 301
|
||||
/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/configuring-containers/ /docs/tasks/ 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
|
||||
/docs/user-guide/container-environment/ /docs/concepts/containers/container-lifecycle-hooks/ 301
|
||||
/docs/user-guide/cron-jobs/ /docs/concepts/workloads/controllers/cron-jobs/ 301
|
||||
/docs/user-guide/debugging-pods-and-replication-controllers/ /docs/tasks/debug-application-cluster/debug-pod-replication-controller/ 301
|
||||
/docs/user-guide/debugging-services/ /docs/tasks/debug-application-cluster/debug-service/ 301
|
||||
/docs/user-guide/deploying-applications/ /docs/tasks/run-application/run-stateless-application-deployment/ 301
|
||||
/docs/user-guide/deployments/ /docs/concepts/workloads/controllers/deployment/ 301
|
||||
/docs/user-guide/downward-api/ /docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/ 301
|
||||
/docs/user-guide/downward-api/volume/ /docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/ 301
|
||||
/docs/user-guide/environment-guide/ /docs/tasks/inject-data-application/environment-variable-expose-pod-information/ 301
|
||||
/docs/user-guide/federation/cluster/ /docs/tasks/administer-federation/cluster/ 301
|
||||
/docs/user-guide/federation/configmap/ /docs/tasks/administer-federation/configmap/ 301
|
||||
/docs/user-guide/federation/daemonsets/ /docs/tasks/administer-federation/daemonset/ 301
|
||||
/docs/user-guide/federation/deployment/ /docs/tasks/administer-federation/deployment/ 301
|
||||
/docs/user-guide/federation/events/ /docs/tasks/administer-federation/events/ 301
|
||||
/docs/user-guide/federation/federated-ingress/ /docs/tasks/administer-federation/ingress/ 301
|
||||
/docs/user-guide/federation/federated-services/ /docs/tasks/federation/federation-service-discovery/ 301
|
||||
/docs/user-guide/federation/ /docs/concepts/cluster-administration/federation/ 301
|
||||
/docs/user-guide/federation/namespaces/ /docs/tasks/administer-federation/namespaces/ 301
|
||||
/docs/user-guide/federation/replicasets/ /docs/tasks/administer-federation/replicaset/ 301
|
||||
/docs/user-guide/federation/secrets/ /docs/tasks/administer-federation/secret/ 301
|
||||
/docs/user-guide/garbage-collection/ /docs/concepts/workloads/controllers/garbage-collection/ 301
|
||||
/docs/user-guide/getting-into-containers/ /docs/tasks/debug-application-cluster/get-shell-running-container/ 301
|
||||
/docs/user-guide/gpus/ /docs/tasks/manage-gpus/scheduling-gpus/ 301
|
||||
/docs/user-guide/horizontal-pod-autoscaling/ /docs/tasks/run-application/horizontal-pod-autoscale/ 301
|
||||
/docs/user-guide/horizontal-pod-autoscaling/walkthrough/ /docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/ 301
|
||||
/docs/user-guide/identifiers/ /docs/concepts/overview/working-with-objects/names/ 301
|
||||
/docs/user-guide/images/ /docs/concepts/containers/images/ 301
|
||||
/docs/user-guide/ /docs/home/ 301
|
||||
/docs/user-guide/ingress/ /docs/concepts/services-networking/ingress/ 301
|
||||
/docs/user-guide/introspection-and-debugging/ /docs/tasks/debug-application-cluster/debug-application-introspection/ 301
|
||||
/docs/user-guide/jobs/ /docs/concepts/workloads/controllers/jobs-run-to-completion/ 301
|
||||
/docs/user-guide/jobs/expansions/ /docs/tasks/job/parallel-processing-expansion/ 301
|
||||
/docs/user-guide/jobs/work-queue-1/ /docs/tasks/job/coarse-parallel-processing-work-queue/ 301
|
||||
/docs/user-guide/jobs/work-queue-2/ /docs/tasks/job/fine-parallel-processing-work-queue/ 301
|
||||
/docs/user-guide/kubeconfig-file/ /docs/tasks/access-application-cluster/authenticate-across-clusters-kubeconfig/ 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
|
||||
/docs/user-guide/load-balancer/ /docs/tasks/access-application-cluster/create-external-load-balancer/ 301
|
||||
/docs/user-guide/logging/elasticsearch/ /docs/tasks/debug-application-cluster/logging-elasticsearch-kibana/ 301
|
||||
/docs/user-guide/logging/overview/ /docs/concepts/cluster-administration/logging/ 301
|
||||
/docs/user-guide/logging/stackdriver/ /docs/tasks/debug-application-cluster/logging-stackdriver/ 301
|
||||
/docs/user-guide/managing-deployments/ /docs/concepts/cluster-administration/manage-deployment/ 301
|
||||
/docs/user-guide/monitoring/ /docs/tasks/debug-application-cluster/resource-usage-monitoring/ 301
|
||||
/docs/user-guide/namespaces/ /docs/concepts/overview/working-with-objects/namespaces/ 301
|
||||
/docs/user-guide/networkpolicies/ /docs/concepts/services-networking/network-policies/ 301
|
||||
/docs/user-guide/node-selection/ /docs/concepts/configuration/assign-pod-node/ 301
|
||||
/docs/user-guide/persistent-volumes/ /docs/concepts/storage/persistent-volumes/ 301
|
||||
/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/petset/ 301
|
||||
/docs/user-guide/petset/bootstrapping/ /docs/concepts/workloads/controllers/petset/ 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
|
||||
/docs/user-guide/pod-templates/ /docs/concepts/workloads/pods/pod-overview/ 301
|
||||
/docs/user-guide/pods/ /docs/concepts/workloads/pods/pod/ 301
|
||||
/docs/user-guide/pods/init-container/ /docs/concepts/workloads/pods/init-containers/ 301
|
||||
/docs/user-guide/pods/multi-container/ /docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/ 301
|
||||
/docs/user-guide/pods/single-container/ /docs/tasks/run-application/run-stateless-application-deployment/ 301
|
||||
/docs/user-guide/prereqs/ /docs/tasks/tools/install-kubectl/ 301
|
||||
/docs/user-guide/production-pods/ /docs/tasks/ 301
|
||||
/docs/user-guide/projected-volume/ /docs/tasks/configure-pod-container/configure-projected-volume-storage/ 301
|
||||
/docs/user-guide/quick-start/ /docs/tasks/access-application-cluster/service-access-application-cluster/ 301
|
||||
/docs/user-guide/replicasets/ /docs/concepts/workloads/controllers/replicaset/ 301
|
||||
/docs/user-guide/replication-controller/ /docs/concepts/workloads/controllers/replicationcontroller/ 301
|
||||
/docs/user-guide/rolling-updates/ /docs/tasks/run-application/rolling-update-replication-controller/ 301
|
||||
/docs/user-guide/secrets/ /docs/concepts/configuration/secret/ 301
|
||||
/docs/user-guide/secrets/walkthrough/ /docs/tasks/inject-data-application/distribute-credentials-secure/ 301
|
||||
/docs/user-guide/service-accounts/ /docs/tasks/configure-pod-container/configure-service-account/ 301
|
||||
/docs/user-guide/services-firewalls/ /docs/tasks/access-application-cluster/configure-cloud-provider-firewall/ 301
|
||||
/docs/user-guide/services/ /docs/concepts/services-networking/service/ 301
|
||||
/docs/user-guide/services/operations/ /docs/tasks/access-application-cluster/connecting-frontend-backend/ 301
|
||||
/docs/user-guide/sharing-clusters/ /docs/tasks/administer-cluster/share-configuration/ 301
|
||||
/docs/user-guide/simple-nginx/ /docs/tasks/run-application/run-stateless-application-deployment/ 301
|
||||
/docs/user-guide/thirdpartyresources/ /docs/tasks/access-kubernetes-api/extend-api-third-party-resource/ 301
|
||||
/docs/user-guide/ui/ /docs/tasks/access-application-cluster/web-ui-dashboard/ 301
|
||||
/docs/user-guide/update-dem/ /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/whatisk8s/ /docs/concepts/overview/what-is-kubernetes/ 301
|
||||
|
||||
|
||||
##############
|
||||
# address 404s
|
||||
#
|
||||
/concepts/containers/container-lifecycle-hooks/ /docs/concepts/containers/container-lifecycle-hooks/ 301
|
||||
|
||||
/docs/api-reference/apps/v1alpha1/definitions https://v1-4.docs.kubernetes.io/docs/api-reference/apps/v1alpha1/definitions/ 301
|
||||
/docs/api-reference/apps/v1beta1/operations https://v1-4.docs.kubernetes.io/docs/api-reference/apps/v1beta1/operations/ 301
|
||||
/docs/api-reference/authorization.k8s.io/v1beta1/definitions https://v1-4.docs.kubernetes.io/docs/api-reference/authorization.k8s.io/v1beta1/definitions/ 301
|
||||
/docs/api-reference/authorization.k8s.io/v1beta1/operations https://v1-4.docs.kubernetes.io/docs/api-reference/authorization.k8s.io/v1beta1/operations/ 301
|
||||
/docs/api-reference/autoscaling/v1/operations https://v1-4.docs.kubernetes.io/docs/api-reference/autoscaling/v1/operations/ 301
|
||||
/docs/api-reference/batch/v1/operations https://v1-4.docs.kubernetes.io/docs/api-reference/batch/v1/operations/ 301
|
||||
/docs/api-reference/batch/v2alpha1/definitions https://v1-4.docs.kubernetes.io/docs/api-reference/batch/v2alpha1/definitions/ 301
|
||||
/docs/api-reference/certificates.k8s.io/v1alpha1/definitions https://v1-4.docs.kubernetes.io/docs/api-reference/certificates.k8s.io/v1alpha1/definitions/ 301
|
||||
/docs/api-reference/certificates/v1alpha1/operations https://v1-4.docs.kubernetes.io/docs/api-reference/certificates/v1alpha1/operations/ 301
|
||||
/docs/api-reference/extensions/v1beta1/operations https://v1-4.docs.kubernetes.io/docs/api-reference/extensions/v1beta1/operations/ 301
|
||||
/docs/api-reference/policy/v1alpha1/definitions https://v1-4.docs.kubernetes.io/docs/api-reference/policy/v1alpha1/definitions/ 301
|
||||
/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/definitions/ /docs/api-reference/v1.7/ 301
|
||||
/docs/api-reference/v1/operations/ /docs/api-reference/v1.7/ 301
|
||||
|
||||
/docs/concepts/cluster/ /docs/concepts/cluster-administration/cluster-administration-overview/ 301
|
||||
/docs/concepts/object-metadata/annotations/ /docs/concepts/overview/working-with-objects/annotations/ 301
|
||||
|
||||
/docs/contribute/write-new-topic/ /docs/home/contribute/write-new-topic/ 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/juju/ /docs/getting-started-guides/ubuntu/installation/ 301
|
||||
/docs/getting-started-guides/kargo/ /docs/getting-started-guides/kubespray/ 301
|
||||
/docs/getting-started-guides/logging-elasticsearch/ /docs/tasks/debug-application-cluster/logging-elasticsearch-kibana/ 301
|
||||
/docs/getting-started-guides/logging/ /docs/concepts/cluster-administration/logging/ 301
|
||||
/docs/getting-started-guides/rackspace/ /docs/setup/pick-right-solution/ 301
|
||||
/docs/getting-started-guides/ubuntu-calico/ /docs/getting-started-guides/ubuntu/ 301
|
||||
/docs/getting-started-guides/ubuntu/automated/ /docs/getting-started-guides/ubuntu/ 301
|
||||
/docs/getting-started-guides/vagrant/ /docs/getting-started-guides/alternatives/ 301
|
||||
/docs/getting-started-guides/windows/While/ /docs/getting-started-guides/windows/ 301
|
||||
|
||||
/docs/federation/api-reference/extensions/v1beta1/definitions/ /docs/reference/federation/extensions/v1beta1/definitions/ 301
|
||||
/docs/federation/api-reference/federation/v1beta1/definitions/ /docs/reference/federation/extensions/v1beta1/definitions/ 301
|
||||
/docs/federation/api-reference/README/ /docs/reference/federation/ 301
|
||||
/docs/federation/api-reference/v1/definitions/ /docs/reference/federation/v1/definitions/ 301
|
||||
/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/reporting-security-issues/ /security/ 301
|
||||
|
||||
/docs/stable/user-guide/labels/ /docs/concepts/overview/working-with-objects/labels/ 301
|
||||
/docs/tasks/access-application-cluster/access-cluster.md /docs/tasks/access-application-cluster/access-cluster/ 301
|
||||
/docs/tasks/access-application-cluster/authenticate-across-clusters-kubeconfig/ /docs/tasks/access-application-cluster/configure-access-multiple-clusters/ 301
|
||||
/docs/tasks/access-kubernetes-api/access-kubernetes-api/http-proxy-access-api/ /docs/tasks/access-kubernetes-api/http-proxy-access-api/ 301
|
||||
/docs/tasks/administer-cluster/reserve-compute-resources/out-of-resource.md /docs/tasks/administer-cluster/out-of-resource/ 301
|
||||
/docs/tasks/configure-pod-container/configure-pod-disruption-budget/ /docs/tasks/run-application/configure-pdb/ 301
|
||||
/docs/tasks/configure-pod-container/define-command-argument-container/ /docs/tasks/inject-data-application/define-command-argument-container/ 301
|
||||
|
||||
/docs/tasks/debug-application-cluster/sematext-logging-monitoring/ https://sematext.com/kubernetes/ 301
|
||||
|
||||
/docs/tasks/job/work-queue-1/ /docs/concepts/workloads/controllers/jobs-run-to-completion/ 301
|
||||
/docs/tasks/manage-stateful-set/delete-pods/ /docs/tasks/run-application/delete-stateful-set/ 301
|
||||
|
||||
/docs/tutorials/getting-started/cluster-intro/ /docs/tutorials/kubernetes-basics/cluster-intro/ 301
|
||||
/docs/tutorials/getting-started/expose-intro/ /docs/tutorials/kubernetes-basics/expose-intro/ 301
|
||||
/docs/tutorials/getting-started/scale-app/ /docs/tutorials/kubernetes-basics/scale-interactive/ 301
|
||||
/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/user-guide/containers/ /docs/tasks/inject-data-application/define-command-argument-container/ 301
|
||||
/docs/user-guide/horizontal-pod-autoscaling/walkthrough.md /docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/ 301
|
||||
/docs/user-guide/ingress.md /docs/concepts/services-networking/ingress/ 301
|
||||
/docs/user-guide/replication-controller/operations/ /docs/concepts/workloads/controllers/replicationcontroller/ 301
|
||||
/docs/user-guide/resizing-a-replication-controller/ /docs/concepts/workloads/controllers/replicationcontroller/ 301
|
||||
/docs/user-guide/scheduled-jobs/ /docs/concepts/workloads/controllers/cron-jobs/ 301
|
||||
/docs/user-guide/security-context/ /docs/tasks/configure-pod-container/security-context/ 301
|
||||
|
||||
/kubernetes-bootcamp/2-1.html /docs/tutorials/kubernetes-basics/ 301
|
||||
/kubernetes-bootcamp/2-3-2.html /docs/tutorials/kubernetes-basics/ 301
|
||||
/kubernetes /docs/ 301
|
||||
/kubernetes/swagger-spec https://github.com/kubernetes/kubernetes/tree/master/api/swagger-spec/ 301
|
||||
/serviceaccount/token/ /docs/tasks/configure-pod-container/configure-service-account/ 301
|
||||
|
||||
/v1.1/docs/admin/networking.html/ /docs/concepts/cluster-administration/networking/ 301
|
||||
/v1.1/docs/getting-started-guides/ /docs/tutorials/kubernetes-basics/ 301
|
||||
|
||||
#################################
|
||||
# redirects from /js/redirects.js
|
||||
#
|
||||
|
||||
/resource-quota/ /docs/concepts/policy/resource-quotas/ 301
|
||||
/horizontal-pod-autoscaler/ /docs/tasks/run-application/horizontal-pod-autoscale/ 301
|
||||
/docs/roadmap/ https://github.com/kubernetes/kubernetes/milestones/ 301
|
||||
/api-ref/ https://github.com/kubernetes/kubernetes/milestones/ 301
|
||||
/kubernetes/third_party/swagger-ui/ /docs/reference/ 301
|
||||
/docs/user-guide/overview/ /docs/concepts/overview/what-is-kubernetes/ 301
|
||||
/docs/troubleshooting/ /docs/tasks/debug-application-cluster/troubleshooting/ 301
|
||||
/docs/concepts/services-networking/networkpolicies/ /docs/concepts/services-networking/network-policies/ 301
|
||||
/docs/getting-started-guides/meanstack/ https://medium.com/google-cloud/running-a-mean-stack-on-google-cloud-platform-with-kubernetes-149ca81c2b5d/ 301
|
||||
/docs/samples/ /docs/tutorials/ 301
|
||||
|
||||
/v1.1 301
|
||||
/v1.0 301
|
||||
|
||||
########################################################
|
||||
# Redirect users with chinese language preference to /cn
|
||||
#
|
||||
#/ /cn 302 Language=zh
|
||||
|
||||
###########################
|
||||
# Fixed 404s from analytics
|
||||
#
|
||||
|
||||
/concepts/containers/container-lifecycle-hooks/ /docs/concepts/containers/container-lifecycle-hooks/ 301
|
||||
/docs/abstractions/controllers/petset/ /docs/concepts/workloads/controllers/petset/ 301
|
||||
|
||||
/docs/admin/add-ons/ /docs/concepts/cluster-administration/addons/ 301
|
||||
/docs/admin/limitrange/Limits/ /docs/tasks/administer-cluster/limit-storage-consumption/#limitrange-to-limit-requests-for-storage/ 301
|
||||
|
||||
/docs/concepts/cluster-administration/device-plugins/ /docs/concepts/cluster-administration/network-plugins/ 301
|
||||
/docs/concepts/configuration/container-command-args/ /docs/tasks/inject-data-application/define-command-argument-container/ 301
|
||||
/docs/concepts/ecosystem/thirdpartyresource/ /docs/tasks/access-kubernetes-api/extend-api-third-party-resource/ 301
|
||||
/docs/concepts/overview/ /docs/concepts/overview/what-is-kubernetes/ 301
|
||||
/docs/concepts/policy/container-capabilities/ /docs/tasks/configure-pod-container/security-context/#set-capabilities-for-a-container/ 301
|
||||
/docs/concepts/policy/security-context/ /docs/tasks/configure-pod-container/security-context/ 301
|
||||
/docs/concepts/storage/volumes/emptyDirapiVersion/ /docs/concepts/storage/volumes/#emptydir/ 301
|
||||
/docs/concepts/tools/kubectl/object-management-using-commands/ /docs/tutorials/object-management-kubectl/imperative-object-management-command/ 301
|
||||
/docs/concepts/workload/pods/pod-overview/ /docs/concepts/workloads/pods/pod-overview 301
|
||||
/docs/concepts/workloads/controllers/cron-jobs/deployment/ /docs/concepts/workloads/controllers/cron-jobs/ 301
|
||||
/docs/concepts/workloads/controllers/statefulsets/ /docs/concepts/workloads/controllers/statefulset/ 301
|
||||
/docs/concepts/workloads/pods/init-containers/Kubernetes /docs/concepts/workloads/pods/init-containers/ 301
|
||||
|
||||
/docs/consumer-guideline/pod-security-coverage/ /docs/concepts/policy/pod-security-policy/ 301
|
||||
|
||||
/docs/contribute/create-pull-request/ /docs/home/contribute/create-pull-request 301
|
||||
/docs/contribute/page-templates/ /docs/home/contribute/page-templates 301
|
||||
/docs/contribute/review-issues/ /docs/home/contribute/review-issues 301
|
||||
/docs/contribute/stage-documentation-changes/ /docs/home/contribute/stage-documentation-changes/ 301
|
||||
/docs/contribute/style-guide/ /docs/home/contribute/style-guide 301
|
||||
|
||||
/docs/deprecate/ /ddocs/reference/deprecation-policy/ 301
|
||||
/docs/deprecation-policy/ /docs/reference/deprecation-policy/ 301
|
||||
|
||||
/docs/federation/api-reference/ /docs/reference/federation/v1/operations/ 301
|
||||
/docs/federation/api-reference/extensions/v1beta1/operations/ /docs/reference/federation/extensions/v1beta1/operations/ 301
|
||||
/docs/federation/api-reference/federation/v1beta1/operations/ /docs/reference/federation/extensions/v1beta1/operations/ 301
|
||||
/docs/federation/api-reference/v1/operations/ /docs/reference/federation/v1/operations/ 301
|
||||
|
||||
/docs/home/deprecation-policy/ /docs/reference/deprecation-policy/ 301
|
||||
|
||||
/docs/stable/user-guide/labels/ /docs/concepts/overview/working-with-objects/labels/ 301
|
||||
|
||||
/docs/tasks/administer-cluster/apply-resource-quota-limit/ /docs/tasks/administer-cluster/quota-api-object/ 301
|
||||
/docs/tasks/administer-cluster/configure-namespace-isolation/ /docs/concepts/services-networking/network-policies/ 301
|
||||
/docs/tasks/administer-cluster/configure-pod-disruption-budget/ /docs/tasks/run-application/configure-pdb/ 301
|
||||
/docs/tasks/administer-cluster/cpu-management-policies/ /docs/concepts/configuration/manage-compute-resources-container/ 301
|
||||
/docs/tasks/administer-cluster/default-cpu-request-limit/ /docs/tasks/configure-pod-container/assign-cpu-resource/#specify-a-cpu-request-and-a-cpu-limit/ 301
|
||||
/docs/tasks/administer-cluster/default-memory-request-limit/ /docs/tasks/configure-pod-container/assign-memory-resource/#specify-a-memory-request-and-a-memory-limit/ 301
|
||||
|
||||
/docs/tasks/configure-pod-container/cilium-network-policy/ /docs/tasks/administer-cluster/cilium-network-policy/ 301
|
||||
/docs/tasks/configure-pod-container/define-command-argument-container/ /docs/tasks/inject-data-application/define-command-argument-container/ 301
|
||||
/docs/tasks/configure-pod-container/projected-volume/ /docs/tasks/configure-pod-container/configure-projected-volume-storage/ 301
|
||||
|
||||
/docs/tasks/stateful-sets/deleting-pods/ /docs/tasks/run-application/force-delete-stateful-set-pod/ 301
|
||||
|
||||
/docs/user-guide/liveness/ /docs/tasks/configure-pod-container/configure-liveness-readiness-probes/ 301
|
||||
/docs/user-guide/logging/ /docs/concepts/cluster-administration/logging/ 301
|
||||
/docs/user-guide/replication-controller/operations/ /docs/concepts/workloads/controllers/replicationcontroller/ 301
|
||||
/docs/user-guide/service-accounts/working-with-resources/ /docs/tutorials/object-management-kubectl/object-management/ 301
|
||||
/docs/user-guide/StatefulSet/ /docs/concepts/workloads/controllers/statefulset/ 301
|
||||
/docs/user-guide/ui-access/ /docs/tasks/access-application-cluster/web-ui-dashboard/ 301
|
||||
|
||||
/latest/docs/ /docs/home/ 301
|
||||
|
||||
/kubernetes/swagger-spec https://github.com/kubernetes/kubernetes/tree/master/api/swagger-spec/ 301
|
||||
+19
-20
@@ -292,7 +292,6 @@ ul.global-nav
|
||||
.flip-nav ul.global-nav li a .ui-icon
|
||||
filter: brightness(0)
|
||||
|
||||
|
||||
.flip-nav ul.global-nav li ul li a,
|
||||
background: #fff
|
||||
color: $dark-grey
|
||||
@@ -1003,8 +1002,8 @@ dd
|
||||
//font-weight: 700
|
||||
text-decoration: underline
|
||||
|
||||
// a:visited
|
||||
// color: blueviolet
|
||||
// a:visited
|
||||
// color: blueviolet
|
||||
|
||||
a.button
|
||||
border-radius: 2px
|
||||
@@ -1125,7 +1124,7 @@ $feature-box-div-margin-bottom: 40px
|
||||
#video
|
||||
width: 100%
|
||||
position: relative
|
||||
background-image: url(/images/kub_video_banner.jpg)
|
||||
background-image: url(/images/kub_video_thm.jpg)
|
||||
background-position: center center
|
||||
background-size: cover
|
||||
|
||||
@@ -1318,7 +1317,7 @@ $feature-box-div-margin-bottom: 40px
|
||||
background-color: $white
|
||||
box-shadow: 0 5px 5px rgba(0,0,0,.24),0 0 5px rgba(0,0,0,.12)
|
||||
|
||||
#calendarMeetings
|
||||
#calendarWrapper
|
||||
position: relative
|
||||
width: 80vw
|
||||
height: 60vw
|
||||
@@ -1332,7 +1331,7 @@ $feature-box-div-margin-bottom: 40px
|
||||
height: 30vw
|
||||
max-width: 1200px
|
||||
max-height: 450px
|
||||
margin: 20px auto
|
||||
margin: 20px auto
|
||||
|
||||
iframe
|
||||
position: absolute
|
||||
@@ -1588,8 +1587,8 @@ $feature-box-div-margin-bottom: 40px
|
||||
//font-weight: 700
|
||||
text-decoration: underline
|
||||
|
||||
// a:visited
|
||||
// color: blueviolet
|
||||
// a:visited
|
||||
// color: blueviolet
|
||||
|
||||
a.button
|
||||
border-radius: 2px
|
||||
@@ -1742,18 +1741,18 @@ $feature-box-div-margin-bottom: 40px
|
||||
|
||||
|
||||
//#bigSocial
|
||||
// text-align: center
|
||||
//
|
||||
// div
|
||||
// display: inline-block
|
||||
// float: none
|
||||
// padding-top: 125px
|
||||
// width: calc(90%)
|
||||
//
|
||||
// a
|
||||
// margin-top: 15px
|
||||
// font-size: 18px
|
||||
// text-align: center
|
||||
//
|
||||
// div
|
||||
// display: inline-block
|
||||
// float: none
|
||||
// padding-top: 125px
|
||||
// width: calc(90%)
|
||||
//
|
||||
// a
|
||||
// margin-top: 15px
|
||||
// font-size: 18px
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
// SASS for Case Studies pages go here:
|
||||
|
||||
hr
|
||||
background-color: #999999
|
||||
|
||||
h2
|
||||
margin-bottom: 15px !important
|
||||
|
||||
.subhead
|
||||
padding-bottom: 2% !important
|
||||
padding-top: 0% !important
|
||||
|
||||
.details
|
||||
margin-left: 1.9%
|
||||
padding-right: 5%
|
||||
font-size: 16px !important
|
||||
padding-bottom: 2% !important
|
||||
|
||||
.section1
|
||||
margin-bottom: 3%
|
||||
.cols
|
||||
width: 80% !important
|
||||
margin-left: 6.8%
|
||||
padding-top: 1.5%
|
||||
.col1
|
||||
width: 52% !important
|
||||
font-weight: 300 !important
|
||||
.col2
|
||||
width: 46% !important
|
||||
|
||||
.banner2text
|
||||
width: 63%
|
||||
padding-top: 10%
|
||||
padding-left: 0% !important
|
||||
float: initial !important
|
||||
text-align: center
|
||||
margin: 0 auto
|
||||
position: relative
|
||||
|
||||
.banner3text, .banner4text, .banner5text
|
||||
width: 63%
|
||||
padding-left: 0% !important
|
||||
float: initial !important
|
||||
text-align: center
|
||||
margin: 0 auto
|
||||
position: relative
|
||||
|
||||
.fullcol
|
||||
float: initial !important
|
||||
|
||||
body footer
|
||||
background-color: #585858 !important
|
||||
|
||||
.section1
|
||||
float: left !important
|
||||
|
||||
.banner1
|
||||
padding-left: 11.9% !important
|
||||
|
||||
.banner2
|
||||
float: initial !important
|
||||
padding-bottom: 2% !important
|
||||
|
||||
footer
|
||||
padding: 0% 7%
|
||||
|
||||
.banner4, .banner3, .banner5
|
||||
float: initial !important
|
||||
|
||||
@media screen and (max-width: 910px)
|
||||
.banner2text
|
||||
width: 47%
|
||||
padding-top: 45%
|
||||
.details
|
||||
margin-left: 0%
|
||||
margin-bottom: 3%
|
||||
.subhead
|
||||
padding-bottom: 0% !important
|
||||
padding-top: 0% !important
|
||||
.banner3
|
||||
width: 100% !important
|
||||
|
||||
@media screen and (max-width: 780px)
|
||||
.section1 .cols
|
||||
width: 100% !important
|
||||
margin-left: 0%
|
||||
padding-top: 5%
|
||||
.col1, .col2
|
||||
width: 100% !important
|
||||
margin-left: 0% !important
|
||||
.fullcol
|
||||
width: 90% !important
|
||||
margin-left: 5% !important
|
||||
.banner1
|
||||
padding-left: 10% !important
|
||||
margin-bottom: 6% !important
|
||||
.banner2text
|
||||
padding-top: 60% !important
|
||||
padding-bottom: 2% !important
|
||||
+4
-18
@@ -3,15 +3,6 @@ $vendor-strip-height: 44px
|
||||
$video-section-height: 550px
|
||||
|
||||
@media screen and (min-width: 1025px)
|
||||
#hamburger
|
||||
display: none
|
||||
|
||||
ul.global-nav
|
||||
display: inline-block
|
||||
|
||||
#docs #vendorStrip #searchBox:before
|
||||
top: 15px
|
||||
|
||||
#vendorStrip
|
||||
height: $vendor-strip-height
|
||||
line-height: $vendor-strip-height
|
||||
@@ -49,7 +40,7 @@ $video-section-height: 550px
|
||||
|
||||
#searchBox
|
||||
float: right
|
||||
width: 320px
|
||||
width: 30%
|
||||
|
||||
#search
|
||||
vertical-align: middle
|
||||
@@ -74,7 +65,7 @@ $video-section-height: 550px
|
||||
|
||||
|
||||
#encyclopedia
|
||||
padding: 50px 50px 100px 100px
|
||||
padding: 50px 50px 20px 20px
|
||||
clear: both
|
||||
|
||||
#docsToc
|
||||
@@ -97,11 +88,6 @@ $video-section-height: 550px
|
||||
section, header, footer
|
||||
main
|
||||
max-width: $main-max-width
|
||||
|
||||
header, #vendorStrip, #encyclopedia, #hero h1, #hero h5, #docs #hero h1, #docs #hero h5,
|
||||
#community #hero h1, .gridPage #hero h1, #community #hero h5, .gridPage #hero h5
|
||||
padding-left: 100px
|
||||
padding-right: 100px
|
||||
|
||||
#home
|
||||
section, header, footer
|
||||
@@ -135,7 +121,7 @@ $video-section-height: 550px
|
||||
#video
|
||||
height: $video-section-height
|
||||
position: relative
|
||||
background-image: url(../images/kub_video_banner.jpg)
|
||||
background-image: url(../images/kub_video_thm.jpg)
|
||||
background-position: center center
|
||||
background-size: cover
|
||||
|
||||
@@ -290,7 +276,7 @@ $video-section-height: 550px
|
||||
text-align: left
|
||||
|
||||
h1
|
||||
padding: 20px 100px
|
||||
padding: 20px
|
||||
|
||||
#tryKubernetes
|
||||
width: auto
|
||||
|
||||
@@ -1,117 +0,0 @@
|
||||
---
|
||||
title: Ancestry Case Study
|
||||
layout: basic
|
||||
case_study_styles: true
|
||||
cid: caseStudies
|
||||
css: /css/style_ancestry.css
|
||||
---
|
||||
|
||||
<div class="banner1">
|
||||
<h1> CASE STUDY:<img src="http://c.mfcreative.com/i/logo/ancestry-on-dark.svg" width="22%" style="margin-bottom:-12px;margin-left:3px;"><br> <div class="subhead">Digging Into the Past With New Technology</div></h1>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="details">
|
||||
Company <b>Ancestry</b> Location <b>Lehi, Utah</b> Industry <b>Internet Company, Online Services</b>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<section class="section1">
|
||||
<div class="cols">
|
||||
<div class="col1">
|
||||
|
||||
<h2>Challenge</h2>
|
||||
Ancestry, the global leader in family history and consumer genomics, uses sophisticated engineering and technology to help everyone, everywhere discover the story of what led to them. The company has spent more than 30 years innovating and building products and technologies that at their core, result in real and emotional human responses. <a href="https://www.ancestry.com">Ancestry</a> currently serves more than 2.6 million paying subscribers, holds 20 billion historical records, 90 million family trees and more than four million people are in its AncestryDNA network, making it the largest consumer genomics DNA network in the world. The company's popular website, <a href="https://www.ancestry.com">ancestry.com</a>, has been working with big data long before the term was popularized. The site was built on hundreds of services, technologies and a traditional deployment methodology. "It's worked well for us in the past," says Paul MacKay, software engineer and architect at Ancestry, "but had become quite cumbersome in its processing and is time-consuming. As a primarily online service, we are constantly looking for ways to accelerate to be more agile in delivering our solutions and our products."
|
||||
|
||||
<br>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col2">
|
||||
<h2>Solution</h2>
|
||||
|
||||
The company is transitioning to cloud native infrastructure, using <a href="https://www.docker.com">Docker</a> containerization, <a href="https://kubernetes.io">Kubernetes</a> orchestration and <a href="https://prometheus.io">Prometheus</a> for cluster monitoring.<br>
|
||||
<br>
|
||||
<h2>Impact</h2>
|
||||
"Every single product, every decision we make at Ancestry, focuses on delighting our customers with intimate, sometimes life-changing discoveries about themselves and their families," says MacKay. "As the company continues to grow, the increased productivity gains from using Kubernetes has helped Ancestry make customer discoveries faster. With the move to Dockerization for example, instead of taking between 20 to 50 minutes to deploy a new piece of code, we can now deploy in under a minute for much of our code. We’ve truly experienced significant time savings in addition to the various features and benefits from cloud native and Kubernetes-type technologies."
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner2">
|
||||
<div class="banner2text">
|
||||
"At a certain point, you have to step back if you're going to push a new technology and get key thought leaders with engineers within the organization to become your champions for new technology adoption. At training sessions, the development teams were always the ones that were saying, 'Kubernetes saved our time tremendously; it's an enabler. It really is incredible.'"<br><br><span style="font-size:16px">- PAUL MACKAY, SOFTWARE ENGINEER AND ARCHITECT AT ANCESTRY</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section2">
|
||||
<div class="fullcol">
|
||||
<h2>It started with a Shaky Leaf.</h2>
|
||||
|
||||
Since its introduction a decade ago, the Shaky Leaf icon has become one of Ancestry's signature features, which signals to users that there's a helpful hint you can use to find out more about your family tree.<br><br>
|
||||
So when the company decided to begin moving its infrastructure to cloud native technology, the first service that was launched on <a href="https://kubernetes.io">Kubernetes</a>, the open source platform for managing application containers across clusters of hosts, was this hint system. Think of it as Amazon's recommended products, but instead of recommending products the company recommends records, stories, or familial connections. "It was a very important part of the site," says Ancestry software engineer and architect Paul MacKay, "but also small enough for a pilot project that we knew we could handle in a very appropriate, secure way."<br><br>
|
||||
And when it went live smoothly in early 2016, "our deployment time for this service literally was cut down from 50 minutes to 2 or 5 minutes," MacKay adds. "The development team was just thrilled because we're focused on supplying a great experience for our customers. And that means features, it means stability, it means all those things that we need for a first-in-class type operation."<br><br>
|
||||
The stability of that Shaky Leaf was a signal for MacKay and his team that their decision to embrace cloud native technologies was the right one for the company. With a private data center, Ancestry built its website (which launched in 1996) on hundreds of services and technologies and a traditional deployment methodology. "It worked well for us in the past, but the sum of the legacy systems became quite cumbersome in its processing and was time-consuming," says MacKay. "We were looking for other ways to accelerate, to be more agile in delivering our solutions and our products."
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner3">
|
||||
<div class="banner3text">
|
||||
"And when it [Kubernetes] went live smoothly in early 2016, 'our deployment time for this service literally was cut down from 50 minutes to 2 or 5 minutes,' MacKay adds. 'The development team was just thrilled because we're focused on supplying a great experience for our customers. And that means features, it means stability, it means all those things that we need for a first-in-class type operation.'"
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section3">
|
||||
<div class="fullcol">
|
||||
That need led them in 2015 to explore containerization. Ancestry engineers had already been using technology like <a href="https://www.java.com/en/">Java</a> and <a href="https://www.python.org">Python</a> on Linux, so part of the decision was about making the infrastructure more Linux-friendly. They quickly decided that they wanted to go with Docker for containerization, "but it always comes down to the orchestration part of it to make it really work," says MacKay.<br><br>
|
||||
His team looked at orchestration platforms offered by <a href="https://docs.docker.com/compose/">Docker Compose</a>, <a href="http://mesos.apache.org">Mesos</a> and <a href="https://www.openstack.org/software/">OpenStack</a>, and even started to prototype some homegrown solutions. And then they started hearing rumblings of the imminent release of Kubernetes v1.0. "At the forefront, we were looking at the secret store, so we didn't have to manage that all ourselves, the config maps, the methodology of seamless deployment strategy," he says. "We found that how Kubernetes had done their resources, their types, their labels and just their interface was so much further advanced than the other things we had seen. It was a feature fit."<br><br>
|
||||
<div class="quote">
|
||||
Plus, MacKay says, "I just believed in the confidence that comes with the history that Google has with containerization. So we started out right on the leading edge of it. And we haven't looked back since."</div><br>
|
||||
Which is not to say that adopting a new technology hasn't come with some challenges. "Change is hard," says MacKay. "Not because the technology is hard or that the technology is not good. It's just that people like to do things like they had done [before]. You have the early adopters and you have those who are coming in later. It was a learning experience on both sides."<br><br>
|
||||
Figuring out the best deployment operations for Ancestry was a big part of the work it took to adopt cloud native infrastructure. "We want to make sure the process is easy and also controlled in the manner that allows us the highest degree of security that we demand and our customers demand," says MacKay. "With Kubernetes and other products, there are some good solutions, but a little bit of glue is needed to bring it into corporate processes and governances. It's like having a set of gloves that are generic, but when you really do want to grab something you have to make it so it's customized to you. That's what we had to do."<br><br>
|
||||
Their best practices include allowing their developers to deploy into development stage and production, but then controlling the aspects that need governance and auditing, such as secrets. They found that having one namespace per service is useful for achieving that containment of secrets and config maps. And for their needs, having one container per pod makes it easier to manage and to have a smaller unit of deployment.
|
||||
<br><br>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner4">
|
||||
<div class="banner4text">
|
||||
|
||||
"The success of Ancestry's first deployment of the hint system on Kubernetes helped create momentum for greater adoption of the technology."
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section4">
|
||||
<div class="fullcol">
|
||||
With that process established, the time spent on deployment was cut down to under a minute for some services. "As programmers, we have what's called REPL: read, evaluate, print, and loop, but with Kubernetes, we have CDEL: compile, deploy, execute, and loop," says MacKay. "It's a very quick loop back and a great benefit to understand that when our services are deployed in production, they're the same as what we tested in the pre-production environments. The approach of cloud native for Ancestry provides us a better ability to scale and to accommodate the business needs as work loads occur."<br><br>
|
||||
The success of Ancestry's first deployment of the hint system on Kubernetes helped create momentum for greater adoption of the technology. "Engineers like to code, they like to do features, they don't like to sit around waiting for things to be deployed and worrying about scaling up and out and down," says MacKay. "After a while the engineers became our champions. At training sessions, the development teams were always the ones saying, 'Kubernetes saved our time tremendously; it's an enabler; it really is incredible.' Over time, we were able to convince our management that this was a transition that the industry is making and that we needed to be a part of it."<br><br>
|
||||
A year later, Ancestry has transitioned a good number of applications to Kubernetes. "We have many different services that make up the rich environment that [the website] has from both the DNA side and the family history side," says MacKay. "We have front-end stacks, back-end stacks and back-end processing type stacks that are in the cluster."<br><br>
|
||||
The company continues to weigh which services it will move forward to Kubernetes, which ones will be kept as is, and which will be replaced in the future and thus don't have to be moved over. MacKay estimates that the company is "approaching halfway on those features that are going forward. We don't have to do a lot of convincing anymore. It's more of an issue of timing with getting product management and engineering staff the knowledge and information that they need."
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner5">
|
||||
<div class="banner5text">
|
||||
"... 'I believe in Kubernetes. I believe in containerization. I think
|
||||
if we can get there and establish ourselves in that world, we will be further along and far better off being agile and all the things we talk about,
|
||||
and it'll go forward.'"
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section5">
|
||||
<div class="fullcol">
|
||||
|
||||
|
||||
Looking ahead, MacKay sees Ancestry maximizing the benefits of Kubernetes in 2017. "We're very close to having everything that should be or could be in a Linux-friendly world in Kubernetes by the end of the year," he says, adding that he's looking forward to features such as federation and horizontal pod autoscaling that are currently in the works. "Kubernetes has been very wonderful for us and we continue to ride the wave."<br><br>
|
||||
That wave, he points out, has everything to do with the vibrant Kubernetes community, which has grown by leaps and bounds since Ancestry joined it as an early adopter. "This is just a very rough way of judging it, but on Slack in June 2015, there were maybe 500 on there," MacKay says. "The last time I looked there were maybe 8,500 just on the Slack channel. There are so many major companies and different kinds of companies involved now. It's the variety of contributors, the number of contributors, the incredibly competent and friendly community."<br><br>
|
||||
As much as he and his team at Ancestry have benefited from what he calls "the goodness and the technical abilities of many" in the community, they've also contributed information about best practices, logged bug issues and participated in the open source conversation. And they've been active in attending <a href="https://www.meetup.com/Utah-Kubernetes-Meetup/">meetups</a> to help educate and give back to the local tech community in Utah. Says MacKay: "We're trying to give back as far as our experience goes, rather than just code."
|
||||
<br><br>When he meets with companies considering adopting cloud native infrastructure, the best advice he has to give from Ancestry's Kubernetes journey is this: "Start small, but with hard problems," he says. And "you need a patron who understands the vision of containerization, to help you tackle the political as well as other technical roadblocks that can occur when change is needed."<br><br>
|
||||
With the changes that MacKay's team has led over the past year and a half, cloud native will be part of Ancestry's technological genealogy for years to come. MacKay has been such a champion of the technology that he says people have jokingly accused him of having a Kubernetes tattoo.<br><br>
|
||||
"I really don't," he says with a laugh. "But I'm passionate. I'm not exclusive to any technology; I use whatever I need that's out there that makes us great. If it's something else, I'll use it. But right now I believe in Kubernetes. I believe in containerization. I think if we can get there and establish ourselves in that world, we will be further along and far better off being agile and all the things we talk about, and it'll go forward."<br><br>
|
||||
He pauses. "So, yeah, I guess you can say I'm an evangelist for Kubernetes," he says. "But I'm not getting a tattoo!"
|
||||
|
||||
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,111 +0,0 @@
|
||||
---
|
||||
title: Box Case Study
|
||||
layout: basic
|
||||
case_study_styles: true
|
||||
cid: caseStudies
|
||||
css: /css/style_box.css
|
||||
---
|
||||
|
||||
<div class="banner1">
|
||||
<h1>CASE STUDY: <img src="/images/box_logo.png" width="10%" style="margin-bottom:-6px"><br>
|
||||
<div class="subhead">An Early Adopter Envisions
|
||||
a New Cloud Platform</div>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="details">
|
||||
Company <b>Box</b> Location <b>Redwood City, California</b> Industry <b>Technology</b>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<section class="section1">
|
||||
|
||||
<div class="cols">
|
||||
<div class="col1">
|
||||
|
||||
<h2>Challenge</h2>
|
||||
Founded in 2005, the enterprise content management company allows its more than 50 million users to manage content in the cloud. <a href="https://www.box.com/home">Box</a> was built primarily with bare metal inside the company’s own data centers, with a monolithic PHP code base. As the company was expanding globally, it needed to focus on "how we run our workload across many different cloud infrastructures from bare metal to public cloud," says Sam Ghods, Cofounder and Services Architect of Box. "It’s been a huge challenge because of different clouds, especially bare metal, have very different interfaces."
|
||||
<br>
|
||||
</div>
|
||||
|
||||
<div class="col2">
|
||||
<h2>Solution</h2>
|
||||
Over the past couple of years, Box has been decomposing its infrastructure into microservices, and became an early adopter of, as well as contributor to, <a href="http://kubernetes.io/">Kubernetes</a> container orchestration. Kubernetes, Ghods says, has allowed Box’s developers to "target a universal set of concepts that are portable across all clouds."<br><br>
|
||||
|
||||
<h2>Impact</h2>
|
||||
"Before Kubernetes," Ghods says, "our infrastructure was so antiquated it was taking us more than six months to deploy a new microservice. Today, a new microservice takes less than five days to deploy. And we’re working on getting it to an hour."
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
<div class="banner2">
|
||||
<div class="banner2text">
|
||||
"We looked at a lot of different options, but Kubernetes really stood out....the fact that on day one it was designed to run on bare metal just as well as Google Cloud meant that we could actually migrate to it inside of our data centers, and then use those same tools and concepts to run across public cloud providers as well."<br><br><span style="font-size:15px;letter-spacing:0.08em">- SAM GHOUDS, CO-FOUNDER AND SERVICES ARCHITECT OF BOX</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section2">
|
||||
|
||||
<div class="fullcol">
|
||||
<h2>In the summer of 2014, Box was feeling the pain of a decade’s worth of hardware and software infrastructure that wasn’t keeping up with the company’s needs.</h2>
|
||||
|
||||
A platform that allows its more than 50 million users (including governments and big businesses like <a href="https://www.ge.com/">General Electric</a>) to manage and share content in the cloud, Box was originally a <a href="http://php.net/">PHP</a> monolith of millions of lines of code built exclusively with bare metal inside of its own data centers. It had already begun to slowly chip away at the monolith, decomposing it into microservices. And "as we’ve been expanding into regions around the globe, and as the public cloud wars have been heating up, we’ve been focusing a lot more on figuring out how we run our workload across many different environments and many different cloud infrastructure providers," says Box Cofounder and Services Architect Sam Ghods. "It’s been a huge challenge thus far because of all these different providers, especially bare metal, have very different interfaces and ways in which you work with them."<br><br>
|
||||
Box’s cloud native journey accelerated that June, when Ghods attended <a href="https://www.docker.com/events/dockercon">DockerCon</a>. The company had come to the realization that it could no longer run its applications only off bare metal, and was researching containerizing with Docker, virtualizing with OpenStack, and supporting public cloud.<br><br>
|
||||
At that conference, Google announced the release of its Kubernetes container management system, and Ghods was won over. "We looked at a lot of different options, but Kubernetes really stood out, especially because of the incredibly strong team of <a href="https://research.google.com/pubs/pub43438.html">Borg</a> veterans and the vision of having a completely infrastructure-agnostic way of being able to run cloud software," he says, referencing Google’s internal container orchestrator Borg. "The fact that on day one it was designed to run on bare metal just as well as <a href="https://cloud.google.com/">Google Cloud</a> meant that we could actually migrate to it inside of our data centers, and then use those same tools and concepts to run across public cloud providers as well."<br><br>
|
||||
Another plus: Ghods liked that <a href="https://kubernetes.io/">Kubernetes</a> has a universal set of API objects like pod, service, replica set and deployment object, which created a consistent surface to build tooling against. "Even PaaS layers like <a href="https://www.openshift.com/">OpenShift</a> or <a href="http://deis.io/">Deis</a> that build on top of Kubernetes still treat those objects as first-class principles," he says. "We were excited about having these abstractions shared across the entire ecosystem, which would result in a lot more momentum than we saw in other potential solutions."<br><br>
|
||||
Box deployed Kubernetes in a cluster in a production data center just six months later. Kubernetes was then still pre-beta, on version 0.11. They started small: The very first thing Ghods’s team ran on Kubernetes was a Box API checker that confirms Box is up. "That was just to write and deploy some software to get the whole pipeline functioning," he says. Next came some daemons that process jobs, which was "nice and safe because if they experienced any interruptions, we wouldn’t fail synchronous incoming requests from customers."
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner3">
|
||||
<div class="banner3text">
|
||||
"As we’ve been expanding into regions around the globe, and as the public cloud wars have been heating up, we’ve been focusing a lot more on figuring out how we [can have Kubernetes help] run our workload across many different environments and many different cloud infrastructure providers."
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section3">
|
||||
<div class="fullcol">
|
||||
The first live service, which the team could route to and ask for information, was launched a few months later. At that point, Ghods says, "We were comfortable with the stability of the Kubernetes cluster. We started to port some services over, then we would increase the cluster size and port a few more, and that’s ended up to about 100 servers in each data center that are dedicated purely to Kubernetes. And that’s going to be expanding a lot over the next 12 months, probably too many hundreds if not thousands."<br><br>
|
||||
While observing teams who began to use Kubernetes for their microservices, "we immediately saw an uptick in the number of microservices being released," Ghods notes. "There was clearly a pent-up demand for a better way of building software through microservices, and the increase in agility helped our developers be more productive and make better architectural choices."
|
||||
<br><br><div class="quote">"There was clearly a pent-up demand for a better way of building software through microservices, and the increase in agility helped our developers be more productive and make better architectural choices."</div><br>
|
||||
Ghods reflects that as early adopters, Box had a different journey from what companies experience now. "We were definitely lock step with waiting for certain things to stabilize or features to get released," he says. "In the early days we were doing a lot of contributions [to components such as kubectl apply] and waiting for Kubernetes to release each of them, and then we’d upgrade, contribute more, and go back and forth several times. The entire project took about 18 months from our first real deployment on Kubernetes to having general availability. If we did that exact same thing today, it would probably be no more than six."<br><br>
|
||||
In any case, Box didn’t have to make too many modifications to Kubernetes for it to work for the company. "The vast majority of the work our team has done to implement Kubernetes at Box has been making it work inside of our existing (and often legacy) infrastructure," says Ghods, "such as upgrading our base operating system from RHEL6 to RHEL7 or integrating it into <a href="https://www.nagios.org/">Nagios</a>, our monitoring infrastructure. But overall Kubernetes has been remarkably flexible with fitting into many of our constraints, and we’ve been running it very successfully on our bare metal infrastructure."<br><br>
|
||||
Perhaps the bigger challenge for Box was a cultural one. "Kubernetes, and cloud native in general, represents a pretty big paradigm shift, and it’s not very incremental," Ghods says. "We’re essentially making this pitch that Kubernetes is going to solve everything because it does things the right way and everything is just suddenly better. But it’s important to keep in mind that it’s not nearly as proven as many other solutions out there. You can’t say how long this or that company took to do it because there just aren’t that many yet. Our team had to really fight for resources because our project was a bit of a moonshot."
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner4">
|
||||
<div class="banner4text">
|
||||
"The vast majority of the work our team has done to implement Kubernetes at Box has been making it work inside of our existing [and often legacy] infrastructure....overall Kubernetes has been remarkably flexible with fitting into many of our constraints, and we’ve been running it very successfully on our bare metal infrastructure."
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section4">
|
||||
<div class="fullcol">
|
||||
Having learned from experience, Ghods offers these two pieces of advice for companies going through similar challenges:
|
||||
<h2>1. Deliver early and often.</h2> Service discovery was a huge problem for Box, and the team had to decide whether to build an interim solution or wait for Kubernetes to natively satisfy Box’s unique requirements. After much debate, "we just started focusing on delivering something that works, and then dealing with potentially migrating to a more native solution later," Ghods says. "The above-all-else target for the team should always be to serve real production use cases on the infrastructure, no matter how trivial. This helps keep the momentum going both for the team itself and for the organizational perception of the project." </br></br>
|
||||
<h2>2. Keep an open mind about what your company has to abstract away from developers and what it doesn’t.</h2> Early on, the team built an abstraction on top of Docker files to help ensure that images had the right security updates.
|
||||
This turned out to be superfluous work, since container images are considered immutable and you can easily scan them post-build to ensure they do not contain vulnerabilities. Because managing infrastructure through containerization is such a discontinuous leap, it’s better to start by interacting directly with the native tools and learning their unique advantages and caveats. An abstraction should be built only after a practical need for it arises.</br></br>
|
||||
In the end, the impact has been powerful. "Before Kubernetes," Ghods says, "our infrastructure was so antiquated it was taking us more than six months to deploy a new microservice. Now a new microservice takes less than five days to deploy. And we’re working on getting it to an hour. Granted, much of that six months was due to how broken our systems were, but bare metal is intrinsically a difficult platform to support unless you have a system like Kubernetes to help manage it."</br></br>
|
||||
By Ghods’s estimate, Box is still several years away from his goal of being a 90-plus percent Kubernetes shop. "We’re very far along on having a mission-critical, stable Kubernetes deployment that provides a lot of value," he says. "Right now about five percent of all of our compute runs on Kubernetes, and I think in the next six months we’ll likely be between 20 to 50 percent. We’re working hard on enabling all stateless service use cases, and shift our focus to stateful services after that."
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner5">
|
||||
<div class="banner5text">
|
||||
"Ghods predicts that Kubernetes has the opportunity to be the new cloud platform. '...because it’s a never-before-seen level of automation and intelligence surrounding infrastructure that is portable and agnostic to every way you can run your infrastructure.'"
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section5">
|
||||
<div class="fullcol">
|
||||
In fact, that’s what he envisions across the industry: Ghods predicts that Kubernetes has the opportunity to be the new cloud platform. Kubernetes provides an API consistent across different cloud platforms including bare metal, and "I don’t think people have seen the full potential of what’s possible when you can program against one single interface," he says. "The same way <a href="https://aws.amazon.com/">AWS</a> changed infrastructure so that you don’t have to think about servers or cabinets or networking equipment anymore, Kubernetes enables you to focus exclusively on the containers that you’re running, which is pretty exciting. That’s the vision."</br></br>
|
||||
Ghods points to projects that are already in development or recently released for Kubernetes as a cloud platform: cluster federation, the Dashboard UI, and <a href="https://coreos.com/">CoreOS</a>’s etcd operator. "I honestly believe it’s the most exciting thing I’ve seen in cloud infrastructure," he says, "because it’s a never-before-seen level of automation and intelligence surrounding infrastructure that is portable and agnostic to every way you can run your infrastructure."</br></br>
|
||||
Box, with its early decision to use bare metal, embarked on its Kubernetes journey out of necessity. But Ghods says that even if companies don’t have to be agnostic about cloud providers today, Kubernetes may soon become the industry standard, as more and more tooling and extensions are built around the API.</br></br>
|
||||
"The same way it doesn’t make sense to deviate from Linux because it’s such a standard," Ghods says, "I think Kubernetes is going down the same path. It is still early days—the documentation still needs work and the user experience for writing and publishing specs to the Kubernetes clusters is still rough. When you’re on the cutting edge you can expect to bleed a little. But the bottom line is, this is where the industry is going. Three to five years from now it’s really going to be shocking if you run your infrastructure any other way."
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,112 +0,0 @@
|
||||
---
|
||||
title: Buffer Case Study
|
||||
layout: basic
|
||||
case_study_styles: true
|
||||
cid: caseStudies
|
||||
css: /css/style_buffer.css
|
||||
---
|
||||
|
||||
<div class="banner1">
|
||||
<h1>CASE STUDY: <img src="/images/buffer.png" width="18%" style="margin-bottom:-5px;margin-left:10px;"><br>
|
||||
<div class="subhead">Making Deployments Easy for a Small, Distributed Team</div>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="details">
|
||||
Company <b>Buffer</b> Location <b>Around the World</b> Industry <b>Social Media Technology</b>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<section class="section1">
|
||||
<div class="cols">
|
||||
<div class="col1">
|
||||
|
||||
<h2>Challenge</h2>
|
||||
With a small but fully distributed team of 80 working across almost a dozen time zones, Buffer—which offers social media management to agencies and marketers—was looking to solve its "classic monolithic code base problem," says Architect Dan Farrelly. "We wanted to have the kind of liquid infrastructure where a developer could create an app and deploy it and scale it horizontally as necessary."
|
||||
</div>
|
||||
|
||||
<div class="col2">
|
||||
<h2>Solution</h2>
|
||||
Embracing containerization, Buffer moved its infrastructure from Amazon Web Services’ Elastic Beanstalk to Docker on AWS, orchestrated with Kubernetes.
|
||||
<br>
|
||||
<br>
|
||||
<h2>Impact</h2>
|
||||
The new system "leveled up our ability with deployment and rolling out new changes," says Farrelly. "Building something on your computer and knowing that it’s going to work has shortened things up a lot. Our feedback cycles are a lot faster now too."
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner2">
|
||||
<div class="banner2text">
|
||||
"It’s amazing that we can use the Kubernetes solution off the shelf with our team. And it just keeps getting better. Before we even know that we need something, it’s there in the next release or it’s coming in the next few months."<br><br><span style="font-size:16px;letter-spacing:2px;">- DAN FARRELLY, BUFFER ARCHITECT</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section2">
|
||||
<div class="fullcol">
|
||||
<h2>Dan Farrelly uses a carpentry analogy to explain the problem his company, <a href="https://buffer.com">Buffer</a>, began having as its team of developers grew over the past few years.</h2>
|
||||
|
||||
"If you’re building a table by yourself, it’s fine," the company’s architect says. "If you bring in a second person to work on the table, maybe that person can start sanding the legs while you’re sanding the top. But when you bring a third or fourth person in, someone should probably work on a different table." Needing to work on more and more different tables led Buffer on a path toward microservices and containerization made possible by Kubernetes.<br><br>
|
||||
Since around 2012, Buffer had already been using <a href="https://aws.amazon.com/elasticbeanstalk/">Elastic Beanstalk</a>, the orchestration service for deploying infrastructure offered by <a href="https://aws.amazon.com">Amazon Web Services</a>. "We were deploying a single monolithic <a href="http://php.net/manual/en/intro-whatis.php">PHP</a> application, and it was the same application across five or six environments," says Farrelly. "We were very much a product-driven company. It was all about shipping new features quickly and getting things out the door, and if something was not broken, we didn’t spend too much time on it. If things were getting a little bit slow, we’d maybe use a faster server or just scale up one instance, and it would be good enough. We’d move on."<br><br>
|
||||
But things came to a head in 2016. With the growing number of committers on staff, Farrelly and Buffer’s then-CTO, Sunil Sadasivan, decided it was time to re-architect and rethink their infrastructure. "It was a classic monolithic code base problem," says Farrelly.<br><br>Some of the company’s team was already successfully using <a href="https://www.docker.com">Docker</a> in their development environment, but the only application running on Docker in production was a marketing website that didn’t see real user traffic. They wanted to go further with Docker, and the next step was looking at options for orchestration.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner3">
|
||||
<div class="banner3text">
|
||||
And all the things Kubernetes did well suited Buffer’s needs. "We wanted to have the kind of liquid infrastructure where a developer could create an app and deploy it and scale it horizontally as necessary," says Farrelly. "We quickly used some scripts to set up a couple of test clusters, we built some small proof-of-concept applications in containers, and we deployed things within an hour. We had very little experience in running containers in production. It was amazing how quickly we could get a handle on it [Kubernetes]."
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section3">
|
||||
<div class="fullcol">
|
||||
First they considered <a href="https://mesosphere.com">Mesosphere</a>, <a href="https://dcos.io">DC/OS</a> and <a href="https://aws.amazon.com/ecs/">Amazon Elastic Container Service</a> (which their data systems team was already using for some data pipeline jobs). While they were impressed by these offerings, they ultimately went with Kubernetes. "We run on AWS still, so spinning up, creating services and creating load balancers on demand for us without having to configure them manually was a great way for our team to get into this," says Farrelly. "We didn’t need to figure out how to configure this or that, especially coming from a former Elastic Beanstalk environment that gave us an automatically-configured load balancer. I really liked Kubernetes’ controls of the command line. It just took care of ports. It was a lot more flexible. Kubernetes was designed for doing what it does, so it does it very well."<br><br>
|
||||
And all the things Kubernetes did well suited Buffer’s needs. "We wanted to have the kind of liquid infrastructure where a developer could create an app and deploy it and scale it horizontally as necessary," says Farrelly. "We quickly used some scripts to set up a couple of test clusters, we built some small proof-of-concept applications in containers, and we deployed things within an hour. We had very little experience in running containers in production. It was amazing how quickly we could get a handle on it [Kubernetes]."<br><br>
|
||||
Above all, it provided a powerful solution for one of the company’s most distinguishing characteristics: their remote team that’s spread across a dozen different time zones. "The people with deep knowledge of our infrastructure live in time zones different from our peak traffic time zones, and most of our product engineers live in other places," says Farrelly. "So we really wanted something where anybody could get a grasp of the system early on and utilize it, and not have to worry that the deploy engineer is asleep. Otherwise people would sit around for 12 to 24 hours for something. It’s been really cool to see people moving much faster."
|
||||
<br><br>
|
||||
With a relatively small engineering team—just 25 people, and only a handful working on infrastructure, with the majority front-end developers—Buffer needed "something robust for them to deploy whatever they wanted," says Farrelly. Before, "it was only a couple of people who knew how to set up everything in the old way. With this system, it was easy to review documentation and get something out extremely quickly. It lowers the bar for us to get everything in production. We don't have the big team to build all these tools or manage the infrastructure like other larger companies might."
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner4">
|
||||
<div class="banner4text">
|
||||
"In our old way of working, the feedback loop was a lot longer, and it was delicate because if you deployed something, the risk was high to potentially break something else," Farrelly says. "With the kind of deploys that we built around Kubernetes, we were able to detect bugs and fix them, and get them deployed super fast. The second someone is fixing [a bug], it’s out the door."
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section4">
|
||||
<div class="fullcol">
|
||||
To help with this, Buffer developers wrote a deploy bot that wraps the Kubernetes deploy process and can be used by every team. "Before, our data analysts would update, say, a <a href="https://www.python.org">Python</a> analysis script and have to wait for the lead on that team to click the button and deploy it," Farrelly explains. "Now our data analysts can make a change, enter a <a href="https://slack.com">Slack</a> command, ‘/deploy,’ and it goes out instantly. They don’t need to wait on these slow turnaround times. They don’t even know where it’s running; it doesn’t matter."
|
||||
<br><br>
|
||||
One of the first applications the team built from scratch using Kubernetes was a new image resizing service. As a social media management tool that allows marketing teams to collaborate on posts and send updates across multiple social media profiles and networks, Buffer has to be able to resize photographs as needed to meet the varying limitations of size and format posed by different social networks. "We always had these hacked together solutions," says Farrelly.
|
||||
<br><br>
|
||||
To create this new service, one of the senior product engineers was assigned to learn Docker and Kubernetes, then build the service, test it, deploy it and monitor it—which he was able to do relatively quickly. "In our old way of working, the feedback loop was a lot longer, and it was delicate because if you deployed something, the risk was high to potentially break something else," Farrelly says. "With the kind of deploys that we built around Kubernetes, we were able to detect bugs and fix them, and get them deployed super fast. The second someone is fixing [a bug], it’s out the door."
|
||||
<br><br>
|
||||
Plus, unlike with their old system, they could scale things horizontally with one command. "As we rolled it out," Farrelly says, "we could anticipate and just click a button. This allowed us to deal with the demand that our users were placing on the system and easily scale it to handle it."
|
||||
<br><br>
|
||||
Another thing they weren’t able to do before was a canary deploy. This new capability "made us so much more confident in deploying big changes," says Farrelly. "Before, it took a lot of testing, which is still good, but it was also a lot of ‘fingers crossed.’ And this is something that gets run 800,000 times a day, the core of our business. If it doesn’t work, our business doesn’t work. In a Kubernetes world, I can do a canary deploy to test it for 1 percent and I can shut it down very quickly if it isn’t working. This has leveled up our ability to deploy and roll out new changes quickly while reducing risk."
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner5">
|
||||
<div class="banner5text">
|
||||
"If you want to run containers in production, with nearly the power that Google uses internally, this [Kubernetes] is a great way to do that," Farrelly says. "We’re a relatively small team that’s actually running Kubernetes, and we’ve never run anything like it before. So it’s more approachable than you might think. That’s the one big thing that I tell people who are experimenting with it. Pick a couple of things, roll it out, kick the tires on this for a couple of months and see how much it can handle. You start learning a lot this way."
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section5">
|
||||
<div class="fullcol">
|
||||
By October 2016, 54 percent of Buffer’s traffic was going through their Kubernetes cluster. "There’s a lot of our legacy functionality that still runs alright, and those parts might move to Kubernetes or stay in our old setup forever," says Farrelly. But the company made the commitment at that time that going forward, "all new development, all new features, will be running on Kubernetes."
|
||||
<br><br>
|
||||
The plan for 2017 is to move all the legacy applications to a new Kubernetes cluster, and run everything they’ve pulled out of their old infrastructure, plus the new services they’re developing in Kubernetes, on another cluster. "I want to bring all the benefits that we’ve seen on our early services to everyone on the team," says Farrelly.
|
||||
<br><br>
|
||||
<h2>For Buffer’s engineers, it’s an exciting process. "Every time we’re deploying a new service, we need to figure out: OK, what’s the architecture? How do these services communicate? What’s the best way to build this service?" Farrelly says. "And then we use the different features that Kubernetes has to glue all the pieces together. It’s enabling us to experiment as we’re learning how to design a service-oriented architecture. Before, we just wouldn’t have been able to do it. This is actually giving us a blank white board so we can do whatever we want on it."
|
||||
</h2>
|
||||
Part of that blank slate is the flexibility that Kubernetes offers should the time come when Buffer may want or need to change its cloud. "It’s cloud agnostic so maybe one day we could switch to Google or somewhere else," Farrelly says. "We’re very deep in Amazon but it’s nice to know we could move away if we need to."
|
||||
<br><br>
|
||||
At this point, the team at Buffer can’t imagine running their infrastructure any other way—and they’re happy to spread the word. "If you want to run containers in production, with nearly the power that Google uses internally, this [Kubernetes] is a great way to do that," Farrelly says. "We’re a relatively small team that’s actually running Kubernetes, and we’ve never run anything like it before. So it’s more approachable than you might think. That’s the one big thing that I tell people who are experimenting with it. Pick a couple of things, roll it out, kick the tires on this for a couple of months and see how much it can handle. You start learning a lot this way."
|
||||
<br><br>
|
||||
</div>
|
||||
</section>
|
||||
@@ -1,125 +0,0 @@
|
||||
---
|
||||
title: GolfNow Case Study
|
||||
layout: basic
|
||||
case_study_styles: true
|
||||
cid: caseStudies
|
||||
css: /css/style_golfnow.css
|
||||
---
|
||||
|
||||
<div class="banner1">
|
||||
<h1>CASE STUDY: <img src="/images/golfnow_logo.png" width="20%" style="margin-bottom:-6px"><br>
|
||||
<div class="subhead">Saving Time and Money with Cloud Native Infrastructure</div>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="details">
|
||||
Company <b>GolfNow</b> Location <b>Orlando, Florida</b> Industry <b>Golf Industry Technology and Services Provider</b>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<section class="section1">
|
||||
<div class="cols">
|
||||
<div class="col1">
|
||||
|
||||
<h2>Challenge</h2>
|
||||
A member of the <a href="http://www.nbcunicareers.com/our-businesses/nbc-sports-group">NBC Sports Group</a>, <a href="https://www.golfnow.com/">GolfNow</a> is the golf industry’s technology and services leader, managing 10 different products, as well as the largest e-commerce tee time marketplace in the world. As its business began expanding rapidly and globally, GolfNow’s monolithic application became problematic. "We kept growing our infrastructure vertically rather than horizontally, and the cost of doing business became problematic," says Sheriff Mohamed, GolfNow’s Director, Architecture. "We wanted the ability to more easily expand globally."
|
||||
<br>
|
||||
</div>
|
||||
|
||||
<div class="col2">
|
||||
<h2>Solution</h2>
|
||||
Turning to microservices and containerization, GolfNow began moving its applications and databases from third-party services to its own clusters running on <a href="https://www.docker.com/">Docker</a> and <a href="http://kubernetes.io/">Kubernetes.</a><br><br>
|
||||
|
||||
<h2>Impact</h2>
|
||||
The results were immediate. While maintaining the same capacity—and beyond, during peak periods—GolfNow saw its infrastructure costs for the first application virtually cut in half.
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<div class="banner2">
|
||||
<div class="banner2text">
|
||||
"With our growth we obviously needed to expand our infrastructure, and we kept growing vertically rather than horizontally. We were basically wasting money and doubling the cost of our infrastructure."<br><br><span style="font-size:15px;letter-spacing:0.08em">- SHERIFF MOHAMED, DIRECTOR, ARCHITECTURE AT GOLFNOW</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section2">
|
||||
<div class="fullcol">
|
||||
<h2>It’s not every day that you can say you’ve slashed an operating expense by half.</h2>
|
||||
|
||||
But Sheriff Mohamed and Josh Chandler did just that when they helped lead their company, <a href="https://www.golfnow.com/">GolfNow</a>, on a journey from a monolithic to a containerized, cloud native infrastructure managed by Kubernetes.
|
||||
<br> <br>
|
||||
A top-performing business within the NBC Sports Group, GolfNow is a technology and services company with the largest tee time marketplace in the world. GolfNow serves 5 million active golfers across 10 different products. In recent years, the business had grown so fast that the infrastructure supporting their giant monolithic application (written in C#.NET and backed by SQL Server database management system) could not keep up. "With our growth we obviously needed to expand our infrastructure, and we kept growing vertically rather than horizontally," says Sheriff, GolfNow’s Director, Architecture. "Our costs were growing exponentially. And on top of that, we had to build a Disaster Recovery (DR) environment, which then meant we’d have to copy exactly what we had in our original data center to another data center that was just the standby. We were basically wasting money and doubling the cost of our infrastructure."
|
||||
<br> <br>
|
||||
In moving just the first of GolfNow’s important applications—a booking engine for golf courses and B2B marketing platform—from third-party services to their own Kubernetes environment, "our bill went down drastically," says Sheriff.
|
||||
<br> <br>
|
||||
The path to those stellar results began in late 2014. In order to support GolfNow’s global growth, the team decided that the company needed to have multiple data centers and the ability to quickly and easily re-route traffic as needed. "From there we knew that we needed to go in a direction of breaking things apart, microservices, and containerization," says Sheriff. "At the time we were trying to get away from <a href="https://www.microsoft.com/net">C#.NET</a> and <a href="https://www.microsoft.com/en-cy/sql-server/sql-server-2016">SQL Server</a> since it didn’t run very well on Linux, where everything container was running smoothly."
|
||||
<br> <br>
|
||||
To that end, the team shifted to working with <a href="https://nodejs.org/">Node.js</a>, the open-source, cross-platform JavaScript runtime environment for developing tools and applications, and <a href="https://www.mongodb.com/">MongoDB</a>, the open-source database program. At the time, <ahref="https://www.docker.com/">Docker</a>, the platform for deploying applications in containers, was still new. But once the team began experimenting with it, Sheriff says, "we realized that was the way we wanted to go, especially since that’s the way the industry is heading."
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner3">
|
||||
<div class="banner3text">
|
||||
"The team migrated the rest of the application into their Kubernetes cluster. And the impact was immediate: On top of cutting monthly costs by a large percentage, says Sheriff, 'Running at the same capacity and during our peak time, we were able to horizontally grow. Since we were using our VMs more efficiently with containers, we didn’t have to pay extra money at all.'"
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section3">
|
||||
<div class="fullcol">
|
||||
GolfNow’s dev team ran an "internal, low-key" proof of concept and were won over. "We really liked how easy it was to be able to pass containers around to each other and have them up and running in no time, exactly the way it was running on my machine," says Sheriff. "Because that is always the biggest gripe that Ops has with developers, right? ‘It worked on my machine!’ But then we started getting to the point of, ‘How do we make sure that these things stay up and running?’" <br><br>
|
||||
That led the team on a quest to find the right orchestration system for the company’s needs. Sheriff says the first few options they tried were either too heavy or "didn’t feel quite right." In late summer 2015, they discovered the just-released <a href="http://kubernetes.io/">Kubernetes</a>, which Sheriff immediately liked for its ease of use. "We did another proof of concept," he says, "and Kubernetes won because of the fact that the community backing was there, built on top of what Google had already done."
|
||||
<br><br>
|
||||
But before they could go with Kubernetes, <a href="http://www.nbc.com/">NBC</a>, GolfNow’s parent company, also asked them to comparison shop with another company. Sheriff and his team liked the competing company’s platform user interface, but didn’t like that its platform would not allow containers to run natively on Docker. With no clear decision in sight, Sheriff’s VP at GolfNow, Steve McElwee, set up a three-month trial during which a GolfNow team (consisting of Sheriff and Josh, who’s now Lead Architect, Open Platforms) would build out a Kubernetes environment, and a large NBC team would build out one with the other company’s platform.
|
||||
<br><br>
|
||||
"We spun up the cluster and we tried to get everything to run the way we wanted it to run," Sheriff says. "The biggest thing that we took away from it is that not only did we want our applications to run within Kubernetes and Docker, we also wanted our databases to run there. We literally wanted our entire infrastructure to run within Kubernetes."
|
||||
<br><br>
|
||||
At the time there was nothing in the community to help them get Kafka and MongoDB clusters running within a Kubernetes and Docker environment, so Sheriff and Josh figured it out on their own, taking a full month to get it right. "Everything started rolling from there," Sheriff says. "We were able to get all our applications connected, and we finished our side of the proof of concept a month in advance. My VP was like, ‘Alright, it’s over. Kubernetes wins.’"
|
||||
<br><br>
|
||||
The next step, beginning in January 2016, was getting everything working in production. The team focused first on one application that was already written in Node.js and MongoDB. A booking engine for golf courses and B2B marketing platform, the application was already going in the microservice direction but wasn’t quite finished yet. At the time, it was running in <a href="https://devcenter.heroku.com/articles/mongohq">Heroku Compose</a> and other third-party services—resulting in a large monthly bill.
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner4">
|
||||
<div class="banner4text">
|
||||
"'The time I spent actually moving the applications was under 30 seconds! We can move data centers in just incredible amounts of time. If you haven’t come from the Kubernetes world you wouldn’t believe me.' Sheriff puts it in these terms: 'Before Kubernetes I wasn’t sleeping at night, literally. I was woken up all the time, because things were down. After Kubernetes, I’ve been sleeping at night.'"
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section4">
|
||||
<div class="fullcol">
|
||||
"The goal was to take all of that out and put it within this new platform we’ve created with Kubernetes on <a href="https://cloud.google.com/compute/">Google Compute Engine (GCE)</a>," says Sheriff. "So we ended up building piece by piece, in parallel, what was out in Heroku and Compose, in our Kubernetes cluster. Then, literally, just switched configs in the background. So in Heroku we had the app running hitting a Compose database. We’d take the config, change it and make it hit the database that was running in our cluster."
|
||||
<br><br>
|
||||
Using this procedure, they were able to migrate piecemeal, without any downtime. The first migration was done during off hours, but to test the limits, the team migrated the second database in the middle of the day, when lots of users were running the application. "We did it," Sheriff says, "and again it was successful. Nobody noticed."
|
||||
<br><br>
|
||||
After three weeks of monitoring to make sure everything was running stable, the team migrated the rest of the application into their Kubernetes cluster. And the impact was immediate: On top of cutting monthly costs by a large percentage, says Sheriff, "Running at the same capacity and during our peak time, we were able to horizontally grow. Since we were using our VMs more efficiently with containers, we didn’t have to pay extra money at all."
|
||||
<br><br>
|
||||
Not only were they saving money, but they were also saving time. "I had a meeting this morning about migrating some applications from one cluster to another," says Josh. "I spent about 2 hours explaining the process. The time I spent actually moving the applications was under 30 seconds! We can move data centers in just incredible amounts of time. If you haven’t come from the Kubernetes world you wouldn’t believe me." Sheriff puts it in these terms: "Before Kubernetes I wasn’t sleeping at night, literally. I was woken up all the time, because things were down. After Kubernetes, I’ve been sleeping at night."
|
||||
<br><br>
|
||||
A small percentage of the applications on GolfNow have been migrated over to the Kubernetes environment. "Our Core Team is rewriting a lot of the .NET applications into <a href="https://www.microsoft.com/net/core">.NET Core</a> [which is compatible with Linux and Docker] so that we can run them within containers," says Sheriff.
|
||||
<br><br>
|
||||
Looking ahead, Sheriff and his team want to spend 2017 continuing to build a whole platform around Kubernetes with <a href="https://github.com/drone/drone">Drone</a>, an open-source continuous delivery platform, to make it more developer-centric. "Now they’re able to manage configuration, they’re able to manage their deployments and things like that, making all these subteams that are now creating all these microservices, be self sufficient," he says. "So it can pull us away from applications and allow us to just make sure the cluster is running and healthy, and then actually migrate that over to our Ops team."
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner5">
|
||||
<div class="banner5text">
|
||||
"Having gone from complete newbies to production-ready in three months, the GolfNow team is eager to encourage other companies to follow their lead. 'This is The Six Million Dollar Man of the cloud right now,' adds Josh. 'Just try it out, watch it happen. I feel like the proof is in the pudding when you look at these kinds of application stacks. They’re faster, they’re more resilient.'"
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section5">
|
||||
<div class="fullcol">
|
||||
And long-term, Sheriff has an even bigger goal for getting more people into the Kubernetes fold. "We’re actually trying to make this platform generic enough so that any of our sister companies can use it if they wish," he says. "Most definitely I think it can be used as a model. I think the way we migrated into it, the way we built it out, are all ways that I think other companies can learn from, and should not be afraid of."
|
||||
<br><br>
|
||||
The GolfNow team is also giving back to the Kubernetes community by open-sourcing a bot framework that Josh built. "We noticed that the dashboard user interface is actually moving a lot faster than when we started," says Sheriff. "However we realized what we needed was something that’s more of a bot that really helps us administer Kubernetes as a whole through Slack." Josh explains: "With the Kubernetes-Slack integration, you can essentially hook into a cluster and the issue commands and edit configurations. We’ve tried to simplify the security configuration as much as possible. We hope this will be our major thank you to Kubernetes, for everything you’ve given us."
|
||||
<br><br>
|
||||
Having gone from complete newbies to production-ready in three months, the GolfNow team is eager to encourage other companies to follow their lead. The lessons they’ve learned: "You’ve got to have buy-in from your boss," says Sheriff. "Another big deal is having two to three people dedicated to this type of endeavor. You can’t have people who are half in, half out." And if you don’t have buy-in from the get go, proving it out will get you there.
|
||||
<br><br>
|
||||
"This is The Six Million Dollar Man of the cloud right now," adds Josh. "Just try it out, watch it happen. I feel like the proof is in the pudding when you look at these kinds of application stacks. They’re faster, they’re more resilient."
|
||||
|
||||
</div>
|
||||
</section>
|
||||
+81
-81
@@ -1,100 +1,100 @@
|
||||
---
|
||||
title: Case Studies
|
||||
layout: basic
|
||||
class: gridPage
|
||||
cid: caseStudies
|
||||
---
|
||||
|
||||
<!Doctype html>
|
||||
<html id="caseStudies" class="gridPage">
|
||||
{% include head-header.html %}
|
||||
|
||||
<section id="hero" class="light-text">
|
||||
<h1>Kubernetes User Case Studies</h1>
|
||||
<h5>A collection of users running Kubernetes in production.</h5>
|
||||
<h1>Kubernetes User Case Studies</h1>
|
||||
<h5>A collection of users running Kubernetes in production.</h5>
|
||||
</section>
|
||||
|
||||
<section id="mainContent">
|
||||
<main>
|
||||
<div class="content">
|
||||
<div class="case-studies">
|
||||
<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>
|
||||
</div>
|
||||
<div class="case-study">
|
||||
<img src="/images/case_studies/buffer.png" alt="Buffer">
|
||||
<p class="quote">"It’s 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>
|
||||
</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>
|
||||
</div>
|
||||
<div class="case-study">
|
||||
<img src="/images/case_studies/ancestry-logo.png" alt="Ancestry">
|
||||
<p class="quote">"Kubernetes saved our time tremendously; it’s an enabler. It really is incredible."</p>
|
||||
<!--<p class="attrib">— Paul MacKay, Software Engineer and Architect at Ancestry</p>-->
|
||||
<a href="/case-studies/ancestry/">Read about Ancestry.com</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<main>
|
||||
<div class="content">
|
||||
<div class="case-studies">
|
||||
<div class="case-study">
|
||||
<img src="/images/case_studies/pearson.png" alt="Pearson">
|
||||
<p class="quote">“We chose Kubernetes because of its flexibility, ease of management and the way it improves our engineers’ productivity.”</p>
|
||||
<!--<p class="attrib">— Chris Jackson, Director for Cloud Product Engineering, Pearson</p>-->
|
||||
<a href="./pearson/">Read about Pearson</a>
|
||||
</div>
|
||||
<div class="case-study">
|
||||
<img src="/images/case_studies/wikimedia.png" alt="Wikimedia">
|
||||
<p class="quote">“With Kubernetes, we’re simplifying our environment and making it easier for developers to build the tools that make wikis run better.”</p>
|
||||
<!--<p class="attrib">— Yuvi Panda, Operations Engineer, Wikimedia Foundation</p>-->
|
||||
<a href="./wikimedia/">Read about Wikimedia</a>
|
||||
</div>
|
||||
<div class="case-study">
|
||||
<img src="/images/case_studies/ebay.png" alt="eBay">
|
||||
<p class="quote">Inside eBay’s shift to Kubernetes and containers atop OpenStack</p>
|
||||
<a href="http://www.nextplatform.com/2015/11/12/inside-ebays-shift-to-kubernetes-and-containers-atop-openstack/">Read about eBay</a>
|
||||
</div>
|
||||
<div class="case-study">
|
||||
<img src="/images/case_studies/box.png" alt="box">
|
||||
<p class="quote">Kubernetes at Box: Microservices at Maximum Velocity</p>
|
||||
<a href="https://blog.box.com/blog/kubernetes-box-microservices-maximum-velocity/">Read about Box</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</section>
|
||||
|
||||
<section id="video">
|
||||
<main>
|
||||
<!--<div><button onclick="kub.showVideo()"><img src="/images/case_studies/video_thumb.jpg" alt="Zulily video"><h6>Kubernetes at zulily</h6></button></div>-->
|
||||
<div>
|
||||
<!--<h3>Box</h3>-->
|
||||
<h4><i>"Kubernetes has the opportunity to be the new cloud platform. The amount of innovation that's going to come from being able to standardize on Kubernetes as a platform is incredibly exciting - more exciting than anything I've seen in the last 10 years of working on the cloud."</i></h4>
|
||||
<img src="/images/case_studies/box-small.png" id="boxlogo" alt="Box">
|
||||
</div>
|
||||
<div style= "padding-left: 40px;"><button onclick="kub.showVideo()"><img src="/images/case_studies/Video-Clip-Box.png" alt="Box video"><h6>Kubernetes at Box</h6></button></div>
|
||||
</main>
|
||||
<main>
|
||||
<!--<div>-->
|
||||
<!--<h3>“I don’t want to deploy software the old way ever again”</h3>-->
|
||||
<!--<p class="attrib">— Dylan Carney, Lead Software Engineer, Zulily</p>-->
|
||||
<!--<img src="/images/case_studies/zulily.png" id="zulilyLogo" alt="zulily">-->
|
||||
<!--</div>-->
|
||||
<!--<div><button onclick="kub.showVideo()"><img src="/images/case_studies/video_thumb.jpg" alt="Zulily video"><h6>Kubernetes at zulily</h6></button></div>-->
|
||||
<div>
|
||||
<!--<h3>SAP</h3>-->
|
||||
<h3>SAP's OpenStack, running on Kubernetes in production</h3>
|
||||
<img src="/images/case_studies/sap_small.png" id="zulilyLogo" alt="SAP">
|
||||
</div>
|
||||
<div><button onclick="kub.showVideo()"><img src="/images/case_studies/video_thumb1.png" alt="SAP video"><h6>Kubernetes at SAP</h6></button></div>
|
||||
</main>
|
||||
</section>
|
||||
|
||||
<section id="users">
|
||||
<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/ancestry/"><img src="/images/case_studies/ancestry.png" alt="Ancestry.com"></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>
|
||||
<a target="_blank" href="https://youtu.be/lmeFkH-rHII"><img src="/images/case_studies/comcast_logo.png" alt="Comcast"></a>
|
||||
<a target="_blank" href="http://searchitoperations.techtarget.com/news/450297178/Tech-firms-roll-out-Kubernetes-in-production"><img src="/images/case_studies/concur.png" alt="Concur"></a>
|
||||
<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="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>
|
||||
<a target="_blank" href="https://www.youtube.com/watch?v=P5qfyv_zGcU"><img src="/images/case_studies/nyt.png" alt="New York Times"></a>
|
||||
<a target="_blank" href="https://openai.com/blog/infrastructure-for-deep-learning"><img src="/images/case_studies/openai.png" alt="OpenAI"></a>
|
||||
<a target="_blank" href="/case-studies/peardeck/"><img src="/images/case_studies/peardeck_logo.png" alt="peardeck"></a>
|
||||
<a href="/case-studies/pearson/"><img src="/images/case_studies/pearson_logo.png" alt="Pearson"></a>
|
||||
<a target="_blank" href="https://cloud.google.com/customers/philips/"><img src="/images/case_studies/philips_logo.png" alt="Philips"></a>
|
||||
<a target="_blank" href="https://cloudplatform.googleblog.com/2016/09/bringing-Pokemon-GO-to-life-on-Google-Cloud.html"><img src="/images/case_studies/pokemon_go_logo.png" alt="Pokemon GO"></a>
|
||||
<a target="_blank" href="http://www.nextplatform.com/2016/05/24/samsung-experts-put-kubernetes-paces/"><img src="/images/case_studies/sds.png" alt="Samsung SDS"></a>
|
||||
<a target="_blank" href="https://youtu.be/4gyeixJLabo"><img src="/images/case_studies/sap.png" alt="SAP"></a>
|
||||
<a target="_blank" href="https://www.youtube.com/watch?v=5378N5iLb2Q"><img src="/images/case_studies/soundcloud.png" alt="SoundCloud"></a>
|
||||
<a target="_blank" href="https://www.youtube.com/watch?v=F3iMkz_NSvU"><img src="/images/case_studies/homeoffice.png" alt="UK Home Office"></a>
|
||||
<a target="_blank" href="http://thenewstack.io/wepay-kubernetes-changed-business/"><img src="/images/case_studies/wepay.png" alt="WePay"></a>
|
||||
<a target="_blank" href="/case-studies/wink/"><img src="/images/case_studies/wink.png" alt="Wink"></a>
|
||||
<a href="/case-studies/wikimedia/"><img src="/images/case_studies/wikimedia_logo.png" alt="Wikimedia"></a>
|
||||
<a target="_blank" href="http://blog.kubernetes.io/2016/10/kubernetes-and-openstack-at-yahoo-japan.html"><img src="/images/case_studies/yahooJapan_logo.png" alt="Yahoo! Japan"></a>
|
||||
<a target="_blank" href="#" onclick="event.preventDefault(); kub.showVideo()"><img src="/images/case_studies/zulily_logo.png" alt="zulily"></a>
|
||||
<a target="_blank" href="https://docs.google.com/a/google.com/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform" class="tell-your-story"><img src="/images/case_studies/story.png" alt="Tell your story"></a>
|
||||
</div>
|
||||
</main>
|
||||
<main>
|
||||
<h3>Kubernetes Users</h3>
|
||||
<div id="usersGrid">
|
||||
<a target="_blank" href="https://www.youtube.com/watch?v=P5qfyv_zGcU"><img src="/images/case_studies/nyt.png" alt="New York Times"></a>
|
||||
<a target="_blank" href="https://openai.com/blog/infrastructure-for-deep-learning"><img src="/images/case_studies/openai.png" alt="OpenAI"></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="https://youtu.be/4gyeixJLabo"><img src="/images/case_studies/sap.png" alt="SAP"></a>
|
||||
<a target="_blank" href="http://www.nextplatform.com/2016/05/24/samsung-experts-put-kubernetes-paces/"><img src="/images/case_studies/sds.png" alt="Samsung SDS"></a>
|
||||
<a target="_blank" href="http://thenewstack.io/wepay-kubernetes-changed-business/"><img src="/images/case_studies/wepay.png" alt="WePay"></a>
|
||||
<a target="_blank" href="https://www.youtube.com/watch?v=5378N5iLb2Q"><img src="/images/case_studies/soundcloud.png" alt="SoundCloud"></a>
|
||||
<a target="_blank" href="https://www.youtube.com/watch?v=F3iMkz_NSvU"><img src="/images/case_studies/homeoffice.png" alt="UK Home Office"></a>
|
||||
<a target="_blank" href="http://searchitoperations.techtarget.com/news/450297178/Tech-firms-roll-out-Kubernetes-in-production"><img src="/images/case_studies/concur.png" alt="Concur"></a>
|
||||
<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="http://superuser.openstack.org/articles/how-ancestry-com-s-open-source-strategy-combines-kubernetes-and-openstack"><img src="/images/case_studies/ancestry.png" alt="Ancestry.com"></a>
|
||||
<a target="_blank" href="https://cloud.google.com/customers/ccp-games/"><img src="/images/case_studies/ccp.png" alt="CCP Games"></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="http://techblog.yahoo.co.jp/infrastructure/os_n_k8s/"><img src="/images/case_studies/yahooJapan_logo.png" alt="Yahoo! Japan"></a>
|
||||
<a target="_blank" href="https://blog.box.com/blog/kubernetes-box-microservices-maximum-velocity/"><img src="/images/case_studies/box_logo.png" alt="Box"></a>
|
||||
<a href="./wikimedia/"><img src="/images/case_studies/wikimedia_logo.png" alt="Wikimedia"></a>
|
||||
<a href="./pearson/"><img src="/images/case_studies/pearson_logo.png" alt="Pearson"></a>
|
||||
<a target="_blank" href="#" onclick="event.preventDefault(); kub.showVideo()"><img src="/images/case_studies/zulily_logo.png" alt="zulily"></a>
|
||||
<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="https://docs.google.com/a/google.com/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform" class="tell-your-story"><img src="/images/case_studies/story.png" alt="Tell your story"></a>
|
||||
</div>
|
||||
</main>
|
||||
</section>
|
||||
|
||||
|
||||
<div id="videoPlayer">
|
||||
<!--<iframe data-url="https://www.youtube.com/watch?v=of45hYbkIZs" frameborder="0" allowfullscreen></iframe>-->
|
||||
<iframe data-url="https://www.youtube.com/embed/of45hYbkIZs?autoplay=1" frameborder="0" allowfullscreen="true"></iframe>
|
||||
<button id="closeButton"></button>
|
||||
<!--<iframe data-url="https://www.youtube.com/watch?v=B0_5Nms8sD0" frameborder="0" allowfullscreen></iframe>-->
|
||||
<iframe data-url="https://www.youtube.com/embed/4gyeixJLabo?autoplay=1" frameborder="0" allowfullscreen></iframe>
|
||||
<button id="closeButton"></button>
|
||||
</div>
|
||||
{% include footer.html %}
|
||||
{% include case-study-styles.html %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
---
|
||||
title: Pear Deck Case Study
|
||||
layout: basic
|
||||
case_study_styles: true
|
||||
cid: caseStudies
|
||||
css: /css/style_peardeck.css
|
||||
---
|
||||
|
||||
<div class="banner1">
|
||||
<h1> CASE STUDY:<img src="/images/peardeck_logo.png" width="22%" style="margin-bottom:-0px"><br> <div class="subhead">Infrastructure for a Growing EdTech Startup</div></h1>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="details">
|
||||
Company <b>Pear Deck</b> Location <b>Iowa City, Iowa</b> Industry <b>Educational Software</b>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<section class="section1">
|
||||
<div class="cols">
|
||||
<div class="col1">
|
||||
<h2>Challenge</h2>
|
||||
The three-year-old startup provides a web app for teachers to interact with their students in the classroom. The JavaScript app was built on Google’s web app development platform <a href="https://firebase.google.com/">Firebase</a>, using <a href="https://www.heroku.com/">Heroku</a>. As the user base steadily grew, so did the development team. "We outgrew Heroku when we started wanting to have multiple services, and the deploying story got pretty horrendous. We were frustrated that we couldn’t have the developers quickly stage a version," says CEO Riley Eynon-Lynch. "Tracing and monitoring became basically impossible." On top of that, many of Pear Deck’s customers are behind government firewalls and connect through Firebase, not Pear Deck’s servers, making troubleshooting even more difficult.
|
||||
</div>
|
||||
|
||||
<div class="col2">
|
||||
<h2>Solution</h2>
|
||||
In 2016, the company began moving their code from Heroku to <a href="https://www.docker.com/">Docker</a> containers running on <a href="https://cloud.google.com/container-engine/">Google Container Engine</a>, orchestrated by <a href="http://kubernetes.io/">Kubernetes</a> and monitored with <a href="https://prometheus.io/">Prometheus</a>.
|
||||
<br>
|
||||
<br>
|
||||
<h2>Impact</h2>
|
||||
The new cloud native stack immediately improved the development workflow, speeding up deployments. Prometheus gave Pear Deck "a lot of confidence, knowing that people are still logging into the app and using it all the time," says Eynon-Lynch. "The biggest impact is being able to work as a team on the configuration in git in a pull request, and the biggest confidence comes from the solidity of the abstractions and the trust that we have in Kubernetes actually making our yaml files a reality."
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner2">
|
||||
<div class="banner2text">
|
||||
"We didn’t even realize how stressed out we were about our lack of insight into what was happening with the app. I’m really excited and have more and more confidence in the actual state of our application for our actual users, and not just what the CPU graphs are saying, because of Prometheus and Kubernetes."<br><br><span style="font-size:16px;letter-spacing:2px;">– RILEY EYNON-LYNCH, CEO OF PEAR DECK</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section2">
|
||||
<div class="fullcol">
|
||||
<h2>With the speed befitting a startup, Pear Deck delivered its first prototype to customers within three months of incorporating.</h2>
|
||||
As a former high school math teacher, CEO Riley Eynon-Lynch felt an urgency to provide a tech solution to classes where instructors struggle to interact with every student in a short amount of time. "Pear Deck is an app that students can use to interact with the teacher all at once," he says. "When the teacher asks a question, instead of just the kid at the front of the room answering again, everybody can answer every single question. It’s a huge fundamental shift in the messaging to the students about how much we care about them and how much they are a part of the classroom."<br><br>
|
||||
Eynon-Lynch and his partners quickly built a JavaScript web app on Google’s web app development platform <a href="https://firebase.google.com/">Firebase</a>, and launched the minimum viable product [MVP] on <a href="https://www.heroku.com/">Heroku</a> "because it was fast and easy," he says. "We made everything as easy as we could."
|
||||
<br><br>
|
||||
But once it launched, the user base began growing steadily at a rate of 30 percent a month. "Our Heroku bill was getting totally insane," Eynon-Lynch says. But even more crucially, as the company hired more developers to keep pace, "we outgrew Heroku. We wanted to have multiple services and the deploying story got pretty horrendous. We were frustrated that we couldn’t have the developers quickly stage a version. Tracing and monitoring became basically impossible."
|
||||
<br><br>
|
||||
On top of that, many of Pear Deck’s customers are behind government firewalls and connect through Firebase, not Pear Deck’s servers, making troubleshooting even more difficult.
|
||||
<br><br>
|
||||
The team began looking around for another solution, and finally decided in early 2016 to start moving the app from Heroku to <a href="https://www.docker.com/">Docker</a> containers running on <a href="https://cloud.google.com/container-engine/">Google Container Engine</a>, orchestrated by <a href="http://kubernetes.io/">Kubernetes</a> and monitored with <a href="https://prometheus.io/">Prometheus</a>.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner3">
|
||||
<div class="banner3text">
|
||||
"When it became clear that Google Container Engine was going to have a lot of support from Google and be a fully-managed Kubernetes platform, it seemed very obvious to us that was the way to go," says Eynon-Lynch.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section3">
|
||||
<div class="fullcol">
|
||||
They had considered other options like Google’s App Engine (which they were already using for one service) and Amazon’s <a href="https://aws.amazon.com/ec2/">Elastic Compute Cloud</a> (EC2), while experimenting with running one small service that wasn’t accessible to the Internet in Kubernetes. "When it became clear that Google Container Engine was going to have a lot of support from Google and be a fully-managed Kubernetes platform, it seemed very obvious to us that was the way to go," says Eynon-Lynch. "We didn’t really consider Terraform and the other competitors because the abstractions offered by Kubernetes just jumped off the page to us."<br><br>
|
||||
Once the team started porting its Heroku apps into Kubernetes, which was "super easy," he says, the impact was immediate. "Before, to make a new version of the app meant going to Heroku and reconfiguring 10 new services, so basically no one was willing to do it, and we never staged things," he says. "Now we can deploy our exact same configuration in lots of different clusters in 30 seconds. We have a full set up that’s always running, and then any of our developers or designers can stage new versions with one command, including their recent changes. We stage all the time now, and everyone stopped talking about how cool it is because it’s become invisible how great it is."
|
||||
<br><br>
|
||||
Along with Kubernetes came Prometheus. "Until pretty recently we didn’t have any kind of visibility into aggregate server metrics or performance," says Eynon-Lynch. The team had tried to use GKE’s <a href="https://cloud.google.com/stackdriver/">Stackdriver</a> monitoring, but had problems making it work, and considered <a href="https://newrelic.com/">New Relic</a>. When they started looking at Prometheus in the fall of 2016, "the fit between the abstractions in Prometheus and the way we think about how our system works, was so clear and obvious," he says.<br><br>
|
||||
The integration with Kubernetes made set-up easy. Once Helm installed Prometheus, "We started getting a graph of the health of all our Kubernetes nodes and pods immediately. I think we were pretty hooked at that point," Eynon-Lynch says. "Then we got our own custom instrumentation working in 15 minutes, and had an actively updated count of requests that we could do, rate on and get a sense of how many users are connected at a given point. And then it was another hour before we had alarms automatically showing up in our Slack channel. All that was in one afternoon. And it was an afternoon of gasping with delight, basically!"
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner4">
|
||||
<div class="banner4text">
|
||||
"We started getting a graph of the health of all our Kubernetes nodes and pods immediately. I think we were pretty hooked at that point," Eynon-Lynch says. "Then we got our own custom instrumentation working in 15 minutes, and had an actively updated count of requests that we could do, rate on and get a sense of how many users are connected at a given point. And then it was another hour before we had alarms automatically showing up in our Slack channel. All that was in one afternoon. And it was an afternoon of gasping with delight, basically!"
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section4">
|
||||
<div class="fullcol">
|
||||
With Pear Deck’s specific challenges—traffic through Firebase as well as government firewalls—Prometheus was a game-changer. "We didn’t even realize how stressed out we were about our lack of insight into what was happening with the app," Eynon-Lynch says. Before, when a customer would report that the app wasn’t working, the team had to manually investigate the problem without knowing whether customers were affected all over the world, or whether Firebase was down, and where.<br><br>
|
||||
To help solve that problem, the team wrote a script that pings Firebase from several different geographical locations, and then reports the responses to Prometheus in a histogram. "A huge impact that Prometheus had on us was just an amazing sigh of relief, of feeling like we knew what was happening," he says. "It took 45 minutes to implement [the Firebase alarm] because we knew that we had this trustworthy metrics platform in Prometheus. We weren’t going to have to figure out, ‘Where do we send these metrics? How do we aggregate the metrics? How do we understand them?’"<br><br>
|
||||
Plus, Prometheus has allowed Pear Deck to build alarms for business goals. One measures the rate of successful app loads and goes off if the day’s loads are less than 90 percent of the loads from seven days before. "We run a JavaScript app behind ridiculous firewalls and all kinds of crazy browser extensions messing with it—Chrome will push a feature that breaks some CSS that we’re using," Eynon-Lynch says. "So that gives us a lot of confidence, and we at least know that people are still logging into the app and using it all the time."<br><br>
|
||||
Now, when a customer complains, and none of the alarms have gone off, the team can feel confident that it’s not a widespread problem. "Just to be sure, we can go and double check the graphs and say, ‘Yep, there’s currently 10,000 people connected to that Firebase node. It’s definitely working. Let’s investigate your network settings, customer,’" he says. "And we can pass that back off to our support reps instead of the whole development team freaking out that Firebase is down."<br><br>
|
||||
Pear Deck is also giving back to the community, building and open-sourcing a <a href="https://github.com/peardeck/prometheus-user-metrics">metrics aggregator</a> that enables end-user monitoring in Prometheus. "We can measure, for example, the time to interactive-dom on the web clients," he says. "The users all report that to our aggregator, then the aggregator reports to Prometheus. So we can set an alarm for some client side errors."<br><br>
|
||||
Most of Pear Deck’s services have now been moved onto Kubernetes. And all of the team’s new code is going on Kubernetes. "Kubernetes lets us experiment with service configurations and stage them on a staging cluster all at once, and test different scenarios and talk about them as a development team looking at code, not just talking about the steps we would eventually take as humans," says Eynon-Lynch.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner5">
|
||||
<div class="banner5text">
|
||||
"A huge impact that Prometheus had on us was just an amazing sigh of relief, of feeling like we knew what was happening. It took 45 minutes to implement [the Firebase alarm] because we knew that we had this trustworthy metrics platform in Prometheus...in terms of the cloud, Kubernetes and Prometheus have so much to offer," he says.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section5">
|
||||
<div class="fullcol">
|
||||
Looking ahead, the team is planning to explore autoscaling on Kubernetes. With users all over the world but mostly in the United States, there are peaks and valleys in the traffic. One service that’s still on App Engine can get as many as 10,000 requests a second during the day but far less at night. "We pay for the same servers at night, so I understand there’s autoscaling that we can be taking advantage of," he says. "Implementing it is a big worry, exposing the rest of our Kubernetes cluster to us and maybe messing that up. But it’s definitely our intention to move everything over, because now none of the developers want to work on that app anymore because it’s such a pain to deploy it."
|
||||
<br><br>
|
||||
They’re also eager to explore the work that Kubernetes is doing with stateful sets. "Right now all of the services we run in Kubernetes are stateless, and Google basically runs our databases for us and manages backups," Eynon-Lynch says. "But we’re interested in building our own web-socket solution that doesn’t have to be super stateful but will have maybe an hour’s worth of state on it."
|
||||
<br><br>
|
||||
That project will also involve Prometheus, for a dark launch of web socket connections. "We don’t know how reliable web socket connections behind all these horrible firewalls will be to our servers," he says. "We don’t know what work Firebase has done to make them more reliable. So I’m really looking forward to trying to get persistent connections with web sockets to our clients and have optional tools to understand if it’s working. That’s our next new adventure, into stateful servers."
|
||||
<br><br>
|
||||
As for Prometheus, Eynon-Lynch thinks the company has only gotten started. "We haven’t instrumented all our important features, especially those that depend on third parties," he says. "We have to wait for those third parties to tell us they’re down, which sometimes they don’t do for a long time. So I’m really excited and have more and more confidence in the actual state of our application for our actual users, and not just what the CPU graphs are saying, because of Prometheus and Kubernetes."
|
||||
<br><br>
|
||||
For a spry startup that’s continuing to grow rapidly—and yes, they’re <a href="https://www.peardeck.com/careers/">hiring</a>!—Pear Deck is notably satisfied with how its infrastructure has evolved in the cloud native ecosystem. "Usually I have some angsty thing where I want to get to the new, better technology," says Eynon-Lynch, "but in terms of the cloud, Kubernetes and Prometheus have so much to offer."
|
||||
|
||||
<br><br>
|
||||
</div>
|
||||
</section>
|
||||
+70
-63
@@ -1,81 +1,88 @@
|
||||
---
|
||||
title: Pearson Case Study
|
||||
layout: basic
|
||||
class: gridPage
|
||||
cid: caseStudies
|
||||
---
|
||||
|
||||
<!Doctype html>
|
||||
<html id="caseStudies" class="gridPage">
|
||||
{% include head-header.html %}
|
||||
|
||||
<section id="hero" class="light-text">
|
||||
<h1> Pearson Case Study</h1>
|
||||
<h1> Pearson Case Study</h1>
|
||||
</section>
|
||||
|
||||
<section id="mainContent">
|
||||
<main>
|
||||
<div class="content">
|
||||
<h3 id="caseStudyTitle">Using Kubernetes to reinvent the world's largest educational company</h3>
|
||||
<p>
|
||||
Pearson, the world's education company, serving 75 million learners worldwide, set a goal to more than double that number to 200 million by 2025. A key part of this growth is in digital learning experiences, and that requires an infrastructure platform that is able to scale quickly and deliver products to market faster. So Pearson's Cloud Technology team chose Kubernetes to help build a platform to meet the business requirements. </p>
|
||||
<div class="feature">
|
||||
<img src="/images/case_studies/pearson.png" alt="Pearson">
|
||||
<p class="quote">
|
||||
"To transform our infrastructure, we had to think beyond simply enabling automated provisioning, we realized we had to build a platform that would allow Pearson developers to build manage and deploy applications in a completely different way. We chose Kubernetes because of its flexibility, ease of management and the way it would improve our engineers' productivity." </p>
|
||||
<p class="attrib">— Chris Jackson, Director for Cloud Product Engineering, Pearson</p>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<main>
|
||||
<div class="content">
|
||||
<h3 id="caseStudyTitle">Using Kubernetes to reinvent the world’s largest educational company</h3>
|
||||
<p>
|
||||
Pearson, the world’s education company, serving 75 million learners worldwide, set a goal to more than double that number to 200 million by 2025. A key part of this growth is in digital learning experiences, and that requires an infrastructure platform that is able to scale quickly and deliver products to market faster. So Pearson’s Cloud Technology team chose Kubernetes to help build a platform to meet the business requirements. </p>
|
||||
<div class="feature">
|
||||
<img src="/images/case_studies/pearson.png" alt="Pearson">
|
||||
<p class="quote">
|
||||
“To transform our infrastructure, we had to think beyond simply enabling automated provisioning, we realized we had to build a platform that would allow Pearson developers to build manage and deploy applications in a completely different way. We chose Kubernetes because of its flexibility, ease of management and the way it would improve our engineers’ productivity.” </p>
|
||||
<p class="attrib">— Chris Jackson, Director for Cloud Product Engineering, Pearson</p>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</section>
|
||||
|
||||
<section class="bullets">
|
||||
<main>
|
||||
<div class="content">
|
||||
<div class="bullet">
|
||||
<h4>Challenges:</h4>
|
||||
<ul>
|
||||
<li>Pearson had difficulty in scaling and adapting to the growing online audience. They wanted to build and deliver content primarily over the web.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bullet">
|
||||
<h4>Why Kubernetes:</h4>
|
||||
<ul>
|
||||
<li>Kubernetes will allow Pearson's teams to develop their apps in a consistent manner, saving time and minimizing complexity.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bullet">
|
||||
<h4>Approach:</h4>
|
||||
<ul>
|
||||
<li>Build a centralized platform for use across the entire enterprise</li>
|
||||
<li>Use container technology as the core of the platform</li>
|
||||
<li>Deploy Kubernetes to manage the platform</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bullet">
|
||||
<h4>Results:</h4>
|
||||
<ul>
|
||||
<li>Pearson is building an enterprise-wide platform for delivering innovative, web-based educational content. They expect engineers' productivity to increase by up to 20 percent.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<main>
|
||||
<div class="content">
|
||||
<div class="bullet">
|
||||
<h4>Challenges:</h4>
|
||||
<ul>
|
||||
<li>Pearson had difficulty in scaling and adapting to the growing online audience. They wanted to build and deliver content primarily over the web.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bullet">
|
||||
<h4>Why Kubernetes:</h4>
|
||||
<ul>
|
||||
<li>Kubernetes will allow Pearson’s teams to develop their apps in a consistent manner, saving time and minimizing complexity.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bullet">
|
||||
<h4>Approach:</h4>
|
||||
<ul>
|
||||
<li>Build a centralized platform for use across the entire enterprise</li>
|
||||
<li>Use container technology as the core of the platform</li>
|
||||
<li>Deploy Kubernetes to manage the platform</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bullet">
|
||||
<h4>Results:</h4>
|
||||
<ul>
|
||||
<li>Pearson is building an enterprise-wide platform for delivering innovative, web-based educational content. They expect engineers’ productivity to increase by up to 20 percent.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</section>
|
||||
|
||||
<section class="details">
|
||||
<main>
|
||||
<div class="content">
|
||||
<h4>Kubernetes powers a comprehensive developer experience</h4>
|
||||
<p>Pearson wanted to use as much open source technology as possible for the platform given that it provides both technical and commercial benefits over the duration of the project. Jackson says, "Building an infrastructure platform based on open source technology in Pearson was a no-brainer, the sharing of technical challenges and advanced use cases in a community of people with talent far beyond what we could hire independently allows us to innovate at a level we could not reach on our own. Our engineers enjoy returning code to the community and participating in talks, blogs and meetings, it's a great way for us to allow our team to express themselves and share the pride they have in their work."</p>
|
||||
<p>It also wanted to use a container-focused platform. Pearson has 400 development groups and diverse brands with varying business and technical needs. With containers, each brand could experiment with building new types of content using their preferred technologies, and then deliver it using containers. Pearson chose Kubernetes because it believes that is the best technology for managing containers, has the widest community support and offers the most flexible and powerful tools."</p>
|
||||
<p>Kubernetes is at the core of the platform we've built for developers. After we get our big spike in back-to-school in traffic, much of Pearson's traffic will interact with Kubernetes. It is proving to be as effective as we had hoped," Jackson says.</p>
|
||||
</div>
|
||||
</main>
|
||||
<main>
|
||||
<div class="content">
|
||||
<h4>Kubernetes powers a comprehensive developer experience</h4>
|
||||
<p>Pearson wanted to use as much open source technology as possible for the platform given that it provides both technical and commercial benefits over the duration of the project. Jackson says, “Building an infrastructure platform based on open source technology in Pearson was a no-brainer, the sharing of technical challenges and advanced use cases in a community of people with talent far beyond what we could hire independently allows us to innovate at a level we could not reach on our own. Our engineers enjoy returning code to the community and participating in talks, blogs and meetings, it’s a great way for us to allow our team to express themselves and share the pride they have in their work.”</p>
|
||||
<p>It also wanted to use a container-focused platform. Pearson has 400 development groups and diverse brands with varying business and technical needs. With containers, each brand could experiment with building new types of content using their preferred technologies, and then deliver it using containers. Pearson chose Kubernetes because it believes that is the best technology for managing containers, has the widest community support and offers the most flexible and powerful tools.“</p>
|
||||
<p>Kubernetes is at the core of the platform we’ve built for developers. After we get our big spike in back-to-school in traffic, much of Pearson’s traffic will interact with Kubernetes. It is proving to be as effective as we had hoped,” Jackson says.</p>
|
||||
</div>
|
||||
</main>
|
||||
</section>
|
||||
|
||||
<section class="details">
|
||||
<main>
|
||||
<div class="content">
|
||||
<h4>Encouraging experimentation, saving engineers time</h4>
|
||||
<p>With the new platform, Pearson will increase stability and performance, and to bring products to market more quickly. The company says its engineers will also get a productivity boost because they won't spend time managing infrastructure. Jackson estimates 15 to 20 percent in productivity savings.</p>
|
||||
<p>Beyond that, Pearson says the platform will encourage innovation because of the ease with which new applications can be developed, and because applications will be deployed far more quickly than in the past. It expects that will help the company meet its goal of reaching 200 million learners within the next 10 years.</p>
|
||||
<p>"We're already seeing tremendous benefits with Kubernetes — improved engineering productivity, faster delivery of applications and a simplified infrastructure. But this is just the beginning. Kubernetes will help transform the way that educational content is delivered online," says Jackson.</p>
|
||||
</div>
|
||||
</main>
|
||||
<main>
|
||||
<div class="content">
|
||||
<h4>Encouraging experimentation, saving engineers time</h4>
|
||||
<p>With the new platform, Pearson will increase stability and performance, and to bring products to market more quickly. The company says its engineers will also get a productivity boost because they won’t spend time managing infrastructure. Jackson estimates 15 to 20 percent in productivity savings.</p>
|
||||
<p>Beyond that, Pearson says the platform will encourage innovation because of the ease with which new applications can be developed, and because applications will be deployed far more quickly than in the past. It expects that will help the company meet its goal of reaching 200 million learners within the next 10 years.</p>
|
||||
<p>“We’re already seeing tremendous benefits with Kubernetes — improved engineering productivity, faster delivery of applications and a simplified infrastructure. But this is just the beginning. Kubernetes will help transform the way that educational content is delivered online,” says Jackson.</p>
|
||||
</div>
|
||||
</main>
|
||||
</section>
|
||||
|
||||
{% include footer.html %}
|
||||
{% include case-study-styles.html %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+85
-78
@@ -1,96 +1,103 @@
|
||||
---
|
||||
title: Wikimedia Case Study
|
||||
layout: basic
|
||||
class: gridPage
|
||||
cid: caseStudies
|
||||
---
|
||||
|
||||
<!Doctype html>
|
||||
<html id="caseStudies" class="gridPage">
|
||||
{% include head-header.html %}
|
||||
|
||||
<section id="hero" class="light-text">
|
||||
<h1> Wikimedia Case Study</h1>
|
||||
<h1> Wikimedia Case Study</h1>
|
||||
</section>
|
||||
|
||||
<section id="mainContent">
|
||||
<main>
|
||||
<div class="content">
|
||||
<h3 id="caseStudyTitle">Using Kubernetes to Build Tools to Improve the World's Wikis</h3>
|
||||
<p>
|
||||
The non-profit Wikimedia Foundation operates some of the largest collaboratively edited reference projects in the world, including Wikipedia. To help users maintain and use wikis, it runs Wikimedia Tool Labs, a hosting environment for community developers working on tools and bots to help editors and other volunteers do their work, including reducing vandalism. The community around Wikimedia Tool Labs began forming nearly 10 years ago.
|
||||
</p>
|
||||
<div class="feature">
|
||||
<img src="/images/case_studies/wikimedia.png" alt="Wikimedia">
|
||||
<p class="quote">
|
||||
"Wikimedia Tool Labs is vital for making sure wikis all around the world work as well as they possibly can. Because it's grown organically for almost 10 years, it has become an extremely challenging environment and difficult to maintain. It's like a big ball of mud — you really can't see through it. With Kubernetes, we're simplifying the environment and making it easier for developers to build the tools that make wikis run better."
|
||||
</p>
|
||||
<p class="attrib">— Yuvi Panda, operations engineer at Wikimedia Foundation and Wikimedia Tool Labs</p>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<main>
|
||||
<div class="content">
|
||||
<h3 id="caseStudyTitle">Using Kubernetes to Build Tools to Improve the World's Wikis</h3>
|
||||
<p>
|
||||
The non-profit Wikimedia Foundation operates some of the largest collaboratively edited reference projects in the world, including Wikipedia. To help users maintain and use wikis, it runs Wikimedia Tool Labs, a hosting environment for community developers working on tools and bots to help editors and other volunteers do their work, including reducing vandalism. The community around Wikimedia Tool Labs began forming nearly 10 years ago.
|
||||
</p>
|
||||
<div class="feature">
|
||||
<img src="/images/case_studies/wikimedia.png" alt="Wikimedia">
|
||||
<p class="quote">
|
||||
“Wikimedia Tool Labs is vital for making sure wikis all around the world work as well as they possibly can. Because it’s grown organically for almost 10 years, it has become an extremely challenging environment and difficult to maintain. It’s like a big ball of mud — you really can’t see through it. With Kubernetes, we’re simplifying the environment and making it easier for developers to build the tools that make wikis run better.”
|
||||
</p>
|
||||
<p class="attrib">— Yuvi Panda, operations engineer at Wikimedia Foundation and Wikimedia Tool Labs</p>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</section>
|
||||
|
||||
<section class="bullets">
|
||||
<main>
|
||||
<div class="content">
|
||||
<div class="bullet">
|
||||
<h4>Challenges:</h4>
|
||||
<ul>
|
||||
<li>Simplify a complex, difficult-to-manage infrastructure</li>
|
||||
<li>Allow developers to continue writing tools and bots using existing techniques</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bullet">
|
||||
<h4>Why Kubernetes:</h4>
|
||||
<ul>
|
||||
<li>Wikimedia Tool Labs chose Kubernetes because it can mimic existing workflows, while reducing complexity</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bullet">
|
||||
<h4>Approach:</h4>
|
||||
<ul>
|
||||
<li>Migrate old systems and a complex infrastructure to Kubernetes</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bullet">
|
||||
<h4>Results:</h4>
|
||||
<ul>
|
||||
<li>20 percent of web tools that account for more than 40 percent of web traffic now run on Kubernetes</li>
|
||||
<li>A 25-node cluster that keeps up with each new Kubernetes release</li>
|
||||
<li>Thousands of lines of old code have been deleted, thanks to Kubernetes</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<main>
|
||||
<div class="content">
|
||||
<div class="bullet">
|
||||
<h4>Challenges:</h4>
|
||||
<ul>
|
||||
<li>Simplify a complex, difficult-to-manage infrastructure</li>
|
||||
<li>Allow developers to continue writing tools and bots using existing techniques</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bullet">
|
||||
<h4>Why Kubernetes:</h4>
|
||||
<ul>
|
||||
<li>Wikimedia Tool Labs chose Kubernetes because it can mimic existing workflows, while reducing complexity</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bullet">
|
||||
<h4>Approach:</h4>
|
||||
<ul>
|
||||
<li>Migrate old systems and a complex infrastructure to Kubernetes</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bullet">
|
||||
<h4>Results:</h4>
|
||||
<ul>
|
||||
<li>20 percent of web tools that account for more than 40 percent of web traffic now run on Kubernetes</li>
|
||||
<li>A 25-node cluster that keeps up with each new Kubernetes release</li>
|
||||
<li>Thousands of lines of old code have been deleted, thanks to Kubernetes</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</section>
|
||||
|
||||
<section class="details">
|
||||
<main>
|
||||
<div class="content">
|
||||
<h4>Using Kubernetes to provide tools for maintaining wikis</h4>
|
||||
<p>
|
||||
Wikimedia Tool Labs is run by a staff of four-and-a-half paid employees and two volunteers. The infrastructure didn't make it easy or intuitive for developers to build bots and other tools to make wikis work more easily. Yuvi says, "It's incredibly chaotic. We have lots of Perl and Bash duct tape on top of it. Everything is super fragile."
|
||||
</p>
|
||||
<p>
|
||||
To solve the problem, Wikimedia Tool Labs migrated parts of its infrastructure to Kubernetes, in preparation for eventually moving its entire system. Yuvi said Kubernetes greatly simplifies maintenance. The goal is to allow developers creating bots and other tools to use whatever development methods they want, but make it easier for the Wikimedia Tool Labs to maintain the required infrastructure for hosting and sharing them.
|
||||
</p>
|
||||
<p>
|
||||
"With Kubernetes, I've been able to remove a lot of our custom-made code, which makes everything easier to maintain. Our users' code also runs in a more stable way than previously," says Yuvi.
|
||||
</p>
|
||||
</div>
|
||||
</main>
|
||||
<main>
|
||||
<div class="content">
|
||||
<h4>Using Kubernetes to provide tools for maintaining wikis</h4>
|
||||
<p>
|
||||
Wikimedia Tool Labs is run by a staff of four-and-a-half paid employees and two volunteers. The infrastructure didn't make it easy or intuitive for developers to build bots and other tools to make wikis work more easily. Yuvi says, “It’s incredibly chaotic. We have lots of Perl and Bash duct tape on top of it. Everything is super fragile.”
|
||||
</p>
|
||||
<p>
|
||||
To solve the problem, Wikimedia Tool Labs migrated parts of its infrastructure to Kubernetes, in preparation for eventually moving its entire system. Yuvi said Kubernetes greatly simplifies maintenance. The goal is to allow developers creating bots and other tools to use whatever development methods they want, but make it easier for the Wikimedia Tool Labs to maintain the required infrastructure for hosting and sharing them.
|
||||
</p>
|
||||
<p>
|
||||
“With Kubernetes, I’ve been able to remove a lot of our custom-made code, which makes everything easier to maintain. Our users’ code also runs in a more stable way than previously,” says Yuvi.
|
||||
</p>
|
||||
</div>
|
||||
</main>
|
||||
</section>
|
||||
|
||||
<section class="details">
|
||||
<main>
|
||||
<div class="content">
|
||||
<h4>Simplifying infrastructure and keeping wikis running better</h4>
|
||||
<p>
|
||||
Wikimedia Tool Labs has seen great success with the initial Kubernetes deployment. Old code is being simplified and eliminated, contributing developers don't have to change the way they write their tools and bots, and those tools and bots run in a more stable fashion than they have in the past. The paid staff and volunteers are able to better keep up with fixing issues.
|
||||
</p>
|
||||
<p>
|
||||
In the future, with a more complete migration to Kubernetes, Wikimedia Tool Labs expects to make it even easier to host and maintain the bots and tools that help run wikis across the world. The tool labs already host approximately 1,300 tools and bots from 800 volunteers, with many more being submitted every day. Twenty percent of the tool labs' web tools that account for more than 60 percent of web traffic now run on Kubernetes. The tool labs has a 25-node cluster that keeps up with each new Kubernetes release. Many existing web tools are migrating to Kubernetes.
|
||||
</p>
|
||||
<p>
|
||||
"Our goal is to make sure that people all over the world can share knowledge as easily as possible. Kubernetes helps with that, by making it easier for wikis everywhere to have the tools they need to thrive," says Yuvi.
|
||||
</p>
|
||||
</div>
|
||||
</main>
|
||||
<main>
|
||||
<div class="content">
|
||||
<h4>Simplifying infrastructure and keeping wikis running better</h4>
|
||||
<p>
|
||||
Wikimedia Tool Labs has seen great success with the initial Kubernetes deployment. Old code is being simplified and eliminated, contributing developers don’t have to change the way they write their tools and bots, and those tools and bots run in a more stable fashion than they have in the past. The paid staff and volunteers are able to better keep up with fixing issues.
|
||||
</p>
|
||||
<p>
|
||||
In the future, with a more complete migration to Kubernetes, Wikimedia Tool Labs expects to make it even easier to host and maintain the bots and tools that help run wikis across the world. The tool labs already host approximately 1,300 tools and bots from 800 volunteers, with many more being submitted every day. Twenty percent of the tool labs’ web tools that account for more than 60 percent of web traffic now run on Kubernetes. The tool labs has a 25-node cluster that keeps up with each new Kubernetes release. Many existing web tools are migrating to Kubernetes.
|
||||
</p>
|
||||
<p>
|
||||
“Our goal is to make sure that people all over the world can share knowledge as easily as possible. Kubernetes helps with that, by making it easier for wikis everywhere to have the tools they need to thrive,” says Yuvi.
|
||||
</p>
|
||||
</div>
|
||||
</main>
|
||||
</section>
|
||||
|
||||
{% include footer.html %}
|
||||
{% include case-study-styles.html %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,109 +0,0 @@
|
||||
---
|
||||
title: Wink Case Study
|
||||
layout: basic
|
||||
case_study_styles: true
|
||||
cid: caseStudies
|
||||
css: /css/style_wink.css
|
||||
---
|
||||
|
||||
<div class="banner1">
|
||||
<h1>CASE STUDY: <img src="/images/wink_logo.png" width="13%" style="margin-bottom:-4px"><br>
|
||||
<div class="subhead">Cloud-Native Infrastructure Keeps Your Smart Home Connected</div>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="details">
|
||||
Company <b>Wink</b> Location <b>New York, N.Y.</b> Industry <b>Internet of Things Platform</b>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<section class="section1">
|
||||
<div class="cols">
|
||||
<div class="col1">
|
||||
|
||||
<h2>Challenge</h2>
|
||||
Building a low-latency, highly reliable infrastructure to serve communications between millions of connected smart-home devices and the company’s consumer hubs and mobile app, with an emphasis on horizontal scalability, the ability to encrypt everything quickly and connections that could be easily brought back up if anything went wrong.
|
||||
<br><br>
|
||||
<h2>Solution</h2>
|
||||
Across-the-board use of a Kubernetes-Docker-CoreOS Container Linux stack.<br><br>
|
||||
</div>
|
||||
|
||||
<div class="col2">
|
||||
<h2>Impact</h2>
|
||||
"Two of the biggest American retailers [Home Depot and Walmart] are carrying and promoting the brand and the hardware,” Wink Head of Engineering Kit Klein says proudly – though he adds that "it really comes with a lot of pressure. It’s not a retail situation where you have a lot of tech enthusiasts. These are everyday people who want something that works and have no tolerance for technical excuses.” And that’s further testament to how much faith Klein has in the infrastructure that the Wink team has built. With 80 percent of Wink’s workload running on a unified stack of Kubernetes-Docker-CoreOS, the company has put itself in a position to continually innovate and improve its products and services. Committing to this technology, says Klein, "makes building on top of the infrastructure relatively easy.”
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<div class="banner2">
|
||||
<div class="banner2text">
|
||||
"It’s not proprietary, it’s totally open, it’s really portable. You can run all the workloads across different cloud providers. You can easily run a hybrid AWS or even bring in your own data center. That’s the benefit of having everything unified on one open source Kubernetes-Docker-CoreOS Container Linux stack. There are massive security benefits if you only have one Linux distro/machine image to validate. The benefits are enormous because you save money, and you save time.”<br><br><span style="font-size:15px;letter-spacing:0.08em">- KIT KLEIN, HEAD OF ENGINEERING, WINK</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<section class="section2">
|
||||
<div class="fullcol">
|
||||
<h2>How many people does it take to turn on a light bulb?</h2>
|
||||
|
||||
Kit Klein whips out his phone to demonstrate. With a few swipes, the head of engineering at Wink pulls up the smart-home app created by the New York City-based company and taps the light button. "Honestly when you’re holding the phone and you’re hitting the light,” he says, "by the time you feel the pressure of your finger on the screen, it’s on. It takes as long as the signal to travel to your brain.”<br><br>
|
||||
Sure, it takes just one finger and less than 200 milliseconds to turn on the light – or lock a door or change a thermostat. But what allows Wink to help consumers manage their connected smart-home products with such speed and ease is a sophisticated, cloud native infrastructure that Klein and his team built and continue to develop using a unified stack of CoreOS, the open-source operating system designed for clustered deployments, and Kubernetes, an open-source platform for automating deployment, scaling, and operations of application containers across clusters of hosts, providing container-centric infrastructure. "When you have a big, complex network of interdependent microservices that need to be able to discover each other, and need to be horizontally scalable and tolerant to failure, that’s what this is really optimized for,” says Klein. "A lot of people end up relying on proprietary services [offered by some big cloud providers] to do some of this stuff, but what you get by adopting CoreOS/Kubernetes is portability, to not be locked in to anyone. You can really make your own fate.”<br><br>
|
||||
Indeed, Wink did. The company’s mission statement is to make the connected home accessible – that is, user-friendly for non-technical owners, affordable and perhaps most importantly, reliable. "If you can’t trust that when you hit the switch, you know a light is going to go on, or if you’re remote and you’re checking on your house and that information isn’t accurate, then the convenience of the system is lost,” says Klein. "So that’s where the infrastructure comes in.”<br><br>
|
||||
Wink was incubated within Quirky, a company that developed crowd-sourced inventions. The Wink app was first introduced in 2013, and at the time, it controlled only a few consumer products such as the PivotPower Strip that Quirky produced in collaboration with GE. As smart-home products proliferated, Wink was launched in 2014 in Home Depot stores nationwide. Its first project: a hub that could integrate with smart products from about a dozen brands like Honeywell and Chamberlain. The biggest challenge would be to build the infrastructure to serve all those communications between the hub and the products, with a focus on maximizing reliability and minimizing latency.<br><br>
|
||||
"When we originally started out, we were moving very fast trying to get the first product to market, the minimum viable product,” says Klein. "Lots of times you go down a path and end up having to backtrack and try different things. But in this particular case, we did a lot of the work up front, which led to us making a really sound decision to deploy it on CoreOS Container Linux. And that was very early in the life of it.”
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner3">
|
||||
<div class="banner3text">
|
||||
"...what you get by adopting CoreOS/Kubernetes is portability, to not be locked in to anyone. You can really make your own fate.”
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section3">
|
||||
<div class="fullcol">
|
||||
Concern number one: Wink’s products need to connect to consumer devices in people’s homes, behind a firewall. "You don’t have an end point like a URL, and you don’t even know what ports are open behind that firewall,” Klein explains. "So you essentially need to have this thing wake up and talk to your system and then open real-time, bidirectional communication between the cloud and the device. And it’s really, really important that it’s persistent because you want to decrease as much as possible the overhead of sending a message – you never know when someone is going to turn on the lights.”<br><br>
|
||||
With the earliest version of the Wink Hub, when you decided to turn your lights on or off, the request would be sent to the cloud and then executed. Subsequent updates to Wink’s software enabled local control, cutting latency down to about 10 milliseconds for many devices. But with the need for cloud-enabled integrations of an ever-growing ecosystem of smart home products, low-latency internet connectivity is still a critical consideration.
|
||||
<br><br>
|
||||
<h2>"You essentially need to have this thing wake up and talk to your system and then open real-time, bidirectional communication between the cloud and the device. And it’s really, really important that it’s persistent...you never know when someone is going to turn on the lights.”</h2>
|
||||
In addition, Wink had other requirements: horizontal scalability, the ability to encrypt everything quickly, connections that could be easily brought back up if something went wrong. "Looking at this whole structure we started, we decided to make a secure socket-based service,” says Klein. "We’ve always used, I would say, some sort of clustering technology to deploy our services and so the decision we came to was, this thing is going to be containerized, running on Docker.”<br><br>
|
||||
At the time – just over two years ago – Docker wasn’t yet widely used, but as Klein points out, "it was certainly understood by the people who were on the frontier of technology. We started looking at potential technologies that existed. One of the limiting factors was that we needed to deploy multi-port non-http/https services. It wasn’t really appropriate for some of the early cluster technology. We liked the project a lot and we ended up using it on other stuff for a while, but initially it was too targeted toward http workloads.”<br><br>
|
||||
Once Wink’s backend engineering team decided on a Dockerized workload, they had to make decisions about the OS and the container orchestration platform. "Obviously you can’t just start the containers and hope everything goes well,” Klein says with a laugh. "You need to have a system that is helpful [in order] to manage where the workloads are being distributed out to. And when the container inevitably dies or something like that, to restart it, you have a load balancer. All sorts of housekeeping work is needed to have a robust infrastructure.”
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner4">
|
||||
<div class="banner4text">
|
||||
"Obviously you can’t just start the containers and hope everything goes well,” Klein says with a laugh. "You need to have a system that is helpful [in order] to manage where the workloads are being distributed out to. And when the container inevitably dies or something like that, to restart it, you have a load balancer. All sorts of housekeeping work is needed to have a robust infrastructure.”
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section4">
|
||||
<div class="fullcol">
|
||||
Wink considered building directly on a general purpose Linux distro like Ubuntu (which would have required installing tools to run a containerized workload) and cluster management systems like Mesos (which was targeted toward enterprises with larger teams/workloads), but ultimately set their sights on CoreOS Container Linux. "A container-optimized Linux distribution system was exactly what we needed,” he says. "We didn’t have to futz around with trying to take something like a Linux distro and install everything. It’s got a built-in container orchestration system, which is Fleet, and an easy-to-use API. It’s not as feature-rich as some of the heavier solutions, but we realized that, at that moment, it was exactly what we needed.”<br><br>
|
||||
Wink’s hub (along with a revamped app) was introduced in July 2014 with a short-term deployment, and within the first month, they had moved the service to the Dockerized CoreOS deployment. Since then, they’ve moved almost every other piece of their infrastructure – from third-party cloud-to-cloud integrations to their customer service and payment portals – onto CoreOS Container Linux clusters. <br><br>
|
||||
Using this setup did require some customization. "Fleet is really nice as a basic container orchestration system, but it doesn’t take care of routing, sharing configurations, secrets, et cetera, among instances of a service,” Klein says. "All of those layers of functionality can be implemented, of course, but if you don’t want to spend a lot of time writing unit files manually – which of course nobody does – you need to create a tool to automate some of that, which we did.”<br><br>
|
||||
Wink quickly embraced the Kubernetes container cluster manager when it was launched in 2015 and integrated with CoreOS core technology, and as promised, it ended up providing the features Wink wanted and had planned to build. "If not for Kubernetes, we likely would have taken the logic and library we implemented for the automation tool that we created, and would have used it in a higher level abstraction and tool that could be used by non-DevOps engineers from the command line to create and manage clusters,” Klein says. "But Kubernetes made that totally unnecessary – and is written and maintained by people with a lot more experience in cluster management than us, so all the better.” Now, an estimated 80 percent of Wink’s workload is run on Kubernetes on top of CoreOS Container Linux.
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="banner5">
|
||||
<div class="banner5text">
|
||||
"Stay close to the development. Understand why decisions are being made. If you understand the intent behind the project, from the technological intent to a certain philosophical intent, then it helps you understand how to build your system in harmony with those systems as opposed to trying to work against it.”
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="section5">
|
||||
<div class="fullcol">
|
||||
Wink’s reasons for going all in are clear: "It’s not proprietary, it’s totally open, it’s really portable,” Klein says. "You can run all the workloads across different cloud providers. You can easily run a hybrid AWS or even bring in your own data center. That’s the benefit of having everything unified on one Kubernetes-Docker-CoreOS Container Linux stack. There are massive security benefits if you only have one Linux distro to try to validate. The benefits are enormous because you save money, you save time.”<br><br>
|
||||
Klein concedes that there are tradeoffs in every technology decision. "Cutting-edge technology is going to be scary for some people,” he says. "In order to take advantage of this, you really have to keep up with the technology. You can’t treat it like it’s a black box. Stay close to the development. Understand why decisions are being made. If you understand the intent behind the project, from the technological intent to a certain philosophical intent, then it helps you understand how to build your system in harmony with those systems as opposed to trying to work against it.”<br><br>
|
||||
Wink, which was acquired by Flex in 2015, now controls 2.3 million connected devices in households all over the country. What’s next for the company? A new version of the hub - Wink Hub 2 - hit shelves last November – and is being offered for the first time at Walmart stores in addition to Home Depot. "Two of the biggest American retailers are carrying and promoting the brand and the hardware,” Klein says proudly – though he adds that "it really comes with a lot of pressure. It’s not a retail situation where you have a lot of tech enthusiasts. These are everyday people who want something that works and have no tolerance for technical excuses.” And that’s further testament to how much faith Klein has in the infrastructure that the Wink team has have built.<br><br>
|
||||
Wink’s engineering team has grown exponentially since its early days, and behind the scenes, Klein is most excited about the machine learning Wink is using. "We built [a system of] containerized small sections of the data pipeline that feed each other and can have multiple outputs,” he says. "It’s like data pipelines as microservices.” Again, Klein points to having a unified stack running on CoreOS Container Linux and Kubernetes as the primary driver for the innovations to come. "You’re not reinventing the wheel every time,” he says. "You can just get down to work.” </div>
|
||||
</section>
|
||||
@@ -1,18 +0,0 @@
|
||||
## 如何参与 Kubernetes 文档汉化工作
|
||||
|
||||
我们非常欢迎,非常希望您参与 Kubernetes 文档汉化做出贡献。
|
||||
|
||||
您可以单击屏幕右上角的 **Fork** 按钮,在您的 Github 账户中创建一外名为 *fork* 的存储库副本。在您的分支中进行更改,当您准备好将这些更改发送给我们时,请转到您的仓库创建新的 pull 请求,让我们知道这一点。
|
||||
|
||||
关于更多的贡献信息,请参阅:
|
||||
|
||||
* [贡献于 Kubernetes 文档](http://kubernetes.io/editdocs/)
|
||||
* [创建文档拉取请求](http://kubernetes.io/docs/home/contribute/create-pull-request/)
|
||||
* [写一个新的话题](http://kubernetes.io/docs/contribute/write-new-topic/)
|
||||
* [暂停您的文档更改](http://kubernetes.io/docs/home/contribute/stage-documentation-changes/)
|
||||
* [更用页面模板](http://kubernetes.io/docs/home/contribute/page-templates/)
|
||||
* [文档样式指南](http://kubernetes.io/docs/home/contribute/style-guide/)
|
||||
|
||||
## 谢谢您!
|
||||
|
||||
Kubernetes 在社区参与中茁壮成长,我们非常感谢您对我们的网站和文档的贡献!
|
||||
@@ -1,32 +0,0 @@
|
||||
{% if overview %}
|
||||
|
||||
{{ overview }}
|
||||
|
||||
{% else %}
|
||||
|
||||
{% include templates/_errorthrower.md missing_block='overview' purpose='provides an overview of this concept.' %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
* TOC
|
||||
{:toc}
|
||||
|
||||
{% if body %}
|
||||
|
||||
{{ body }}
|
||||
|
||||
{% else %}
|
||||
|
||||
{% include templates/_errorthrower.md missing_block='body' purpose='supplies the body of the page content.' %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if whatsnext %}
|
||||
|
||||
## 开始下一步
|
||||
|
||||
{{ whatsnext }}
|
||||
|
||||
{% endif %}
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
Kubernetes 文档的 [用户指南](/docs/user-guide/) 部分中的主题将被移动到 [任务](/docs/tasks/)、[教程](/docs/tutorials/)和
|
||||
[概念](/docs/concepts) 部分。 本主题的内容已转移到:
|
||||
@@ -1,135 +0,0 @@
|
||||
---
|
||||
approvers:
|
||||
- bgrant0607
|
||||
- erictune
|
||||
- lavalamp
|
||||
title: Kubernetes API访问控制
|
||||
---
|
||||
|
||||
用户通过 `kubectl`、客户端库或者通过发送REST请求[访问API](/docs/user-guide/accessing-the-cluster)。 用户(自然人)和[Kubernetes服务账户](/docs/tasks/configure-pod-container/configure-service-account/) 都可以被授权进行API访问。
|
||||
请求到达API服务器后会经过几个阶段,具体说明如图:
|
||||
|
||||

|
||||
|
||||
## 传输层安全
|
||||
|
||||
在典型的Kubernetes集群中,API通过443端口提供服务。
|
||||
API服务器会提供一份证书。 该证书一般是自签名的, 所以用户机器上的 `$USER/.kube/config` 目录通常
|
||||
包含该API服务器证书的根证书,用来代替系统默认根证书。 当用户使用 `kube-up.sh` 创建集群时,该证书通常会被自动写入用户的`$USER/.kube/config`。 如果集群中存在多个用户,则创建者需要与其他用户共享证书。
|
||||
|
||||
## 认证
|
||||
|
||||
一旦 TLS 连接建立,HTTP请求就进入到了认证的步骤。即图中的步骤 **1** 。
|
||||
集群创建脚本或集群管理员会为API服务器配置一个或多个认证模块。
|
||||
更具体的认证相关的描述详见 [这里](/docs/admin/authentication/)。
|
||||
|
||||
认证步骤的输入是整个HTTP请求,但这里通常只是检查请求头和/或客户端证书。
|
||||
|
||||
认证模块支持客户端证书,密码和Plain Tokens,
|
||||
Bootstrap Tokens,以及JWT Tokens (用于服务账户)。
|
||||
|
||||
(管理员)可以同时设置多种认证模块,在设置了多个认证模块的情况下,每个模块会依次尝试认证,
|
||||
直到其中一个认证成功。
|
||||
|
||||
在 GCE 平台中,客户端证书,密码和Plain Tokens,Bootstrap Tokens,以及JWT Tokens同时被启用。
|
||||
|
||||
如果请求认证失败,则请求被拒绝,返回401状态码。
|
||||
如果认证成功,则被认证为具体的 `username`,该用户名可供随后的步骤中使用。一些认证模块还提供了用户的组成员关系,另一些则没有。
|
||||
|
||||
尽管Kubernetes使用 "用户名" 来进行访问控制和请求记录,但它实际上并没有 `user` 对象,也不存储用户名称或其他相关信息。
|
||||
|
||||
## 授权
|
||||
|
||||
当请求被认证为来自某个特定的用户后,该请求需要被授权。 即图中的步骤 **2** 。
|
||||
|
||||
请求须包含请求者的用户名,请求动作,以及该动作影响的对象。 如果存在相应策略,声明该用户具有进行相应操作的权限,则该请求会被授权。
|
||||
|
||||
例如,如果Bob有如下策略,那么他只能够读取`projectCaribou`命名空间下的pod资源:
|
||||
|
||||
```json
|
||||
{
|
||||
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
|
||||
"kind": "Policy",
|
||||
"spec": {
|
||||
"user": "bob",
|
||||
"namespace": "projectCaribou",
|
||||
"resource": "pods",
|
||||
"readonly": true
|
||||
}
|
||||
}
|
||||
```
|
||||
如果Bob发起以下请求,那么请求能够通过授权,因为Bob被允许访问 `projectCaribou` 命名空间下的对象:
|
||||
|
||||
```json
|
||||
{
|
||||
"apiVersion": "authorization.k8s.io/v1beta1",
|
||||
"kind": "SubjectAccessReview",
|
||||
"spec": {
|
||||
"resourceAttributes": {
|
||||
"namespace": "projectCaribou",
|
||||
"verb": "get",
|
||||
"group": "unicorn.example.org",
|
||||
"resource": "pods"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
如果Bob对 `projectCaribou` 命名空间下的对象发起一个写(`create` 或者 `update`)请求,那么它的授权会被拒绝。 如果Bob请求读取(`get`) 其他命名空间,例如 `projectFish`下的对象,其授权也会被拒绝。
|
||||
|
||||
Kubernetes的授权要求使用通用的REST属性与现有的组织或云服务提供商的访问控制系统进行交互。 采用REST格式是必要的,因为除Kubernetes外,这些访问控制系统还可能与其他的API进行交互。
|
||||
|
||||
Kubernetes 支持多种授权模块,例如ABAC模式,RBAC模式和 Webhook模式。 管理员创建集群时,会配置API服务器应用的授权模块。 如果多种授权模式同时被启用,Kubernetes将检查所有模块,如果其中一种通过授权,则请求授权通过。 如果所有的模块全部拒绝,则请求被拒绝(HTTP状态码403)。
|
||||
|
||||
要了解更多的Kubernetes授权相关信息,包括使用授权模块创建策略的具体说明等,可参考[授权概述](/docs/admin/authorization)。
|
||||
|
||||
|
||||
## 准入控制
|
||||
|
||||
准入控制模块是能够修改或拒绝请求的软件模块。
|
||||
作为授权模块的补充,准入控制模块会访问被创建或更新的对象的内容。
|
||||
它们作用于对象的创建,删除,更新和连接 (proxy)阶段,但不包括对象的读取。
|
||||
|
||||
可以同时配置多个准入控制器,它们会按顺序依次被调用。
|
||||
|
||||
即图中的步骤 **3** 。
|
||||
|
||||
与认证和授权模块不同的是,如果任一个准入控制器拒绝请求,那么整个请求会立即被拒绝。
|
||||
|
||||
除了拒绝请求外,准入控制器还可以为对象设置复杂的默认值。
|
||||
|
||||
可用的准入控制模块描述 [如下](/docs/admin/admission-controllers/)。
|
||||
|
||||
一旦请求通过所有准入控制器,将使用对应API对象的验证流程对其进行验证,然后写入对象存储 (如步骤 **4**)。
|
||||
|
||||
|
||||
## API的端口和IP
|
||||
|
||||
上述讨论适用于发送请求到API服务器的安全端口(典型情况)。
|
||||
实际上API服务器可以通过两个端口提供服务:
|
||||
|
||||
默认情况下,API服务器在2个端口上提供HTTP服务:
|
||||
|
||||
1. `Localhost Port`:
|
||||
|
||||
- 用于测试和启动,以及管理节点的其他组件
|
||||
(scheduler, controller-manager)与API的交互
|
||||
- 没有TLS
|
||||
- 默认值为8080,可以通过 `--insecure-port` 标记来修改。
|
||||
- 默认的IP地址为localhost, 可以通过 `--insecure-bind-address`标记来修改。
|
||||
- 请求会 **绕过** 认证和鉴权模块。
|
||||
- 请求会被准入控制模块处理。
|
||||
- 其访问需要主机访问的权限。
|
||||
|
||||
2. `Secure Port`:
|
||||
|
||||
- 尽可能使用该端口访问
|
||||
- 应用 TLS。 可以通过 `--tls-cert-file` 设置证书, 通过 `--tls-private-key-file` 设置私钥。
|
||||
- 默认值为6443,可以通过 `--secure-port` 标记来修改。
|
||||
- 默认IP是首个非本地的网络接口地址,可以通过 `--bind-address` 标记来修改。
|
||||
- 请求会经过认证和鉴权模块处理。
|
||||
- 请求会被准入控制模块处理。
|
||||
- 要求认证和授权模块正常运行。
|
||||
|
||||
通过 `kube-up.sh`创建集群时, 对 Google Compute Engine (GCE)
|
||||
和一些其他的云供应商来说, API通过443端口提供服务。 对
|
||||
GCE而言,项目上配置了防火墙规则,允许外部的HTTPS请求访问API,其他(厂商的)集群设置方法各不相同。
|
||||
@@ -1,141 +0,0 @@
|
||||
---
|
||||
assignees:
|
||||
- erictune
|
||||
- lavalamp
|
||||
- deads2k
|
||||
- liggitt
|
||||
title: ABAC 模式
|
||||
---
|
||||
|
||||
{% capture overview %}
|
||||
|
||||
基于属性的访问控制(Attribute-based access control - ABAC)定义了访问控制范例,其中通过使用将属性组合在一起的策略来向用户授予访问权限。
|
||||
|
||||
{% endcapture %}
|
||||
|
||||
{% capture body %}
|
||||
|
||||
## 策略文件格式
|
||||
|
||||
基于 `ABAC` 模式,可以这样指定策略文件 `--authorization-policy-file=SOME_FILENAME`。
|
||||
|
||||
此文件是 JSON 格式[每行都是一个JSON对象](http://jsonlines.org/),不应存在封闭的列表或映射,每行只有一个映射。
|
||||
|
||||
每一行都是一个 "策略对象",策略对象是具有以下映射的属性:
|
||||
|
||||
- 版本控制属性:
|
||||
- `apiVersion`,字符串类型: 有效值为"abac.authorization.kubernetes.io/v1beta1",允许版本控制和转换策略格式。
|
||||
- `kind`,字符串类型: 有效值为 "Policy",允许版本控制和转换策略格式。
|
||||
- `spec` 配置为具有以下映射的属性:
|
||||
- 匹配属性:
|
||||
- `user`,字符串类型; 来自 `--token-auth-file` 的用户字符串,如果你指定`user`,它必须与验证用户的用户名匹配。
|
||||
- `group`,字符串类型; 如果指定`group`,它必须与经过身份验证的用户的一个组匹配,`system:authenticated`匹配所有经过身份验证的请求。`system:unauthenticated`匹配所有未经过身份验证的请求。
|
||||
- 资源匹配属性:
|
||||
- `apiGroup`,字符串类型; 一个 API 组。
|
||||
- 例: `extensions`
|
||||
- 通配符: `*`匹配所有 API 组。
|
||||
- `namespace`,字符串类型; 一个命名空间。
|
||||
- 例如: `kube-system`
|
||||
- 通配符: `*` 匹配所有资源请求。
|
||||
- `resource`,字符串类型; 资源类型。
|
||||
- 例:`pods`
|
||||
- 通配符: `*`匹配所有资源请求。
|
||||
- 非资源匹配属性:
|
||||
- `nonResourcePath`,字符串类型; 非资源请求路径。
|
||||
- 例如:`/version`或`/apis`
|
||||
- 通配符:
|
||||
- `*` 匹配所有非资源请求。
|
||||
- `/foo/*` 匹配`/foo/`的所有子路径。
|
||||
- `readonly`,键入 boolean,如果为 true,则表示该策略仅适用于 get,list 和 watch 操作。
|
||||
|
||||
**注意:** 未设置的属性与类型设置为零值的属性相同(例如空字符串,0、false),然而未知的应该可读性优先。
|
||||
|
||||
在将来,策略可能以 JSON 格式表示,并通过 REST 界面进行管理。
|
||||
|
||||
## 授权算法
|
||||
|
||||
请求具有与策略对象的属性对应的属性。
|
||||
|
||||
当接收到请求时,确定属性。 未知属性设置为其类型的零值(例如: 空字符串,0,false)。
|
||||
|
||||
设置为`“*"`的属性将匹配相应属性的任何值。
|
||||
|
||||
检查属性的元组,以匹配策略文件中的每个策略。 如果至少有一行匹配请求属性,则请求被授权(但可能会在稍后验证失败)。
|
||||
|
||||
要允许任何经过身份验证的用户执行某些操作,请将策略组属性设置为 `"system:authenticated“`。
|
||||
|
||||
要允许任何未经身份验证的用户执行某些操作,请将策略组属性设置为`"system:authentication“`。
|
||||
|
||||
要允许用户执行任何操作,请使用 apiGroup,命名空间,
|
||||
资源和 nonResourcePath 属性设置为 `“*"`的策略.
|
||||
|
||||
要允许用户执行任何操作,请使用设置为`“*”` 的 apiGroup,namespace,resource 和 nonResourcePath 属性编写策略。
|
||||
|
||||
## Kubectl
|
||||
|
||||
Kubectl 使用 api-server 的 `/api` 和 `/apis` 端点进行协商客户端/服务器版本。 通过创建/更新来验证发送到API的对象操作,kubectl 查询某些 swagger 资源。 对于API版本"v1", 那就是`/swaggerapi/api/v1` & `/swaggerapi/ experimental/v1`。
|
||||
|
||||
当使用 ABAC 授权时,这些特殊资源必须明确通过策略中的 `nonResourcePath` 属性暴露出来(参见下面的[例子](#examples)):
|
||||
|
||||
* `/api`,`/api/*`,`/apis`和`/apis/*` 用于 API 版本协商.
|
||||
* `/version` 通过 `kubectl version` 检索服务器版本.
|
||||
* `/swaggerapi/*` 用于创建/更新操作.
|
||||
|
||||
要检查涉及到特定kubectl操作的HTTP调用,您可以调整详细程度:
|
||||
|
||||
kubectl --v=8 version
|
||||
|
||||
## 例子
|
||||
|
||||
1. Alice 可以对所有资源做任何事情:
|
||||
|
||||
```json
|
||||
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "alice", "namespace": "*", "resource": "*", "apiGroup": "*"}}
|
||||
```
|
||||
2. Kubelet 可以读取任何pod:
|
||||
|
||||
```json
|
||||
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "pods", "readonly": true}}
|
||||
```
|
||||
3. Kubelet 可以读写事件:
|
||||
|
||||
```json
|
||||
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "events"}}
|
||||
```
|
||||
4. Bob 可以在命名空间“projectCaribou"中读取 pod:
|
||||
|
||||
```json
|
||||
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "bob", "namespace": "projectCaribou", "resource": "pods", "readonly": true}}
|
||||
```
|
||||
5. 任何人都可以对所有非资源路径进行只读请求:
|
||||
|
||||
```json
|
||||
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:authenticated", "readonly": true, "nonResourcePath": "*"}}
|
||||
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:unauthenticated", "readonly": true, "nonResourcePath": "*"}}
|
||||
```
|
||||
|
||||
[完整文件示例](http://releases.k8s.io/{{page.githubbranch}}/pkg/auth/authorizer/abac/example_policy_file.jsonl)
|
||||
|
||||
## 服务帐户的快速说明
|
||||
|
||||
服务帐户自动生成用户。 用户名是根据命名约定生成的:
|
||||
|
||||
```shell
|
||||
system:serviceaccount:<namespace>:<serviceaccountname>
|
||||
```
|
||||
创建新的命名空间也会导致创建一个新的服务帐户:
|
||||
|
||||
```shell
|
||||
system:serviceaccount:<namespace>:default
|
||||
```
|
||||
|
||||
例如,如果要将 API 的 kube-system 完整权限中的默认服务帐户授予,则可以将此行添加到策略文件中:
|
||||
|
||||
```json
|
||||
{"apiVersion":"abac.authorization.kubernetes.io/v1beta1","kind":"Policy","spec":{"user":"system:serviceaccount:kube-system:default","namespace":"*","resource":"*","apiGroup":"*"}}
|
||||
```
|
||||
|
||||
需要重新启动 apitorver 以获取新的策略行.
|
||||
|
||||
{% endcapture %}
|
||||
{% include templates/concept.md %}
|
||||
@@ -1,155 +0,0 @@
|
||||
---
|
||||
assignees:
|
||||
- erictune
|
||||
- lavalamp
|
||||
- deads2k
|
||||
- liggitt
|
||||
title: 概述
|
||||
---
|
||||
|
||||
{% capture overview %}
|
||||
|
||||
学习有关 Kubernetes 授权的更多信息,包括有关使用支持的授权模块创建策略的详细信息。
|
||||
|
||||
{% endcapture %}
|
||||
|
||||
{% capture body %}
|
||||
|
||||
在 Kubernetes 里,您必须经过身份验证(登录),才能授权您的请求(授予访问权限).。有关认证的信息,请参阅[访问控制概述](/docs/admin/access-the-api/)。
|
||||
|
||||
Kubernetes 提供通用的 REST API 请求。这意味着 Kubernetes 授权可以与现有的组织或云提供商的访问控制系统一起使用,该系统可以处理除 Kubernetes API 之外的其他 API。
|
||||
|
||||
## 确定请求是允许还是被拒绝
|
||||
Kubernetes 使用 API 服务器授权 API 请求。它根据所有策略评估所有请求属性,并允许或拒绝请求。某些策略必须允许 API 请求的所有部分继续进行,这意味着默认情况下是拒绝权限。
|
||||
|
||||
(虽然 Kubernetes 使用 API 服务器,访问控制和依赖特定类型对象的特定领域策略由 Admission 控制器处理。)
|
||||
|
||||
当配置多个授权模块时,按顺序检查每个模块,如果有任何模块授权请求,则可以继续执行该请求。如果所有模块拒绝请求,则拒绝该请求(HTTP状态代码403)。
|
||||
|
||||
## 查看您的请求属性
|
||||
|
||||
Kubernetes 仅查看以下API请求属性:
|
||||
|
||||
* **user** - 验证期间提供的 `user` 字符串
|
||||
* **group** - 认证用户所属的组名列表
|
||||
* **“extra"** - 由认证层提供的任意字符串键到字符串值的映射
|
||||
* **API** - 指示请求是否用于API资源
|
||||
* **Request path** - 诸如`/api`或`/healthz`的其他非资源端点的路径(请参阅[kubectl](#kubectl)).
|
||||
* **API request verb** - API 动词 `get`,`list`,`create`,`update`,`patch`,`watch`,`proxy`,`redirect`,`delete`和`deletecollection`用于资源请求。要确定资源 API 端点的请求动词,请参阅**确定下面的请求动词**.
|
||||
* **HTTP request verb** - HTTP动词`get`,`post`,`put`和`delete`用于非资源请求
|
||||
* **Resource** - 正在访问的资源的ID或名称(仅适用于资源请求)
|
||||
--* 对于使用`get`, `update`, `patch`, 和 `delete`动词的资源请求,您必须提供资源名称。
|
||||
* **Subresource** - 正在访问的子资源(仅用于资源请求)
|
||||
* **Namespace** - 正在被访问的对象的命名空间(仅针对命名空间的资源请求)
|
||||
* **API group** - 正在访问的API组(仅用于资源请求). 一个空字符串指定[核心 API 组](/docs/api/).
|
||||
|
||||
## 确定请求动词
|
||||
|
||||
要确定资源 API 端点的请求动词,请查看所使用的HTTP动词以及请求是否对单个资源或资源集合进行操作:
|
||||
|
||||
HTTP动词| 请求动词
|
||||
---------- | ---------------
|
||||
POST | 创建
|
||||
GET,HEAD | 获取(个人资源),列表(集合)
|
||||
PUT | 更新
|
||||
PATCH | 补丁
|
||||
DELETE| 删除(个人资源),删除(收藏)
|
||||
|
||||
Kubernetes 有时会使用专门的动词检查授权以获得额外的权限。例如:
|
||||
|
||||
* [PodSecurityPolicy](/docs/concepts/policy/pod-security-policy/)在`extensions` API组中的`podsecuritypolicies`资源上检查`use`动词的授权。
|
||||
* [RBAC](/docs/admin/authorization/rbac/#privilege-escalation-prevention-and-bootstrapping) 在`rbac.authorization.k8s.io` API组中的`roles`和`clusterroles`资源上检查`bind`动词的授权。
|
||||
* [认证](/docs/admin/authentication/) 在核心API组中的`users`,`groups`和`serviceaccounts`上的`impersonate`动词的授权以及`authentication.k8s.io` API组中的`userextras`进行层次检查。
|
||||
|
||||
## 授权模块
|
||||
* **ABAC模式** - 基于属性的访问控制(ABAC)定义了访问控制范例,通过使用将属性组合在一起的策略来授予用户访问权限。策略可以使用任何类型的属性(用户属性,资源属性,对象,环境属性等)。要了解有关使用ABAC模式的更多信息,请参阅[ABAC模式](/docs/admin/authorization/abac/)
|
||||
* **RBAC模式** - 基于角色的访问控制(RBAC)是一种根据企业内个人用户的角色来调整对计算机或网络资源的访问的方法。在这种情况下,访问是单个用户执行特定任务(例如查看,创建或修改文件)的能力。要了解有关使用RBAC模式的更多信息,请参阅[RBAC模式](/docs/admin/authorization/rbac/)
|
||||
*当指定 "RBAC"(基于角色的访问控制)使用 "rbac.authorization.k8s.io" API组来驱动授权决定时,允许管理员通过Kubernetes API动态配置权限策略.
|
||||
.. *截至1.6 RBAC模式是测试版.
|
||||
.. *要启用RBAC,请使用 `--authorization-mode=RBAC` 启动 apiserver.
|
||||
* **Webhook模式** - WebHook 是HTTP回调:发生事件时发生的HTTP POST; 通过HTTP POST简单的事件通知. 实施 WebHooks 的 Web 应用程序将在某些事情发生时向URL发送消息. 要了解有关使用Webhook模式的更多信息,请参阅[Webhook模式](/docs/admin/authorization/webhook/)
|
||||
* **自定义模块** - 您可以创建使用Kubernetes的自定义模块. 要了解更多信息,请参阅下面的**自定义模块**。
|
||||
|
||||
### 自定义模块
|
||||
可以相当容易地开发其他实现,APIserver 调用 Authorizer 接口:
|
||||
|
||||
```go
|
||||
type Authorizer interface {
|
||||
Authorize(a Attributes) error
|
||||
}
|
||||
```
|
||||
|
||||
以确定是否允许每个API操作.
|
||||
|
||||
授权插件是实现此接口的模块.授权插件代码位于 `pkg/auth/authorizer/$MODULENAME` 中。
|
||||
|
||||
授权模块可以完全实现,也可以拨出远程授权服务。 授权模块可以实现自己的缓存,以减少具有相同或相似参数的重复授权调用的成本。 开发人员应该考虑缓存和撤销权限之间的交互。
|
||||
|
||||
#### 检查API访问
|
||||
|
||||
Kubernetes 将 `subjectaccessreviews.v1.authorization.k8s.io` 资源公开为允许外部访问API授权者决策的普通资源。 无论您选择使用哪个授权器,您都可以使用`SubjectAccessReview`发出一个`POST`,就像webhook授权器的`apis/authorization.k8s.io/v1/subjectaccessreviews` 端点一样,并回复一个响应。 例如:
|
||||
|
||||
|
||||
```bash
|
||||
kubectl create --v=8 -f - << __EOF__
|
||||
{
|
||||
"apiVersion": "authorization.k8s.io/v1",
|
||||
"kind": "SubjectAccessReview",
|
||||
"spec": {
|
||||
"resourceAttributes": {
|
||||
"namespace": "kittensandponies",
|
||||
"verb": "get",
|
||||
"group": "unicorn.example.org",
|
||||
"resource": "pods"
|
||||
},
|
||||
"user": "jane",
|
||||
"group": [
|
||||
"group1",
|
||||
"group2"
|
||||
],
|
||||
"extra": {
|
||||
"scopes": [
|
||||
"openid",
|
||||
"profile"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
__EOF__
|
||||
|
||||
--- snip lots of output ---
|
||||
|
||||
I0913 08:12:31.362873 27425 request.go:908] Response Body: {"kind":"SubjectAccessReview","apiVersion":"authorization.k8s.io/v1","metadata":{"creationTimestamp":null},"spec":{"resourceAttributes":{"namespace":"kittensandponies","verb":"GET","group":"unicorn.example.org","resource":"pods"},"user":"jane","group":["group1","group2"],"extra":{"scopes":["openid","profile"]}},"status":{"allowed":true}}
|
||||
subjectaccessreview "" created
|
||||
```
|
||||
|
||||
这对于调试访问问题非常有用,因为您可以使用此资源来确定授权者授予哪些访问权限。
|
||||
|
||||
## 为您的授权模块使用标志
|
||||
|
||||
您的策略中必须包含一个标志,以指出您的策略包含哪个授权模块:
|
||||
|
||||
可以使用以下标志:
|
||||
- `--authorization-mode=ABAC` 基于属性的访问控制(ABAC)模式允许您使用本地文件配置策略。
|
||||
- `--authorization-mode=RBAC` 基于角色的访问控制(RBAC)模式允许您使用Kubernetes API创建和存储策略.
|
||||
- `--authorization-mode=Webhook` WebHook是一种HTTP回调模式,允许您使用远程REST管理授权。
|
||||
- `--authorization-mode=AlwaysDeny` 此标志阻止所有请求. 仅使用此标志进行测试。
|
||||
- `--authorization-mode=AlwaysAllow` 此标志允许所有请求. 只有在您不需要API请求授权的情况下才能使用此标志。
|
||||
|
||||
您可以选择多个授权模块. 如果其中一种模式为 `AlwaysAllow`,则覆盖其他模式,并允许所有API请求。
|
||||
|
||||
## 版本控制
|
||||
|
||||
对于版本 1.2,配置了 kube-up.sh 创建的集群,以便任何请求都不需要授权。
|
||||
|
||||
从版本 1.3 开始,配置由 kube-up.sh 创建的集群,使得 ABAC 授权模块处于启用状态。但是,其输入文件最初设置为允许所有用户执行所有操作,集群管理员需要编辑该文件,或者配置不同的授权器来限制用户可以执行的操作。
|
||||
|
||||
{% endcapture %}
|
||||
{% capture whatsnext %}
|
||||
|
||||
* 要学习有关身份验证的更多信息,请参阅**身份验证**[控制访问 Kubernetes API](docs/admin/access-the-api/)。
|
||||
* 要了解有关入学管理的更多信息,请参阅[使用 Admission 控制器](docs/admin/admission-controllers/)。
|
||||
*
|
||||
{% endcapture %}
|
||||
|
||||
{% include templates/concept.md %}
|
||||
@@ -1,18 +0,0 @@
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: DaemonSet
|
||||
metadata:
|
||||
name: prometheus-node-exporter
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
name: prometheus-node-exporter
|
||||
labels:
|
||||
daemon: prom-node-exp
|
||||
spec:
|
||||
containers:
|
||||
- name: c
|
||||
image: prom/prometheus
|
||||
ports:
|
||||
- containerPort: 9090
|
||||
hostPort: 9090
|
||||
name: serverport
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user