From c8abb1c5f84986c77a1c7d1b4f1db79751ed2846 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Wed, 28 Sep 2016 16:30:41 +0100 Subject: [PATCH 01/62] Clarify what kubenet does and does not do --- docs/admin/network-plugins.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/admin/network-plugins.md b/docs/admin/network-plugins.md index c0397016da..0d7f8981e2 100644 --- a/docs/admin/network-plugins.md +++ b/docs/admin/network-plugins.md @@ -40,7 +40,11 @@ The CNI plugin is selected by passing Kubelet the `--network-plugin=cni` command ### kubenet -The Linux-only kubenet plugin provides functionality similar to the `--configure-cbr0` kubelet command-line option. It creates a Linux bridge named `cbr0` and creates a veth pair for each pod with the host end of each pair connected to `cbr0`. The pod end of the pair is assigned an IP address allocated from a range assigned to the node either through configuration or by the controller-manager. `cbr0` is assigned an MTU matching the smallest MTU of an enabled normal interface on the host. The kubenet plugin is currently mutually exclusive with, and will eventually replace, the --configure-cbr0 option. It is also currently incompatible with the flannel experimental overlay. +Kubenet is intended to be a very basic, simple network plugin, on Linux only. It does not, of itself, implement more advanced features like cross-node networking or network policy. It is typically used together with a cloud provider that sets up routing rules for communication between nodes, or in single-node environments. + +Kubenet creates a Linux bridge named `cbr0` and creates a veth pair for each pod with the host end of each pair connected to `cbr0`. The pod end of the pair is assigned an IP address allocated from a range assigned to the node either through configuration or by the controller-manager. `cbr0` is assigned an MTU matching the smallest MTU of an enabled normal interface on the host. + +The kubenet plugin is currently mutually exclusive with, and will eventually replace, the --configure-cbr0 option. It is also currently incompatible with the flannel experimental overlay. The plugin requires a few things: From 8b4e7e8bc611fddc7250a65a8ad4a265a2ebaa33 Mon Sep 17 00:00:00 2001 From: Keith Wansbrough Date: Tue, 18 Oct 2016 15:22:13 +0100 Subject: [PATCH 02/62] Instructions for Windows download of kubectl. The binary name is kubectl.exe in this case, not kubectl, which is not immediately obvious. --- docs/getting-started-guides/minikube.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/getting-started-guides/minikube.md b/docs/getting-started-guides/minikube.md index 020fc5e257..5d3c69f6b1 100644 --- a/docs/getting-started-guides/minikube.md +++ b/docs/getting-started-guides/minikube.md @@ -80,6 +80,8 @@ curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ # OS X/386 curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/darwin/386/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ +# Windows +curl -Lo kubectl.exe http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/windows/amd64/kubectl.exe ``` The generic download path is: From 0903054357418e6a93746eee498f12ca7413bda4 Mon Sep 17 00:00:00 2001 From: Keith Wansbrough Date: Wed, 19 Oct 2016 12:03:28 +0100 Subject: [PATCH 03/62] Don't hardcode kubectl version. --- docs/getting-started-guides/minikube.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started-guides/minikube.md b/docs/getting-started-guides/minikube.md index 5d3c69f6b1..e72a70299a 100644 --- a/docs/getting-started-guides/minikube.md +++ b/docs/getting-started-guides/minikube.md @@ -81,7 +81,7 @@ curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page # OS X/386 curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/darwin/386/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ # Windows -curl -Lo kubectl.exe http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/windows/amd64/kubectl.exe +curl -Lo kubectl.exe http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/windows/amd64/kubectl.exe ``` The generic download path is: From eb5f7add4b1fa40e5a47f6825cef7c547ab08128 Mon Sep 17 00:00:00 2001 From: Keith Wansbrough Date: Wed, 19 Oct 2016 12:04:25 +0100 Subject: [PATCH 04/62] Suggest alternative to curl for Windows. --- docs/getting-started-guides/minikube.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started-guides/minikube.md b/docs/getting-started-guides/minikube.md index e72a70299a..e8b75b99d8 100644 --- a/docs/getting-started-guides/minikube.md +++ b/docs/getting-started-guides/minikube.md @@ -80,7 +80,7 @@ curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ # OS X/386 curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/darwin/386/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ -# Windows +# Windows (using curl; or use your browser "save link as...") curl -Lo kubectl.exe http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/windows/amd64/kubectl.exe ``` From 33cdc55903b43bd204bf4e0cdfbab184755714cf Mon Sep 17 00:00:00 2001 From: Keith Wansbrough Date: Wed, 19 Oct 2016 14:01:30 +0100 Subject: [PATCH 05/62] Just give a simple link for Windows kubectl. --- docs/getting-started-guides/minikube.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/getting-started-guides/minikube.md b/docs/getting-started-guides/minikube.md index e8b75b99d8..ee827bab55 100644 --- a/docs/getting-started-guides/minikube.md +++ b/docs/getting-started-guides/minikube.md @@ -80,10 +80,10 @@ curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ # OS X/386 curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/darwin/386/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ -# Windows (using curl; or use your browser "save link as...") -curl -Lo kubectl.exe http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/windows/amd64/kubectl.exe ``` +For Windows, download [kubectl.exe](http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/windows/amd64/kubectl.exe) and save it to a location on your PATH. + The generic download path is: ``` https://storage.googleapis.com/kubernetes-release/release/${K8S_VERSION}/bin/${GOOS}/${GOARCH}/${K8S_BINARY} From 441043a22a59d34b34cbdcdf8dc2437c552ef5c8 Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Wed, 19 Oct 2016 13:08:21 -0400 Subject: [PATCH 06/62] Instructions for how to download kubectl --- _data/guides.yml | 2 + docs/getting-started-guides/kubectl.md | 63 ++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 docs/getting-started-guides/kubectl.md diff --git a/_data/guides.yml b/_data/guides.yml index 40d47b08d6..e77e8e1b01 100644 --- a/_data/guides.yml +++ b/_data/guides.yml @@ -12,6 +12,8 @@ toc: path: /docs/getting-started-guides/kubeadm/ - title: Hello World on Google Container Engine path: /docs/hellonode/ + - title: Downloading kubectl + path: /docs/getting-started-guides/kubectl/ - title: Downloading or Building Kubernetes path: /docs/getting-started-guides/binary_release/ - title: Online Training Course diff --git a/docs/getting-started-guides/kubectl.md b/docs/getting-started-guides/kubectl.md new file mode 100644 index 0000000000..6c5043e744 --- /dev/null +++ b/docs/getting-started-guides/kubectl.md @@ -0,0 +1,63 @@ +--- +--- + + + +## Overview + +kubectl is the command line tool you will use when interacting with kubernetes. + +You should use a version of kubectl that is newer than your server. `kubectl version` will print +the server and client versions. + +## Download a release + +Download kubectl from the [official Kubernetes releases](https://console.cloud.google.com/storage/browser/kubernetes-release/release/): + +On MacOS: + +``` +wget https://storage.googleapis.com/kubernetes-release/release/v1.4.3/bin/darwin/amd64/kubectl +chmod +x kubectl +mv kubectl /usr/local/bin/kubectl +``` + +On Linux: + +``` +wget https://storage.googleapis.com/kubernetes-release/release/v1.4.3/bin/linux/amd64/kubectl +chmod +x kubectl +mv kubectl /usr/local/bin/kubectl +``` + + +You may need to `sudo` the `mv`; you can put it anywhere in your `PATH` - some people prefer to install to `~/bin`. + + +## Alternatives + +### Download as part of the Google Cloud SDK + +kubectl can be installed as part of the Google Cloud SDK: + +First install the [Google Cloud SDK](https://cloud.google.com/sdk/). + +After Google Cloud SDK installs, run the following command to install `kubectl`: + +```shell +gcloud components install kubectl +``` + +Do check that the version is sufficiently up-to-date using `kubectl version --client`. + +### Install with brew + +If you are on MacOS and using brew, you can install with: + +```shell +brew install kubectl +``` + +Do check that the version is sufficiently up-to-date using `kubectl version --client`. From 4f0d6c160907044e6ce4c4940b3d69ee0e952c77 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Thu, 20 Oct 2016 09:48:17 +0100 Subject: [PATCH 07/62] Adjust wording per review comments --- docs/admin/network-plugins.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/admin/network-plugins.md b/docs/admin/network-plugins.md index 0d7f8981e2..b20e788b1a 100644 --- a/docs/admin/network-plugins.md +++ b/docs/admin/network-plugins.md @@ -40,11 +40,11 @@ The CNI plugin is selected by passing Kubelet the `--network-plugin=cni` command ### kubenet -Kubenet is intended to be a very basic, simple network plugin, on Linux only. It does not, of itself, implement more advanced features like cross-node networking or network policy. It is typically used together with a cloud provider that sets up routing rules for communication between nodes, or in single-node environments. +Kubenet is a very basic, simple network plugin, on Linux only. It does not, of itself, implement more advanced features like cross-node networking or network policy. It is typically used together with a cloud provider that sets up routing rules for communication between nodes, or in single-node environments. Kubenet creates a Linux bridge named `cbr0` and creates a veth pair for each pod with the host end of each pair connected to `cbr0`. The pod end of the pair is assigned an IP address allocated from a range assigned to the node either through configuration or by the controller-manager. `cbr0` is assigned an MTU matching the smallest MTU of an enabled normal interface on the host. -The kubenet plugin is currently mutually exclusive with, and will eventually replace, the --configure-cbr0 option. It is also currently incompatible with the flannel experimental overlay. +The kubenet plugin is mutually exclusive with the --configure-cbr0 option. The plugin requires a few things: From 98a4b521fd8fbf82426354705087ae0a78031cf7 Mon Sep 17 00:00:00 2001 From: Seth Jennings Date: Thu, 20 Oct 2016 10:46:51 -0500 Subject: [PATCH 08/62] AUTOSCALER not AUTOSCALING --- docs/admin/cluster-management.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/admin/cluster-management.md b/docs/admin/cluster-management.md index 7781368bc8..97362c4bab 100644 --- a/docs/admin/cluster-management.md +++ b/docs/admin/cluster-management.md @@ -95,13 +95,13 @@ If you are using GCE then you can either enable it while creating a cluster with To configure cluser autoscaler you have to set 3 environment variables: * `KUBE_ENABLE_CLUSTER_AUTOSCALER` - it enables cluster autoscaler if set to true. -* `KUBE_AUTOSCALING_MIN_NODES` - minimum number of nodes in the cluster. -* `KUBE_AUTOSCALING_MAX_NODES` - maximum number of nodes in the cluster. +* `KUBE_AUTOSCALER_MIN_NODES` - minimum number of nodes in the cluster. +* `KUBE_AUTOSCALER_MAX_NODES` - maximum number of nodes in the cluster. Example: ```shell -KUBE_ENABLE_CLUSTER_AUTOSCALER=true KUBE_AUTOSCALING_MIN_NODES=3 KUBE_AUTOSCALING_MAX_NODES=10 NUM_NODES=5 ./cluster/kube-up.sh +KUBE_ENABLE_CLUSTER_AUTOSCALER=true KUBE_AUTOSCALER_MIN_NODES=3 KUBE_AUTOSCALER_MAX_NODES=10 NUM_NODES=5 ./cluster/kube-up.sh ``` On GKE you configure cluster autoscaler either on cluster creation or update or when creating a particular node pool From 0d3a83f0d51c49be7f05c6afb2df94e9acc17780 Mon Sep 17 00:00:00 2001 From: roopakparikh Date: Fri, 21 Oct 2016 14:01:00 -0700 Subject: [PATCH 09/62] Added Platform9.com solutions at couple of Places Adding Platform9.com Kubernetes solution in the Hosted section as well as Table of solutions. --- docs/getting-started-guides/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/getting-started-guides/index.md b/docs/getting-started-guides/index.md index a728980e50..b2da179cf9 100644 --- a/docs/getting-started-guides/index.md +++ b/docs/getting-started-guides/index.md @@ -43,6 +43,8 @@ clusters. [KCluster.io](https://kcluster.io) provides highly available and scalable managed Kubernetes clusters for AWS. +[Platform9.com](https://platform9.com/products/kubernetes/) offers managed Kubernetes on-premises or any public cloud, and provides 24/7 health monitoring and alerting. + ### Turn-key Cloud Solutions These solutions allow you to create Kubernetes clusters on a range of Cloud IaaS providers with only a @@ -123,6 +125,7 @@ GKE | | | GCE | [docs](https://clou Stackpoint.io | | multi-support | multi-support | [docs](http://www.stackpointcloud.com) | | Commercial AppsCode.com | Saltstack | Debian | multi-support | [docs](https://appscode.com/products/cloud-deployment/) | | Commercial KCluster.io | | multi-support | multi-support | [docs](https://kcluster.io) | | Commercial +Platform9.com | | multi-support | multi-support | [docs](https://platform9.com/products/kubernetes/) | | Commercial GCE | Saltstack | Debian | GCE | [docs](/docs/getting-started-guides/gce) | ['œ“][1] | Project Azure | CoreOS | CoreOS | Weave | [docs](/docs/getting-started-guides/coreos/azure/) | | Community ([@errordeveloper](https://github.com/errordeveloper), [@squillace](https://github.com/squillace), [@chanezon](https://github.com/chanezon), [@crossorigin](https://github.com/crossorigin)) Azure | Ignition | Ubuntu | Azure | [docs](/docs/getting-started-guides/azure) | | Community (Microsoft: [@brendandburns](https://github.com/brendandburns), [@colemickens](https://github.com/colemickens)) From 0ebd20ccfbb56b1e3730ad5d559de5e7377d12a8 Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Fri, 21 Oct 2016 21:05:23 -0400 Subject: [PATCH 10/62] Fixes per code review --- _data/guides.yml | 2 +- docs/getting-started-guides/kubectl.md | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/_data/guides.yml b/_data/guides.yml index e77e8e1b01..a661cbfb9a 100644 --- a/_data/guides.yml +++ b/_data/guides.yml @@ -12,7 +12,7 @@ toc: path: /docs/getting-started-guides/kubeadm/ - title: Hello World on Google Container Engine path: /docs/hellonode/ - - title: Downloading kubectl + - title: Installing kubectl path: /docs/getting-started-guides/kubectl/ - title: Downloading or Building Kubernetes path: /docs/getting-started-guides/binary_release/ diff --git a/docs/getting-started-guides/kubectl.md b/docs/getting-started-guides/kubectl.md index 6c5043e744..0498ceb646 100644 --- a/docs/getting-started-guides/kubectl.md +++ b/docs/getting-started-guides/kubectl.md @@ -7,10 +7,12 @@ li>.highlighter-rouge {position:relative; top:3px;} ## Overview -kubectl is the command line tool you will use when interacting with kubernetes. +kubectl is the command line tool you use to interact with Kubernetes clusters. -You should use a version of kubectl that is newer than your server. `kubectl version` will print -the server and client versions. +You should use a version of kubectl that is at least as new as your server. +`kubectl version` will print the server and client versions. Using the same version of kubectl +as your server naturally works; using a newer kubectl than your server also works; but if you use +an older kubectl with a newer server you may see odd validation errors . ## Download a release @@ -18,16 +20,16 @@ Download kubectl from the [official Kubernetes releases](https://console.cloud.g On MacOS: -``` -wget https://storage.googleapis.com/kubernetes-release/release/v1.4.3/bin/darwin/amd64/kubectl +```shell +wget https://storage.googleapis.com/kubernetes-release/release/v1.4.4/bin/darwin/amd64/kubectl chmod +x kubectl mv kubectl /usr/local/bin/kubectl ``` On Linux: -``` -wget https://storage.googleapis.com/kubernetes-release/release/v1.4.3/bin/linux/amd64/kubectl +```shell +wget https://storage.googleapis.com/kubernetes-release/release/v1.4.4/bin/linux/amd64/kubectl chmod +x kubectl mv kubectl /usr/local/bin/kubectl ``` @@ -50,7 +52,7 @@ After Google Cloud SDK installs, run the following command to install `kubectl`: gcloud components install kubectl ``` -Do check that the version is sufficiently up-to-date using `kubectl version --client`. +Do check that the version is sufficiently up-to-date using `kubectl version`. ### Install with brew @@ -60,4 +62,5 @@ If you are on MacOS and using brew, you can install with: brew install kubectl ``` -Do check that the version is sufficiently up-to-date using `kubectl version --client`. +The homebrew project is independent from kubernetes, so do check that the version is +sufficiently up-to-date using `kubectl version`. \ No newline at end of file From 689c4b02b48783991c2e8cdf2e6c2a7446b8546d Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Fri, 21 Oct 2016 21:05:38 -0400 Subject: [PATCH 11/62] Add kubectl shell autocompletion section --- docs/getting-started-guides/kubectl.md | 43 +++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/docs/getting-started-guides/kubectl.md b/docs/getting-started-guides/kubectl.md index 0498ceb646..b346b75c7d 100644 --- a/docs/getting-started-guides/kubectl.md +++ b/docs/getting-started-guides/kubectl.md @@ -63,4 +63,45 @@ brew install kubectl ``` The homebrew project is independent from kubernetes, so do check that the version is -sufficiently up-to-date using `kubectl version`. \ No newline at end of file +sufficiently up-to-date using `kubectl version`. + + +# Enabling shell autocompletion + +kubectl includes autocompletion support, which can save a lot of typing! + +The completion script itself is generated by kubectl, so you typically just need to invoke it from your profile. + +Common examples are provided here, but for more details please consult `kubectl completion -h` + +## On Linux, using bash + +To add it to your current shell: `source <(kubectl completion bash)` + +To add kubectl autocompletion to your profile (so it is automatically loaded in future shells): + +```shell +echo "source <(kubectl completion bash)" >> ~/.bashrc +``` + +## On MacOS, using bash + +On MacOS, you will need to install the bash-completion support first: + +```shell +brew install bash-completion +``` + +To add it to your current shell: + +```shell +source $(brew --prefix)/etc/bash_completion +source <(kubectl completion bash) +``` + +To add kubectl autocompletion to your profile (so it is automatically loaded in future shells): + +```shell +echo "source $(brew --prefix)/etc/bash_completion" >> ~/.bashrc +echo "source <(kubectl completion bash)" >> ~/.bashrc +``` From 500aec5eedf60f574d4022b65f162f6f6dd0344c Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Fri, 21 Oct 2016 21:39:25 -0400 Subject: [PATCH 12/62] A few updates based on MacOS testing --- docs/getting-started-guides/kubectl.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/getting-started-guides/kubectl.md b/docs/getting-started-guides/kubectl.md index b346b75c7d..bd2512707b 100644 --- a/docs/getting-started-guides/kubectl.md +++ b/docs/getting-started-guides/kubectl.md @@ -102,6 +102,9 @@ source <(kubectl completion bash) To add kubectl autocompletion to your profile (so it is automatically loaded in future shells): ```shell -echo "source $(brew --prefix)/etc/bash_completion" >> ~/.bashrc -echo "source <(kubectl completion bash)" >> ~/.bashrc +echo "source $(brew --prefix)/etc/bash_completion" >> ~/.bash_profile +echo "source <(kubectl completion bash)" >> ~/.bash_profile ``` + +Please note that this only appears to work currently if you install using `brew install kubectl`, +and not if you downloaded kubectl directly. \ No newline at end of file From 115d3cde97ee794bbb7fc073160b17b75df88b31 Mon Sep 17 00:00:00 2001 From: xiangpengzhao Date: Fri, 28 Oct 2016 00:43:49 -0400 Subject: [PATCH 13/62] Fix path in reference.yml --- _data/reference.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_data/reference.yml b/_data/reference.yml index 5d4fe17f7b..62fdb0ca92 100644 --- a/_data/reference.yml +++ b/_data/reference.yml @@ -219,7 +219,7 @@ toc: - title: Replication Controller path: /docs/user-guide/replication-controller/ - title: Resource Quotas - path: /docs/admin/resource-quota/ + path: /docs/admin/resourcequota/ - title: Scheduled Jobs path: /docs/user-guide/scheduled-jobs/ - title: Secrets @@ -269,6 +269,6 @@ toc: - title: Federation Components section: - title: federation-apiserver - path: /docs/admin/federation-apiserver.md + path: /docs/admin/federation-apiserver - title : federation-controller-mananger - path: /docs/admin/federation-controller-manager.md + path: /docs/admin/federation-controller-manager From e34352c152198620da8d135ef5b8aaf19e7dd7ce Mon Sep 17 00:00:00 2001 From: Julien Vey Date: Fri, 28 Oct 2016 10:39:51 +0200 Subject: [PATCH 14/62] Remove line numbers in ingress resource snippet * To be consistent with the rest of the guide. * To simplify copy/paste of the example. --- docs/user-guide/ingress.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/user-guide/ingress.md b/docs/user-guide/ingress.md index 6ce1eb915d..a8324bea24 100644 --- a/docs/user-guide/ingress.md +++ b/docs/user-guide/ingress.md @@ -53,18 +53,18 @@ Make sure you review the [beta limitations](https://github.com/kubernetes/contri A minimal Ingress might look like: ```yaml -01. apiVersion: extensions/v1beta1 -02. kind: Ingress -03. metadata: -04. name: test-ingress -05. spec: -06. rules: -07. - http: -08. paths: -09. - path: /testpath -10. backend: -11. serviceName: test -12. servicePort: 80 +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: test-ingress +spec: + rules: + - http: + paths: + - path: /testpath + backend: + serviceName: test + servicePort: 80 ``` *POSTing this to the API server will have no effect if you have not configured an [Ingress controller](#ingress-controllers).* From b72518e69c048db1e1f1b76a1001ca33a2eb49eb Mon Sep 17 00:00:00 2001 From: Zihong Zheng Date: Fri, 28 Oct 2016 09:39:32 -0700 Subject: [PATCH 15/62] Add troubleshooting section to kube-dns readme --- docs/admin/dns.md | 143 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 140 insertions(+), 3 deletions(-) diff --git a/docs/admin/dns.md b/docs/admin/dns.md index cc132201aa..b87d3196bc 100644 --- a/docs/admin/dns.md +++ b/docs/admin/dns.md @@ -124,7 +124,7 @@ With v1.3, the following annotations are deprecated: `pod.beta.kubernetes.io/hos ## How do I test if it is working? -### Create a simple Pod to use as a test environment. +### Create a simple Pod to use as a test environment Create a file named busybox.yaml with the following contents: @@ -152,7 +152,7 @@ Then create a pod using this file: kubectl create -f busybox.yaml ``` -### Wait for this pod to go into the running state. +### Wait for this pod to go into the running state You can get its status with: ``` @@ -165,7 +165,7 @@ NAME READY STATUS RESTARTS AGE busybox 1/1 Running 0 ``` -### Validate DNS works +### Validate that DNS is working Once that pod is running, you can exec nslookup in that environment: @@ -185,6 +185,115 @@ Address 1: 10.0.0.1 If you see that, DNS is working correctly. +### Troubleshooting Tips + +If the nslookup command fails, check the following: + +#### Check the local DNS configuration first +Take a look inside the resolv.conf file. (See "Inheriting DNS from the node" and "Known issues" below for more information) + +``` +cat /etc/resolv.conf +``` + +Verify that the search path and name server are set up like the following (note that seach path may vary for different cloud providers): + +``` +search default.svc.cluster.local svc.cluster.local cluster.local google.internal c.gce_project_id.internal +nameserver 10.0.0.10 +options ndots:5 +``` + +#### Quick diagnosis + +Errors such as the following indicate a problem with the kube-dns add-on or associated Services: + +``` +$ kubectl exec busybox -- nslookup kubernetes.default +Server: 10.0.0.10 +Address 1: 10.0.0.10 + +nslookup: can't resolve 'kubernetes.default' +``` + +or + +``` +$ kubectl exec busybox -- nslookup kubernetes.default +Server: 10.0.0.10 +Address 1: 10.0.0.10 kube-dns.kube-system.svc.cluster.local + +nslookup: can't resolve 'kubernetes.default' +``` + +#### Check if the DNS pod is running + +Use the kubectl get pods command to verify that the DNS pod is running. + +``` +kubectl get pods --namespace=kube-system -l k8s-app=kube-dns +``` + +You should see something like: + +``` +NAME READY STATUS RESTARTS AGE +... +kube-dns-v19-ezo1y 3/3 Running 0 1h +... +``` + +If you see that no pod is running or that the pod has failed/completed, the dns add-on may not be deployed by default in your current environment and you will have to deploy it manually. + +#### Check for Errors in the DNS pod + +Use `kubectl logs` command to see logs for the DNS daemons. + +``` +kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c kubedns +kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c dnsmasq +kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c healthz +``` + +See if there is any suspicious log. W, E, F letter at the beginning represent Warning, Error and Failure. Please search for entries that have these as the logging level and use [kubernetes issues](https://github.com/kubernetes/kubernetes/issues) to report unexpected errors. + +#### Is dns service up? + +Verify that the DNS service is up by using the `kubectl get service` command. + +``` +kubectl get svc --namespace=kube-system +``` + +You should see: + +``` +NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE +... +kube-dns 10.0.0.10 53/UDP,53/TCP 1h +... +``` + +If you have created the service or in the case it should be created by default but it does not appear, see this [debugging services page](http://kubernetes.io/docs/user-guide/debugging-services/) for more information. + +#### Are dns endpoints exposed? + +You can verify that dns endpoints are exposed by using the `kubectl get endpoints` command. + +``` +kubectl get ep kube-dns --namespace=kube-system +``` + +You should see something like: +``` +NAME ENDPOINTS AGE +kube-dns 10.180.3.17:53,10.180.3.17:53 1h +``` + +If you do not see the endpoints, see endpoints section in the [debugging services documentation](http://kubernetes.io/docs/user-guide/debugging-services/). + +For additional Kubernetes DNS examples, see the [cluster-dns examples](https://github.com/kubernetes/kubernetes/tree/master/examples/cluster-dns) in the Kubernetes GitHub repository. + ## Kubernetes Federation (Multiple Zone support) Release 1.3 introduced Cluster Federation support for multi-site @@ -213,6 +322,34 @@ the flag `--cluster-domain=` The Kubernetes cluster DNS server (based off the [SkyDNS](https://github.com/skynetservices/skydns) library) supports forward lookups (A records), service lookups (SRV records) and reverse IP address lookups (PTR records). +## Inheriting DNS from the node +When running a pod, kubelet will prepend the cluster DNS server and search +paths to the node's own DNS settings. If the node is able to resolve DNS names +specific to the larger environment, pods should be able to, also. See "Known +issues" below for a caveat. + +If you don't want this, or if you want a different DNS config for pods, you can +use the kubelet's `--resolv-conf` flag. Setting it to "" means that pods will +not inherit DNS. Setting it to a valid file path means that kubelet will use +this file instead of `/etc/resolv.conf` for DNS inheritance. + +## Known issues +Kubernetes installs do not configure the nodes' resolv.conf files to use the +cluster DNS by default, because that process is inherently distro-specific. +This should probably be implemented eventually. + +Linux's libc is impossibly stuck ([see this bug from +2005](https://bugzilla.redhat.com/show_bug.cgi?id=168253)) with limits of just +3 DNS `nameserver` records and 6 DNS `search` records. Kubernetes needs to +consume 1 `nameserver` record and 3 `search` records. This means that if a +local installation already uses 3 `nameserver`s or uses more than 3 `search`es, +some of those settings will be lost. As a partial workaround, the node can run +`dnsmasq` which will provide more `nameserver` entries, but not more `search` +entries. You can also use kubelet's `--resolv-conf` flag. + +If you are using Alpine version 3.3 or earlier as your base image, dns may not +work properly owing to a known issue with Alpine. Check [here](https://github.com/kubernetes/kubernetes/issues/30215) +for more information. ## References From f83b95234a70fc8bfec6697c0267b1120203e2be Mon Sep 17 00:00:00 2001 From: Dominic001 Date: Fri, 28 Oct 2016 22:49:17 +0200 Subject: [PATCH 16/62] more explicit etcdctl description assuming that kubernetes is almost always used with docker. In case other container solutions as lxc are integrated this section will need further revision. Just using the bare etcl command is a bit too less, at least there should be a hint that you log in into the container. --- docs/admin/high-availability/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/admin/high-availability/index.md b/docs/admin/high-availability/index.md index efe6ddac4b..62da7f7eb9 100644 --- a/docs/admin/high-availability/index.md +++ b/docs/admin/high-availability/index.md @@ -100,16 +100,16 @@ for `${NODE_IP}` on each machine. #### Validating your cluster -Once you copy this into all three nodes, you should have a clustered etcd set up. You can validate with +Once you copy this into all three nodes, you should have a clustered etcd set up. In case you run your pods on docker container you can validate with ```shell -etcdctl member list +docker exec -i -t < container_id > etcdctl member list ``` and ```shell -etcdctl cluster-health +docker exec -i -t < container_id > etcdctl cluster-health ``` You can also validate that this is working with `etcdctl set foo bar` on one node, and `etcdctl get foo` From f6f0da2f9af5b93e0e31bb286cc9705945df3062 Mon Sep 17 00:00:00 2001 From: Dominic001 Date: Sat, 29 Oct 2016 01:48:34 +0200 Subject: [PATCH 17/62] more generic patch use kubectl exec command so we dont have to worry about container type --- docs/admin/high-availability/index.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/admin/high-availability/index.md b/docs/admin/high-availability/index.md index 62da7f7eb9..ad78270e4a 100644 --- a/docs/admin/high-availability/index.md +++ b/docs/admin/high-availability/index.md @@ -100,16 +100,15 @@ for `${NODE_IP}` on each machine. #### Validating your cluster -Once you copy this into all three nodes, you should have a clustered etcd set up. In case you run your pods on docker container you can validate with - +Once you copy this into all three nodes, you should have a clustered etcd set up. You can validate on master with ```shell -docker exec -i -t < container_id > etcdctl member list +kubectl exec < pod_name > etcdctl member list ``` and ```shell -docker exec -i -t < container_id > etcdctl cluster-health +kubectl exec < pod_name > etcdctl cluster-health ``` You can also validate that this is working with `etcdctl set foo bar` on one node, and `etcdctl get foo` From 68f8244507d3d2de51ac10a8e208df72e6d0330a Mon Sep 17 00:00:00 2001 From: Cao Shufeng Date: Tue, 1 Nov 2016 05:50:43 -0400 Subject: [PATCH 18/62] Add details about loopback cni plugin This change provide a href to users, so that users knowns where to download this loopback cin plugin. And a more accurate link about cni configuration file is provided. --- docs/admin/network-plugins.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/admin/network-plugins.md b/docs/admin/network-plugins.md index 8cfeb658c9..b89ddc88f7 100644 --- a/docs/admin/network-plugins.md +++ b/docs/admin/network-plugins.md @@ -36,11 +36,11 @@ Place plugins in `network-plugin-dir/plugin-name/plugin-name`, i.e if you have a ### CNI -The CNI plugin is selected by passing Kubelet the `--network-plugin=cni` command-line option. Kubelet reads a file from `--cni-conf-dir` (default `/etc/cni/net.d`) and uses the CNI configuration from that file to set up each pod's network. The CNI configuration file must match the [CNI specification](https://github.com/containernetworking/cni/blob/master/SPEC.md), and any required CNI plugins referenced by the configuration must be present in `--cni-bin-dir` (default `/opt/cni/bin`). +The CNI plugin is selected by passing Kubelet the `--network-plugin=cni` command-line option. Kubelet reads a file from `--cni-conf-dir` (default `/etc/cni/net.d`) and uses the CNI configuration from that file to set up each pod's network. The CNI configuration file must match the [CNI specification](https://github.com/containernetworking/cni/blob/master/SPEC.md#network-configuration), and any required CNI plugins referenced by the configuration must be present in `--cni-bin-dir` (default `/opt/cni/bin`). If there are multiple CNI configuration files in the directory, the first one in lexicographic order of file name is used. -In addition to the CNI plugin specified by the configuration file, Kubernetes requires the standard CNI `lo` plugin, at minimum version 0.2.0 +In addition to the CNI plugin specified by the configuration file, Kubernetes requires the standard CNI [`lo`](https://github.com/containernetworking/cni/blob/master/plugins/main/loopback/loopback.go) plugin, at minimum version 0.2.0 ### kubenet @@ -72,4 +72,4 @@ This option is provided to the network-plugin; currently **only kubenet supports * `--network-plugin=exec` specifies that we use the `exec` plugin, with executables located in `--network-plugin-dir`. * `--network-plugin=cni` specifies that we use the `cni` network plugin with actual CNI plugin binaries located in `--cni-bin-dir` (default `/opt/cni/bin`) and CNI plugin configuration located in `--cni-conf-dir` (default `/etc/cni/net.d`). * `--network-plugin=kubenet` specifies that we use the `kubenet` network plugin with CNI `bridge` and `host-local` plugins placed in `/opt/cni/bin` or `network-plugin-dir`. -* `--network-plugin-mtu=9001` specifies the MTU to use, currently only used by the `kubenet` network plugin. \ No newline at end of file +* `--network-plugin-mtu=9001` specifies the MTU to use, currently only used by the `kubenet` network plugin. From c01dcf1a946ba78eb233c1e59f102cfc093f0df7 Mon Sep 17 00:00:00 2001 From: deads2k Date: Tue, 1 Nov 2016 08:42:59 -0400 Subject: [PATCH 19/62] document authenticating proxy: --- docs/admin/authentication.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/admin/authentication.md b/docs/admin/authentication.md index 6819677107..6e13c28929 100644 --- a/docs/admin/authentication.md +++ b/docs/admin/authentication.md @@ -33,7 +33,7 @@ or be treated as an anonymous user. ## Authentication strategies -Kubernetes uses client certificates, bearer tokens, or HTTP basic auth to +Kubernetes uses client certificates, bearer tokens, an authenticating proxy, or HTTP basic auth to authenticate API requests through authentication plugins. As HTTP request are made to the API server plugins attempts to associate the following attributes with the request: @@ -360,6 +360,20 @@ An unsuccessful request would return: HTTP status codes can be used to supply additional error context. + +### Authenticating Proxy + +The API server can be configured to identify users from request header values, such as `X-Remote-User`. +It is designed for use in combination with an authenticating proxy, which sets the request header value. +In order to prevent header spoofing, the authenticating proxy is required to present a valid client +certificate to the API server for validation against the specified CA before the request headers are +checked. + +* `--requestheader-username-headers` Required, case-insensitive. Header names to check, in order, for the user identity. The first header containing a value is used as the identity. +* `--requestheader-client-ca-file` Required. PEM-encoded certificate bundle. A valid client certificate must be presented and validated against the certificate authorities in the specified file before the request headers are checked for user names. +* `--requestheader-allowed-names` Optional. List of common names (cn). If set, a valid client certificate with a Common Name (cn) in the specified list must be presented before the request headers are checked for user names. If empty, any Common Name is allowed. + + ### Keystone Password Keystone authentication is enabled by passing the `--experimental-keystone-url=` From 07c0d9298491cbb7de9a15f838180fac5b1fb3e5 Mon Sep 17 00:00:00 2001 From: Matt Baldwin Date: Tue, 1 Nov 2016 15:55:23 -0700 Subject: [PATCH 20/62] Added StackPointCloud as a Technology and Services Partner Change-Id: I04c32a60e447f918aba2d9a27741938a4dcfb434 --- _includes/partner-script.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/_includes/partner-script.js b/_includes/partner-script.js index 00dc9f1ee1..3f45a47b4b 100644 --- a/_includes/partner-script.js +++ b/_includes/partner-script.js @@ -14,6 +14,13 @@ 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: 'stackpointio', + link: 'https://stackpoint.io', + blurb: 'StackPointCloud builds Stackpoint.io, the universal control plane for Kubernetes Anywhere -- compose and build your own infrastructure as easily as a DigitalOcean droplet at any public cloud provider.' + }, { type: 0, name: 'Sysdig Cloud', @@ -168,6 +175,13 @@ 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', From 0a8408081c8a2805355227994efd16427d1761d4 Mon Sep 17 00:00:00 2001 From: Magnus Kulke Date: Thu, 3 Nov 2016 20:28:51 +0100 Subject: [PATCH 21/62] Updated the NodeHostname entry. --- docs/admin/node.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/admin/node.md b/docs/admin/node.md index e7dbbba987..08b5d92f6e 100644 --- a/docs/admin/node.md +++ b/docs/admin/node.md @@ -27,7 +27,7 @@ pieces of information: The usage of these fields varies depending on your cloud provider or bare metal configuration. -* HostName: Generally not used +* HostName: The hostname as reported by the node's kernel. Can be overriden via the kubelet `--hostname-override` parameter. * ExternalIP: Generally the IP address of the node that is externally routable (available from outside the cluster) From 47b59475cc70d25edb8b2f68d021f18e074f32f5 Mon Sep 17 00:00:00 2001 From: Fan Lin Date: Fri, 4 Nov 2016 09:03:48 +0800 Subject: [PATCH 22/62] Add limitation note of using host-port --- docs/admin/network-plugins.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/admin/network-plugins.md b/docs/admin/network-plugins.md index 8cfeb658c9..976e85bd1e 100644 --- a/docs/admin/network-plugins.md +++ b/docs/admin/network-plugins.md @@ -42,6 +42,8 @@ If there are multiple CNI configuration files in the directory, the first one in In addition to the CNI plugin specified by the configuration file, Kubernetes requires the standard CNI `lo` plugin, at minimum version 0.2.0 +Limitation: Due to [#31307](https://github.com/kubernetes/kubernetes/issues/31307), `HostPort` won't work with CNI networking plugin at the moment. That means all `hostPort` attribute in pod would be simply ignored. + ### kubenet The Linux-only kubenet plugin provides functionality similar to the `--configure-cbr0` kubelet command-line option. It creates a Linux bridge named `cbr0` and creates a veth pair for each pod with the host end of each pair connected to `cbr0`. The pod end of the pair is assigned an IP address allocated from a range assigned to the node either through configuration or by the controller-manager. `cbr0` is assigned an MTU matching the smallest MTU of an enabled normal interface on the host. The kubenet plugin is currently mutually exclusive with, and will eventually replace, the --configure-cbr0 option. It is also currently incompatible with the flannel experimental overlay. @@ -72,4 +74,4 @@ This option is provided to the network-plugin; currently **only kubenet supports * `--network-plugin=exec` specifies that we use the `exec` plugin, with executables located in `--network-plugin-dir`. * `--network-plugin=cni` specifies that we use the `cni` network plugin with actual CNI plugin binaries located in `--cni-bin-dir` (default `/opt/cni/bin`) and CNI plugin configuration located in `--cni-conf-dir` (default `/etc/cni/net.d`). * `--network-plugin=kubenet` specifies that we use the `kubenet` network plugin with CNI `bridge` and `host-local` plugins placed in `/opt/cni/bin` or `network-plugin-dir`. -* `--network-plugin-mtu=9001` specifies the MTU to use, currently only used by the `kubenet` network plugin. \ No newline at end of file +* `--network-plugin-mtu=9001` specifies the MTU to use, currently only used by the `kubenet` network plugin. From 38385006efd9954885e2c853ae6d04ed0cfddafa Mon Sep 17 00:00:00 2001 From: Magnus Kulke Date: Fri, 4 Nov 2016 13:56:13 +0100 Subject: [PATCH 23/62] Fixed spelling --- docs/admin/node.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/admin/node.md b/docs/admin/node.md index 08b5d92f6e..78ef3c4b2e 100644 --- a/docs/admin/node.md +++ b/docs/admin/node.md @@ -27,7 +27,7 @@ pieces of information: The usage of these fields varies depending on your cloud provider or bare metal configuration. -* HostName: The hostname as reported by the node's kernel. Can be overriden via the kubelet `--hostname-override` parameter. +* HostName: The hostname as reported by the node's kernel. Can be overridden via the kubelet `--hostname-override` parameter. * ExternalIP: Generally the IP address of the node that is externally routable (available from outside the cluster) From a516182f80e9d9df9df9d4a17b428f683b258791 Mon Sep 17 00:00:00 2001 From: Daniel Sachse Date: Fri, 4 Nov 2016 14:44:58 +0100 Subject: [PATCH 24/62] Updated documentation to use beta version of init-containers --- docs/user-guide/nginx-init-containers.yaml | 2 +- docs/user-guide/petset/bootstrapping/petset_peers.yaml | 2 +- docs/user-guide/petset/bootstrapping/petset_vm.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/user-guide/nginx-init-containers.yaml b/docs/user-guide/nginx-init-containers.yaml index 34c20fa66a..24124c7459 100644 --- a/docs/user-guide/nginx-init-containers.yaml +++ b/docs/user-guide/nginx-init-containers.yaml @@ -3,7 +3,7 @@ kind: Pod metadata: name: nginx annotations: - pod.alpha.kubernetes.io/init-containers: '[ + pod.beta.kubernetes.io/init-containers: '[ { "name": "install", "image": "busybox", diff --git a/docs/user-guide/petset/bootstrapping/petset_peers.yaml b/docs/user-guide/petset/bootstrapping/petset_peers.yaml index f8393b5c2c..4f992ead71 100644 --- a/docs/user-guide/petset/bootstrapping/petset_peers.yaml +++ b/docs/user-guide/petset/bootstrapping/petset_peers.yaml @@ -29,7 +29,7 @@ spec: app: nginx annotations: pod.alpha.kubernetes.io/initialized: "true" - pod.alpha.kubernetes.io/init-containers: '[ + pod.beta.kubernetes.io/init-containers: '[ { "name": "peerfinder", "image": "gcr.io/google_containers/peer-finder:0.1", diff --git a/docs/user-guide/petset/bootstrapping/petset_vm.yaml b/docs/user-guide/petset/bootstrapping/petset_vm.yaml index c506a1bac6..a3da5211a3 100644 --- a/docs/user-guide/petset/bootstrapping/petset_vm.yaml +++ b/docs/user-guide/petset/bootstrapping/petset_vm.yaml @@ -27,7 +27,7 @@ spec: app: ub annotations: pod.alpha.kubernetes.io/initialized: "true" - pod.alpha.kubernetes.io/init-containers: '[ + pod.beta.kubernetes.io/init-containers: '[ { "name": "rootfs", "image": "ubuntu:15.10", From bbceda0ba2459fe6f5e02e54642b9d0e94781327 Mon Sep 17 00:00:00 2001 From: blankenhaus Date: Sat, 5 Nov 2016 12:29:50 -0700 Subject: [PATCH 25/62] Layer 3 <=> layer 4 TCP/UDP are layer 4. --- docs/user-guide/services/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/services/index.md b/docs/user-guide/services/index.md index 94faabcd1c..fc7e339dbc 100644 --- a/docs/user-guide/services/index.md +++ b/docs/user-guide/services/index.md @@ -182,7 +182,7 @@ In Kubernetes v1.0 the proxy was purely in userspace. In Kubernetes v1.1 an iptables proxy was added, but was not the default operating mode. Since Kubernetes v1.2, the iptables proxy is the default. -As of Kubernetes v1.0, `Services` are a "layer 3" (TCP/UDP over IP) construct. +As of Kubernetes v1.0, `Services` are a "layer 4" (TCP/UDP over IP) construct. In Kubernetes v1.1 the `Ingress` API was added (beta) to represent "layer 7" (HTTP) services. From 3d7e0b128c67d30ea1f72f043a4ff69bcd4c6fd5 Mon Sep 17 00:00:00 2001 From: Tremaine Eto Date: Mon, 7 Nov 2016 10:16:15 -0800 Subject: [PATCH 26/62] Fixed typo Removed extra "e" in "specify" in the "Secret files permission" section. --- docs/user-guide/secrets/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/secrets/index.md b/docs/user-guide/secrets/index.md index f97c6185b8..c55868f1f1 100644 --- a/docs/user-guide/secrets/index.md +++ b/docs/user-guide/secrets/index.md @@ -265,7 +265,7 @@ All listed keys must exist in the corresponding secret. Otherwise, the volume is **Secret files permissions** You can also specify the permission mode bits files part of a secret will have. -If you don't specify any, `0644` is used by default. You can sepecify a default +If you don't specify any, `0644` is used by default. You can specify a default mode for the whole secret volume and override per key if needed. For example, you can specify a default mode like this: From 215dca8e8ba6764369e7cd30b3cbd650576cb230 Mon Sep 17 00:00:00 2001 From: TRAVIS ALLEN SALAS COX Date: Mon, 7 Nov 2016 13:27:27 -0600 Subject: [PATCH 27/62] Update dns.md This should at least fix a broken link referenced in [#1640](https://github.com/kubernetes/kubernetes.github.io/issues/1640). Looks like a lot of information was taking out of [this](https://github.com/kubernetes/kubernetes/tree/master/build-tools/kube-dns) README.md recently, if you'd like i can delete the reference section completely if it is out of date and/or no longer needed. --- docs/admin/dns.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/admin/dns.md b/docs/admin/dns.md index cc132201aa..82b3bab6c0 100644 --- a/docs/admin/dns.md +++ b/docs/admin/dns.md @@ -216,5 +216,5 @@ supports forward lookups (A records), service lookups (SRV records) and reverse ## References -- [Docs for the DNS cluster addon](http://releases.k8s.io/{{page.githubbranch}}/build/kube-dns/README.md) +- [Docs for the DNS cluster addon](http://releases.k8s.io/{{page.githubbranch}}/build-tools/kube-dns/README.md) From 3ca34c8e0478f503ec5135c53ab23c6206a75a59 Mon Sep 17 00:00:00 2001 From: Steffen Gebert Date: Tue, 8 Nov 2016 11:23:46 +0100 Subject: [PATCH 28/62] configuring-containers: Fix syntax highlight looks weird to me without that.. --- docs/user-guide/configuring-containers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/configuring-containers.md b/docs/user-guide/configuring-containers.md index 6b7b447289..99dc823375 100644 --- a/docs/user-guide/configuring-containers.md +++ b/docs/user-guide/configuring-containers.md @@ -12,7 +12,7 @@ assignees: In addition to the imperative-style commands, such as `kubectl run` and `kubectl expose`, described [elsewhere](/docs/user-guide/quick-start), Kubernetes supports declarative configuration. Oftentimes, configuration files are preferable to imperative commands, since they can be checked into version control and changes to the files can be code reviewed, which is especially important for more complex configurations, producing a more robust, reliable and archival system. -In the declarative style, all configuration is stored in YAML or JSON configuration files using Kubernetes's API resource schemas as the configuration schemas. `kubectl` can create, update, delete, and get API resources. The `apiVersion` (currently 'v1'?), resource `kind`, and resource `name` are used by `kubectl` to construct the appropriate API path to invoke for the specified operation. +In the declarative style, all configuration is stored in YAML or JSON configuration files using Kubernetes's API resource schemas as the configuration schemas. `kubectl` can create, update, delete, and get API resources. The `apiVersion` (currently `v1`?), resource `kind`, and resource `name` are used by `kubectl` to construct the appropriate API path to invoke for the specified operation. ## Launching a container using a configuration file From a3f1880405bc64d1b717b4189b5ce26fdafb2a59 Mon Sep 17 00:00:00 2001 From: Jared Date: Tue, 8 Nov 2016 14:49:02 -0800 Subject: [PATCH 29/62] creating contributing.md Adding a contributing.md file with contributing guidelines for docs on kubernetes.io (https://github.com/blog/1184-contributing-guidelines). This should not be merged until the PR for the docs style guide is merged. (https://github.com/kubernetes/kubernetes.github.io/pull/1619) --- CONTRIBUTING.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..9dd8149a15 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,36 @@ +# Contributing to Kubernetes Documentation + +**First off, thanks for taking the time to contribute!** + +The following is a set of guidelines for contributing to Kubernetes documentation, hosted at [Kubernetes.io](http://kubernetes.io/). +These are just guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. + +## Before you get started + +### Code of Conduct + +Kubernetes follows the [Cloud Native Computing Foundation (CNCF) Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to Sarah Novotny [sarahnovotny@google.com](mailto:sarahnovotny@google.com) and/or Dan Kohn [dan@linuxfoundation.org](mailto:dan@linuxfoundation.org). + +### Documentation and Site Decisions + +The [Kubernetes SIG Docs Discussion Group](https://groups.google.com/forum/#!forum/kubernetes-sig-docs) is the discussion group for doc releases, suggested site improvements, and improving the doc contribution experience. If you are planning to be a regular contributor, join this group to stay informed and involved. + +### Style Guides and 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 + +### Reporting Documentation Issues + +Kubernetes.io uses github issues to track documentation issues and requests. If you see a documentation issue, submit an issue using the following steps: + +1. Check the [kubernetes.io issues list](https://github.com/kubernetes/kubernetes.github.io/issues) as you might find out the issue is a duplicate. +2. Use the [included template for every new issue](https://github.com/kubernetes/kubernetes.github.io/issues/new). When you create a bug report, include as many details as possible and include suggested fixes to the issue. + +Note that code issues should be filed against the main kubernetes repository, while documentation issues should go in the kubernetes.io repository. + +### 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/contribute/create-pull-request/). From 337c6c054694ce3a75b3607a7a6a220dd3b0c230 Mon Sep 17 00:00:00 2001 From: Brandon DuRette Date: Fri, 11 Nov 2016 11:20:48 -0600 Subject: [PATCH 30/62] Typo fix --- docs/user-guide/thirdpartyresources.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/thirdpartyresources.md b/docs/user-guide/thirdpartyresources.md index d8f2bc5ba9..a1035d44c4 100644 --- a/docs/user-guide/thirdpartyresources.md +++ b/docs/user-guide/thirdpartyresources.md @@ -22,7 +22,7 @@ Each `ThirdPartyResource` has the following: * `description` - A free text description of the resource. * `versions` - A list of the versions of the resource. -The `kind` for a `ThirdPartyResource` takes the form `.`. You are expected to provide a unique kind and domain name in order to avoid conflicts with other `ThirdPartyResource` objects. Kind names will be converted to CamelCase when creating instances of the `ThirdPartyResource`. Hypens in the `kind` are assumed to be word breaks. For instance the kind `camel-case` would be converted to `CamelCase` but `camelcase` would be converted to `Camelcase`. +The `kind` for a `ThirdPartyResource` takes the form `.`. You are expected to provide a unique kind and domain name in order to avoid conflicts with other `ThirdPartyResource` objects. Kind names will be converted to CamelCase when creating instances of the `ThirdPartyResource`. Hyphens in the `kind` are assumed to be word breaks. For instance the kind `camel-case` would be converted to `CamelCase` but `camelcase` would be converted to `Camelcase`. Other fields on the `ThirdPartyResource` are treated as custom data fields. These fields can hold arbitrary JSON data and have any structure. From fbba8e49019ad61a809b5a3df781201cf13f631c Mon Sep 17 00:00:00 2001 From: Charlie Drage Date: Mon, 14 Nov 2016 10:54:34 -0500 Subject: [PATCH 31/62] Remove "stars" ratings from each page. This removes the stars rating that appears on the bottom of each page. Doing so also required the update the "a.issue" css that correctly aligns the "Create Issue" button and "Edit this Page" button on the bottom of the page. --- _layouts/docwithnav.html | 2 +- _sass/_base.sass | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/_layouts/docwithnav.html b/_layouts/docwithnav.html index 877ccc4e63..2153d358e2 100755 --- a/_layouts/docwithnav.html +++ b/_layouts/docwithnav.html @@ -41,7 +41,7 @@ {% if notitle != "true" %}

{{ title }}

{% endif %} {{ content }}

Analytics - {% if page.url != "/404.html" and page.url != "/docs/search/" %}

+ {% if page.url != "/404.html" and page.url != "/docs/search/" %} diff --git a/_sass/_base.sass b/_sass/_base.sass index a8ac4b47c4..0feee846ff 100644 --- a/_sass/_base.sass +++ b/_sass/_base.sass @@ -389,6 +389,14 @@ footer display: block height: 0 overflow: hidden + + &.button + background-image: none + width: auto + height: auto + + &:hover + color: $blue a.twitter background-position: 0 0 @@ -874,8 +882,19 @@ dd img max-width: 100% + a + font-weight: 700 + text-decoration: underline + + a:visited + color: blueviolet + a.button border-radius: 2px + text-decoration: none + + &:visited + color: white a.issue margin-left: 20px diff --git a/_sass/_reset.sass b/_sass/_reset.sass index 9f4a43a68e..2a8bb1b6d2 100755 --- a/_sass/_reset.sass +++ b/_sass/_reset.sass @@ -15,7 +15,7 @@ ul, li ul margin: 0 padding: 0 - + a text-decoration: none From 88e32adc986da0cf4263aa2b670ac640febe0ed3 Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Thu, 17 Nov 2016 17:07:34 -0800 Subject: [PATCH 45/62] Write new task: Determining the Reason for Pod Failure. --- _data/tasks.yml | 8 ++ .../determine-reason-pod-failure.md | 110 ++++++++++++++++++ .../termination.yaml | 10 ++ 3 files changed, 128 insertions(+) create mode 100644 docs/tasks/debug-application-cluster/determine-reason-pod-failure.md create mode 100644 docs/tasks/debug-application-cluster/termination.yaml diff --git a/_data/tasks.yml b/_data/tasks.yml index 4c6cd1b709..9898fae32f 100644 --- a/_data/tasks.yml +++ b/_data/tasks.yml @@ -15,6 +15,14 @@ toc: section: - title: Using Port Forwarding to Access Applications in a Cluster path: /docs/tasks/access-application-cluster/port-forward-access-application-cluster/ + + +- title: Debugging Applications in a Cluster + section: + - title: Determining the Reason for Pod Failure + path: /docs/tasks/debug-application-cluster/determine-reason-pod-failure/ + + - title: Accessing the Kubernetes API section: - title: Using an HTTP Proxy to Access the Kubernetes API diff --git a/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md b/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md new file mode 100644 index 0000000000..f0f611e235 --- /dev/null +++ b/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md @@ -0,0 +1,110 @@ +--- +--- + +{% capture overview %} + +This page shows how to write and read a Container +termination message. + +Termination messages provide a way for containers to write +information about fatal events to a location where it can +be easily retrieved and surfaced by tools like dashboards +and monitoring software. In most cases, information that you +put in a termination message should also be written to +the general +[Kubernetes logs](/docs/user-guide/logging/). + +{% endcapture %} + + +{% capture prerequisites %} + +{% include task-tutorial-prereqs.md %} + +{% endcapture %} + + +{% capture steps %} + +### Writing and reading a termination message + +In this exercise, you create a Pod that runs one container. +The configuration file specifies a command that runs when +the container starts. + +{% include code.html language="yaml" file="termination.yaml" ghlink="/docs/tasks/debug-pod-container/termination.yaml" %} + +1. Create a Pod based on the YAML configuration file: + + export REPO=https://raw.githubusercontent.com/kubernetes/kubernetes.github.io/master + kubectl create -f $REPO/docs/tasks/debug-pod-container/termination.yaml + + In the YAML file, in the `cmd` and `args` fields, you can see that the + container sleeps for 10 seconds and then writes "Sleep expired" to + the `/dev/termination-log` file. After the container writes + the "Sleep expired" message, it terminates. + +1. Display information about the Pod: + + kubectl get pod termination-demo + + Repeat the preceding command until the Pod is no longer running. + +1. Display detailed information about the Pod: + + kubectl get pod --output=yaml + + The output includes the "Sleep expired" message: + + apiVersion: v1 + kind: Pod + ... + lastState: + terminated: + containerID: ... + exitCode: 0 + finishedAt: ... + message: | + Sleep expired + ... + +1. Use a Go template to filter the output so that it includes +only the termination message: + +``` +{% raw %} kubectl get pod termination-demo -o go-template="{{range .status.containerStatuses}}{{.lastState.terminated.message}}{{end}}"{% endraw %} +``` + +### Setting the termination log file + +By default Kubernetes retrieves termination messages from +`/dev/termination-log`. To change this to a different file, +specify a `terminationMessagePath` field for your Container. + +For example, suppose your Container writes termination messages to +`/tmp/my-log`, and you want Kubernetes to retrieve those messages. +Set `terminationMessagePath` as shown here: + + apiVersion: v1 + kind: Pod + metadata: + name: msg-path-demo + spec: + containers: + - name: msg-path-demo-container + image: debian + terminationMessagePath: "/tmp/my-log" + +{% endcapture %} + +{% capture whatsnext %} + +* See the `terminationMessagePath` field in + [Container](/docs/api-reference/v1/definitions#_v1_container). +* Learn about [retrieving logs](/docs/user-guide/logging/). +* Learn about [Go templates](https://golang.org/pkg/text/template/). + +{% endcapture %} + + +{% include templates/task.md %} diff --git a/docs/tasks/debug-application-cluster/termination.yaml b/docs/tasks/debug-application-cluster/termination.yaml new file mode 100644 index 0000000000..3f63748f72 --- /dev/null +++ b/docs/tasks/debug-application-cluster/termination.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Pod +metadata: + name: termination-demo +spec: + containers: + - name: termination-demo-container + image: debian + command: ["/bin/sh"] + args: ["-c", "sleep 10 && echo Sleep expired > /dev/termination-log"] From 39d1962b287b0636748c695f5199ebbbf625d20b Mon Sep 17 00:00:00 2001 From: scotty Date: Fri, 18 Nov 2016 12:09:19 -0800 Subject: [PATCH 46/62] unbold a tags in #docsContent --- _sass/_base.sass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_sass/_base.sass b/_sass/_base.sass index 0feee846ff..1eabc9ac14 100644 --- a/_sass/_base.sass +++ b/_sass/_base.sass @@ -883,7 +883,7 @@ dd max-width: 100% a - font-weight: 700 + //font-weight: 700 text-decoration: underline a:visited From 81b7f61c3b5d70a976574865014ba4eff3aaaffb Mon Sep 17 00:00:00 2001 From: scotty Date: Fri, 18 Nov 2016 12:56:07 -0800 Subject: [PATCH 47/62] disable TOC if there's only a link to the current page --- _layouts/docwithnav.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/_layouts/docwithnav.html b/_layouts/docwithnav.html index c15077857a..f3d885d246 100755 --- a/_layouts/docwithnav.html +++ b/_layouts/docwithnav.html @@ -81,7 +81,7 @@ ga('create', 'UA-36037335-10', 'auto'); ga('send', 'pageview'); - // hide docs nav area if no nav is present + // 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) @@ -97,7 +97,8 @@ // container is built dynamically, so it may not be present on the first runloop if (container) { - if (container.childElementCount === 0) { + if (container.childElementCount === 0 || toc.querySelectorAll('a.item').length === 1) { + toc.style.display = 'none' document.getElementById('docsContent').style.width = '100%' } } else { From 2a4501ed6306a71b320fc008ae629159c2eaa46d Mon Sep 17 00:00:00 2001 From: Jared Date: Fri, 18 Nov 2016 15:58:19 -0800 Subject: [PATCH 48/62] Removed confusing "Kubernetes" button from docs landing page. --- docs/index.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/index.md b/docs/index.md index 0bdaa33b5c..c430dac710 100644 --- a/docs/index.md +++ b/docs/index.md @@ -5,9 +5,7 @@ assignees: --- -

The Kubernetes documentation can help you set up Kubernetes, learn about the system, or get your applications and workloads running on Kubernetes.

- -

Read the Kubernetes Overview

+

Kubernetes documentation can help you set up Kubernetes, learn about the system, or get your applications and workloads running on Kubernetes. To learn the basics of what Kubernetes is and how it works, read "What is Kubernetes".

Interactive Tutorial

@@ -40,4 +38,4 @@ assignees:

Tools

-

The tools page contains a list of native and third-party tools for Kubernetes.

\ No newline at end of file +

The tools page contains a list of native and third-party tools for Kubernetes.

From 0fa87b8caacb733041b4e5d89b10de91df735492 Mon Sep 17 00:00:00 2001 From: Johanan Lieberman Date: Sat, 19 Nov 2016 16:52:30 +0200 Subject: [PATCH 49/62] Mention kubectl as a requirement for running kops When deploying a cluster and kubectl is not installed, kops exits with an error. Need to mention kubectl as a requirement in the docs. --- docs/getting-started-guides/kops.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/getting-started-guides/kops.md b/docs/getting-started-guides/kops.md index 0cc28fb547..a02a829471 100644 --- a/docs/getting-started-guides/kops.md +++ b/docs/getting-started-guides/kops.md @@ -26,6 +26,12 @@ a building block. kops builds on the kubeadm work. ### (1/5) Install kops +#### Requirements + +You must have [kubectl](http://kubernetes.io/docs/getting-started-guides/kubectl/) installed in order for kops to work. + +#### Installation + Download kops from the [releases page](https://github.com/kubernetes/kops/releases) (it is also easy to build from source): On MacOS: From afcf0dd8935c4e2e50044ea00d110166ec1b7bbb Mon Sep 17 00:00:00 2001 From: Casey Davenport Date: Sat, 19 Nov 2016 14:49:53 -0500 Subject: [PATCH 50/62] Remove outdated Calico guides in favor of kubeadm --- _data/guides.yml | 4 - .../coreos/bare_metal_calico.md | 209 -------- docs/getting-started-guides/index.md | 2 - docs/getting-started-guides/ubuntu-calico.md | 484 ------------------ 4 files changed, 699 deletions(-) delete mode 100644 docs/getting-started-guides/coreos/bare_metal_calico.md delete mode 100644 docs/getting-started-guides/ubuntu-calico.md diff --git a/_data/guides.yml b/_data/guides.yml index 85c5dd4103..9991179936 100644 --- a/_data/guides.yml +++ b/_data/guides.yml @@ -233,12 +233,8 @@ toc: path: /docs/getting-started-guides/centos/centos_manual_config/ - title: CoreOS path: /docs/getting-started-guides/coreos - - title: CoreOS with Calico - path: /docs/getting-started-guides/coreos/bare_metal_calico/ - title: Ubuntu path: /docs/getting-started-guides/ubuntu/ - - title: Ubuntu Nodes with Calico - path: /docs/getting-started-guides/ubuntu-calico/ - title: Validate Node Setup path: /docs/admin/node-conformance - title: Portable Multi-Node Cluster diff --git a/docs/getting-started-guides/coreos/bare_metal_calico.md b/docs/getting-started-guides/coreos/bare_metal_calico.md deleted file mode 100644 index 7c3f7ccca0..0000000000 --- a/docs/getting-started-guides/coreos/bare_metal_calico.md +++ /dev/null @@ -1,209 +0,0 @@ ---- - ---- - -This document describes how to deploy Kubernetes with Calico networking on _bare metal_ CoreOS. For more information on Project Calico, visit [projectcalico.org](http://projectcalico.org) and the [calico-containers repository](https://github.com/projectcalico/calico-containers). - -To install Calico on an existing Kubernetes cluster, or for more information on deploying Calico with Kubernetes in a number of other environments take a look at our supported [deployment guides](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes). - -Specifically, this guide will have you do the following: - -- Deploy a Kubernetes master node on CoreOS using cloud-config. -- Deploy two Kubernetes compute nodes with Calico Networking using cloud-config. -- Configure `kubectl` to access your cluster. - -The resulting cluster will use SSL between Kubernetes components. It will run the SkyDNS service and kube-ui, and be fully conformant with the Kubernetes v1.1 conformance tests. - -## Prerequisites and Assumptions - -- At least three bare-metal machines (or VMs) to work with. This guide will configure them as follows: - - 1 Kubernetes Master - - 2 Kubernetes Nodes -- Your nodes should have IP connectivity to each other and the internet. -- This guide assumes a DHCP server on your network to assign server IPs. -- This guide uses `192.168.0.0/16` as the subnet from which pod IP addresses are assigned. If this overlaps with your host subnet, you will need to configure Calico to use a different [IP pool](https://github.com/projectcalico/calico-containers/blob/master/docs/calicoctl/pool.md#calicoctl-pool-commands). - -## Cloud-config - -This guide will use [cloud-config](https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/) to configure each of the nodes in our Kubernetes cluster. - -We'll use two cloud-config files: -- `master-config.yaml`: cloud-config for the Kubernetes master -- `node-config.yaml`: cloud-config for each Kubernetes node - -## Download CoreOS - -Download the stable CoreOS bootable ISO from the [CoreOS website](https://coreos.com/docs/running-coreos/platforms/iso/). - -## Configure the Kubernetes Master - -1. Once you've downloaded the ISO image, burn the ISO to a CD/DVD/USB key and boot from it (if using a virtual machine you can boot directly from the ISO). Once booted, you should be automatically logged in as the `core` user at the terminal. At this point CoreOS is running from the ISO and it hasn't been installed yet. - -2. *On another machine*, download the [master cloud-config template](https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/cloud-config/master-config-template.yaml) and save it as `master-config.yaml`. - -3. Replace the following variables in the `master-config.yaml` file. - - - ``: The public key you will use for SSH access to this server. See [generating ssh keys](https://help.github.com/articles/generating-ssh-keys/) - -4. Copy the edited `master-config.yaml` to your Kubernetes master machine (using a USB stick, for example). - -5. The CoreOS bootable ISO comes with a tool called `coreos-install` which will allow us to install CoreOS and configure the machine using a cloud-config file. The following command will download and install stable CoreOS using the `master-config.yaml` file we just created for configuration. Run this on the Kubernetes master. - - > **Warning:** this is a destructive operation that erases disk `sda` on your server. - - ```shell - sudo coreos-install -d /dev/sda -C stable -c master-config.yaml - ``` - -6. Once complete, restart the server and boot from `/dev/sda` (you may need to remove the ISO image). When it comes back up, you should have SSH access as the `core` user using the public key provided in the `master-config.yaml` file. - -### Configure TLS - -The master requires the CA certificate, `ca.pem`; its own certificate, `apiserver.pem` and its private key, `apiserver-key.pem`. This [CoreOS guide](https://coreos.com/kubernetes/docs/latest/openssl.html) explains how to generate these. - -1. Generate the necessary certificates for the master. This [guide for generating Kubernetes TLS Assets](https://coreos.com/kubernetes/docs/latest/openssl.html) explains how to use OpenSSL to generate the required assets. - -2. Send the three files to your master host (using `scp` for example). - -3. Move them to the `/etc/kubernetes/ssl` folder and ensure that only the root user can read the key: - - ```shell - # Move keys - sudo mkdir -p /etc/kubernetes/ssl/ - sudo mv -t /etc/kubernetes/ssl/ ca.pem apiserver.pem apiserver-key.pem - - # Set Permissions - sudo chmod 600 /etc/kubernetes/ssl/apiserver-key.pem - sudo chown root:root /etc/kubernetes/ssl/apiserver-key.pem - ``` - -4. Restart the kubelet to pick up the changes: - - ```shell - sudo systemctl restart kubelet - ``` - -## Configure the compute nodes - -The following steps will set up a single Kubernetes node for use as a compute host. Run these steps to deploy each Kubernetes node in your cluster. - -1. Boot up the node machine using the bootable ISO we downloaded earlier. You should be automatically logged in as the `core` user. - -2. Make a copy of the [node cloud-config template](https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/cloud-config/node-config-template.yaml) for this machine. - -3. Replace the following placeholders in the `node-config.yaml` file to match your deployment. - - - ``: Hostname for this node (e.g. kube-node1, kube-node2) - - ``: The public key you will use for SSH access to this server. - - ``: The IPv4 address of the Kubernetes master. - -4. Replace the following placeholders with the contents of their respective files. - - - ``: Complete contents of `ca.pem` - - ``: Complete contents of `ca-key.pem` - - > **Important:** in a production deployment, embedding the secret key in cloud-config is a bad idea! In production you should use an appropriate secret manager. - - > **Important:** Make sure you indent the entire file to match the indentation of the placeholder. For example: - > - > ```shell - > - path: /etc/kubernetes/ssl/ca.pem - > owner: core - > permissions: 0644 - > content: | - > - > ``` - > - > should look like this once the certificate is in place: - > - > ```shell - > - path: /etc/kubernetes/ssl/ca.pem - > owner: core - > permissions: 0644 - > content: | - > -----BEGIN CERTIFICATE----- - > MIIC9zCCAd+gAwIBAgIJAJMnVnhVhy5pMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV - > ...... - > QHwi1rNc8eBLNrd4BM/A1ZeDVh/Q9KxN+ZG/hHIXhmWKgN5wQx6/81FIFg== - > -----END CERTIFICATE----- - > ``` - -5. Move the modified `node-config.yaml` to your Kubernetes node machine and install and configure CoreOS on the node using the following command. - - > **Warning:** this is a destructive operation that erases disk `sda` on your server. - - ```shell - sudo coreos-install -d /dev/sda -C stable -c node-config.yaml - ``` - -6. Once complete, restart the server and boot into `/dev/sda`. When it comes back up, you should have SSH access as the `core` user using the public key provided in the `node-config.yaml` file. It will take some time for the node to be fully configured. - -## Configure Kubeconfig - -To administer your cluster from a separate host, you will need the client and admin certificates generated earlier (`ca.pem`, `admin.pem`, `admin-key.pem`). With certificates in place, run the following commands with the appropriate filepaths. - -```shell -kubectl config set-cluster calico-cluster --server=https:// --certificate-authority= -kubectl config set-credentials calico-admin --certificate-authority= --client-key= --client-certificate= -kubectl config set-context calico --cluster=calico-cluster --user=calico-admin -kubectl config use-context calico -``` - -Check your work with `kubectl get nodes`. - -## Install the DNS Addon - -Most Kubernetes deployments will require the DNS addon for service discovery. To install DNS, create the skydns service and replication controller provided. - -```shell -kubectl create -f https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/dns/skydns.yaml -``` - -## Install the Kubernetes UI Addon (Optional) - -The Kubernetes UI can be installed using `kubectl` to run the following manifest file. - -```shell -kubectl create -f https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/kube-ui/kube-ui.yaml -``` - -## Launch other Services With Calico-Kubernetes - -At this point, you have a fully functioning cluster running on Kubernetes with a master and two nodes networked with Calico. You can now follow any of the [standard documentation](https://github.com/kubernetes/kubernetes/tree/{{page.version}}.0/examples/) to set up other services on your cluster. - -## Connectivity to outside the cluster - -Because containers in this guide have private `192.168.0.0/16` IPs, you will need NAT to allow connectivity between containers and the internet. However, in a production data center deployment, NAT is not always necessary, since Calico can peer with the data center's border routers over BGP. - -### NAT on the nodes - -The simplest method for enabling connectivity from containers to the internet is to use outgoing NAT on your Kubernetes nodes. - -Calico can provide outgoing NAT for containers. To enable it, use the following `calicoctl` command: - -```shell -ETCD_AUTHORITY= calicoctl pool add --nat-outgoing -``` - -By default, `` will be `192.168.0.0/16`. You can find out which pools have been configured with the following command: - -```shell -ETCD_AUTHORITY= calicoctl pool show -``` - -### NAT at the border router - -In a data center environment, it is recommended to configure Calico to peer with the border routers over BGP. This means that the container IPs will be routable anywhere in the data center, and so NAT is not needed on the nodes (though it may be enabled at the data center edge to allow outbound-only internet connectivity). - -The Calico documentation contains more information on how to configure Calico to [peer with existing infrastructure](https://github.com/projectcalico/calico-containers/blob/master/docs/ExternalConnectivity.md). - -## Support Level - - -IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level --------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- -Bare-metal | CoreOS | CoreOS | Calico | [docs](/docs/getting-started-guides/coreos/bare_metal_calico) | | Community ([@caseydavenport](https://github.com/caseydavenport)) - - -For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. - diff --git a/docs/getting-started-guides/index.md b/docs/getting-started-guides/index.md index a728980e50..49497a2b1d 100644 --- a/docs/getting-started-guides/index.md +++ b/docs/getting-started-guides/index.md @@ -140,7 +140,6 @@ AWS | CoreOS | CoreOS | flannel | [docs](/docs/gettin GCE | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/coreos) | | Community ([@pires](https://github.com/pires)) Vagrant | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/coreos) | | Community ([@pires](https://github.com/pires), [@AntonioMeireles](https://github.com/AntonioMeireles)) Bare-metal (Offline) | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/coreos/bare_metal_offline) | | Community ([@jeffbean](https://github.com/jeffbean)) -Bare-metal | CoreOS | CoreOS | Calico | [docs](/docs/getting-started-guides/coreos/bare_metal_calico) | | Community ([@caseydavenport](https://github.com/caseydavenport)) CloudStack | Ansible | CoreOS | flannel | [docs](/docs/getting-started-guides/cloudstack) | | Community ([@runseb](https://github.com/runseb)) Vmware vSphere | Saltstack | Debian | OVS | [docs](/docs/getting-started-guides/vsphere) | | Community ([@imkin](https://github.com/imkin)) Vmware Photon | Saltstack | Debian | OVS | [docs](/docs/getting-started-guides/photon-controller) | | Community ([@alainroy](https://github.com/alainroy)) @@ -150,7 +149,6 @@ OpenStack/HPCloud | Juju | Ubuntu | flannel | [docs](/docs/gettin Joyent | Juju | Ubuntu | flannel | [docs](/docs/getting-started-guides/juju) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) AWS | Saltstack | Debian | AWS | [docs](/docs/getting-started-guides/aws) | | Community ([@justinsb](https://github.com/justinsb)) AWS | kops | Debian | AWS | [docs](https://github.com/kubernetes/kops) | | Community ([@justinsb](https://github.com/justinsb)) -Bare-metal | custom | Ubuntu | Calico | [docs](/docs/getting-started-guides/ubuntu-calico) | | Community ([@djosborne](https://github.com/djosborne)) Bare-metal | custom | Ubuntu | flannel | [docs](/docs/getting-started-guides/ubuntu) | | Community ([@resouer](https://github.com/resouer), [@WIZARD-CXY](https://github.com/WIZARD-CXY)) libvirt/KVM | CoreOS | CoreOS | libvirt/KVM | [docs](/docs/getting-started-guides/libvirt-coreos) | | Community ([@lhuard1A](https://github.com/lhuard1A)) oVirt | | | | [docs](/docs/getting-started-guides/ovirt) | | Community ([@simon3z](https://github.com/simon3z)) diff --git a/docs/getting-started-guides/ubuntu-calico.md b/docs/getting-started-guides/ubuntu-calico.md deleted file mode 100644 index 2eaf7a7aea..0000000000 --- a/docs/getting-started-guides/ubuntu-calico.md +++ /dev/null @@ -1,484 +0,0 @@ ---- - ---- - -This document describes how to deploy Kubernetes with Calico networking from scratch on _bare metal_ Ubuntu. For more information on Project Calico, visit [projectcalico.org](http://projectcalico.org) and the [calico-containers repository](https://github.com/projectcalico/calico-containers). - -To install Calico on an existing Kubernetes cluster, or for more information on deploying Calico with Kubernetes in a number of other environments take a look at our supported [deployment guides](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes). - -This guide will set up a simple Kubernetes cluster with a single Kubernetes master and two Kubernetes nodes. We'll run Calico's etcd cluster on the master and install the Calico daemon on the master and nodes. - -## Prerequisites and Assumptions - -- This guide uses `systemd` for process management. Ubuntu 15.04 supports systemd natively as do a number of other Linux distributions. -- All machines should have Docker >= 1.7.0 installed. - - To install Docker on Ubuntu, follow [these instructions](https://docs.docker.com/installation/ubuntulinux/) -- All machines should have connectivity to each other and the internet. -- This guide assumes a DHCP server on your network to assign server IPs. -- This guide uses `192.168.0.0/16` as the subnet from which pod IP addresses are assigned. If this overlaps with your host subnet, you will need to configure Calico to use a different [IP pool](https://github.com/projectcalico/calico-containers/blob/master/docs/calicoctl/pool.md#calicoctl-pool-commands). -- This guide assumes that none of the hosts have been configured with any Kubernetes or Calico software. -- This guide will set up a secure, TLS-authenticated API server. - -## Set up the master - -### Configure TLS - -The master requires the root CA public key, `ca.pem`; the apiserver certificate, `apiserver.pem` and its private key, `apiserver-key.pem`. - -1. Create the file `openssl.cnf` with the following contents. - - ```conf - [req] - req_extensions = v3_req - distinguished_name = req_distinguished_name - [req_distinguished_name] - [ v3_req ] - basicConstraints = CA:FALSE - keyUsage = nonRepudiation, digitalSignature, keyEncipherment - subjectAltName = @alt_names - [alt_names] - DNS.1 = kubernetes - DNS.2 = kubernetes.default - IP.1 = 10.100.0.1 - IP.2 = ${MASTER_IPV4} - ``` - -> Replace ${MASTER_IPV4} with the Master's IP address on which the Kubernetes API will be accessible. - -2. Generate the necessary TLS assets. - - ```shell - # Generate the root CA. - openssl genrsa -out ca-key.pem 2048 - openssl req -x509 -new -nodes -key ca-key.pem -days 10000 -out ca.pem -subj "/CN=kube-ca" - - # Generate the API server keypair. - openssl genrsa -out apiserver-key.pem 2048 - openssl req -new -key apiserver-key.pem -out apiserver.csr -subj "/CN=kube-apiserver" -config openssl.cnf - openssl x509 -req -in apiserver.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out apiserver.pem -days 365 -extensions v3_req -extfile openssl.cnf - ``` - -3. You should now have the following three files: `ca.pem`, `apiserver.pem`, and `apiserver-key.pem`. Send the three files to your master host (using `scp` for example). -4. Move them to the `/etc/kubernetes/ssl` folder and ensure that only the root user can read the key: - - ```shell - # Move keys - sudo mkdir -p /etc/kubernetes/ssl/ - sudo mv -t /etc/kubernetes/ssl/ ca.pem apiserver.pem apiserver-key.pem - - # Set permissions - sudo chmod 600 /etc/kubernetes/ssl/apiserver-key.pem - sudo chown root:root /etc/kubernetes/ssl/apiserver-key.pem - ``` - -### Install Calico's etcd on the master - -Calico needs its own etcd cluster to store its state. In this guide we install a single-node cluster on the master server. - -> Note: In a production deployment we recommend running a distributed etcd cluster for redundancy. In this guide, we use a single etcd for simplicitly. - -1. Download the template manifest file: - - ```shell - wget https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/calico-etcd.manifest - ``` - -2. Replace all instances of `` in the `calico-etcd.manifest` file with your master's IP address. - -3. Then, move the file to the `/etc/kubernetes/manifests` directory. This will not have any effect until we later run the kubelet, but Calico seems to tolerate the lack of its etcd in the interim. - - ```shell - sudo mv -f calico-etcd.manifest /etc/kubernetes/manifests - ``` - -### Install Calico on the master - -We need to install Calico on the master. This allows the master to route packets to the pods on other nodes. - -1. Install the `calicoctl` tool: - - ```shell - wget https://github.com/projectcalico/calico-containers/releases/download/v0.15.0/calicoctl - chmod +x calicoctl - sudo mv calicoctl /usr/bin - ``` - -2. Prefetch the calico/node container (this ensures that the Calico service starts immediately when we enable it): - - ```shell - sudo docker pull calico/node:v0.15.0 - ``` - -3. Download the `network-environment` template from the `calico-kubernetes` repository: - - ```shell - wget -O network-environment https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/network-environment-template - ``` - -4. Edit `network-environment` to represent this node's settings: - - - Replace `` with the IP address of the master. This should be the source IP address used to reach the Kubernetes worker nodes. - -5. Move `network-environment` into `/etc`: - - ```shell - sudo mv -f network-environment /etc - ``` - -6. Install, enable, and start the `calico-node` service: - - ```shell - sudo wget -N -P /etc/systemd https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/common/calico-node.service - sudo systemctl enable /etc/systemd/calico-node.service - sudo systemctl start calico-node.service - ``` - -### Install Kubernetes on the Master - -We'll use the `kubelet` to bootstrap the Kubernetes master. - -1. Download and install the `kubelet` and `kubectl` binaries: - - ```shell - sudo wget -N -P /usr/bin http://storage.googleapis.com/kubernetes-release/release/v1.1.4/bin/linux/amd64/kubectl - sudo wget -N -P /usr/bin http://storage.googleapis.com/kubernetes-release/release/v1.1.4/bin/linux/amd64/kubelet - sudo chmod +x /usr/bin/kubelet /usr/bin/kubectl - ``` - -2. Install the `kubelet` systemd unit file and start the `kubelet`: - - ```shell - # Install the unit file - sudo wget -N -P /etc/systemd https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/kubelet.service - - # Enable the unit file so that it runs on boot - sudo systemctl enable /etc/systemd/kubelet.service - - # Start the kubelet service - sudo systemctl start kubelet.service - ``` - -3. Download and install the master manifest file, which will start the Kubernetes master services automatically: - - ```shell - sudo mkdir -p /etc/kubernetes/manifests - sudo wget -N -P /etc/kubernetes/manifests https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/kubernetes-master.manifest - ``` - -4. Check the progress by running `docker ps`. After a while, you should see the `etcd`, `apiserver`, `controller-manager`, `scheduler`, and `kube-proxy` containers running. - - > Note: it may take some time for all the containers to start. Don't worry if `docker ps` doesn't show any containers for a while or if some containers start before others. - -## Set up the nodes - -The following steps should be run on each Kubernetes node. - -### Configure TLS - -Worker nodes require three keys: `ca.pem`, `worker.pem`, and `worker-key.pem`. We've already generated -`ca.pem` and `ca-key.pem` for use on the Master. The worker public/private keypair should be generated for each Kubernetes node. - -1. Create the file `worker-openssl.cnf` with the following contents. - - ```conf - [req] - req_extensions = v3_req - distinguished_name = req_distinguished_name - [req_distinguished_name] - [ v3_req ] - basicConstraints = CA:FALSE - keyUsage = nonRepudiation, digitalSignature, keyEncipherment - subjectAltName = @alt_names - [alt_names] - IP.1 = $ENV::WORKER_IP - ``` - -2. Generate the necessary TLS assets for this worker. This relies on the worker's IP address, and the `ca.pem` and `ca-key.pem` files generated earlier in the guide. - - ```shell - # Export this worker's IP address. - export WORKER_IP= - ``` - - ```shell - # Generate keys. - openssl genrsa -out worker-key.pem 2048 - openssl req -new -key worker-key.pem -out worker.csr -subj "/CN=worker-key" -config worker-openssl.cnf - openssl x509 -req -in worker.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out worker.pem -days 365 -extensions v3_req -extfile worker-openssl.cnf - ``` - -3. Send the three files (`ca.pem`, `worker.pem`, and `worker-key.pem`) to the host (using scp, for example). - -4. Move the files to the `/etc/kubernetes/ssl` folder with the appropriate permissions: - - ```shell - # Move keys - sudo mkdir -p /etc/kubernetes/ssl/ - sudo mv -t /etc/kubernetes/ssl/ ca.pem worker.pem worker-key.pem - - # Set permissions - sudo chmod 600 /etc/kubernetes/ssl/worker-key.pem - sudo chown root:root /etc/kubernetes/ssl/worker-key.pem - ``` - -### Configure the kubelet worker - -1. With your certs in place, create a kubeconfig for worker authentication in `/etc/kubernetes/worker-kubeconfig.yaml`; replace `` with the IP address of the master: - - ```yaml - apiVersion: v1 - kind: Config - clusters: - - name: local - cluster: - server: https://:443 - certificate-authority: /etc/kubernetes/ssl/ca.pem - users: - - name: kubelet - user: - client-certificate: /etc/kubernetes/ssl/worker.pem - client-key: /etc/kubernetes/ssl/worker-key.pem - contexts: - - context: - cluster: local - user: kubelet - name: kubelet-context - current-context: kubelet-context - ``` - -### Install Calico on the node - -On your compute nodes, it is important that you install Calico before Kubernetes. We'll install Calico using the provided `calico-node.service` systemd unit file: - -1. Install the `calicoctl` binary: - - ```shell - wget https://github.com/projectcalico/calico-containers/releases/download/v0.15.0/calicoctl - chmod +x calicoctl - sudo mv calicoctl /usr/bin - ``` - -2. Fetch the calico/node container: - - ```shell - sudo docker pull calico/node:v0.15.0 - ``` - -3. Download the `network-environment` template from the `calico-cni` repository: - - ```shell - wget -O network-environment https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/node/network-environment-template - ``` - -4. Edit `network-environment` to represent this node's settings: - - - Replace `` with the IP address of the node. - - Replace `` with the IP or hostname of the master. - -5. Move `network-environment` into `/etc`: - - ```shell - sudo mv -f network-environment /etc - ``` - -6. Install the `calico-node` service: - - ```shell - sudo wget -N -P /etc/systemd https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/common/calico-node.service - sudo systemctl enable /etc/systemd/calico-node.service - sudo systemctl start calico-node.service - ``` - -7. Install the Calico CNI plugins: - - ```shell - sudo mkdir -p /opt/cni/bin/ - sudo wget -N -P /opt/cni/bin/ https://github.com/projectcalico/calico-cni/releases/download/v1.0.0/calico - sudo wget -N -P /opt/cni/bin/ https://github.com/projectcalico/calico-cni/releases/download/v1.0.0/calico-ipam - sudo chmod +x /opt/cni/bin/calico /opt/cni/bin/calico-ipam - ``` - -8. Create a CNI network configuration file, which tells Kubernetes to create a network named `calico-k8s-network` and to use the calico plugins for that network. Create file `/etc/cni/net.d/10-calico.conf` with the following contents, replacing `` with the IP of the master (this file should be the same on each node): - - ```shell - # Make the directory structure. - mkdir -p /etc/cni/net.d - - # Make the network configuration file - cat >/etc/cni/net.d/10-calico.conf <:6666", - "log_level": "info", - "ipam": { - "type": "calico-ipam" - } - } - EOF - ``` - - Since this is the only network we create, it will be used by default by the kubelet. - -9. Verify that Calico started correctly: - - ```shell - calicoctl status - ``` - - should show that Felix (Calico's per-node agent) is running and the there should be a BGP status line for each other node that you've configured and the master. The "Info" column should show "Established": - - ``` - $ calicoctl status - calico-node container is running. Status: Up 15 hours - Running felix version 1.3.0rc5 - - IPv4 BGP status - +---------------+-------------------+-------+----------+-------------+ - | Peer address | Peer type | State | Since | Info | - +---------------+-------------------+-------+----------+-------------+ - | 172.18.203.41 | node-to-node mesh | up | 17:32:26 | Established | - | 172.18.203.42 | node-to-node mesh | up | 17:32:25 | Established | - +---------------+-------------------+-------+----------+-------------+ - - IPv6 BGP status - +--------------+-----------+-------+-------+------+ - | Peer address | Peer type | State | Since | Info | - +--------------+-----------+-------+-------+------+ - +--------------+-----------+-------+-------+------+ - ``` - - If the "Info" column shows "Active" or some other value then Calico is having difficulty connecting to the other host. Check the IP address of the peer is correct and check that Calico is using the correct local IP address (set in the `network-environment` file above). - -### Install Kubernetes on the Node - -1. Download and Install the kubelet binary: - - ```shell - sudo wget -N -P /usr/bin http://storage.googleapis.com/kubernetes-release/release/v1.1.4/bin/linux/amd64/kubelet - sudo chmod +x /usr/bin/kubelet - ``` - -2. Install the `kubelet` systemd unit file: - - ```shell - # Download the unit file. - sudo wget -N -P /etc/systemd https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/node/kubelet.service - - # Enable and start the unit files so that they run on boot - sudo systemctl enable /etc/systemd/kubelet.service - sudo systemctl start kubelet.service - ``` - -3. Download the `kube-proxy` manifest: - - ```shell - wget https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/node/kube-proxy.manifest - ``` - -4. In that file, replace `` with your master's IP. Then move it into place: - - ```shell - sudo mkdir -p /etc/kubernetes/manifests/ - sudo mv kube-proxy.manifest /etc/kubernetes/manifests/ - ``` - -## Configure kubectl remote access - -To administer your cluster from a separate host (e.g your laptop), you will need the root CA generated earlier, as well as an admin public/private keypair (`ca.pem`, `admin.pem`, `admin-key.pem`). Run the following steps on the machine which you will use to control your cluster. - -1. Download the kubectl binary. - - ```shell - sudo wget -N -P /usr/bin http://storage.googleapis.com/kubernetes-release/release/v1.1.4/bin/linux/amd64/kubectl - sudo chmod +x /usr/bin/kubectl - ``` - -2. Generate the admin public/private keypair. - -3. Export the necessary variables, substituting in correct values for your machine. - - ```shell - # Export the appropriate paths. - export CA_CERT_PATH= - export ADMIN_CERT_PATH= - export ADMIN_KEY_PATH= - - # Export the Master's IP address. - export MASTER_IPV4= - ``` - -4. Configure your host `kubectl` with the admin credentials: - - ```shell - kubectl config set-cluster calico-cluster --server=https://${MASTER_IPV4} --certificate-authority=${CA_CERT_PATH} - kubectl config set-credentials calico-admin --certificate-authority=${CA_CERT_PATH} --client-key=${ADMIN_KEY_PATH} --client-certificate=${ADMIN_CERT_PATH} - kubectl config set-context calico --cluster=calico-cluster --user=calico-admin - kubectl config use-context calico - ``` - -Check your work with `kubectl get nodes`, which should succeed and display the nodes. - -## Install the DNS Addon - -Most Kubernetes deployments will require the DNS addon for service discovery. To install DNS, create the skydns service and replication controller provided. This step makes use of the kubectl configuration made above. - -```shell -kubectl create -f https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/dns/skydns.yaml -``` - -## Install the Kubernetes UI Addon (Optional) - -The Kubernetes UI can be installed using `kubectl` to run the following manifest file. - -```shell -kubectl create -f https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/kube-ui/kube-ui.yaml -``` - -Note: The Kubernetes UI addon is deprecated and has been replaced with Kubernetes dashboard. You can install it by running: - -```shell -kubectl create -f https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml -``` - -You can find the docs at [Kubernetes Dashboard](https://github.com/kubernetes/dashboard) - -## Launch other Services With Calico-Kubernetes - -At this point, you have a fully functioning cluster running on Kubernetes with a master and two nodes networked with Calico. You can now follow any of the [standard documentation](https://github.com/kubernetes/kubernetes/tree/{{page.version}}.0/examples/) to set up other services on your cluster. - -## Connectivity to outside the cluster - -Because containers in this guide have private `192.168.0.0/16` IPs, you will need NAT to allow connectivity between containers and the internet. However, in a production data center deployment, NAT is not always necessary, since Calico can peer with the data center's border routers over BGP. - -### NAT on the nodes - -The simplest method for enabling connectivity from containers to the internet is to use outgoing NAT on your Kubernetes nodes. - -Calico can provide outgoing NAT for containers. To enable it, use the following `calicoctl` command: - -```shell -ETCD_AUTHORITY= calicoctl pool add --nat-outgoing -``` - -By default, `` will be `192.168.0.0/16`. You can find out which pools have been configured with the following command: - -```shell -ETCD_AUTHORITY= calicoctl pool show -``` - -### NAT at the border router - -In a data center environment, it is recommended to configure Calico to peer with the border routers over BGP. This means that the container IPs will be routable anywhere in the data center, and so NAT is not needed on the nodes (though it may be enabled at the data center edge to allow outbound-only internet connectivity). - -The Calico documentation contains more information on how to configure Calico to [peer with existing infrastructure](https://github.com/projectcalico/calico-containers/blob/master/docs/ExternalConnectivity.md). - -## Support Level - - -IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level --------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- -Bare-metal | custom | Ubuntu | Calico | [docs](/docs/getting-started-guides/ubuntu-calico) | | Community ([@djosborne](https://github.com/djosborne)) - -For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. - From a8e129af8315bd612e0206dfc7ef044121500c6b Mon Sep 17 00:00:00 2001 From: Casey Davenport Date: Sat, 19 Nov 2016 17:52:21 -0500 Subject: [PATCH 51/62] Sort network plugins alphabetically. (#1583) --- docs/admin/addons.md | 10 ++++--- docs/admin/networking.md | 40 ++++++++++++-------------- docs/getting-started-guides/scratch.md | 8 +++--- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/docs/admin/addons.md b/docs/admin/addons.md index f2bd18aaa5..192b0c86a8 100644 --- a/docs/admin/addons.md +++ b/docs/admin/addons.md @@ -7,18 +7,20 @@ Add-ons extend the functionality of Kubernetes. This page lists some of the available add-ons and links to their respective installation instructions. +Add-ons in each section are sorted alphabetically - the ordering does not imply any preferential status. + ## Networking and Network Policy -* [Weave Net](https://github.com/weaveworks/weave-kube) provides networking and network policy, will carry on working on both sides of a network partition, and does not require an external database. -* [Calico](http://docs.projectcalico.org/v1.5/getting-started/kubernetes/installation/hosted/) is a secure L3 networking and network policy provider. -* [Flannel](https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml) is a overlay network provider that can be used with Kubernetes. +* [Calico](http://docs.projectcalico.org/v1.6/getting-started/kubernetes/installation/hosted/) is a secure L3 networking and network policy provider. * [Canal](https://github.com/tigera/canal/tree/master/k8s-install/kubeadm) unites Flannel and Calico, providing networking and network policy. +* [Flannel](https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml) is a overlay network provider that can be used with Kubernetes. * [Romana](http://romana.io) is a Layer 3 networking solution for pod networks that also supports the [NetworkPolicy API](/docs/user-guide/networkpolicies/). Kubeadm add-on installation details available [here](https://github.com/romana/romana/tree/master/containerize). +* [Weave Net](https://github.com/weaveworks/weave-kube) provides networking and network policy, will carry on working on both sides of a network partition, and does not require an external database. ## Visualization & Control -* [Weave Scope](https://www.weave.works/documentation/scope-latest-installing/#k8s) is a tool for graphically visualizing your containers, pods, services etc. Use it in conjunction with a [Weave Cloud account](https://cloud.weave.works/) or host the UI yourself. * [Dashboard](https://github.com/kubernetes/dashboard#kubernetes-dashboard) is a dashboard web interface for Kubernetes. +* [Weave Scope](https://www.weave.works/documentation/scope-latest-installing/#k8s) is a tool for graphically visualizing your containers, pods, services etc. Use it in conjunction with a [Weave Cloud account](https://cloud.weave.works/) or host the UI yourself. ## Legacy Add-ons diff --git a/docs/admin/networking.md b/docs/admin/networking.md index 0cfd9d7989..406148ee9e 100644 --- a/docs/admin/networking.md +++ b/docs/admin/networking.md @@ -100,8 +100,19 @@ existence or non-existence of host ports. There are a number of ways that this network model can be implemented. This document is not an exhaustive study of the various methods, but hopefully serves as an introduction to various technologies and serves as a jumping-off point. -If some techniques become vastly preferable to others, we might detail them more -here. + +The following networking options are sorted alphabetically - the order does not +imply any preferential status. + +### Contiv + +[Contiv](https://github.com/contiv/netplugin) provides configurable networking (native l3 using BGP, overlay using vxlan, classic l2, or Cisco-SDN/ACI) for various use cases. [Contiv](http://contiv.io) is all open sourced. + +### Flannel + +[Flannel](https://github.com/coreos/flannel#flannel) is a very simple overlay +network that satisfies the Kubernetes requirements. Many +people have reported success with Flannel and Kubernetes. ### Google Compute Engine (GCE) @@ -158,29 +169,12 @@ Follow the "With Linux Bridge devices" section of [this very nice tutorial](http://blog.oddbit.com/2014/08/11/four-ways-to-connect-a-docker/) from Lars Kellogg-Stedman. -### Weave Net from Weaveworks - -[Weave Net](https://www.weave.works/products/weave-net/) is a -resilient and simple to use network for Kubernetes and its hosted applications. -Weave Net runs as a [CNI plug-in](https://www.weave.works/docs/net/latest/cni-plugin/) -or stand-alone. In either version, it doesn't require any configuration or extra code -to run, and in both cases, the network provides one IP address per pod - as is standard for Kubernetes. - - -### Flannel - -[Flannel](https://github.com/coreos/flannel#flannel) is a very simple overlay -network that satisfies the Kubernetes requirements. It installs in minutes and -should get you up and running if the above techniques are not working. Many -people have reported success with Flannel and Kubernetes. - ### OpenVSwitch [OpenVSwitch](/docs/admin/ovs-networking) is a somewhat more mature but also complicated way to build an overlay network. This is endorsed by several of the "Big Shops" for networking. - ### Project Calico [Project Calico](https://github.com/projectcalico/calico-containers/blob/master/docs/cni/kubernetes/README.md) is an open source container networking provider and network policy engine. @@ -193,9 +187,13 @@ Calico can also be run in policy enforcement mode in conjunction with other netw [Romana](http://romana.io) is an open source network and security automation solution that lets you deploy Kubernetes without an overlay network. Romana supports Kubernetes [Network Policy](/docs/user-guide/networkpolicies/) to provide isolation across network namespaces. -### Contiv +### Weave Net from Weaveworks -[Contiv](https://github.com/contiv/netplugin) provides configurable networking (native l3 using BGP, overlay using vxlan, classic l2, or Cisco-SDN/ACI) for various use cases. [Contiv](http://contiv.io) is all open sourced. +[Weave Net](https://www.weave.works/products/weave-net/) is a +resilient and simple to use network for Kubernetes and its hosted applications. +Weave Net runs as a [CNI plug-in](https://www.weave.works/docs/net/latest/cni-plugin/) +or stand-alone. In either version, it doesn't require any configuration or extra code +to run, and in both cases, the network provides one IP address per pod - as is standard for Kubernetes. ## Other reading diff --git a/docs/getting-started-guides/scratch.md b/docs/getting-started-guides/scratch.md index 84b0ffb5af..3fc23ec3dc 100644 --- a/docs/getting-started-guides/scratch.md +++ b/docs/getting-started-guides/scratch.md @@ -81,12 +81,12 @@ to implement one of the above options: - **Use a network plugin which is called by Kubernetes** - Kubernetes supports the [CNI](https://github.com/containernetworking/cni) network plugin interface. - - There are a number of solutions which provide plugins for Kubernetes: + - There are a number of solutions which provide plugins for Kubernetes (listed alphabetically): + - [Calico](http://docs.projectcalico.org/) - [Flannel](https://github.com/coreos/flannel) - - [Calico](https://github.com/projectcalico/calico-containers) - - [Weave](https://weave.works/) - - [Romana](http://romana.io/) - [Open vSwitch (OVS)](http://openvswitch.org/) + - [Romana](http://romana.io/) + - [Weave](http://weave.works/) - [More found here](/docs/admin/networking#how-to-achieve-this) - You can also write your own. - **Compile support directly into Kubernetes** From 083f07af4aa58d0cd288d856bcea72c8cbc6fa90 Mon Sep 17 00:00:00 2001 From: Ahmet Alp Balkan Date: Sat, 19 Nov 2016 18:27:18 -0800 Subject: [PATCH 52/62] Fix code block rendering issue Added an extra new line before triple-backtick for proper rendering on the website. --- docs/admin/dns.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/admin/dns.md b/docs/admin/dns.md index cc132201aa..9cc55ab7e7 100644 --- a/docs/admin/dns.md +++ b/docs/admin/dns.md @@ -160,6 +160,7 @@ kubectl get pods busybox ``` You should see: + ``` NAME READY STATUS RESTARTS AGE busybox 1/1 Running 0 From eb10ccc643d29ce6f73812e10a96d61dc0c85183 Mon Sep 17 00:00:00 2001 From: erikus Date: Sat, 19 Nov 2016 20:19:21 -0800 Subject: [PATCH 53/62] Update "kubectl docker" command to include "--" "--" is now required after "docker" and before extra args. --- docs/hellonode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hellonode.md b/docs/hellonode.md index b5b67a195d..fd80d950cd 100755 --- a/docs/hellonode.md +++ b/docs/hellonode.md @@ -145,7 +145,7 @@ docker stop hello_tutorial Now that the image works as intended and is all tagged with your `$PROJECT_ID`, we can push it to the [Google Container Registry](https://cloud.google.com/tools/container-registry/), a private repository for your Docker images accessible from every Google Cloud project (but also from outside Google Cloud Platform) : ```shell -gcloud docker push gcr.io/$PROJECT_ID/hello-node:v1 +gcloud docker -- push gcr.io/$PROJECT_ID/hello-node:v1 ``` If all goes well, you should be able to see the container image listed in the console: *Compute > Container Engine > Container Registry*. We now have a project-wide Docker image available which Kubernetes can access and orchestrate. From de9197661e8b43bea1956f36bd7dc68ca06e9865 Mon Sep 17 00:00:00 2001 From: Randy Fay Date: Sun, 20 Nov 2016 09:41:34 -0700 Subject: [PATCH 54/62] Fix broken path in pv configuration, minor doc improvement --- docs/user-guide/persistent-volumes/volumes/local-01.yaml | 2 +- docs/user-guide/persistent-volumes/walkthrough.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/user-guide/persistent-volumes/volumes/local-01.yaml b/docs/user-guide/persistent-volumes/volumes/local-01.yaml index 25acecca93..a465c65149 100644 --- a/docs/user-guide/persistent-volumes/volumes/local-01.yaml +++ b/docs/user-guide/persistent-volumes/volumes/local-01.yaml @@ -10,4 +10,4 @@ spec: accessModes: - ReadWriteOnce hostPath: - path: "/somepath/data01" + path: "/tmp/data01" diff --git a/docs/user-guide/persistent-volumes/walkthrough.md b/docs/user-guide/persistent-volumes/walkthrough.md index 30b24feac2..c82a37f7d0 100644 --- a/docs/user-guide/persistent-volumes/walkthrough.md +++ b/docs/user-guide/persistent-volumes/walkthrough.md @@ -27,7 +27,7 @@ for ease of development and testing. You'll create a local `HostPath` for this support local storage on the host at this time. There is no guarantee your pod ends up on the correct node where the `HostPath` resides. ```shell -# This will be nginx's webroot +# This will be nginx's webroot; execute this on the node where your pod will run. $ mkdir /tmp/data01 $ echo 'I love Kubernetes storage!' > /tmp/data01/index.html ``` @@ -125,4 +125,4 @@ I love Kubernetes storage! Hopefully this simple guide is enough to get you started with PersistentVolumes. If you have any questions, join the team on [Slack](/docs/troubleshooting/#slack) and ask! -Enjoy! \ No newline at end of file +Enjoy! From 27d7d4fba39274ec46e251959a2491998334182a Mon Sep 17 00:00:00 2001 From: Casey Davenport Date: Sun, 20 Nov 2016 17:14:33 -0500 Subject: [PATCH 55/62] Update Calico links to new docs --- docs/admin/networking.md | 2 +- docs/getting-started-guides/network-policy/calico.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/admin/networking.md b/docs/admin/networking.md index 406148ee9e..de2629bb6f 100644 --- a/docs/admin/networking.md +++ b/docs/admin/networking.md @@ -177,7 +177,7 @@ complicated way to build an overlay network. This is endorsed by several of the ### Project Calico -[Project Calico](https://github.com/projectcalico/calico-containers/blob/master/docs/cni/kubernetes/README.md) is an open source container networking provider and network policy engine. +[Project Calico](http://docs.projectcalico.org/) is an open source container networking provider and network policy engine. Calico provides a highly scalable networking and network policy solution for connecting Kubernetes pods based on the same IP networking principles as the internet. Calico can be deployed without encapsulation or overlays to provide high-performance, high-scale data center networking. Calico also provides fine-grained, intent based network security policy for Kubernetes pods via its distributed firewall. diff --git a/docs/getting-started-guides/network-policy/calico.md b/docs/getting-started-guides/network-policy/calico.md index 8efc32f068..be84644aa6 100644 --- a/docs/getting-started-guides/network-policy/calico.md +++ b/docs/getting-started-guides/network-policy/calico.md @@ -12,7 +12,7 @@ export KUBE_NODE_OS_DISTRIBUTION=debian curl -sS https://get.k8s.io | bash ``` -See the [Calico documentation](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes#getting-started) for more options to deploy Calico with Kubernetes. +See the [Calico documentation](http://docs.projectcalico.org/) for more options to deploy Calico with Kubernetes. Once your cluster using Calico is running, you should see a collection of pods running in the `kube-system` Namespace that support Kubernetes NetworkPolicy. From 5f8adf06160c108cfe7d85ed55dd6a0acec08b6f Mon Sep 17 00:00:00 2001 From: Luke Faraone Date: Mon, 21 Nov 2016 02:41:46 +0000 Subject: [PATCH 56/62] Use HTTPS links for all command line invocations #107 fixed a few, but not all were correctly updated. --- docs/getting-started-guides/minikube.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/getting-started-guides/minikube.md b/docs/getting-started-guides/minikube.md index 2362424440..093eb60a57 100644 --- a/docs/getting-started-guides/minikube.md +++ b/docs/getting-started-guides/minikube.md @@ -67,19 +67,19 @@ to run commands against the cluster. ```shell # linux/amd64 -curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ +curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ # linux/386 -curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/linux/386/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ +curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/linux/386/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ # linux/arm -curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/linux/arm/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ +curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/linux/arm/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ # linux/arm64 -curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/linux/arm64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ +curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/linux/arm64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ #linux/ppc64le -curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/linux/ppc64le/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ +curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/linux/ppc64le/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ # OS X/amd64 -curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ +curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ # OS X/386 -curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/darwin/386/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ +curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/{{page.version}}.0/bin/darwin/386/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ ``` The generic download path is: From 6a4646817155dede79bc34bff9789d1f73d2076c Mon Sep 17 00:00:00 2001 From: shapeliang Date: Mon, 21 Nov 2016 15:56:30 +0800 Subject: [PATCH 57/62] Modify some hyperlink location in binary_release.md --- docs/getting-started-guides/binary_release.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/getting-started-guides/binary_release.md b/docs/getting-started-guides/binary_release.md index d3b2886f87..7fdf4a2da0 100644 --- a/docs/getting-started-guides/binary_release.md +++ b/docs/getting-started-guides/binary_release.md @@ -33,7 +33,7 @@ cd kubernetes make release ``` -For more details on the release process see the [`build/` directory](http://releases.k8s.io/{{page.githubbranch}}/build/) +For more details on the release process see the [`build/`](http://releases.k8s.io/{{page.githubbranch}}/build/) directory ### Download Kubernetes and automatically set up a default cluster @@ -57,4 +57,4 @@ Possible values for `YOUR_PROVIDER` include: * `vsphere` - VMWare VSphere * `rackspace` - Rackspace -For the complete, up-to-date list of providers supported by this script, see [the `/cluster` folder in the main Kubernetes repo](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/cluster), where each folder represents a possible value for `YOUR_PROVIDER`. If you don't see your desired provider, try looking at our [getting started guides](/docs/getting-started-guides); there's a good chance we have docs for them. +For the complete, up-to-date list of providers supported by this script, see the [`/cluster`](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/cluster) folder in the main Kubernetes repo, where each folder represents a possible value for `YOUR_PROVIDER`. If you don't see your desired provider, try looking at our [getting started guides](/docs/getting-started-guides); there's a good chance we have docs for them. From 0e1935c6b9dcda52353b5f2ad2e35990812d425c Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Mon, 21 Nov 2016 15:23:33 +0000 Subject: [PATCH 58/62] libvirt-coreos: fix typo s/libvert/libvirt/ --- docs/getting-started-guides/libvirt-coreos.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started-guides/libvirt-coreos.md b/docs/getting-started-guides/libvirt-coreos.md index 86b0707092..180d3f6c9c 100644 --- a/docs/getting-started-guides/libvirt-coreos.md +++ b/docs/getting-started-guides/libvirt-coreos.md @@ -121,7 +121,7 @@ setfacl -m g:kvm:--x ~ By default, the libvirt-coreos setup will create a single Kubernetes master and 3 Kubernetes nodes. Because the VM drives use Copy-on-Write and because of memory ballooning and KSM, there is a lot of resource over-allocation. -There is both an automated way and a manual, customizable way of setting up libvert Kubernetes clusters on CoreOS. +There is both an automated way and a manual, customizable way of setting up libvirt Kubernetes clusters on CoreOS. #### Automated setup From 5d6460b97953181bc001a11fc7dc5100dc90efcd Mon Sep 17 00:00:00 2001 From: Jared Date: Mon, 21 Nov 2016 13:23:58 -0800 Subject: [PATCH 59/62] Added link to DNS Admin Guide --- docs/user-guide/services/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/services/index.md b/docs/user-guide/services/index.md index 94faabcd1c..e20d072d05 100644 --- a/docs/user-guide/services/index.md +++ b/docs/user-guide/services/index.md @@ -345,7 +345,7 @@ can do a DNS SRV query for `"_http._tcp.my-service.my-ns"` to discover the port number for `"http"`. The Kubernetes DNS server is the only way to access services of type -`ExternalName`. +`ExternalName`. More information is available in the [DNS Admin Guide](http://kubernetes.io/docs/admin/dns/). ## Headless services From 3797f7015fee880e5829dbd140079bdd2942bb69 Mon Sep 17 00:00:00 2001 From: Jared Date: Mon, 21 Nov 2016 13:29:52 -0800 Subject: [PATCH 60/62] Update Weave Link --- docs/admin/addons.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/admin/addons.md b/docs/admin/addons.md index 192b0c86a8..1555f8263c 100644 --- a/docs/admin/addons.md +++ b/docs/admin/addons.md @@ -15,7 +15,7 @@ Add-ons in each section are sorted alphabetically - the ordering does not imply * [Canal](https://github.com/tigera/canal/tree/master/k8s-install/kubeadm) unites Flannel and Calico, providing networking and network policy. * [Flannel](https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml) is a overlay network provider that can be used with Kubernetes. * [Romana](http://romana.io) is a Layer 3 networking solution for pod networks that also supports the [NetworkPolicy API](/docs/user-guide/networkpolicies/). Kubeadm add-on installation details available [here](https://github.com/romana/romana/tree/master/containerize). -* [Weave Net](https://github.com/weaveworks/weave-kube) provides networking and network policy, will carry on working on both sides of a network partition, and does not require an external database. +* [Weave Net](https://www.weave.works/docs/net/latest/kube-addon/) provides networking and network policy, will carry on working on both sides of a network partition, and does not require an external database. ## Visualization & Control From a2dff8d4799eca424a94451e9c93503d6fce82bc Mon Sep 17 00:00:00 2001 From: Jared Date: Mon, 21 Nov 2016 14:07:09 -0800 Subject: [PATCH 61/62] Add TOC --- docs/admin/authentication.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/admin/authentication.md b/docs/admin/authentication.md index 6e13c28929..3d73f527bf 100644 --- a/docs/admin/authentication.md +++ b/docs/admin/authentication.md @@ -6,7 +6,8 @@ assignees: - deads2k --- - +* TOC +{:toc} ## Users in Kubernetes From 71f6381067688a53d6039bd4a737e650227f0f80 Mon Sep 17 00:00:00 2001 From: Jared Date: Mon, 21 Nov 2016 14:14:15 -0800 Subject: [PATCH 62/62] Update index.md --- docs/getting-started-guides/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/getting-started-guides/index.md b/docs/getting-started-guides/index.md index b2da179cf9..b6ab61e388 100644 --- a/docs/getting-started-guides/index.md +++ b/docs/getting-started-guides/index.md @@ -43,7 +43,7 @@ clusters. [KCluster.io](https://kcluster.io) provides highly available and scalable managed Kubernetes clusters for AWS. -[Platform9.com](https://platform9.com/products/kubernetes/) offers managed Kubernetes on-premises or any public cloud, and provides 24/7 health monitoring and alerting. +[Platform9](https://platform9.com/products/kubernetes/) offers managed Kubernetes on-premises or any public cloud, and provides 24/7 health monitoring and alerting. ### Turn-key Cloud Solutions @@ -125,7 +125,7 @@ GKE | | | GCE | [docs](https://clou Stackpoint.io | | multi-support | multi-support | [docs](http://www.stackpointcloud.com) | | Commercial AppsCode.com | Saltstack | Debian | multi-support | [docs](https://appscode.com/products/cloud-deployment/) | | Commercial KCluster.io | | multi-support | multi-support | [docs](https://kcluster.io) | | Commercial -Platform9.com | | multi-support | multi-support | [docs](https://platform9.com/products/kubernetes/) | | Commercial +Platform9 | | multi-support | multi-support | [docs](https://platform9.com/products/kubernetes/) | | Commercial GCE | Saltstack | Debian | GCE | [docs](/docs/getting-started-guides/gce) | ['œ“][1] | Project Azure | CoreOS | CoreOS | Weave | [docs](/docs/getting-started-guides/coreos/azure/) | | Community ([@errordeveloper](https://github.com/errordeveloper), [@squillace](https://github.com/squillace), [@chanezon](https://github.com/chanezon), [@crossorigin](https://github.com/crossorigin)) Azure | Ignition | Ubuntu | Azure | [docs](/docs/getting-started-guides/azure) | | Community (Microsoft: [@brendandburns](https://github.com/brendandburns), [@colemickens](https://github.com/colemickens))