From 5a7e1165bb6331b1ffef24002d1b6fccfa66739e Mon Sep 17 00:00:00 2001 From: Eric Paris Date: Thu, 22 Sep 2016 11:47:29 -0400 Subject: [PATCH 001/113] 'namespaceSelector' in the NetworkPolicy example --- docs/user-guide/networkpolicies.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/user-guide/networkpolicies.md b/docs/user-guide/networkpolicies.md index eb4bbe1b74..22c2ed2952 100644 --- a/docs/user-guide/networkpolicies.md +++ b/docs/user-guide/networkpolicies.md @@ -64,6 +64,9 @@ spec: role: db ingress: - from: + - namespaceSelector: + matchLabels: + project: myproject - podSelector: matchLabels: role: frontend From 3c7d5fc9c618e0116d5fd813cd079da41e00d4b3 Mon Sep 17 00:00:00 2001 From: Eric Paris Date: Thu, 22 Sep 2016 12:52:39 -0400 Subject: [PATCH 002/113] Update networkpolicies.md --- docs/user-guide/networkpolicies.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/user-guide/networkpolicies.md b/docs/user-guide/networkpolicies.md index 22c2ed2952..0afe1791b2 100644 --- a/docs/user-guide/networkpolicies.md +++ b/docs/user-guide/networkpolicies.md @@ -84,3 +84,9 @@ __spec__: `NetworkPolicy` [spec](https://github.com/kubernetes/kubernetes/tree/{ __podSelector__: Each `NetworkPolicy` includes a `podSelector` which selects the grouping of pods to which the `ingress` rules in the policy apply. __ingress__: Each `NetworkPolicy` includes a list of whitelist `ingress` rules. Each rule allows traffic which matches both the `from` and `ports` sections. + +In plain language, this example NetworkPolicy: + +1. applies to all pods in the current (???) namespace with the label "role=db" +2. allows tcp/6379 ingress traffic to the "role=db" pods from any pod in the current namespace with the label "role=frontend" (due to the podSelector list element) +3. allows tcp/6379 ingress traffic to the "role=db" pods from any pod in the namespace "myproject" (due to the namespaceSelector list element) From c31b8d608b8c1ea55badc71b2ec1c2ff18f4329f Mon Sep 17 00:00:00 2001 From: Eric Paris Date: Thu, 22 Sep 2016 12:55:09 -0400 Subject: [PATCH 003/113] Update networkpolicies.md --- docs/user-guide/networkpolicies.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/user-guide/networkpolicies.md b/docs/user-guide/networkpolicies.md index 0afe1791b2..bb9ab465f8 100644 --- a/docs/user-guide/networkpolicies.md +++ b/docs/user-guide/networkpolicies.md @@ -56,6 +56,7 @@ A minimal `NetworkPolicy` might look like this: ```yaml apiVersion: extensions/v1beta1 kind: NetworkPolicy +namespace: default metadata: name: test-network-policy spec: @@ -87,6 +88,6 @@ __ingress__: Each `NetworkPolicy` includes a list of whitelist `ingress` rules. In plain language, this example NetworkPolicy: -1. applies to all pods in the current (???) namespace with the label "role=db" +1. applies to all pods in the default namespace with the label "role=db" 2. allows tcp/6379 ingress traffic to the "role=db" pods from any pod in the current namespace with the label "role=frontend" (due to the podSelector list element) 3. allows tcp/6379 ingress traffic to the "role=db" pods from any pod in the namespace "myproject" (due to the namespaceSelector list element) From a27740b33ada451ba557c04696cf9438ed76ed85 Mon Sep 17 00:00:00 2001 From: Eric Paris Date: Thu, 22 Sep 2016 13:11:18 -0400 Subject: [PATCH 004/113] Update networkpolicies.md --- docs/user-guide/networkpolicies.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/networkpolicies.md b/docs/user-guide/networkpolicies.md index bb9ab465f8..6fb1829713 100644 --- a/docs/user-guide/networkpolicies.md +++ b/docs/user-guide/networkpolicies.md @@ -56,9 +56,9 @@ A minimal `NetworkPolicy` might look like this: ```yaml apiVersion: extensions/v1beta1 kind: NetworkPolicy -namespace: default metadata: name: test-network-policy + namespace: default spec: podSelector: matchLabels: From 273ac45bb496b1aac9385548d5dbbc36573cfea0 Mon Sep 17 00:00:00 2001 From: Eric Paris Date: Thu, 22 Sep 2016 13:18:18 -0400 Subject: [PATCH 005/113] Update networkpolicies.md --- docs/user-guide/networkpolicies.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/networkpolicies.md b/docs/user-guide/networkpolicies.md index 6fb1829713..402e1a32d2 100644 --- a/docs/user-guide/networkpolicies.md +++ b/docs/user-guide/networkpolicies.md @@ -66,7 +66,7 @@ spec: ingress: - from: - namespaceSelector: - matchLabels: + matchLabels: project: myproject - podSelector: matchLabels: From c8abb1c5f84986c77a1c7d1b4f1db79751ed2846 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Wed, 28 Sep 2016 16:30:41 +0100 Subject: [PATCH 006/113] 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 95b028be80e5cee05fc62b83d8922028165af9a0 Mon Sep 17 00:00:00 2001 From: anatoly techtonik Date: Sun, 9 Oct 2016 17:29:57 +0300 Subject: [PATCH 007/113] Update kubectl-overview.md Add link to kubectl installation instructions --- docs/user-guide/kubectl-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/kubectl-overview.md b/docs/user-guide/kubectl-overview.md index 81f171a445..6257b8011a 100644 --- a/docs/user-guide/kubectl-overview.md +++ b/docs/user-guide/kubectl-overview.md @@ -5,7 +5,7 @@ assignees: --- -Use this overview of the `kubectl` command line interface to help you start running commands against Kubernetes clusters. This overview quickly covers `kubectl` syntax, describes the command operations, and provides common examples. For details about each command, including all the supported flags and subcommands, see the [kubectl](/docs/user-guide/kubectl) reference documentation. +`kubectl` is a command line interface to for running commands against Kubernetes clusters. This overview quickly covers `kubectl` syntax, describes the command operations, and provides common examples. For details about each command, including all the supported flags and subcommands, see the [kubectl](/docs/user-guide/kubectl) reference documentation. For installation instructions see [prerequisites](http://kubernetes.io/docs/user-guide/prereqs/). TODO: Auto-generate this file to ensure it's always in sync with any `kubectl` changes, see [#14177](http://pr.k8s.io/14177). From 5fabbd59d005e67781bc03b9a35690f862c94ff0 Mon Sep 17 00:00:00 2001 From: anatoly techtonik Date: Sun, 9 Oct 2016 17:30:38 +0300 Subject: [PATCH 008/113] Update kubectl-overview.md --- docs/user-guide/kubectl-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/kubectl-overview.md b/docs/user-guide/kubectl-overview.md index 6257b8011a..6d0d0eb135 100644 --- a/docs/user-guide/kubectl-overview.md +++ b/docs/user-guide/kubectl-overview.md @@ -5,7 +5,7 @@ assignees: --- -`kubectl` is a command line interface to for running commands against Kubernetes clusters. This overview quickly covers `kubectl` syntax, describes the command operations, and provides common examples. For details about each command, including all the supported flags and subcommands, see the [kubectl](/docs/user-guide/kubectl) reference documentation. For installation instructions see [prerequisites](http://kubernetes.io/docs/user-guide/prereqs/). +`kubectl` is a command line interface for running commands against Kubernetes clusters. This overview quickly covers `kubectl` syntax, describes the command operations, and provides common examples. For details about each command, including all the supported flags and subcommands, see the [kubectl](/docs/user-guide/kubectl) reference documentation. For installation instructions see [prerequisites](http://kubernetes.io/docs/user-guide/prereqs/). TODO: Auto-generate this file to ensure it's always in sync with any `kubectl` changes, see [#14177](http://pr.k8s.io/14177). From 97aa665e143e86e15e0e14e31243dc11d6237b4f Mon Sep 17 00:00:00 2001 From: anatoly techtonik Date: Mon, 10 Oct 2016 10:50:49 +0300 Subject: [PATCH 009/113] Make link portable --- docs/user-guide/kubectl-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/kubectl-overview.md b/docs/user-guide/kubectl-overview.md index 6d0d0eb135..1b2c6ff026 100644 --- a/docs/user-guide/kubectl-overview.md +++ b/docs/user-guide/kubectl-overview.md @@ -5,7 +5,7 @@ assignees: --- -`kubectl` is a command line interface for running commands against Kubernetes clusters. This overview quickly covers `kubectl` syntax, describes the command operations, and provides common examples. For details about each command, including all the supported flags and subcommands, see the [kubectl](/docs/user-guide/kubectl) reference documentation. For installation instructions see [prerequisites](http://kubernetes.io/docs/user-guide/prereqs/). +`kubectl` is a command line interface for running commands against Kubernetes clusters. This overview quickly covers `kubectl` syntax, describes the command operations, and provides common examples. For details about each command, including all the supported flags and subcommands, see the [kubectl](/docs/user-guide/kubectl) reference documentation. For installation instructions see [prerequisites](/docs/user-guide/prereqs). TODO: Auto-generate this file to ensure it's always in sync with any `kubectl` changes, see [#14177](http://pr.k8s.io/14177). From 1a0c8a9766f85944caa64c5e603b844a9c7c0f27 Mon Sep 17 00:00:00 2001 From: Clemens Tolboom Date: Wed, 12 Oct 2016 13:01:50 +0200 Subject: [PATCH 010/113] Resolve push denied I failed pushing until switched account as reported in http://stackoverflow.com/a/39996807/598513 --- docs/hellonode.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/hellonode.md b/docs/hellonode.md index 602a383a5b..dce486b51d 100755 --- a/docs/hellonode.md +++ b/docs/hellonode.md @@ -150,6 +150,8 @@ 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. +If you get a __denied: Unable to create the repository, please check that you have access to do so.__ check whether you push as the right user. Use `gcloud auth list` and then `gcloud config set account example@gmail.com` + ![image](/images/hellonode/image_10.png) ## Create your Kubernetes Cluster From d054714d278551272a44da370374418164079d11 Mon Sep 17 00:00:00 2001 From: Misty De Meo Date: Wed, 12 Oct 2016 16:17:53 -0700 Subject: [PATCH 011/113] Basics: fix minor typo --- docs/tutorials/kubernetes-basics/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/kubernetes-basics/index.html b/docs/tutorials/kubernetes-basics/index.html index d678461e41..7edee6fd53 100644 --- a/docs/tutorials/kubernetes-basics/index.html +++ b/docs/tutorials/kubernetes-basics/index.html @@ -33,7 +33,7 @@

What can Kubernetes do for you?

-

With modern web services, users expect applications to be available 24/7, and developers expect to deploy new versions of those applications several times a day. Containzerization helps package software to serve these goals, enabling applications to be released and updated in an easy and fast way without downtime. Kubernetes helps you make sure those containerized applications run where and when you want, and helps them find the resources and tools they need to work. Kubernetes is a production-ready, open source platform designed with the Google's accumulated experience in container orchestration, combined with best-of-breed ideas from the community.

+

With modern web services, users expect applications to be available 24/7, and developers expect to deploy new versions of those applications several times a day. Containerization helps package software to serve these goals, enabling applications to be released and updated in an easy and fast way without downtime. Kubernetes helps you make sure those containerized applications run where and when you want, and helps them find the resources and tools they need to work. Kubernetes is a production-ready, open source platform designed with the Google's accumulated experience in container orchestration, combined with best-of-breed ideas from the community.

From 9b4654451716948d412815d1049c5ed0d1e5f62a Mon Sep 17 00:00:00 2001 From: anbern Date: Fri, 14 Oct 2016 22:25:23 +0200 Subject: [PATCH 012/113] Update hellonode.md Docker for Windows 1.12/1.12.1 does not work as described when pushing images to the google container image registry - it stops with an error message. It takes a long time (6h to several days) to find a solution and since Docker is becoming more popular on windows this seems worth mentioning. --- docs/hellonode.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/hellonode.md b/docs/hellonode.md index 602a383a5b..a4f228018c 100755 --- a/docs/hellonode.md +++ b/docs/hellonode.md @@ -152,6 +152,8 @@ If all goes well, you should be able to see the container image listed in the co ![image](/images/hellonode/image_10.png) +**Note:** *Docker for Windows, Version 1.12 or 1.12.1, does not yet support this procedure. Instead, it replies with the message 'denied: Unable to access the repository; please check that you have permission to access it'. A bugfix is available at http://stackoverflow.com/questions/39277986/unable-to-push-to-google-container-registry-unable-to-access-the-repository?answertab=votes#tab-top.* + ## Create your Kubernetes Cluster A cluster consists of a Master API server and a set of worker VMs called Nodes. From 4e1dd8314c64df24a04d14d70362cd3895d089b5 Mon Sep 17 00:00:00 2001 From: Clemens Tolboom Date: Tue, 18 Oct 2016 13:10:11 +0200 Subject: [PATCH 013/113] Update text to latest suggestions. I had to remove _To_ to join sentences and places a dot. --- docs/hellonode.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hellonode.md b/docs/hellonode.md index dce486b51d..308588fd97 100755 --- a/docs/hellonode.md +++ b/docs/hellonode.md @@ -150,7 +150,7 @@ 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. -If you get a __denied: Unable to create the repository, please check that you have access to do so.__ check whether you push as the right user. Use `gcloud auth list` and then `gcloud config set account example@gmail.com` +If you see an error message like the following: __denied: Unable to create the repository, please check that you have access to do so.__ ensure that you are pushing the image to Container Registry with the correct user credentials, use `gcloud auth list` and then `gcloud config set account example@gmail.com`. ![image](/images/hellonode/image_10.png) From ad39de970d1248a7fd81eb445e9bc45ffd4fabcc Mon Sep 17 00:00:00 2001 From: anatoly techtonik Date: Tue, 18 Oct 2016 14:12:52 +0300 Subject: [PATCH 014/113] Remove 'quickly' --- docs/user-guide/kubectl-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/kubectl-overview.md b/docs/user-guide/kubectl-overview.md index ff3813fb3a..3607f47d53 100644 --- a/docs/user-guide/kubectl-overview.md +++ b/docs/user-guide/kubectl-overview.md @@ -5,7 +5,7 @@ assignees: --- -`kubectl` is a command line interface for running commands against Kubernetes clusters. This overview quickly covers `kubectl` syntax, describes the command operations, and provides common examples. For details about each command, including all the supported flags and subcommands, see the [kubectl](/docs/user-guide/kubectl) reference documentation. For installation instructions see [prerequisites](/docs/user-guide/prereqs). +`kubectl` is a command line interface for running commands against Kubernetes clusters. This overview covers `kubectl` syntax, describes the command operations, and provides common examples. For details about each command, including all the supported flags and subcommands, see the [kubectl](/docs/user-guide/kubectl) reference documentation. For installation instructions see [prerequisites](/docs/user-guide/prereqs). TODO: Auto-generate this file to ensure it's always in sync with any `kubectl` changes, see [#14177](http://pr.k8s.io/14177). From 8b4e7e8bc611fddc7250a65a8ad4a265a2ebaa33 Mon Sep 17 00:00:00 2001 From: Keith Wansbrough Date: Tue, 18 Oct 2016 15:22:13 +0100 Subject: [PATCH 015/113] 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 5b6055a3749df91ae277904117944d7020c524a8 Mon Sep 17 00:00:00 2001 From: Rodrigo Campos Date: Wed, 12 Oct 2016 18:47:00 -0300 Subject: [PATCH 016/113] Clarify secrets file mode might be read in decimal notation Fixes: https://github.com/kubernetes/kubernetes/issues/33475 --- docs/user-guide/secrets/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/user-guide/secrets/index.md b/docs/user-guide/secrets/index.md index 4da56a3cca..75527a2be5 100644 --- a/docs/user-guide/secrets/index.md +++ b/docs/user-guide/secrets/index.md @@ -344,6 +344,9 @@ In this case, the file resulting in `/etc/foo/my-group/my-username` will have permission value of `0777`. Owing to JSON limitations, you must specify the mode in decimal notation. +Note that this permission value might be displayed in decimal notation if you +read it later. + **Consuming Secret Values from Volumes** Inside the container that mounts a secret volume, the secret keys appear as From e80c15b5837437f5cf3d79f9a78c04fdb513e691 Mon Sep 17 00:00:00 2001 From: Ben Hall Date: Tue, 11 Oct 2016 11:31:41 +0100 Subject: [PATCH 017/113] Fix links for interactive scenarios. --- docs/tutorials/kubernetes-basics/cluster-interactive.html | 2 +- docs/tutorials/kubernetes-basics/cluster-intro.html | 2 +- docs/tutorials/kubernetes-basics/deploy-interactive.html | 2 +- docs/tutorials/kubernetes-basics/deploy-intro.html | 2 +- docs/tutorials/kubernetes-basics/explore-interactive.html | 2 +- docs/tutorials/kubernetes-basics/explore-intro.html | 2 +- docs/tutorials/kubernetes-basics/expose-interactive.html | 2 +- docs/tutorials/kubernetes-basics/expose-intro.html | 2 +- docs/tutorials/kubernetes-basics/scale-interactive.html | 2 +- docs/tutorials/kubernetes-basics/scale-intro.html | 2 +- docs/tutorials/kubernetes-basics/update-intro.html | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/tutorials/kubernetes-basics/cluster-interactive.html b/docs/tutorials/kubernetes-basics/cluster-interactive.html index 8b07b331c7..f1de469494 100644 --- a/docs/tutorials/kubernetes-basics/cluster-interactive.html +++ b/docs/tutorials/kubernetes-basics/cluster-interactive.html @@ -22,7 +22,7 @@ diff --git a/docs/tutorials/kubernetes-basics/cluster-intro.html b/docs/tutorials/kubernetes-basics/cluster-intro.html index 009a8e3947..eb7835e242 100644 --- a/docs/tutorials/kubernetes-basics/cluster-intro.html +++ b/docs/tutorials/kubernetes-basics/cluster-intro.html @@ -97,7 +97,7 @@ redirect_from: diff --git a/docs/tutorials/kubernetes-basics/deploy-interactive.html b/docs/tutorials/kubernetes-basics/deploy-interactive.html index 73d7e9dfc3..ff3e4643d5 100644 --- a/docs/tutorials/kubernetes-basics/deploy-interactive.html +++ b/docs/tutorials/kubernetes-basics/deploy-interactive.html @@ -26,7 +26,7 @@ diff --git a/docs/tutorials/kubernetes-basics/deploy-intro.html b/docs/tutorials/kubernetes-basics/deploy-intro.html index 9fafe6012e..3664398794 100644 --- a/docs/tutorials/kubernetes-basics/deploy-intro.html +++ b/docs/tutorials/kubernetes-basics/deploy-intro.html @@ -95,7 +95,7 @@ diff --git a/docs/tutorials/kubernetes-basics/explore-interactive.html b/docs/tutorials/kubernetes-basics/explore-interactive.html index 9b16d4bca4..db8d52a482 100644 --- a/docs/tutorials/kubernetes-basics/explore-interactive.html +++ b/docs/tutorials/kubernetes-basics/explore-interactive.html @@ -26,7 +26,7 @@ diff --git a/docs/tutorials/kubernetes-basics/explore-intro.html b/docs/tutorials/kubernetes-basics/explore-intro.html index 4789838827..23dd27714b 100644 --- a/docs/tutorials/kubernetes-basics/explore-intro.html +++ b/docs/tutorials/kubernetes-basics/explore-intro.html @@ -129,7 +129,7 @@ diff --git a/docs/tutorials/kubernetes-basics/expose-interactive.html b/docs/tutorials/kubernetes-basics/expose-interactive.html index 3288807588..56b9ca4861 100644 --- a/docs/tutorials/kubernetes-basics/expose-interactive.html +++ b/docs/tutorials/kubernetes-basics/expose-interactive.html @@ -23,7 +23,7 @@ diff --git a/docs/tutorials/kubernetes-basics/expose-intro.html b/docs/tutorials/kubernetes-basics/expose-intro.html index 81c1981bf4..8506bf8d9d 100644 --- a/docs/tutorials/kubernetes-basics/expose-intro.html +++ b/docs/tutorials/kubernetes-basics/expose-intro.html @@ -125,7 +125,7 @@
diff --git a/docs/tutorials/kubernetes-basics/scale-interactive.html b/docs/tutorials/kubernetes-basics/scale-interactive.html index d41b6cb36b..aa2134864d 100644 --- a/docs/tutorials/kubernetes-basics/scale-interactive.html +++ b/docs/tutorials/kubernetes-basics/scale-interactive.html @@ -23,7 +23,7 @@ diff --git a/docs/tutorials/kubernetes-basics/scale-intro.html b/docs/tutorials/kubernetes-basics/scale-intro.html index b4b5d47c91..7d046756f9 100644 --- a/docs/tutorials/kubernetes-basics/scale-intro.html +++ b/docs/tutorials/kubernetes-basics/scale-intro.html @@ -107,7 +107,7 @@ diff --git a/docs/tutorials/kubernetes-basics/update-intro.html b/docs/tutorials/kubernetes-basics/update-intro.html index b7867f3b1f..411bef8d4f 100644 --- a/docs/tutorials/kubernetes-basics/update-intro.html +++ b/docs/tutorials/kubernetes-basics/update-intro.html @@ -122,7 +122,7 @@ From 0903054357418e6a93746eee498f12ca7413bda4 Mon Sep 17 00:00:00 2001 From: Keith Wansbrough Date: Wed, 19 Oct 2016 12:03:28 +0100 Subject: [PATCH 018/113] 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 019/113] 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 0a28be36134737da3af0593e591f5e545cec4f50 Mon Sep 17 00:00:00 2001 From: Eric Paris Date: Wed, 19 Oct 2016 08:55:03 -0400 Subject: [PATCH 020/113] Update networkpolicies.md --- docs/user-guide/networkpolicies.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/networkpolicies.md b/docs/user-guide/networkpolicies.md index d7c4f572bb..91646633cd 100644 --- a/docs/user-guide/networkpolicies.md +++ b/docs/user-guide/networkpolicies.md @@ -89,7 +89,7 @@ __podSelector__: Each `NetworkPolicy` includes a `podSelector` which selects the __ingress__: Each `NetworkPolicy` includes a list of whitelist `ingress` rules. Each rule allows traffic which matches both the `from` and `ports` sections. -In plain language, this example NetworkPolicy: +This example NetworkPolicy has the following characteristics: 1. applies to all pods in the default namespace with the label "role=db" 2. allows tcp/6379 ingress traffic to the "role=db" pods from any pod in the current namespace with the label "role=frontend" (due to the podSelector list element) From 33cdc55903b43bd204bf4e0cdfbab184755714cf Mon Sep 17 00:00:00 2001 From: Keith Wansbrough Date: Wed, 19 Oct 2016 14:01:30 +0100 Subject: [PATCH 021/113] 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 022/113] 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 023/113] 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 32f45fb417fb3bf0fc29e6792fa059206af7ecd3 Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Thu, 20 Oct 2016 11:05:23 -0700 Subject: [PATCH 024/113] Write new task: Defining a Command and Arguments for a Container. --- _data/tasks.yml | 2 + .../configure-pod-container/commands.yaml | 12 ++++ .../define-command-argument-container.md | 69 +++++++++++++++++++ docs/tasks/index.md | 5 ++ 4 files changed, 88 insertions(+) create mode 100644 docs/tasks/configure-pod-container/commands.yaml create mode 100644 docs/tasks/configure-pod-container/define-command-argument-container.md diff --git a/_data/tasks.yml b/_data/tasks.yml index 91bbe1bcca..90c1f3b8b2 100644 --- a/_data/tasks.yml +++ b/_data/tasks.yml @@ -6,6 +6,8 @@ toc: section: - title: Defining Environment Variables for a Container path: /docs/tasks/configure-pod-container/define-environment-variable-container/ + - title: Defining a Command and Arguments for a Container + path: /docs/tasks/configure-pod-container/define-command-argument-container/ - title: Accessing Applications in a Cluster section: - title: Using Port Forwarding to Access Applications in a Cluster diff --git a/docs/tasks/configure-pod-container/commands.yaml b/docs/tasks/configure-pod-container/commands.yaml new file mode 100644 index 0000000000..8d58007db4 --- /dev/null +++ b/docs/tasks/configure-pod-container/commands.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Pod +metadata: + name: command-demo + labels: + purpose: demonstrate-command +spec: + containers: + - name: command-demo-container + image: debian + command: ["printenv"] + args: ["HOSTNAME", "KUBERNETES_PORT"] diff --git a/docs/tasks/configure-pod-container/define-command-argument-container.md b/docs/tasks/configure-pod-container/define-command-argument-container.md new file mode 100644 index 0000000000..bbff487674 --- /dev/null +++ b/docs/tasks/configure-pod-container/define-command-argument-container.md @@ -0,0 +1,69 @@ +--- +--- + +{% capture overview %} + +This page shows how to define commands and arguments when you run a container +in a Kubernetes Pod. + +{% endcapture %} + + +{% capture prerequisites %} + +{% include task-tutorial-prereqs.md %} + +{% endcapture %} + + +{% capture steps %} + +### Defining a command when you create a Pod + +When you create a Pod, you can specify a command and arguments for the +containers that run in the Pod. To specify a command, include the `command` +field in the configuration file. To specify arguments for the command, include +the `args` field in the configuration file. The command that you specify in the +configuration file overrides the usual entry point for the container. + +In this exercise, you create a Pod that runs one container. The configuration +file for the Pod defines a command and two arguments: + +{% include code.html language="yaml" file="commands.yaml" ghlink="/docs/tasks/configure-pod-container/commands.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/configure-pod-container/commands.yaml + +1. List the running Pods: + + kubectl get pods + + The output shows that the container that ran in the command-demo Pod has + completed. + +1. To see the output of the command that ran in the container, view the logs +from the Pod: + + kubectl logs command-demo + + The output shows the values of the HOSTNAME and KUBERNETES_PORT environment + variables: + + command-demo + tcp://10.3.240.1:443 + +{% endcapture %} + +{% capture whatsnext %} + +* Learn more about [containers and commands](/docs/user-guide/containers/). +* Learn more about [configuring containers](/docs/user-guide/configuring-containers/). +* Learn more about [running commands in a container](/docs/user-guide/getting-into-containers/). +* See [Container](/docs/api-reference/v1/definitions/#_v1_container). + +{% endcapture %} + + +{% include templates/task.md %} diff --git a/docs/tasks/index.md b/docs/tasks/index.md index dcd9120e1b..fc08a0469a 100644 --- a/docs/tasks/index.md +++ b/docs/tasks/index.md @@ -3,6 +3,11 @@ The Tasks section of the Kubernetes documentation is a work in progress +#### Configuring Pods and Containers + +* [Defining Environment Variables for a Container](/docs/tasks/configure-pod-container/define-environment-variable-container/) +* [Defining a Command and Arguments for a Container](/docs/tasks/configure-pod-container/define-command-argument-container/) + #### Accessing Applications in a Cluster * [Using Port Forwarding to Access Applications in a Cluster](/docs/tasks/access-application-cluster/port-forward-access-application-cluster/) From 9b18efd3345496aa1e078a3c00b1b184ffec33a9 Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Thu, 20 Oct 2016 16:36:00 -0700 Subject: [PATCH 025/113] Write new task: Defining a Command and Arguments for a Container 2 --- .../define-command-argument-container.md | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/docs/tasks/configure-pod-container/define-command-argument-container.md b/docs/tasks/configure-pod-container/define-command-argument-container.md index bbff487674..1e623d9b43 100644 --- a/docs/tasks/configure-pod-container/define-command-argument-container.md +++ b/docs/tasks/configure-pod-container/define-command-argument-container.md @@ -18,13 +18,19 @@ in a Kubernetes Pod. {% capture steps %} -### Defining a command when you create a Pod +### Defining a command and arguments when you create a Pod -When you create a Pod, you can specify a command and arguments for the -containers that run in the Pod. To specify a command, include the `command` -field in the configuration file. To specify arguments for the command, include -the `args` field in the configuration file. The command that you specify in the -configuration file overrides the usual entry point for the container. +When you create a Pod, you can define a command and arguments for the +containers that run in the Pod. To define a command, include the `command` +field in the configuration file. To define arguments for the command, include +the `args` field in the configuration file. The command and arguments that +you define cannot be changed after the Pod is created. + +The command and arguments that you define in the configuration file +override the default command and arguments provided by the container image. +If you define args, but do not define a command, the default command is used +with your new arguments. For more information, see +[Commands and Capabilities](/docs/user-guide/containers/). In this exercise, you create a Pod that runs one container. The configuration file for the Pod defines a command and two arguments: @@ -54,6 +60,24 @@ from the Pod: command-demo tcp://10.3.240.1:443 +### Using environment variables to define arguments + +In the preceding example, you defined the arguments directly by +providing strings. As an alternative to providing strings directly, +you can define arguments by using environment variables. + + env: + - name: MESSAGE + value: "hello world" + command: ["/bin/echo"] + args: ["$(MESSAGE)"] + +This means you can define an argument for a Pod using any of +the techniques available for defining environment variables, including +[ConfigMaps](/docs/user-guide/configmap/) +and +[Secrets](/docs/user-guide/secrets/). + {% endcapture %} {% capture whatsnext %} From d8688fa817129ed3cc358990c6b262349e265c16 Mon Sep 17 00:00:00 2001 From: Chris Marino Date: Fri, 21 Oct 2016 13:32:29 -0700 Subject: [PATCH 026/113] Add Romana to docs ToC, and kubeadm page --- _data/guides.yml | 2 ++ docs/admin/addons.md | 2 ++ docs/getting-started-guides/kubeadm.md | 2 +- docs/getting-started-guides/network-policy/romana.md | 9 +++++++++ 4 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 docs/getting-started-guides/network-policy/romana.md diff --git a/_data/guides.yml b/_data/guides.yml index 40d47b08d6..8214dcb740 100644 --- a/_data/guides.yml +++ b/_data/guides.yml @@ -68,6 +68,8 @@ toc: path: /docs/getting-started-guides/network-policy/walkthrough/ - title: Using Calico for NetworkPolicy path: /docs/getting-started-guides/network-policy/calico/ + - title: Using Romana for NetworkPolicy + path: /docs/getting-started-guides/network-policy/romana/ - title: Batch Jobs section: diff --git a/docs/admin/addons.md b/docs/admin/addons.md index 6e28edfaa2..02898e2857 100644 --- a/docs/admin/addons.md +++ b/docs/admin/addons.md @@ -12,6 +12,8 @@ This page lists some of the available add-ons and links to their respective inst * [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](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes/manifests/kubeadm) 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. +* [Romana](romana.io) is a Layer 3 networking solution for network policy. Kubeadmin add-on installation details available [here](https://github.com/romana/romana/tree/master/containerize) + ## Visualization & Control diff --git a/docs/getting-started-guides/kubeadm.md b/docs/getting-started-guides/kubeadm.md index f4f4c15211..e7326c73df 100644 --- a/docs/getting-started-guides/kubeadm.md +++ b/docs/getting-started-guides/kubeadm.md @@ -166,7 +166,7 @@ By way of example, you can install [Weave Net](https://github.com/weaveworks/wea # kubectl apply -f https://git.io/weave-kube daemonset "weave-net" created -If you prefer [Calico](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes/manifests/kubeadm) or [Canal](https://github.com/tigera/canal/tree/master/k8s-install/kubeadm), please refer to their respective installation guides. +If you prefer [Calico](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes/manifests/kubeadm) or [Canal](https://github.com/tigera/canal/tree/master/k8s-install/kubeadm), or [Romana](https://github.com/romana/romana/tree/master/containerize) please refer to their respective installation guides. You should only install one pod network per cluster. Once a pod network has been installed, you can confirm that it is working by checking that the `kube-dns` pod is `Running` in the output of `kubectl get pods --all-namespaces`. diff --git a/docs/getting-started-guides/network-policy/romana.md b/docs/getting-started-guides/network-policy/romana.md new file mode 100644 index 0000000000..7a4dea113a --- /dev/null +++ b/docs/getting-started-guides/network-policy/romana.md @@ -0,0 +1,9 @@ +--- +assignees: +- chrismarino + +--- + +Romana details + +More changes. From 62afa6f904daa67963df97591dac835f60a6c0e0 Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Fri, 21 Oct 2016 15:52:30 -0700 Subject: [PATCH 027/113] Write new task: Defining a Command and Arguments for a Container 3 --- .../define-command-argument-container.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/tasks/configure-pod-container/define-command-argument-container.md b/docs/tasks/configure-pod-container/define-command-argument-container.md index 1e623d9b43..22ac9b5e04 100644 --- a/docs/tasks/configure-pod-container/define-command-argument-container.md +++ b/docs/tasks/configure-pod-container/define-command-argument-container.md @@ -64,7 +64,7 @@ from the Pod: In the preceding example, you defined the arguments directly by providing strings. As an alternative to providing strings directly, -you can define arguments by using environment variables. +you can define arguments by using environment variables: env: - name: MESSAGE @@ -78,6 +78,18 @@ the techniques available for defining environment variables, including and [Secrets](/docs/user-guide/secrets/). +NOTE: The environment variable appears in parentheses, `"$(VAR)"`. This is +required for the variable to be expanded in the `command` or `args` field. + +### Running a command in a shell + +In some cases, you need your command to run in a shell. For example, your +command might consist of several commands piped together, or it might be a shell +script. To run your command in a shell, wrap it like this: + + command: ["/bin/sh"] + args: ["-c", "while true; do echo hello; sleep 10;done"] + {% endcapture %} {% capture whatsnext %} From 0ebd20ccfbb56b1e3730ad5d559de5e7377d12a8 Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Fri, 21 Oct 2016 21:05:23 -0400 Subject: [PATCH 028/113] 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 029/113] 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 2f7dcedbbb8335ade79a1d145f05911e0e1c8e32 Mon Sep 17 00:00:00 2001 From: Justin Garrison Date: Fri, 14 Oct 2016 13:17:45 -0700 Subject: [PATCH 030/113] Update jobs.md with link to scheduled jobs Removed future work because we're living in the future :rocket: --- docs/user-guide/jobs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/user-guide/jobs.md b/docs/user-guide/jobs.md index 266444753a..4e42b8fcef 100644 --- a/docs/user-guide/jobs.md +++ b/docs/user-guide/jobs.md @@ -374,6 +374,6 @@ driver, and then cleans up. An advantage of this approach is that the overall process gets the completion guarantee of a Job object, but complete control over what pods are created and how work is assigned to them. -## Future work +## Scheduled Jobs -Support for creating Jobs at specified times/dates (i.e. cron) is expected in [1.4](https://github.com/kubernetes/kubernetes/pull/11980). +Support for creating Jobs at specified times/dates (i.e. cron) is available in Kubernetes [1.4](https://github.com/kubernetes/kubernetes/pull/11980). More information is available in the [scheduled job documents](http://kubernetes.io/docs/user-guide/scheduled-jobs/) From 500aec5eedf60f574d4022b65f162f6f6dd0344c Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Fri, 21 Oct 2016 21:39:25 -0400 Subject: [PATCH 031/113] 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 f5ca6fae323501cb4e161d89b0d506ab2dd18c21 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Sat, 22 Oct 2016 03:19:06 +0100 Subject: [PATCH 032/113] Update documentation about CNI flags and requirements (#1516) * Update CNI kubelet option names * Expand the minimum CNI requirements --- docs/admin/network-plugins.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/admin/network-plugins.md b/docs/admin/network-plugins.md index c0397016da..8cfeb658c9 100644 --- a/docs/admin/network-plugins.md +++ b/docs/admin/network-plugins.md @@ -36,7 +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 the first CNI configuration file from `--network-plugin-dir` 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 `/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), 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 ### kubenet @@ -44,7 +48,7 @@ The Linux-only kubenet plugin provides functionality similar to the `--configure The plugin requires a few things: -* The standard CNI `bridge` and `host-local` plugins are required. Kubenet will first search for them in `/opt/cni/bin`. Specify `network-plugin-dir` to supply additional search path. The first found match will take effect. +* The standard CNI `bridge`, `lo` and `host-local` plugins are required, at minimum version 0.2.0. Kubenet will first search for them in `/opt/cni/bin`. Specify `network-plugin-dir` to supply additional search path. The first found match will take effect. * Kubelet must be run with the `--network-plugin=kubenet` argument to enable the plugin * Kubelet must also be run with the `--reconcile-cidr` argument to ensure the IP subnet assigned to the node by configuration or the controller-manager is propagated to the plugin * The node must be assigned an IP subnet through either the `--pod-cidr` kubelet command-line option or the `--allocate-node-cidrs=true --cluster-cidr=` controller-manager command-line options. @@ -66,6 +70,6 @@ This option is provided to the network-plugin; currently **only kubenet supports ## Usage Summary * `--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 `/opt/cni/bin` and CNI plugin configuration located in `network-plugin-dir`, config location defaults to `/etc/cni/net.d`. +* `--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 From ed4c37d5114ee5d4ada26866838a8b571018b2bd Mon Sep 17 00:00:00 2001 From: Ilya Dmitrichenko Date: Thu, 20 Oct 2016 12:33:42 +0100 Subject: [PATCH 033/113] Get rid of git dependency in kubeadm guide --- docs/getting-started-guides/kubeadm.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/getting-started-guides/kubeadm.md b/docs/getting-started-guides/kubeadm.md index f4f4c15211..4fa854cc94 100644 --- a/docs/getting-started-guides/kubeadm.md +++ b/docs/getting-started-guides/kubeadm.md @@ -177,8 +177,8 @@ Once a pod network has been installed, you can confirm that it is working by che As an example, install a sample microservices application, a socks shop, to put your cluster through its paces. To learn more about the sample microservices app, see the [GitHub README](https://github.com/microservices-demo/microservices-demo). - # git clone https://github.com/microservices-demo/microservices-demo - # kubectl apply -f microservices-demo/deploy/kubernetes/manifests/sock-shop-ns.yml -f microservices-demo/deploy/kubernetes/manifests + # kubectl create namespace sock-shop + # kubectl apply -n sock-shop -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true" You can then find out the port that the [NodePort feature of services](/docs/user-guide/services/) allocated for the front-end service by running: @@ -216,7 +216,7 @@ See the [list of add-ons](/docs/admin/addons/) to explore other add-ons, includi ## Cleanup -* To uninstall the socks shop, run `kubectl delete -f microservices-demo/deploy/kubernetes/manifests` on the master. +* To uninstall the socks shop, run `kubectl delete namespace sock-shop` on the master. * To undo what `kubeadm` did, simply delete the machines you created for this tutorial, or run the script below and then start over or uninstall the packages. From a79c12489e32eaf62a7fb98cd7e0879ddf12dde3 Mon Sep 17 00:00:00 2001 From: MichalMankowski Date: Mon, 24 Oct 2016 16:21:16 +0200 Subject: [PATCH 034/113] fix typo and add section about kubectl configuration --- .../centos/centos_manual_config.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/getting-started-guides/centos/centos_manual_config.md b/docs/getting-started-guides/centos/centos_manual_config.md index 75b7cccbf7..ffa2d402f5 100644 --- a/docs/getting-started-guides/centos/centos_manual_config.md +++ b/docs/getting-started-guides/centos/centos_manual_config.md @@ -123,7 +123,7 @@ KUBE_API_ARGS="" ```shell $ etcdctl mkdir /kube-centos/network -$ etcdclt mk /kube-centos/network/config "{ \"Network\": \"172.30.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }" +$ etcdctl mk /kube-centos/network/config "{ \"Network\": \"172.30.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }" ``` * Configure flannel to overlay Docker network in /etc/sysconfig/flanneld on the master (also in the nodes as we'll see): @@ -196,6 +196,13 @@ for SERVICES in kube-proxy kubelet flanneld docker; do systemctl status $SERVICES done ``` +* Configure kubectl + +```shell +kubectl config set-cluster default-cluster --server=http://kube-centos:8080 +kubectl config set-context default-system --cluster=default-cluster --user=default-admin +kubectl config use-context default-system +``` *You should be finished!* From cacbf7ca350824ea05699552ac20496bbc1f82fb Mon Sep 17 00:00:00 2001 From: masstomato Date: Mon, 24 Oct 2016 23:22:37 +0900 Subject: [PATCH 035/113] Fix typo Fix 'ectdclt' to 'etcdctl'. --- docs/getting-started-guides/centos/centos_manual_config.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started-guides/centos/centos_manual_config.md b/docs/getting-started-guides/centos/centos_manual_config.md index 75b7cccbf7..fc091e7357 100644 --- a/docs/getting-started-guides/centos/centos_manual_config.md +++ b/docs/getting-started-guides/centos/centos_manual_config.md @@ -123,7 +123,7 @@ KUBE_API_ARGS="" ```shell $ etcdctl mkdir /kube-centos/network -$ etcdclt mk /kube-centos/network/config "{ \"Network\": \"172.30.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }" +$ etcdctl mk /kube-centos/network/config "{ \"Network\": \"172.30.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }" ``` * Configure flannel to overlay Docker network in /etc/sysconfig/flanneld on the master (also in the nodes as we'll see): From fff7f38748f1efd47dc7fcf1152b2b619d7c8c8d Mon Sep 17 00:00:00 2001 From: MichalMankowski Date: Mon, 24 Oct 2016 16:24:01 +0200 Subject: [PATCH 036/113] change to kube-centos --- docs/getting-started-guides/centos/centos_manual_config.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started-guides/centos/centos_manual_config.md b/docs/getting-started-guides/centos/centos_manual_config.md index ffa2d402f5..f95d4bebd6 100644 --- a/docs/getting-started-guides/centos/centos_manual_config.md +++ b/docs/getting-started-guides/centos/centos_manual_config.md @@ -199,7 +199,7 @@ done * Configure kubectl ```shell -kubectl config set-cluster default-cluster --server=http://kube-centos:8080 +kubectl config set-cluster default-cluster --server=http://centos-master:8080 kubectl config set-context default-system --cluster=default-cluster --user=default-admin kubectl config use-context default-system ``` From 4fd44b16043a2aa88d918acade36da2c4e3d1645 Mon Sep 17 00:00:00 2001 From: Devan Goodwin Date: Thu, 20 Oct 2016 12:45:54 -0300 Subject: [PATCH 037/113] Document kubeadm --skip-preflight-checks. --- docs/admin/kubeadm.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/admin/kubeadm.md b/docs/admin/kubeadm.md index 57a21528c2..989c925862 100644 --- a/docs/admin/kubeadm.md +++ b/docs/admin/kubeadm.md @@ -12,6 +12,11 @@ This document provides information on how to use kubeadm's advanced options. Running kubeadm init bootstraps a Kubernetes cluster. This consists of the following steps: +1. kubeadm runs a series of pre-flight checks to validate the system state +before making changes. Some checks only trigger warnings, others are +considered errors and will exit kubeadm until the problem is corrected or +the user specifies `--skip-preflight-checks`. + 1. kubeadm generates a token that additional nodes can use to register themselves with the master in future. @@ -112,6 +117,12 @@ to change the DNS name suffix. Again, you will need to update the `/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` file accordingly else DNS will not function correctly. +- `--skip-preflight-checks` + +By default, `kubeadm` runs a series of preflight checks to validate the system +before making any changes. Advanced users can use this flag to bypass these if +necessary. + - `--token` By default, `kubeadm init` automatically generates the token used to initialise @@ -134,6 +145,12 @@ Here's an example on how to use it: `kubeadm join --token=the_secret_token 192.168.1.1` +- `--skip-preflight-checks` + +By default, `kubeadm` runs a series of preflight checks to validate the system +before making any changes. Advanced users can use this flag to bypass these if +necessary. + - `--token=` By default, when `kubeadm init` runs, a token is generated and revealed in the output. From 56a8e8bafc5843b6ba084a20dbc879590191f355 Mon Sep 17 00:00:00 2001 From: Chris Marino Date: Mon, 24 Oct 2016 08:22:02 -0700 Subject: [PATCH 038/113] Minor content re-org, edits --- Gemfile.lock | 5 +++++ docs/admin/addons.md | 3 +-- docs/admin/networking.md | 4 ++-- docs/getting-started-guides/kubeadm.md | 5 ++--- docs/getting-started-guides/network-policy/romana.md | 12 ++++++++++-- .../network-policy/walkthrough.md | 9 ++++++++- docs/getting-started-guides/scratch.md | 9 ++------- 7 files changed, 30 insertions(+), 17 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index ee385b958b..1229f4c4a0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -17,6 +17,7 @@ GEM faraday (0.9.2) multipart-post (>= 1.2, < 3) ffi (1.9.14) + ffi (1.9.14-x64-mingw32) forwardable-extended (2.6.0) gemoji (2.1.0) html-pipeline (2.4.2) @@ -74,6 +75,9 @@ GEM nokogiri (1.6.8) mini_portile2 (~> 2.1.0) pkg-config (~> 1.1.7) + nokogiri (1.6.8-x64-mingw32) + mini_portile2 (~> 2.1.0) + pkg-config (~> 1.1.7) octokit (4.3.0) sawyer (~> 0.7.0, >= 0.5.3) pathutil (0.14.0) @@ -94,6 +98,7 @@ GEM PLATFORMS ruby + x64-mingw32 DEPENDENCIES activesupport (= 4.2.7) diff --git a/docs/admin/addons.md b/docs/admin/addons.md index 02898e2857..5e6573d349 100644 --- a/docs/admin/addons.md +++ b/docs/admin/addons.md @@ -12,8 +12,7 @@ This page lists some of the available add-ons and links to their respective inst * [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](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes/manifests/kubeadm) 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. -* [Romana](romana.io) is a Layer 3 networking solution for network policy. Kubeadmin add-on installation details available [here](https://github.com/romana/romana/tree/master/containerize) - +* [Romana](http://romana.io) is a Layer 3 networking solution for network policy. Kubeadmin add-on installation details available [here](https://github.com/romana/romana/tree/master/containerize). ## Visualization & Control diff --git a/docs/admin/networking.md b/docs/admin/networking.md index 9275b88565..2acbf062d4 100644 --- a/docs/admin/networking.md +++ b/docs/admin/networking.md @@ -1,4 +1,4 @@ ---- +--- assignees: - lavalamp - thockin @@ -191,7 +191,7 @@ Calico can also be run in policy enforcement mode in conjunction with other netw ### Romana -[Romana](http://romana.io) is an open source software defined networking (SDN) solution that lets you deploy Kubernetes without an overlay network. +[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 diff --git a/docs/getting-started-guides/kubeadm.md b/docs/getting-started-guides/kubeadm.md index e7326c73df..1672c8a614 100644 --- a/docs/getting-started-guides/kubeadm.md +++ b/docs/getting-started-guides/kubeadm.md @@ -158,15 +158,14 @@ Before you can deploy applications to it, you need to install a pod network. You must install a pod network add-on so that your pods can communicate with each other when they are on different hosts. **It is necessary to do this before you try to deploy any applications to your cluster.** -Several projects provide Kubernetes pod networks. -You can see a complete list of available network add-ons on the [add-ons page](/docs/admin/addons/). +Several projects are available that enable Kubernetes pod networks including Calico, Romana and Weave. Some may also support [Network Policy](/docs/user-guide/networkpolicies/). See the [add-ons page](/docs/admin/addons/) for a complete list of available network add-ons. By way of example, you can install [Weave Net](https://github.com/weaveworks/weave-kube) by logging in to the master and running: # kubectl apply -f https://git.io/weave-kube daemonset "weave-net" created -If you prefer [Calico](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes/manifests/kubeadm) or [Canal](https://github.com/tigera/canal/tree/master/k8s-install/kubeadm), or [Romana](https://github.com/romana/romana/tree/master/containerize) please refer to their respective installation guides. +If you prefer [Calico](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes/manifests/kubeadm) or [Canal](https://github.com/tigera/canal/tree/master/k8s-install/kubeadm), or [Romana](/docs/getting-started-guides/network-policy/romana/) please refer to their respective installation guides. You should only install one pod network per cluster. Once a pod network has been installed, you can confirm that it is working by checking that the `kube-dns` pod is `Running` in the output of `kubectl get pods --all-namespaces`. diff --git a/docs/getting-started-guides/network-policy/romana.md b/docs/getting-started-guides/network-policy/romana.md index 7a4dea113a..26ca728490 100644 --- a/docs/getting-started-guides/network-policy/romana.md +++ b/docs/getting-started-guides/network-policy/romana.md @@ -4,6 +4,14 @@ assignees: --- -Romana details +# Installation with kubeadmin + +Begin by following the [kubeadm getting started guide](/docs/getting-started-guides/kubeadm/) and complete steps 1, 2, and 3. + +Once completed, follow the [containerized installation guide](https://github.com/romana/romana/tree/master/containerize) for kubeadmin. + +## Romana Network Policy Resources + +* [Overview of Romana Network Policy](https://github.com/romana/romana/wiki/Romana-policies) +* [Example Policies](https://github.com/romana/core/tree/master/policy) -More changes. diff --git a/docs/getting-started-guides/network-policy/walkthrough.md b/docs/getting-started-guides/network-policy/walkthrough.md index 122baa653a..e4e86be5a7 100644 --- a/docs/getting-started-guides/network-policy/walkthrough.md +++ b/docs/getting-started-guides/network-policy/walkthrough.md @@ -6,7 +6,14 @@ assignees: Kubernetes can be used to declare network policies which govern how Pods can communicate with each other. This document helps you get started using the Kubernetes [NetworkPolicy API](/docs/user-guide/networkpolicies), and provides a demonstration thereof. -In this article we assume that a Kubernetes cluster has been created with network policy support. There are a number of network providers which support NetworkPolicy (see the "Using X for NetworkPolicy" articles in this section). The reference implementation is [Calico](/docs/getting-started-guides/network-policy/calico) running on GCE. +In this article, we assume a network provider that supports the NetworkPolicy API has been installed. Network providers can be installed as add-ons using [kubeadmin](/docs/getting-started-guides/kubeadm/), or any other suitable cluster installer. + +There are a number of network providers which support NetworkPolicy including: + +* [Calico](/docs/getting-started-guides/network-policy/calico/) +* [Romana](/docs/getting-started-guides/network-policy/romana/) + +The reference implementation is [Calico](/docs/getting-started-guides/network-policy/calico) running on GCE. The following example walkthrough will work on a Kubernetes cluster using any of the listed providers. diff --git a/docs/getting-started-guides/scratch.md b/docs/getting-started-guides/scratch.md index 970939465d..5eca3be201 100644 --- a/docs/getting-started-guides/scratch.md +++ b/docs/getting-started-guides/scratch.md @@ -85,6 +85,7 @@ to implement one of the above options: - [Flannel](https://github.com/coreos/flannel) - [Calico](http://https://github.com/projectcalico/calico-containers) - [Weave](http://weave.works/) + - [Romana](http://romana.io/) - [Open vSwitch (OVS)](http://openvswitch.org/) - [More found here](/docs/admin/networking#how-to-achieve-this) - You can also write your own. @@ -129,14 +130,8 @@ Also, you need to pick a static IP for master node. #### Network Policy -Kubernetes enables the definition of fine-grained network policy between Pods -using the [NetworkPolicy](/docs/user-guide/networkpolicy) resource. +Kubernetes enables the definition of fine-grained network policy between Pods using the [NetworkPolicy](/docs/user-guide/network-policy) resource. -Not all networking providers support the Kubernetes NetworkPolicy features. -For clusters which choose to enable NetworkPolicy, the -[Calico policy controller addon](https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/calico-policy-controller) -can enforce the NetworkPolicy API on top of native cloud-provider networking, -Flannel, or Calico networking. ### Cluster Naming From b36034a97c9ba9d606a03438b95f52aabe690754 Mon Sep 17 00:00:00 2001 From: Chris Marino Date: Mon, 24 Oct 2016 08:22:22 -0700 Subject: [PATCH 039/113] edits --- docs/getting-started-guides/scratch.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting-started-guides/scratch.md b/docs/getting-started-guides/scratch.md index 5eca3be201..d1695c0bab 100644 --- a/docs/getting-started-guides/scratch.md +++ b/docs/getting-started-guides/scratch.md @@ -132,6 +132,7 @@ Also, you need to pick a static IP for master node. Kubernetes enables the definition of fine-grained network policy between Pods using the [NetworkPolicy](/docs/user-guide/network-policy) resource. +Not all networking providers support the Kubernetes NetworkPolicy API, see [Using Network Policy](/docs/getting-started-guides/network-policy/walkthrough/) for more information. ### Cluster Naming From e162232e3675d4c15f90d9a1a619c9ea047caf38 Mon Sep 17 00:00:00 2001 From: Chris Marino Date: Mon, 24 Oct 2016 09:15:09 -0700 Subject: [PATCH 040/113] revert Gemfile --- Gemfile.lock | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 1229f4c4a0..ee385b958b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -17,7 +17,6 @@ GEM faraday (0.9.2) multipart-post (>= 1.2, < 3) ffi (1.9.14) - ffi (1.9.14-x64-mingw32) forwardable-extended (2.6.0) gemoji (2.1.0) html-pipeline (2.4.2) @@ -75,9 +74,6 @@ GEM nokogiri (1.6.8) mini_portile2 (~> 2.1.0) pkg-config (~> 1.1.7) - nokogiri (1.6.8-x64-mingw32) - mini_portile2 (~> 2.1.0) - pkg-config (~> 1.1.7) octokit (4.3.0) sawyer (~> 0.7.0, >= 0.5.3) pathutil (0.14.0) @@ -98,7 +94,6 @@ GEM PLATFORMS ruby - x64-mingw32 DEPENDENCIES activesupport (= 4.2.7) From e21ed27c58219b9db5be0f8f4a596f5f53e02965 Mon Sep 17 00:00:00 2001 From: Joe Beda Date: Mon, 17 Oct 2016 11:11:45 -0700 Subject: [PATCH 041/113] Document kubeadm automation. --- docs/admin/kubeadm.md | 60 ++++++++++++++++++++------ docs/getting-started-guides/kubeadm.md | 2 + 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/docs/admin/kubeadm.md b/docs/admin/kubeadm.md index 989c925862..451041ceb5 100644 --- a/docs/admin/kubeadm.md +++ b/docs/admin/kubeadm.md @@ -9,7 +9,7 @@ assignees: This document provides information on how to use kubeadm's advanced options. -Running kubeadm init bootstraps a Kubernetes cluster. This consists of the +Running `kubeadm init` bootstraps a Kubernetes cluster. This consists of the following steps: 1. kubeadm runs a series of pre-flight checks to validate the system state @@ -17,23 +17,35 @@ before making changes. Some checks only trigger warnings, others are considered errors and will exit kubeadm until the problem is corrected or the user specifies `--skip-preflight-checks`. -1. kubeadm generates a token that additional nodes can use to register themselves -with the master in future. +1. kubeadm generates a token that additional nodes can use to register +themselves with the master in future. Optionally, the user can provide a token. 1. kubeadm generates a self-signed CA using openssl to provision identities for each node in the cluster, and for the API server to secure communication with clients. -1. Outputting a kubeconfig file for the kubelet to use to connect to the API server, -as well as an additional kubeconfig file for administration. +1. Outputting a kubeconfig file for the kubelet to use to connect to the API +server, as well as an additional kubeconfig file for administration. -1. kubeadm generates Kubernetes resource manifests for the API server, controller manager -and scheduler, and placing them in `/etc/kubernetes/manifests`. The kubelet watches -this directory for static resources to create on startup. These are the core -components of Kubernetes, and once they are up and running we can use `kubectl` -to set up/manage any additional components. +1. kubeadm generates Kubernetes resource manifests for the API server, +controller manager and scheduler, and placing them in +`/etc/kubernetes/manifests`. The kubelet watches this directory for static +resources to create on startup. These are the core components of Kubernetes, and +once they are up and running we can use `kubectl` to set up/manage any +additional components. -1. kubeadm installs any add-on components, such as DNS or discovery, via the API server. +1. kubeadm installs any add-on components, such as DNS or discovery, via the API +server. + +Running `kubeadm join` on each node in the cluster consists of the following steps: + +1. Use the token to talk to the API server and securely get the root CA +certificate. + +1. Creates a local key pair. Prepares a certificate signing request (CSR) and +sends that off to the API server for signing. + +1. Configures the local kubelet to connect to the API server ## Usage @@ -127,7 +139,7 @@ necessary. By default, `kubeadm init` automatically generates the token used to initialise each new node. If you would like to manually specify this token, you can use the -`--token` flag. The token must be of the format '<6 character string>.<16 character string>'. +`--token` flag. The token must be of the format `<6 character string>.<16 character string>`. - `--use-kubernetes-version` (default 'v1.4.1') the kubernetes version to initialise @@ -138,8 +150,8 @@ for a full list of available versions). ### `kubeadm join` -`kubeadm join` has one mandatory flag, the token used to secure cluster bootstrap, -and one mandatory argument, the master IP address. +When you use kubeadm join, you must supply the token used to secure cluster +boostrap as a mandatory flag, and the master IP address as a mandatory argument. Here's an example on how to use it: @@ -156,6 +168,26 @@ necessary. By default, when `kubeadm init` runs, a token is generated and revealed in the output. That's the token you should use here. +## Automating kubeadm + +Rather than copying the token you obtained from `kubeadm init` to each node, as +in the basic `kubeadm` tutorials, you can parallelize the token distribution for +easier automation. To implement this automation, you must know the IP address +that the master will have after it is started. + +1. Generate a token. This token must have the form `<6 character string>.<16 +character string>` + + Here is a simple python one-liner for this: + + ``` + python -c 'import random; print "%0x.%0x" % (random.SystemRandom().getrandbits(3*8), random.SystemRandom().getrandbits(8*8))' + ``` + +1. Start both the master node and the worker nodes concurrently with this token. As they come up they should find each other and form the cluster. + +Once the cluster is up, you can grab the admin credentials from the master node at `/etc/kubernetes/admin.conf` and use that to talk to the cluster. + ## Troubleshooting * Some users on RHEL/CentOS 7 have reported issues with traffic being routed incorrectly due to iptables being bypassed. You should ensure `net.bridge.bridge-nf-call-iptables` is set to 1 in your sysctl config, eg. diff --git a/docs/getting-started-guides/kubeadm.md b/docs/getting-started-guides/kubeadm.md index 4fa854cc94..cd73f3e73f 100644 --- a/docs/getting-started-guides/kubeadm.md +++ b/docs/getting-started-guides/kubeadm.md @@ -13,6 +13,8 @@ The installation uses a tool called `kubeadm` which is part of Kubernetes 1.4. This process works with local VMs, physical servers and/or cloud servers. It is simple enough that you can easily integrate its use into your own automation (Terraform, Chef, Puppet, etc). +See the full [`kubeadm` reference](/docs/admin/kubeadm) for information on all `kubeadm` command-line flags and for advice on automating `kubeadm` itself. + **The `kubeadm` tool is currently in alpha but please try it out and give us [feedback](/docs/getting-started-guides/kubeadm/#feedback)!** ## Prerequisites From 71de608f4d5141be89db659b203dadeb031d5406 Mon Sep 17 00:00:00 2001 From: Joe Beda Date: Mon, 17 Oct 2016 12:30:58 -0700 Subject: [PATCH 042/113] Document kubeadm evn variables --- docs/admin/kubeadm.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/admin/kubeadm.md b/docs/admin/kubeadm.md index 451041ceb5..a8acd6b1cb 100644 --- a/docs/admin/kubeadm.md +++ b/docs/admin/kubeadm.md @@ -188,6 +188,21 @@ character string>` Once the cluster is up, you can grab the admin credentials from the master node at `/etc/kubernetes/admin.conf` and use that to talk to the cluster. +## Environment variables + +There are some environment variables that modify the way that `kubeadm` works. Most users will have no need to set these. + +| Variable | Default | Description | +| --- | --- | --- | +| `KUBE_KUBERNETES_DIR` | `/etc/kubernetes` | Where most configuration files are written to and read from | +| `KUBE_HOST_PKI_PATH` | `/etc/kubernetes/pki` | Directory for master PKI assets | +| `KUBE_HOST_ETCD_PATH` | `/var/lib/etcd` | Local etcd state for Kubernetes cluster | +| `KUBE_HYPERKUBE_IMAGE` | `` | If set, use a single hyperkube image with this name. If not set, individual images per server component will be used. | +| `KUBE_DISCOVERY_IMAGE` | `gcr.io/google_containers/kube-discovery-:1.0` | The bootstrap discovery helper image to use. | +| `KUBE_ETCD_IMAGE` | `gcr.io/google_containers/etcd-:2.2.5` | The etcd container image to use. | +| `KUBE_COMPONENT_LOGLEVEL` | `--v=4` | Logging configuration for all Kubernetes components | + + ## Troubleshooting * Some users on RHEL/CentOS 7 have reported issues with traffic being routed incorrectly due to iptables being bypassed. You should ensure `net.bridge.bridge-nf-call-iptables` is set to 1 in your sysctl config, eg. From 569d9b2fe8046a6450b279e8923d2166b851de08 Mon Sep 17 00:00:00 2001 From: ankurshukla Date: Mon, 24 Oct 2016 14:59:01 -0700 Subject: [PATCH 043/113] Updates to the ISV label and adding 2 new ISV partners --- _includes/partner-script.js | 30 ++++++++++++++++++++++-------- images/square-logos/diamanti.png | Bin 0 -> 12983 bytes images/square-logos/sematext.png | Bin 0 -> 15119 bytes partners/index.html | 2 +- 4 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 images/square-logos/diamanti.png create mode 100644 images/square-logos/sematext.png diff --git a/_includes/partner-script.js b/_includes/partner-script.js index 79cbf6d513..4d1c78a734 100644 --- a/_includes/partner-script.js +++ b/_includes/partner-script.js @@ -126,6 +126,20 @@ link: 'https://github.com/nuagenetworks/nuage-kubernetes', blurb: 'The Nuage SDN platform provides policy-based networking between Kubernetes Pods and non-Kubernetes environments with visibility and security monitoring.' }, + { + type: 0, + name: 'Sematext', + logo: 'sematext', + link: 'https://sematext.com/kubernetes/', + blurb: 'Logging & Monitoring: Automatic collection and processing of Metrics, Events and Logs for auto-discovered pods and Kubernetes nodes.' + }, + { + type: 0, + name: 'Diamanti', + logo: 'diamanti', + link: 'https://www.diamanti.com/products/', + blurb: 'Diamanti deploys containers with guaranteed performance using Kubernetes in the first hyperconverged appliance purpose built for containerized applications.' + }, { type: 1, name: 'Apprenda', @@ -169,28 +183,28 @@ blurb: 'Container Solutions is a premium software consultancy that focuses on programmable infrastructure, offering our expertise in software development, strategy and operations to help you innovate at speed and scale.' } ] - + var isvContainer = document.getElementById('isvContainer') var servContainer = document.getElementById('servContainer') - + var sorted = partners.sort(function (a, b) { if (a.name > b.name) return 1 if (a.name < b.name) return -1 return 0 }) - + sorted.forEach(function (obj) { var box = document.createElement('div') box.className = 'partner-box' var img = document.createElement('img') img.src = '/images/square-logos/' + obj.logo + '.png' - + var div = document.createElement('div') - + var p = document.createElement('p') p.textContent = obj.blurb - + var link = document.createElement('a') link.href = obj.link link.target = '_blank' @@ -201,8 +215,8 @@ box.appendChild(img) box.appendChild(div) - + var container = obj.type ? servContainer : isvContainer container.appendChild(box) }) -})(); \ No newline at end of file +})(); diff --git a/images/square-logos/diamanti.png b/images/square-logos/diamanti.png new file mode 100644 index 0000000000000000000000000000000000000000..37f1d989982a1ab4c467a5625b44821095c1d4ca GIT binary patch literal 12983 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 literal 0 HcmV?d00001 diff --git a/partners/index.html b/partners/index.html index 40dd076b30..c30a335401 100644 --- a/partners/index.html +++ b/partners/index.html @@ -15,7 +15,7 @@ title: Partners
We are working with a broad group of partners who contribute to the Kubernetes core codebase, making it stronger and richer. There partners create a vibrant Kubernetes ecosystem supporting a spectrum of complementing platforms, from open source solutions to market-leading technologies.
-

ISV Partners

+

Technology Partners

Services Partners

From 2232e063aa1e41d044d66a700fc1caa49e2e5d61 Mon Sep 17 00:00:00 2001 From: Chris Marino Date: Mon, 24 Oct 2016 16:00:28 -0700 Subject: [PATCH 044/113] Edits for consistency.. Kubeadmin, etc. --- docs/admin/addons.md | 2 +- docs/getting-started-guides/network-policy/romana.md | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/admin/addons.md b/docs/admin/addons.md index 5e6573d349..4924efd604 100644 --- a/docs/admin/addons.md +++ b/docs/admin/addons.md @@ -12,7 +12,7 @@ This page lists some of the available add-ons and links to their respective inst * [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](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes/manifests/kubeadm) 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. -* [Romana](http://romana.io) is a Layer 3 networking solution for network policy. Kubeadmin add-on installation details available [here](https://github.com/romana/romana/tree/master/containerize). +* [Romana](http://romana.io) is a Layer 3 networking solution for pod networks that also supports the [NetworkPolicy API(/docs/user-guide/networkpolicies/). Kubeadmin add-on installation details available [here](https://github.com/romana/romana/tree/master/containerize). ## Visualization & Control diff --git a/docs/getting-started-guides/network-policy/romana.md b/docs/getting-started-guides/network-policy/romana.md index 26ca728490..c25835ebb0 100644 --- a/docs/getting-started-guides/network-policy/romana.md +++ b/docs/getting-started-guides/network-policy/romana.md @@ -4,14 +4,14 @@ assignees: --- -# Installation with kubeadmin +# Installation with kubeadm -Begin by following the [kubeadm getting started guide](/docs/getting-started-guides/kubeadm/) and complete steps 1, 2, and 3. +Begin by following the [kubeadm getting started guide](/docs/getting-started-guides/kubeadm/) and complete steps 1, 2, and 3. Once completed, follow the [containerized installation guide](https://github.com/romana/romana/tree/master/containerize) for kubeadmin. Kubernetes network policies can then be applied to pods using the NetworkPolicy API. -Once completed, follow the [containerized installation guide](https://github.com/romana/romana/tree/master/containerize) for kubeadmin. +#### Additional Romana Network Policy Options -## Romana Network Policy Resources +In addition to the standard Kubernetes NetworkPolicy API, Romana also supports additional network policy functions. -* [Overview of Romana Network Policy](https://github.com/romana/romana/wiki/Romana-policies) -* [Example Policies](https://github.com/romana/core/tree/master/policy) +* [Romana Network Policy Capabilities](https://github.com/romana/romana/wiki/Romana-policies) +* [Example Romana Policies](https://github.com/romana/core/tree/master/policy) From 0bfafbf6a81fd3453de2cf8aaae5c180abb3f0b0 Mon Sep 17 00:00:00 2001 From: Chris Marino Date: Mon, 24 Oct 2016 16:22:55 -0700 Subject: [PATCH 045/113] Markdown error... --- 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 4924efd604..92b1e1998d 100644 --- a/docs/admin/addons.md +++ b/docs/admin/addons.md @@ -12,7 +12,7 @@ This page lists some of the available add-ons and links to their respective inst * [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](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes/manifests/kubeadm) 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. -* [Romana](http://romana.io) is a Layer 3 networking solution for pod networks that also supports the [NetworkPolicy API(/docs/user-guide/networkpolicies/). Kubeadmin add-on installation details available [here](https://github.com/romana/romana/tree/master/containerize). +* [Romana](http://romana.io) is a Layer 3 networking solution for pod networks that also supports the [NetworkPolicy API](/docs/user-guide/networkpolicies/). Kubeadmin add-on installation details available [here](https://github.com/romana/romana/tree/master/containerize). ## Visualization & Control From 08d1ecd1dfe57a153acaa720f424472240957045 Mon Sep 17 00:00:00 2001 From: Chris Marino Date: Mon, 24 Oct 2016 16:25:58 -0700 Subject: [PATCH 046/113] Kubeadm consistency --- 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 92b1e1998d..e802343ab9 100644 --- a/docs/admin/addons.md +++ b/docs/admin/addons.md @@ -12,7 +12,7 @@ This page lists some of the available add-ons and links to their respective inst * [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](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes/manifests/kubeadm) 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. -* [Romana](http://romana.io) is a Layer 3 networking solution for pod networks that also supports the [NetworkPolicy API](/docs/user-guide/networkpolicies/). Kubeadmin add-on installation details available [here](https://github.com/romana/romana/tree/master/containerize). +* [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). ## Visualization & Control From 8f02f91f536844a2ec68bfd0f4288862b1fcd044 Mon Sep 17 00:00:00 2001 From: Chris Love Date: Mon, 24 Oct 2016 18:56:11 -0600 Subject: [PATCH 047/113] Improving kubectl cheat sheet (#1486) * Improving kubectl cheatsheet * removing sentence and some cleanup --- docs/user-guide/kubectl-cheatsheet.md | 236 +++++++++++++++++++++----- 1 file changed, 191 insertions(+), 45 deletions(-) diff --git a/docs/user-guide/kubectl-cheatsheet.md b/docs/user-guide/kubectl-cheatsheet.md index b2e1c51fa9..14e6850f37 100644 --- a/docs/user-guide/kubectl-cheatsheet.md +++ b/docs/user-guide/kubectl-cheatsheet.md @@ -3,24 +3,57 @@ assignees: - bgrant0607 - erictune - krousey +- clove --- -An assortment of compact kubectl examples -See also: [Kubectl overview](/docs/user-guide/kubectl-overview/) and [JsonPath guide](/docs/user-guide/jsonpath). +See also: [Kubectl Overview](/docs/user-guide/kubectl-overview/) and [JsonPath Guide](/docs/user-guide/jsonpath). + +## Kubectl Autocomplete + +```console +$ source <(kubectl completion bash) # setup autocomplete in bash +$ source <(kubectl completion zsh) # setup autocomplete in zsh +``` + +## Kubectl Context and Configuration + +Set which Kubernetes cluster `kubectl` communicates with and modify configuration +information. See [kubeconfig file](/docs/user-guide/kubeconfig-file/) documentation for +detailed config file information. + +```console +$ kubectl config view # Show Merged kubeconfig settings. + +# use multiple kubeconfig files at the same time and view merged config +$ KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 kubectl config view + +# Get the password for the e2e user +$ kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}' + +$ kubectl config current-context # Display the current-context +$ kubectl config use-context my-cluster-name # set the default context to my-cluster-name + +# add a new cluster to your kubeconf that supports basic auth +$ kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword + +# set a context utilizing a specific username and namespace. +$ kubectl config set-context gce --user=cluster-admin --namespace=foo \ + && kubectl config use-context gce +``` ## Creating Objects -```shell -$ kubectl create -f ./file.yml # create resource(s) in a json or yaml file +Kubernetes manifests can be defined in json or yaml. The file extension `.yaml`, +`.yml`, and `.json` can be used. -$ kubectl create -f ./file1.yml -f ./file2.yaml # create resource(s) in a json or yaml file - -$ kubectl create -f ./dir # create resources in all .json, .yml, and .yaml files in dir - -# Create from a URL - -$ kubectl create -f http://www.fpaste.org/279276/48569091/raw/ +```console +$ kubectl create -f ./my-manifest.yaml # create resource(s) +$ kubectl create -f ./my1.yaml -f ./my2.yaml # create from multiple files +$ kubectl create -f ./dir # create resource(s) in all manifest files in dir +$ kubectl create -f https://git.io/vPieo # create resource(s) from url +$ kubectl run nginx --image=nginx # start a single instance of nginx +$ kubectl explain pods,svc # get the documentation for pod and svc manifests # Create multiple YAML objects from stdin $ cat < # List a particular replication controller -$ kubectl get replicationcontroller # List a particular RC +$ kubectl get deployment my-dep # List a particular deployment -# Verbose output -$ kubectl describe nodes -$ kubectl describe pods -$ kubectl describe pods/ # Equivalent to previous -$ kubectl describe pods # Lists pods created by using common prefix +# Describe commands with verbose output +$ kubectl describe nodes my-node +$ kubectl describe pods my-pod -# List Services Sorted by Name -$ kubectl get services --sort-by=.metadata.name +$ kubectl get services --sort-by=.metadata.name # List Services Sorted by Name # List pods Sorted by Restart Count $ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount' # Get the version label of all pods with label app=cassandra -$ kubectl get pods --selector=app=cassandra rc -o 'jsonpath={.items[*].metadata.labels.version}' +$ kubectl get pods --selector=app=cassandra rc -o \ + jsonpath='{.items[*].metadata.labels.version}' # Get ExternalIPs of all nodes $ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}' # List Names of Pods that belong to Particular RC # "jq" command useful for transformations that are too complex for jsonpath -$ sel=$(kubectl get rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"') -$ sel=${sel%?} # Remove trailing comma -$ pods=$(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name}) -$ echo $pods +$ sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"')%?} +$ echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name}) # Check which nodes are ready -$ kubectl get nodes -o jsonpath='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}'| tr ';' "\n" | grep "Ready=True" +$ JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \ + && kubectl get nodes -o jsonpath=$JSONPATH | grep "Ready=True" ``` -## Modifying and Deleting Resources +## Updating Resources -```shell -$ kubectl label pods new-label=awesome # Add a Label -$ kubectl annotate pods icon-url=http://goo.gl/XXBTWq # Add an annotation +```console +$ kubectl rolling-update frontend-v1 -f frontend-v2.json # Rolling update pods of frontend-v1 +$ kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2 # Change the name of the resource and update the image +$ kubectl rolling-update frontend --image=image:v2 # Update the pods image of frontend +$ kubectl rolling-update frontend-v1 frontend-v2 --rollback # Abort existing rollout in progress +$ cat pod.json | kubectl replace -f - # Replace a pod based on the JSON passed into stdin -# TODO: examples of kubectl edit, patch, delete, replace, scale, and rolling-update commands. +# Force replace, delete and then re-create the resource. Will cause a service outage. +$ kubectl replace --force -f ./pod.json + +# Create a service for a replicated nginx, which serves on port 80 and connects to the containers on port 8000 +$ kubectl expose rc nginx --port=80 --target-port=8000 + +# Update a single-container pod's image version (tag) to v4 +$ kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f - + +$ kubectl label pods my-pod new-label=awesome # Add a Label +$ kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # Add an annotation +$ kubectl autoscale deployment foo --min=2 --max=10 # Auto scale a deployment "foo" +``` + +## Patching Resources +Patch a resource(s) with a strategic merge patch. + +```console +$ kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}' # Partially update a node + +# Update a container's image; spec.containers[*].name is required because it's a merge key +$ kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}' + +# Update a container's image using a json patch with positional arrays +$ kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]' +``` + +## Editing Resources +The edit any API resource in an editor. + +```console +$ kubectl edit svc/docker-registry # Edit the service named docker-registry +$ KUBE_EDITOR="nano" kubectl edit svc/docker-registry # Use an alternative editor +``` + +## Scaling Resources + +```console +$ kubectl scale --replicas=3 rs/foo # Scale a replicaset named 'foo' to +$ kubectl scale --replicas=3 -f foo.yaml # Scale a resource specified in "foo.yaml" to 3 +$ kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # If the deployment named mysql's current size is 2, scale mysql to 3 +$ kubectl scale --replicas=5 rc/foo rc/bar rc/baz # Scale multiple replication controllers +``` + +## Deleting Resources + +```console +$ kubectl delete -f ./pod.json # Delete a pod using the type and name specified in pod.json +$ kubectl delete pod,service baz foo # Delete pods and services with same names "baz" and "foo" +$ kubectl delete pods,services -l name=myLabel # Delete pods and services with label name=myLabel +$ kubectl -n my-ns delete po,svc --all # Delete all pods and services in namespace my-ns ``` ## Interacting with running Pods -```shell -$ kubectl logs # dump pod logs (stdout) -$ kubectl logs -f # stream pod logs (stdout) until canceled (ctrl-c) or timeout - -$ kubectl run -i --tty busybox --image=busybox -- sh # Run pod as interactive shell -$ kubectl attach -i # Attach to Running Container -$ kubectl port-forward # Forward port of Pod to your local machine -$ kubectl port-forward # Forward port to service -$ kubectl exec -- ls / # Run command in existing pod (1 container case) -$ kubectl exec -c -- ls / # Run command in existing pod (multi-container case) +```console +$ kubectl logs my-pod # dump pod logs (stdout) +$ kubectl logs -f my-pod # stream pod logs (stdout) +$ kubectl run -i --tty busybox --image=busybox -- sh # Run pod as interactive shell +$ kubectl attach my-pod -i # Attach to Running Container +$ kubectl port-forward my-pod 5000 6000 # Forward port 6000 of Pod to your to 5000 on your local machine +$ kubectl port-forward my-svc 6000 # Forward port to service +$ kubectl exec my-pod -- ls / # Run command in existing pod (1 container case) +$ kubectl exec my-pod -c my-container -- ls / # Run command in existing pod (multi-container case) +$ kubectl top pod POD_NAME --containers # Show metrics for a given pod and its containers ``` + +## Interacting with Nodes and Cluster + +```console +$ kubectl cordon my-node # Mark my-node as unschedulable +$ kubectl drain my-node # Drain my-node in preparation for maintenance +$ kubectl uncordon my-node # Mark my-node as schedulable +$ kubectl top node my-node # Show metrics for a given node +$ kubectl cluster-info # Display addresses of the master and services +$ kubectl cluster-info dump # Dump current cluster state to stdout +$ kubectl cluster-info dump --output-directory=/path/to/cluster-state # Dump current cluster state to /path/to/cluster-state + +# If a taint with that key and effect already exists, its value is replaced as specified. +$ kubectl taint nodes foo dedicated=special-user:NoSchedule +``` + +## Resource types + +The following table includes a list of all the supported resource types and their abbreviated aliases. + +Resource type | Abbreviated alias +-------------------- | -------------------- +`clusters` | +`componentstatuses` |`cs` +`configmaps` |`cm` +`daemonsets` |`ds` +`deployments` |`deploy` +`endpoints` |`ep` +`event` |`ev` +`horizontalpodautoscalers` |`hpa` +`ingresses` |`ing` +`jobs` | +`limitranges` |`limits` +`namespaces` |`ns` +`networkpolicies` | +`nodes` |`no` +`petset` | +`persistentvolumeclaims` |`pvc` +`persistentvolumes` |`pv` +`pods` |`po` +`podsecuritypolicies` |`psp` +`podtemplates` | +`replicasets` |`rs` +`replicationcontrollers` |`rc` +`resourcequotas` |`quota` +`scheduledjob` | +`secrets` | +`serviceaccount` |`sa` +`services` |`svc` +`storageclasses` | +`thirdpartyresources` | + +### Formatting output + +To output details to your terminal window in a specific format, you can add either the `-o` or `-output` flags to a supported `kubectl` command. + +Output format | Description +--------------| ----------- +`-o=custom-columns=` | Print a table using a comma separated list of custom columns +`-o=custom-columns-file=` | Print a table using the custom columns template in the `` file +`-o=json` | Output a JSON formatted API object +`-o=jsonpath=