From 5a7e1165bb6331b1ffef24002d1b6fccfa66739e Mon Sep 17 00:00:00 2001 From: Eric Paris Date: Thu, 22 Sep 2016 11:47:29 -0400 Subject: [PATCH 001/138] '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/138] 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/138] 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/138] 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/138] 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 95e92ad5476d64e09cd1affeb80befeeb7cc2687 Mon Sep 17 00:00:00 2001 From: Jerzy Szczepkowski Date: Fri, 30 Sep 2016 11:06:51 +0200 Subject: [PATCH 006/138] Updated hpa config file to the latest API version. Updated hpa config file to the latest API version. --- .../horizontal-pod-autoscaling/hpa-php-apache.yaml | 9 ++++----- .../user-guide/horizontal-pod-autoscaling/walkthrough.md | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/docs/user-guide/horizontal-pod-autoscaling/hpa-php-apache.yaml b/docs/user-guide/horizontal-pod-autoscaling/hpa-php-apache.yaml index 72d402743d..7ccdcabafd 100644 --- a/docs/user-guide/horizontal-pod-autoscaling/hpa-php-apache.yaml +++ b/docs/user-guide/horizontal-pod-autoscaling/hpa-php-apache.yaml @@ -1,14 +1,13 @@ -apiVersion: extensions/v1beta1 +apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: php-apache namespace: default spec: - scaleRef: + scaleTargetRef: + apiVersion: extensions/v1beta1 kind: Deployment name: php-apache - subresource: scale minReplicas: 1 maxReplicas: 10 - cpuUtilization: - targetPercentage: 50 + targetCPUUtilizationPercentage: 50 diff --git a/docs/user-guide/horizontal-pod-autoscaling/walkthrough.md b/docs/user-guide/horizontal-pod-autoscaling/walkthrough.md index d445b854e4..0f288352a0 100644 --- a/docs/user-guide/horizontal-pod-autoscaling/walkthrough.md +++ b/docs/user-guide/horizontal-pod-autoscaling/walkthrough.md @@ -127,20 +127,19 @@ Here CPU utilization dropped to 0, and so HPA autoscaled the number of replicas Instead of using `kubectl autoscale` command we can use the [hpa-php-apache.yaml](/docs/user-guide/horizontal-pod-autoscaling/hpa-php-apache.yaml) file, which looks like this: ```yaml -apiVersion: extensions/v1beta1 +apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: php-apache namespace: default spec: - scaleRef: + scaleTargetRef: + apiVersion: extensions/v1beta1 kind: Deployment name: php-apache - subresource: scale minReplicas: 1 maxReplicas: 10 - cpuUtilization: - targetPercentage: 50 + targetCPUUtilizationPercentage: 50 ``` We will create the autoscaler by executing the following command: From e857d466cbea3a02a452179901cb1bbe8b0688b0 Mon Sep 17 00:00:00 2001 From: Anirudh Ramanathan Date: Wed, 5 Oct 2016 18:44:15 -0700 Subject: [PATCH 007/138] Add example for pod using emptyDir --- docs/user-guide/volumes.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/user-guide/volumes.md b/docs/user-guide/volumes.md index e33bd3e018..463a34aeae 100644 --- a/docs/user-guide/volumes.md +++ b/docs/user-guide/volumes.md @@ -108,6 +108,25 @@ While tmpfs is very fast, be aware that unlike disks, tmpfs is cleared on machine reboot and any files you write will count against your container's memory limit. +#### Example pod + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: test-pd +spec: + containers: + - image: gcr.io/google_containers/test-webserver + name: test-container + volumeMounts: + - mountPath: /cache + name: cache-volume + volumes: + - name: cache-volume + emptyDir: {} +``` + ### hostPath A `hostPath` volume mounts a file or directory from the host node's filesystem From 8d5a4c0838e4b15ed641b1722c0a3c99e2c59394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Ole=C5=9B?= Date: Thu, 6 Oct 2016 12:00:39 +0200 Subject: [PATCH 008/138] Fix kubectl get documentation - fix list of valid resource types - fix showing template It was fainling with following error message: Liquid Warning: Liquid syntax error (line 68): [:dot, "."] is not a valid expression in "{{.status.phase}}" in docs/user-guide/kubectl/kubectl_get.md --- docs/user-guide/kubectl/kubectl_get.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/user-guide/kubectl/kubectl_get.md b/docs/user-guide/kubectl/kubectl_get.md index 99f2c25802..9a6f7fc228 100644 --- a/docs/user-guide/kubectl/kubectl_get.md +++ b/docs/user-guide/kubectl/kubectl_get.md @@ -12,6 +12,7 @@ Display one or many resources Display one or many resources. Valid resource types include: + * clusters (valid only for federation apiservers) * componentstatuses (aka 'cs') * configmaps (aka 'cm') @@ -68,7 +69,9 @@ kubectl get -o json pod web-pod-13je7 kubectl get -f pod.yaml -o json # Return only the phase value of the specified pod. +{% raw %} kubectl get -o template pod/web-pod-13je7 --template={{.status.phase}} +{% endraw %} # List all replication controllers and services together in ps output format. kubectl get rc,services From cd709f29aa71ea32e2ece3d1412261bd5bb05c1f Mon Sep 17 00:00:00 2001 From: Pablo Guerrero Date: Fri, 7 Oct 2016 08:47:24 +0200 Subject: [PATCH 009/138] Minor corrections --- docs/user-guide/petset.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/user-guide/petset.md b/docs/user-guide/petset.md index 6063062df6..c3a2085a97 100644 --- a/docs/user-guide/petset.md +++ b/docs/user-guide/petset.md @@ -17,7 +17,7 @@ Throughout this doc you will see a few terms that are sometimes used interchange * Persistent Volume Claim (PVC): A request for storage, typically a [persistent volume](/docs/user-guide/persistent-volumes/walkthrough/). * Host name: The hostname attached to the UTS namespace of the pod, i.e the output of `hostname` in the pod. * DNS/Domain name: A *cluster local* domain name resolvable using standard methods (eg: [gethostbyname](http://linux.die.net/man/3/gethostbyname)). -* Ordinality: the proprety of being "ordinal", or occupying a position in a sequence. +* Ordinality: the property of being "ordinal", or occupying a position in a sequence. * Pet: a single member of a PetSet; more generally, a stateful application. * Peer: a process running a server, capable of communicating with other such processes. @@ -29,7 +29,7 @@ This doc assumes familiarity with the following Kubernetes concepts: * [Cluster DNS](/docs/admin/dns/) * [Headless Services](/docs/user-guide/services/#headless-services) * [Persistent Volumes](/docs/user-guide/volumes/) -* [Dynamic volume provisioning](http://releases.k8s.io/{{page.githubbranch}}/examples/experimental/persistent-volume-provisioning/README.md) +* [Persistent Volume Provisioning](http://releases.k8s.io/{{page.githubbranch}}/examples/experimental/persistent-volume-provisioning/README.md) You need a working Kubernetes cluster at version >= 1.3, with a healthy DNS [cluster addon](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/README.md) at version >= 15. You cannot use PetSet on a hosted Kubernetes provider that has disabled `alpha` resources. @@ -85,7 +85,7 @@ Before you start deploying applications as PetSets, there are a few limitations * PetSet is an *alpha* resource, not available in any Kubernetes release prior to 1.3. * As with all alpha/beta resources, it can be disabled through the `--runtime-config` option passed to the apiserver, and in fact most likely will be disabled on hosted offerings of Kubernetes. * The only updatable field on a PetSet is `replicas` -* The storage for a given pet must either be provisioned by a [dynamic storage provisioner](http://releases.k8s.io/{{page.githubbranch}}/examples/experimental/persistent-volume-provisioning/README.md) based on the requested `storage class`, or pre-provisioned by an admin. Note that dynamic volume provisioning is also currently in alpha. +* The storage for a given pet must either be provisioned by a [persistent volume provisioner](http://releases.k8s.io/{{page.githubbranch}}/examples/experimental/persistent-volume-provisioning/README.md) based on the requested `storage class`, or pre-provisioned by an admin. Note that persistent volume provisioning is also currently in alpha. * Deleting and/or scaling a PetSet down will *not* delete the volumes associated with the PetSet. This is done to ensure safety first, your data is more valuable than an auto purge of all related PetSet resources. **Deleting the Persistent Volume Claims will result in a deletion of the associated volumes**. * All PetSets currently require a "governing service", or a Service responsible for the network identity of the pets. The user is responsible for this Service. * Updating an existing PetSet is currently a manual process, meaning you either need to deploy a new PetSet with the new image version, or orphan Pets one by one, update their image, and join them back to the cluster. @@ -392,7 +392,8 @@ $ grace=$(kubectl get po web-0 --template '{{.spec.terminationGracePeriodSeconds $ kubectl delete petset,po -l app=nginx $ sleep $grace $ kubectl delete pvc -l app=nginx -{% endraw %}``` +{% endraw %} +``` ## Troubleshooting From 30af17a161097f0b3a8991248306f22444850598 Mon Sep 17 00:00:00 2001 From: kcluster Date: Thu, 6 Oct 2016 20:19:34 +1100 Subject: [PATCH 010/138] Add link to KCluster.io --- docs/getting-started-guides/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/getting-started-guides/index.md b/docs/getting-started-guides/index.md index ac02bd726a..a728980e50 100644 --- a/docs/getting-started-guides/index.md +++ b/docs/getting-started-guides/index.md @@ -41,6 +41,8 @@ clusters. [AppsCode.com](https://appscode.com/products/cloud-deployment/) provides managed Kubernetes clusters for various public clouds (including AWS and Google Cloud Platform). +[KCluster.io](https://kcluster.io) provides highly available and scalable managed Kubernetes clusters for AWS. + ### Turn-key Cloud Solutions These solutions allow you to create Kubernetes clusters on a range of Cloud IaaS providers with only a @@ -120,6 +122,7 @@ IaaS Provider | Config. Mgmt | OS | Networking | Docs GKE | | | GCE | [docs](https://cloud.google.com/container-engine) | ['œ“][3] | Commercial Stackpoint.io | | multi-support | multi-support | [docs](http://www.stackpointcloud.com) | | Commercial AppsCode.com | Saltstack | Debian | multi-support | [docs](https://appscode.com/products/cloud-deployment/) | | Commercial +KCluster.io | | multi-support | multi-support | [docs](https://kcluster.io) | | Commercial GCE | Saltstack | Debian | GCE | [docs](/docs/getting-started-guides/gce) | ['œ“][1] | Project Azure | CoreOS | CoreOS | Weave | [docs](/docs/getting-started-guides/coreos/azure/) | | Community ([@errordeveloper](https://github.com/errordeveloper), [@squillace](https://github.com/squillace), [@chanezon](https://github.com/chanezon), [@crossorigin](https://github.com/crossorigin)) Azure | Ignition | Ubuntu | Azure | [docs](/docs/getting-started-guides/azure) | | Community (Microsoft: [@brendandburns](https://github.com/brendandburns), [@colemickens](https://github.com/colemickens)) From 95b028be80e5cee05fc62b83d8922028165af9a0 Mon Sep 17 00:00:00 2001 From: anatoly techtonik Date: Sun, 9 Oct 2016 17:29:57 +0300 Subject: [PATCH 011/138] 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 012/138] 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 252d8b8c41e0a07ae292450ce880a77416bc6daf Mon Sep 17 00:00:00 2001 From: Fede Diaz Date: Sun, 9 Oct 2016 17:46:04 +0200 Subject: [PATCH 013/138] Update centos_manual_config.md Added flannel configuration. Now more than one worker is available. Tested on Centos7 minimal install --- .../centos/centos_manual_config.md | 73 +++++++++++++++---- 1 file changed, 57 insertions(+), 16 deletions(-) diff --git a/docs/getting-started-guides/centos/centos_manual_config.md b/docs/getting-started-guides/centos/centos_manual_config.md index f794f485a4..40325c8985 100644 --- a/docs/getting-started-guides/centos/centos_manual_config.md +++ b/docs/getting-started-guides/centos/centos_manual_config.md @@ -10,15 +10,15 @@ assignees: ## Prerequisites -You need two machines with CentOS installed on them. +You need a machine acting as master and as many CentOS 7 hosts as you would like, that act as cluster nodes. ## Starting a cluster This is a getting started guide for CentOS. It is a manual configuration so you understand all the underlying packages / services / ports, etc... -This guide will only get ONE node working. Multiple nodes requires a functional [networking configuration](/docs/admin/networking) done outside of kubernetes. Although the additional Kubernetes configuration requirements should be obvious. +The Kubernetes package provides a few services: kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy. These services are managed by systemd and the configuration resides in a central location: /etc/kubernetes. We will break the services up between the hosts. The first host, centos-master, will be the Kubernetes master. This host will run the kube-apiserver, kube-controller-manager and kube-scheduler. In addition, the master will also run _etcd_. The remaining hosts, centos-minion-n will be the nodes and run kubelet, proxy, cadvisor and docker. -The Kubernetes package provides a few services: kube-apiserver, kube-scheduler, kube-controller-manager, kubelet, kube-proxy. These services are managed by systemd and the configuration resides in a central location: /etc/kubernetes. We will break the services up between the hosts. The first host, centos-master, will be the Kubernetes master. This host will run the kube-apiserver, kube-controller-manager, and kube-scheduler. In addition, the master will also run _etcd_. The remaining host, centos-minion will be the node and run kubelet, proxy, cadvisor and docker. +All of then run flanneld as networking overlay. **System Information:** @@ -28,12 +28,14 @@ Please replace host IP with your environment. ```conf centos-master = 192.168.121.9 -centos-minion = 192.168.121.65 +centos-minion-1 = 192.168.121.65 +centos-minion-2 = 192.168.121.66 +centos-minion-3 = 192.168.121.67 ``` **Prepare the hosts:** -* Create a /etc/yum.repos.d/virt7-docker-common-release.repo on all hosts - centos-{master,minion} with following information. +* Create a /etc/yum.repos.d/virt7-docker-common-release.repo on all hosts - centos-{master,minion-n} with following information. ```conf [virt7-docker-common-release] @@ -42,17 +44,19 @@ baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/ gpgcheck=0 ``` -* Install Kubernetes and etcd on all hosts - centos-{master,minion}. This will also pull in docker and cadvisor. +* Install Kubernetes, etcd and flannel on all hosts - centos-{master,minion-n}. This will also pull in docker and cadvisor. ```shell -yum -y install --enablerepo=virt7-docker-common-release kubernetes etcd +yum -y install --enablerepo=virt7-docker-common-release kubernetes etcd flannel ``` * Add master and node to /etc/hosts on all machines (not needed if hostnames already in DNS) ```shell echo "192.168.121.9 centos-master -192.168.121.65 centos-minion" >> /etc/hosts +192.168.121.65 centos-minion-1 +192.168.121.66 centos-minion-2 +192.168.121.67 centos-minion-3" >> /etc/hosts ``` * Edit /etc/kubernetes/config which will be the same on all hosts to contain: @@ -74,7 +78,7 @@ KUBE_ALLOW_PRIV="--allow-privileged=false" KUBE_MASTER="--master=http://centos-master:8080" ``` -* Disable the firewall on both the master and node, as docker does not play well with other firewall rule managers +* Disable the firewall on the master and all the nodes, as docker does not play well with other firewall rule managers ```shell systemctl disable iptables-services firewalld @@ -114,17 +118,38 @@ KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" KUBE_API_ARGS="" ``` +* Configure ETCD to hold the network overlay configuration on master: + +```shell +$ etcdctl mkdir /kube-centos/network +$ etcdclt mk /kube-centos/network/config "{ \"Network\": \"172.40.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): + +```shell +# etcd url location. Point this to the server where etcd runs +FLANNEL_ETCD="http://centos-master:2379" + +# etcd config key. This is the configuration key that flannel queries +# For address range assignment +FLANNEL_ETCD_KEY="/kube-centos/network" + +# Any additional options that you want to pass +FLANNEL_OPTIONS="" +``` + * Start the appropriate services on master: ```shell -for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do +for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler flanneld; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done ``` -**Configure the Kubernetes services on the node.** +**Configure the Kubernetes services on the nodes.** ***We need to configure the kubelet and start the kubelet and proxy*** @@ -138,7 +163,7 @@ KUBELET_ADDRESS="--address=0.0.0.0" KUBELET_PORT="--port=10250" # You may leave this blank to use the actual hostname -KUBELET_HOSTNAME="--hostname-override=centos-minion" +KUBELET_HOSTNAME="--hostname-override=centos-minion-n" # Check the node number! # Location of the api-server KUBELET_API_SERVER="--api-servers=http://centos-master:8080" @@ -147,10 +172,24 @@ KUBELET_API_SERVER="--api-servers=http://centos-master:8080" KUBELET_ARGS="" ``` -* Start the appropriate services on node (centos-minion). +* Configure flannel to overlay Docker network in /etc/sysconfig/flanneld (in all the nodes) ```shell -for SERVICES in kube-proxy kubelet docker; do +# etcd url location. Point this to the server where etcd runs +FLANNEL_ETCD="http://centos-master:2379" + +# etcd config key. This is the configuration key that flannel queries +# For address range assignment +FLANNEL_ETCD_KEY="/kube-centos/network" + +# Any additional options that you want to pass +FLANNEL_OPTIONS="" +``` + +* Start the appropriate services on node (centos-minion-n). + +```shell +for SERVICES in kube-proxy kubelet flanneld docker; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES @@ -164,7 +203,9 @@ done ```shell $ kubectl get nodes NAME LABELS STATUS -centos-minion Ready +centos-minion-1 Ready +centos-minion-2 Ready +centos-minion-3 Ready ``` **The cluster should be running! Launch a test pod.** @@ -176,7 +217,7 @@ You should have a functional cluster, check out [101](/docs/user-guide/walkthrou IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level -------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- -Bare-metal | custom | CentOS | _none_ | [docs](/docs/getting-started-guides/centos/centos_manual_config) | | Community ([@coolsvap](https://github.com/coolsvap)) +Bare-metal | custom | CentOS | flannel | [docs](/docs/getting-started-guides/centos/centos_manual_config) | | Community ([@coolsvap](https://github.com/coolsvap)) For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From f727a572b8d06aef9e15217b66acc564aba95702 Mon Sep 17 00:00:00 2001 From: Fede Diaz Date: Sun, 9 Oct 2016 17:52:25 +0200 Subject: [PATCH 014/138] Update centos_manual_config.md Warning about flannel network --- docs/getting-started-guides/centos/centos_manual_config.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting-started-guides/centos/centos_manual_config.md b/docs/getting-started-guides/centos/centos_manual_config.md index 40325c8985..1f1c3ff1dc 100644 --- a/docs/getting-started-guides/centos/centos_manual_config.md +++ b/docs/getting-started-guides/centos/centos_manual_config.md @@ -119,6 +119,7 @@ KUBE_API_ARGS="" ``` * Configure ETCD to hold the network overlay configuration on master: +**Warning** This network must be unused in your network infrastructure! `172.40.0.0/16` is free in our network. ```shell $ etcdctl mkdir /kube-centos/network From 97aa665e143e86e15e0e14e31243dc11d6237b4f Mon Sep 17 00:00:00 2001 From: anatoly techtonik Date: Mon, 10 Oct 2016 10:50:49 +0300 Subject: [PATCH 015/138] 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 016/138] 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 017/138] 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 018/138] 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 93d5887c4b0e509849dc8602e6dfeac231a67d02 Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Fri, 14 Oct 2016 17:45:21 -0700 Subject: [PATCH 019/138] Write new material about how to contribute to the Kubernetes docs. --- README.md | 81 ++------------- _config.yml | 3 + _data/support.yml | 6 ++ docs/contribute/create-pull-request.md | 94 ++++++++++++++++++ docs/contribute/page-templates.md | 2 +- .../contribute/stage-documentation-changes.md | 98 +++++++++++++++++++ docs/contribute/write-new-topic.md | 83 ++++++++++++++++ docs/index.md | 2 +- .../http-proxy-access-api.md | 90 ----------------- editdocs.md | 42 -------- 10 files changed, 295 insertions(+), 206 deletions(-) create mode 100644 docs/contribute/create-pull-request.md create mode 100644 docs/contribute/stage-documentation-changes.md create mode 100644 docs/contribute/write-new-topic.md delete mode 100644 docs/tasks/access-kubernetes-api/access-kubernetes-api/http-proxy-access-api.md delete mode 100644 editdocs.md diff --git a/README.md b/README.md index a468c1f947..de5c7c2df3 100644 --- a/README.md +++ b/README.md @@ -4,66 +4,20 @@ Welcome! We are very pleased you want to contribute to the documentation and/or You can click the "Fork" button in the upper-right area of the screen to create a copy of our site on your GitHub account called a "fork." Make any changes you want in your fork, and when you are ready to send those changes to us, go to the index page for your fork and click "New Pull Request" to let us know about it. -## Staging the site on GitHub Pages +For more information about contributing to the Kubernetes documentation, see: -If you want to see your changes staged without having to install anything locally, remove the CNAME file in this directory and -change the name of the fork to be: +* [Creating a Documentation Pull Request](/docs/contribute/create-pull-request/) +* [Writing a New Topic](/docs/contribute/write-new-topic/) +* [Staging Your Documentation Changes](/docs/contribute/stage-documentation-changes/) +* [Using Page Templates](/docs/contribute/page-templates/) - YOUR_GITHUB_USERNAME.github.io +## Release Branch Staging -Then make your changes. +The Kubernetes site maintains staged versions at a subdomain provided by Netlify. Every PR for the Kubernetes site, either against the master branch or the upcoming release branch, is staged automatically. -When you visit [http://YOUR_GITHUB_USERNAME.github.io](http://YOUR_GITHUB_USERNAME.github.io) you should see a special-to-you version of the site that contains the changes you just made. - -## Staging the site locally (using Docker) - -Don't like installing stuff? Download and run a local staging server with a single `docker run` command. - - git clone https://github.com/kubernetes/kubernetes.github.io.git - cd kubernetes.github.io - docker run -ti --rm -v "$PWD":/k8sdocs -p 4000:4000 gcr.io/google-samples/k8sdocs:1.0 - -Then visit [http://localhost:4000](http://localhost:4000) to see our site. Any changes you make on your local machine will be automatically staged. - -If you're interested you can view [the Dockerfile for this image](https://github.com/kubernetes/kubernetes.github.io/blob/master/staging-container/Dockerfile). - -## Staging the site locally (from scratch setup) - -The below commands to setup your environment for running GitHub pages locally. Then, any edits you make will be viewable -on a lightweight webserver that runs on your local machine. - -This will typically be the fastest way (by far) to iterate on docs changes and see them staged, once you get this set up, but it does involve several install steps that take awhile to complete, and makes system-wide modifications. - -Install Ruby 2.2 or higher. If you're on Linux, run these commands: - - apt-get install software-properties-common - apt-add-repository ppa:brightbox/ruby-ng - apt-get install ruby2.2 - apt-get install ruby2.2-dev - -* If you're on a Mac, follow [these instructions](https://gorails.com/setup/osx/). -* If you're on a Windows machine you can use the [Ruby Installer](http://rubyinstaller.org/downloads/). During the installation make sure to check the option for *Add Ruby executables to your PATH*. - -The remainder of the steps should work the same across operating systems. - -To confirm you've installed Ruby correctly, at the command prompt run `gem --version` and you should get a response with your version number. Likewise you can confirm you have Git installed properly by running `git --version`, which will respond with your version of Git. - -Install the GitHub Pages package, which includes Jekyll: - - gem install github-pages - -Clone our site: - - git clone https://github.com/kubernetes/kubernetes.github.io.git - -Make any changes you want. Then, to see your changes locally: - - cd kubernetes.github.io - jekyll serve - -Your copy of the site will then be viewable at: [http://localhost:4000](http://localhost:4000) -(or wherever Jekyll tells you). +The staging site for the next upcoming Kubernetes release is here: [http://kubernetes-io-vnext-staging.netlify.com/](http://kubernetes-io-vnext-staging.netlify.com/) +The staging site reflects the current state of what's been merged in the release branch, or in other words, what the docs will look like for the next upcoming release. It's automatically updated as new PRs get merged. ## GitHub help @@ -135,23 +89,6 @@ That, of course, will send users to: (Or whatever Kubernetes release that docs branch is associated with.) -## Branch structure - -The current version of the website is served out of the `master` branch. - -All versions of the site that relate to past and future versions will be named after their Kubernetes release number. For example, [the old branch for the 1.1 docs is called `release-1.1`](https://github.com/kubernetes/kubernetes.github.io/tree/release-1.1). - -Changes in the "docsv2" branch (where we are testing a revamp of the docs) are automatically staged here: -http://k8sdocs.github.io/docs/tutorials/ - -Changes in the "release-1.1" branch (for k8s v1.1 docs) are automatically staged here: -http://kubernetes-v1-1.github.io/ - -Changes in the "release-1.3" branch (for k8s v1.3 docs) are automatically staged here: -http://kubernetes-v1-3.github.io/ - -Editing of these branches will kick off a build using Travis CI that auto-updates these URLs; you can monitor the build progress at [https://travis-ci.org/kubernetes/kubernetes.github.io](https://travis-ci.org/kubernetes/kubernetes.github.io). - ## Config yaml guidelines Guidelines for config yamls that are included in the site docs. These diff --git a/_config.yml b/_config.yml index 5094499bfe..4c398d8d57 100644 --- a/_config.yml +++ b/_config.yml @@ -27,3 +27,6 @@ defaults: showedit: true permalink: pretty + +gems: + - jekyll-redirect-from diff --git a/_data/support.yml b/_data/support.yml index d287f0ecaa..e280c827d7 100644 --- a/_data/support.yml +++ b/_data/support.yml @@ -6,6 +6,12 @@ toc: - title: Contributing to the Kubernetes Docs section: + - title: Creating a Documentation Pull Request + path: /docs/contribute/create-pull-request/ + - title: Writing a New Topic + path: /docs/contribute/write-new-topic/ + - title: Staging Your Documentation Changes + path: /docs/contribute/stage-documentation-changes/ - title: Using Page Templates path: /docs/contribute/page-templates/ diff --git a/docs/contribute/create-pull-request.md b/docs/contribute/create-pull-request.md new file mode 100644 index 0000000000..833b4abf08 --- /dev/null +++ b/docs/contribute/create-pull-request.md @@ -0,0 +1,94 @@ +--- +redirect_from: + - /editdocs/ +--- + +{% capture overview %} + +To contribute to the Kubernetes documentation, create a pull request against the +[kubernetes/kubernetes.github.io](https://github.com/kubernetes/kubernetes.github.io){: target="_blank"} +repository. This page shows how to create a pull request. + +{% endcapture %} + +{% capture prerequisites %} + +1. Create a [GitHub account](https://github.com){: target="_blank"}. + +1. Sign the +[Google Contributor License Agreement](https://cla.developers.google.com/about/google-individual){: target="_blank"}. + +1. Sign the +[Linux Contributor License Agreement](https://identity.linuxfoundation.org/projects/cncf){: target="_blank"}. + +{% endcapture %} + +{% capture steps %} + +### Creating a fork of the Kubernetes documentation repository + +1. Go to the +[kubernetes/kubernetes.github.io](https://github.com/kubernetes/kubernetes.github.io){: target="_blank"} +repository. + +1. In the upper-right corner, click **Fork**. This creates a copy of the +Kubernetes documentation repository in your GitHub account. The copy +is called a *fork*. + +### Making your changes + +1. In your GitHub account, in your fork of the Kubernetes docs, create +a new branch to use for your contribution. + +1. In your new branch, make your changes and commit them. If you want to +[write a new topic](/docs/contribute/write-new-topic/), +choose the +[page type](/docs/contribute/page-templates/) +that is the best fit for your content. + +### Submitting a pull request to the master branch + +If you want your change to be published in the released version Kubernetes docs, +create a pull request against the master branch of the Kubernetes +documentation repository. + +1. In your GitHub account, in your new branch, create a pull request +against the master branch of the kubernetes/kubernetes.github.io +repository. This opens a page that shows the status of your pull request. + +1. Click **Show all checks**. Wait for the **deploy/netlify** check to complete. +To the right of **deploy/netlify**, click **Details**. This opens a staging +site where you can verify that your changes have rendered correctly. + +1. During the next few days, check your pull request for reviewer comments. +If needed, revise your pull request by committing changes to your +new branch in your fork. + +### Submitting a pull request to the <vnext> branch + +If your documentation change should not be released until the next release of +the Kubernetes product, create a pull request against the <vnext> branch +of the Kubernetes documentation repository. The <vnext> branch has the +form `release-`, for example release-1.5. + +1. In your GitHub account, in your new branch, create a pull request +against the <vnext> branch of the kubernetes/kubernetes.github.io +repository. This opens a page that shows the status of your pull request. + +1. Click **Show all checks**. Wait for the **deploy/netlify** check to complete. +To the right of **deploy/netlify**, click **Details**. This opens a staging +site where you can verify that your changes have rendered correctly. + +1. During the next few days, check your pull request for reviewer comments. +If needed, revise your pull request by committing changes to your +new branch in your fork. + +{% endcapture %} + +{% capture whatsnext %} +* Learn about [writing a new topic](/docs/contribute/write-new-topic). +* Learn about [using page templates](/docs/contribute/page-templates/). +* Learn about [staging your changes](/docs/contribute/stage-documentation-changes). +{% endcapture %} + +{% include templates/task.md %} diff --git a/docs/contribute/page-templates.md b/docs/contribute/page-templates.md index da77bfc38e..62c4039d6a 100644 --- a/docs/contribute/page-templates.md +++ b/docs/contribute/page-templates.md @@ -71,7 +71,7 @@ Here's an interesting thing to know about the steps you just did.

Here's an example of a published topic that uses the task template:

-

Using an HTTP Proxy to Access Applications in a Cluster

+

Using an HTTP Proxy to Access the Kubernetes API

Tutorial template

diff --git a/docs/contribute/stage-documentation-changes.md b/docs/contribute/stage-documentation-changes.md new file mode 100644 index 0000000000..8c01d92158 --- /dev/null +++ b/docs/contribute/stage-documentation-changes.md @@ -0,0 +1,98 @@ +--- +--- + +{% capture overview %} +This page shows how to stage content that you want to contribute +to the Kubernetes documentation. +{% endcapture %} + +{% capture prerequisites %} +Create a fork of the Kubernetes documentation repository as described in +[Creating a Documentation Pull Request](/docs/contribute/create-pull-request/). +{% endcapture %} + +{% capture steps %} + +### Staging from your GitHub account + +GitHub provides staging of content in your master branch. Note that you +might not want to merge your changes into your master branch. If that is +the case, choose another option for staging your content. + +1. In your GitHub account, in your fork, merge your changes into +the master branch. + +1. Change the name of your repository to `.github.io`, where +`` is the username of your GitHub account. + +1. Delete the `CNAME` file. + +1. View your staged content at this URL: + + https://.github.io + +### Staging a pull request + +When you create pull request against the Kubernetes documentation +repository, you can see your changes on a staging server. + +1. In your GitHub account, in your new branch, submit a pull request to the +kubernetes/kubernetes.github.io repository. This opens a page that shows the +status of your pull request. + +1. Click **Show all checks**. Wait for the **deploy/netlify** check to complete. +To the right of **deploy/netlify**, click **Details**. This opens a staging +site where you see your changes. + +### Staging locally using Docker + +You can use the k8sdocs Docker image to run a local staging server. If you're +interested, you can view the +[Dockerfile](https://github.com/kubernetes/kubernetes.github.io/blob/master/staging-container/Dockerfile){: target="_blank"} +for this image. + +1. Install Docker if you don't already have it. + +1. Clone your fork to your local development machine. + +1. In the root of your cloned repository, enter this command to start a local +web server: + + docker run -ti --rm -v "$PWD":/k8sdocs -p 4000:4000 gcr.io/google-samples/k8sdocs:1.0 + +1. View your staged content at +[http://localhost:4000](http://localhost:4000){: target="_blank"}. + +### Staging locally without Docker + +1. [Install Ruby 2.2 or later](https://www.ruby-lang.org){: target="_blank"}. + +1. [Install RubyGems](https://rubygems.org){: target="_blank"}. + +1. Verify that Ruby and RubyGems are installed: + + gem --version + +1. Install the GitHub Pages package, which includes Jekyll: + + gem install github-pages + +1. Clone your fork to your local development machine. + +1. In the root of your cloned repository, enter this command to start a local +web server: + + jekyll serve + +1. View your staged content at +[http://localhost:4000](http://localhost:4000){: target="_blank"}. + +{% endcapture %} + +{% capture whatsnext %} +* Learn about [writing a new topic](/docs/contribute/write-new-topic/). +* Learn about [using page templates](/docs/contribute/page-templates/). +* Learn about [creating a pull request](/docs/contribute/create-pull-request/). +{% endcapture %} + +{% include templates/task.md %} diff --git a/docs/contribute/write-new-topic.md b/docs/contribute/write-new-topic.md new file mode 100644 index 0000000000..c34f3cfde1 --- /dev/null +++ b/docs/contribute/write-new-topic.md @@ -0,0 +1,83 @@ +--- +--- + +{% capture overview %} +This page shows how to create a new topic for the Kubernetes docs. +{% endcapture %} + +{% capture prerequisites %} +Create a fork of the Kubernetes documentation repository as described in +[Creating a Documentation Pull Request](/docs/contribute/create-pull-request/). +{% endcapture %} + +{% capture steps %} + +### Choosing a page type + +As you prepare to write a new topic, think about which of these page types +is the best fit for your content: + + + + + + + + + + + + + + + + + + +
TaskA task page shows how to do a single thing, typically by giving a short sequence of steps. Task pages have minimal explanation, but often provide links to conceptual topics that provide related background and knowledge.
TutorialA tutorial page shows how to accomplish a goal that is larger than a single task. Typically a tutorial page has several sections, each of which has a sequence of steps. For example, a tutorial might provide a walkthrough of a code sample that illustrates a certain feature of Kubernetes. Tutorials can include surface-level explanations, but should link to related concept topics for deep explanations.
ConceptA concept page explains some aspect of Kubernetes. For example, a concept page might describe the Kubernetes Deployment object and explain the role it plays as an application is deployed, scaled, and updated. Typically, concept pages don't include sequences of steps, but instead provide links to tasks or tutorials.
+ +Each page type has a +[template](/docs/contribute/page-templates/) +that you can use as you write your topic. +Using templates helps ensure consistency among topics of a given type. + +### Choosing a title and filename + +Choose a title that has the keywords you want search engines to find. +Create a filename that uses the words in your title separated by hyphens. +For example, the topic with title +[Using an HTTP Proxy to Access the Kubernetes API](/docs/tasks/access-kubernetes-api/http-proxy-access-api/) +has filename `http-proxy-access-api.md`. You don't need to put +"kubernetes" in the filename, because "kubernetes" is already in the +URL for the topic, for example: + + http://kubernetes.io/docs/tasks/access-kubernetes-api/http-proxy-access-api/ + +### Choosing a directory + +Depending on your page type, put your new file in a subdirectory of one of these: + +* /docs/tasks/ +* /docs/tutorials/ +* /docs/concepts/ + +You can put your file in an existing subdirectory, or you can create a new +subdirectory. + +### Creating an entry in the table of contents + +Depending page type, create an entry in one of these files: + +* /_data/tasks.yaml +* /_data/tutorials.yaml +* /_data/concepts.yaml + +{% endcapture %} + +{% capture whatsnext %} +* Learn about [using page templates](/docs/contribute/page-templates/). +* Learn about [staging your changes](/docs/contribute/stage-documentation-changes). +* Learn about [creating a pull request](/docs/contribute/write-new-topic). +{% endcapture %} + +{% include templates/task.md %} diff --git a/docs/index.md b/docs/index.md index 5e29c42dcb..9499ae68a2 100644 --- a/docs/index.md +++ b/docs/index.md @@ -117,7 +117,7 @@ h2, h3, h4 {

Contribute to Our Docs

The docs for Kubernetes are open-source, just like the code for Kubernetes itself. The docs are on GitHub Pages, so you can fork it and it will auto-stage on username.github.io, previewing your changes!

- Write Docs for K8s + Write Docs for K8s

Need Help?

diff --git a/docs/tasks/access-kubernetes-api/access-kubernetes-api/http-proxy-access-api.md b/docs/tasks/access-kubernetes-api/access-kubernetes-api/http-proxy-access-api.md deleted file mode 100644 index 0c7ad2ca87..0000000000 --- a/docs/tasks/access-kubernetes-api/access-kubernetes-api/http-proxy-access-api.md +++ /dev/null @@ -1,90 +0,0 @@ ---- ---- - -{% capture overview %} -This page shows how to use an HTTP proxy to access the Kubernetes API. -{% endcapture %} - -{% capture prerequisites %} - -* Install [kubectl](http://kubernetes.io/docs/user-guide/prereqs). - -* Create a Kubernetes cluster, including a running Kubernetes - API server. One way to create a new cluster is to use - [Minikube](/docs/getting-started-guides/minikube). - -* Configure `kubectl` to communicate with your Kubernetes API server. This - configuration is done automatically if you use Minikube. - -* If you do not already have an application running in your cluster, start - a Hello world application by entering this command: - - kubectl run --image=gcr.io/google-samples/node-hello:1.0 --port=8080 - -{% endcapture %} - -{% capture steps %} - -### Using kubectl to start a proxy server - -This command starts a proxy to the Kubernetes API server: - - kubectl proxy --port=8080 - -### Exploring the Kubernetes API - -When the proxy server is running, you can explore the API using `curl`, `wget`, -or a browser. - -Get the API versions: - - curl http://localhost:8080/api/ - - { - "kind": "APIVersions", - "versions": [ - "v1" - ], - "serverAddressByClientCIDRs": [ - { - "clientCIDR": "0.0.0.0/0", - "serverAddress": "10.0.2.15:8443" - } - ] - } - -Get a list of pods: - - curl http://localhost:8080/api/v1/namespaces/default/pods - - { - "kind": "PodList", - "apiVersion": "v1", - "metadata": { - "selfLink": "/api/v1/namespaces/default/pods", - "resourceVersion": "33074" - }, - "items": [ - { - "metadata": { - "name": "kubernetes-bootcamp-2321272333-ix8pt", - "generateName": "kubernetes-bootcamp-2321272333-", - "namespace": "default", - "selfLink": "/api/v1/namespaces/default/pods/kubernetes-bootcamp-2321272333-ix8pt", - "uid": "ba21457c-6b1d-11e6-85f7-1ef9f1dab92b", - "resourceVersion": "33003", - "creationTimestamp": "2016-08-25T23:43:30Z", - "labels": { - "pod-template-hash": "2321272333", - "run": "kubernetes-bootcamp" - }, - ... - } - -{% endcapture %} - -{% capture whatsnext %} -Learn more about [kubectl proxy](/docs/user-guide/kubectl/kubectl_proxy). -{% endcapture %} - -{% include templates/task.md %} diff --git a/editdocs.md b/editdocs.md deleted file mode 100644 index 0291912aca..0000000000 --- a/editdocs.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -layout: docwithnav ---- - - -

 

- -
- -

Continue your edit

- -

Click the below link to edit the page you were just on. When you are done, press "Commit Changes" at the bottom of the screen. This will create a copy of our site on your GitHub account called a "fork." You can make other changes in your fork after it is created, if you want. When you are ready to send us all your changes, go to the index page for your fork and click "New Pull Request" to let us know about it.

- -

- -
-
- -

Edit our site in the cloud

- -

Click the below button to visit the repo for our site. You can then click the "Fork" button in the upper-right area of the screen to create a copy of our site on your GitHub account called a "fork." Make any changes you want in your fork, and when you are ready to send those changes to us, go to the index page for your fork and click "New Pull Request" to let us know about it.

- -

Browse this site's source code

- -
- - - -{% include_relative README.md %} From 74791339ec923803538b755abbbfea6f20b2c111 Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Fri, 14 Oct 2016 17:45:21 -0700 Subject: [PATCH 020/138] Write new material about how to contribute to the Kubernetes docs. --- README.md | 81 ++------------- _config.yml | 3 + _data/support.yml | 6 ++ docs/contribute/create-pull-request.md | 94 ++++++++++++++++++ docs/contribute/page-templates.md | 2 +- .../contribute/stage-documentation-changes.md | 98 +++++++++++++++++++ docs/contribute/write-new-topic.md | 83 ++++++++++++++++ docs/index.md | 2 +- .../http-proxy-access-api.md | 90 ----------------- editdocs.md | 42 -------- 10 files changed, 295 insertions(+), 206 deletions(-) create mode 100644 docs/contribute/create-pull-request.md create mode 100644 docs/contribute/stage-documentation-changes.md create mode 100644 docs/contribute/write-new-topic.md delete mode 100644 docs/tasks/access-kubernetes-api/access-kubernetes-api/http-proxy-access-api.md delete mode 100644 editdocs.md diff --git a/README.md b/README.md index a468c1f947..85111edba9 100644 --- a/README.md +++ b/README.md @@ -4,66 +4,20 @@ Welcome! We are very pleased you want to contribute to the documentation and/or You can click the "Fork" button in the upper-right area of the screen to create a copy of our site on your GitHub account called a "fork." Make any changes you want in your fork, and when you are ready to send those changes to us, go to the index page for your fork and click "New Pull Request" to let us know about it. -## Staging the site on GitHub Pages +For more information about contributing to the Kubernetes documentation, see: -If you want to see your changes staged without having to install anything locally, remove the CNAME file in this directory and -change the name of the fork to be: +* [Creating a Documentation Pull Request](http://kubernetes.io/docs/contribute/create-pull-request/) +* [Writing a New Topic](http://kubernetes.io/docs/contribute/write-new-topic/) +* [Staging Your Documentation Changes](http://kubernetes.io/docs/contribute/stage-documentation-changes/) +* [Using Page Templates](http://kubernetes.io/docs/contribute/page-templates/) - YOUR_GITHUB_USERNAME.github.io +## Release Branch Staging -Then make your changes. +The Kubernetes site maintains staged versions at a subdomain provided by Netlify. Every PR for the Kubernetes site, either against the master branch or the upcoming release branch, is staged automatically. -When you visit [http://YOUR_GITHUB_USERNAME.github.io](http://YOUR_GITHUB_USERNAME.github.io) you should see a special-to-you version of the site that contains the changes you just made. - -## Staging the site locally (using Docker) - -Don't like installing stuff? Download and run a local staging server with a single `docker run` command. - - git clone https://github.com/kubernetes/kubernetes.github.io.git - cd kubernetes.github.io - docker run -ti --rm -v "$PWD":/k8sdocs -p 4000:4000 gcr.io/google-samples/k8sdocs:1.0 - -Then visit [http://localhost:4000](http://localhost:4000) to see our site. Any changes you make on your local machine will be automatically staged. - -If you're interested you can view [the Dockerfile for this image](https://github.com/kubernetes/kubernetes.github.io/blob/master/staging-container/Dockerfile). - -## Staging the site locally (from scratch setup) - -The below commands to setup your environment for running GitHub pages locally. Then, any edits you make will be viewable -on a lightweight webserver that runs on your local machine. - -This will typically be the fastest way (by far) to iterate on docs changes and see them staged, once you get this set up, but it does involve several install steps that take awhile to complete, and makes system-wide modifications. - -Install Ruby 2.2 or higher. If you're on Linux, run these commands: - - apt-get install software-properties-common - apt-add-repository ppa:brightbox/ruby-ng - apt-get install ruby2.2 - apt-get install ruby2.2-dev - -* If you're on a Mac, follow [these instructions](https://gorails.com/setup/osx/). -* If you're on a Windows machine you can use the [Ruby Installer](http://rubyinstaller.org/downloads/). During the installation make sure to check the option for *Add Ruby executables to your PATH*. - -The remainder of the steps should work the same across operating systems. - -To confirm you've installed Ruby correctly, at the command prompt run `gem --version` and you should get a response with your version number. Likewise you can confirm you have Git installed properly by running `git --version`, which will respond with your version of Git. - -Install the GitHub Pages package, which includes Jekyll: - - gem install github-pages - -Clone our site: - - git clone https://github.com/kubernetes/kubernetes.github.io.git - -Make any changes you want. Then, to see your changes locally: - - cd kubernetes.github.io - jekyll serve - -Your copy of the site will then be viewable at: [http://localhost:4000](http://localhost:4000) -(or wherever Jekyll tells you). +The staging site for the next upcoming Kubernetes release is here: [http://kubernetes-io-vnext-staging.netlify.com/](http://kubernetes-io-vnext-staging.netlify.com/) +The staging site reflects the current state of what's been merged in the release branch, or in other words, what the docs will look like for the next upcoming release. It's automatically updated as new PRs get merged. ## GitHub help @@ -135,23 +89,6 @@ That, of course, will send users to: (Or whatever Kubernetes release that docs branch is associated with.) -## Branch structure - -The current version of the website is served out of the `master` branch. - -All versions of the site that relate to past and future versions will be named after their Kubernetes release number. For example, [the old branch for the 1.1 docs is called `release-1.1`](https://github.com/kubernetes/kubernetes.github.io/tree/release-1.1). - -Changes in the "docsv2" branch (where we are testing a revamp of the docs) are automatically staged here: -http://k8sdocs.github.io/docs/tutorials/ - -Changes in the "release-1.1" branch (for k8s v1.1 docs) are automatically staged here: -http://kubernetes-v1-1.github.io/ - -Changes in the "release-1.3" branch (for k8s v1.3 docs) are automatically staged here: -http://kubernetes-v1-3.github.io/ - -Editing of these branches will kick off a build using Travis CI that auto-updates these URLs; you can monitor the build progress at [https://travis-ci.org/kubernetes/kubernetes.github.io](https://travis-ci.org/kubernetes/kubernetes.github.io). - ## Config yaml guidelines Guidelines for config yamls that are included in the site docs. These diff --git a/_config.yml b/_config.yml index 5094499bfe..4c398d8d57 100644 --- a/_config.yml +++ b/_config.yml @@ -27,3 +27,6 @@ defaults: showedit: true permalink: pretty + +gems: + - jekyll-redirect-from diff --git a/_data/support.yml b/_data/support.yml index d287f0ecaa..e280c827d7 100644 --- a/_data/support.yml +++ b/_data/support.yml @@ -6,6 +6,12 @@ toc: - title: Contributing to the Kubernetes Docs section: + - title: Creating a Documentation Pull Request + path: /docs/contribute/create-pull-request/ + - title: Writing a New Topic + path: /docs/contribute/write-new-topic/ + - title: Staging Your Documentation Changes + path: /docs/contribute/stage-documentation-changes/ - title: Using Page Templates path: /docs/contribute/page-templates/ diff --git a/docs/contribute/create-pull-request.md b/docs/contribute/create-pull-request.md new file mode 100644 index 0000000000..833b4abf08 --- /dev/null +++ b/docs/contribute/create-pull-request.md @@ -0,0 +1,94 @@ +--- +redirect_from: + - /editdocs/ +--- + +{% capture overview %} + +To contribute to the Kubernetes documentation, create a pull request against the +[kubernetes/kubernetes.github.io](https://github.com/kubernetes/kubernetes.github.io){: target="_blank"} +repository. This page shows how to create a pull request. + +{% endcapture %} + +{% capture prerequisites %} + +1. Create a [GitHub account](https://github.com){: target="_blank"}. + +1. Sign the +[Google Contributor License Agreement](https://cla.developers.google.com/about/google-individual){: target="_blank"}. + +1. Sign the +[Linux Contributor License Agreement](https://identity.linuxfoundation.org/projects/cncf){: target="_blank"}. + +{% endcapture %} + +{% capture steps %} + +### Creating a fork of the Kubernetes documentation repository + +1. Go to the +[kubernetes/kubernetes.github.io](https://github.com/kubernetes/kubernetes.github.io){: target="_blank"} +repository. + +1. In the upper-right corner, click **Fork**. This creates a copy of the +Kubernetes documentation repository in your GitHub account. The copy +is called a *fork*. + +### Making your changes + +1. In your GitHub account, in your fork of the Kubernetes docs, create +a new branch to use for your contribution. + +1. In your new branch, make your changes and commit them. If you want to +[write a new topic](/docs/contribute/write-new-topic/), +choose the +[page type](/docs/contribute/page-templates/) +that is the best fit for your content. + +### Submitting a pull request to the master branch + +If you want your change to be published in the released version Kubernetes docs, +create a pull request against the master branch of the Kubernetes +documentation repository. + +1. In your GitHub account, in your new branch, create a pull request +against the master branch of the kubernetes/kubernetes.github.io +repository. This opens a page that shows the status of your pull request. + +1. Click **Show all checks**. Wait for the **deploy/netlify** check to complete. +To the right of **deploy/netlify**, click **Details**. This opens a staging +site where you can verify that your changes have rendered correctly. + +1. During the next few days, check your pull request for reviewer comments. +If needed, revise your pull request by committing changes to your +new branch in your fork. + +### Submitting a pull request to the <vnext> branch + +If your documentation change should not be released until the next release of +the Kubernetes product, create a pull request against the <vnext> branch +of the Kubernetes documentation repository. The <vnext> branch has the +form `release-`, for example release-1.5. + +1. In your GitHub account, in your new branch, create a pull request +against the <vnext> branch of the kubernetes/kubernetes.github.io +repository. This opens a page that shows the status of your pull request. + +1. Click **Show all checks**. Wait for the **deploy/netlify** check to complete. +To the right of **deploy/netlify**, click **Details**. This opens a staging +site where you can verify that your changes have rendered correctly. + +1. During the next few days, check your pull request for reviewer comments. +If needed, revise your pull request by committing changes to your +new branch in your fork. + +{% endcapture %} + +{% capture whatsnext %} +* Learn about [writing a new topic](/docs/contribute/write-new-topic). +* Learn about [using page templates](/docs/contribute/page-templates/). +* Learn about [staging your changes](/docs/contribute/stage-documentation-changes). +{% endcapture %} + +{% include templates/task.md %} diff --git a/docs/contribute/page-templates.md b/docs/contribute/page-templates.md index da77bfc38e..62c4039d6a 100644 --- a/docs/contribute/page-templates.md +++ b/docs/contribute/page-templates.md @@ -71,7 +71,7 @@ Here's an interesting thing to know about the steps you just did.

Here's an example of a published topic that uses the task template:

-

Using an HTTP Proxy to Access Applications in a Cluster

+

Using an HTTP Proxy to Access the Kubernetes API

Tutorial template

diff --git a/docs/contribute/stage-documentation-changes.md b/docs/contribute/stage-documentation-changes.md new file mode 100644 index 0000000000..8c01d92158 --- /dev/null +++ b/docs/contribute/stage-documentation-changes.md @@ -0,0 +1,98 @@ +--- +--- + +{% capture overview %} +This page shows how to stage content that you want to contribute +to the Kubernetes documentation. +{% endcapture %} + +{% capture prerequisites %} +Create a fork of the Kubernetes documentation repository as described in +[Creating a Documentation Pull Request](/docs/contribute/create-pull-request/). +{% endcapture %} + +{% capture steps %} + +### Staging from your GitHub account + +GitHub provides staging of content in your master branch. Note that you +might not want to merge your changes into your master branch. If that is +the case, choose another option for staging your content. + +1. In your GitHub account, in your fork, merge your changes into +the master branch. + +1. Change the name of your repository to `.github.io`, where +`` is the username of your GitHub account. + +1. Delete the `CNAME` file. + +1. View your staged content at this URL: + + https://.github.io + +### Staging a pull request + +When you create pull request against the Kubernetes documentation +repository, you can see your changes on a staging server. + +1. In your GitHub account, in your new branch, submit a pull request to the +kubernetes/kubernetes.github.io repository. This opens a page that shows the +status of your pull request. + +1. Click **Show all checks**. Wait for the **deploy/netlify** check to complete. +To the right of **deploy/netlify**, click **Details**. This opens a staging +site where you see your changes. + +### Staging locally using Docker + +You can use the k8sdocs Docker image to run a local staging server. If you're +interested, you can view the +[Dockerfile](https://github.com/kubernetes/kubernetes.github.io/blob/master/staging-container/Dockerfile){: target="_blank"} +for this image. + +1. Install Docker if you don't already have it. + +1. Clone your fork to your local development machine. + +1. In the root of your cloned repository, enter this command to start a local +web server: + + docker run -ti --rm -v "$PWD":/k8sdocs -p 4000:4000 gcr.io/google-samples/k8sdocs:1.0 + +1. View your staged content at +[http://localhost:4000](http://localhost:4000){: target="_blank"}. + +### Staging locally without Docker + +1. [Install Ruby 2.2 or later](https://www.ruby-lang.org){: target="_blank"}. + +1. [Install RubyGems](https://rubygems.org){: target="_blank"}. + +1. Verify that Ruby and RubyGems are installed: + + gem --version + +1. Install the GitHub Pages package, which includes Jekyll: + + gem install github-pages + +1. Clone your fork to your local development machine. + +1. In the root of your cloned repository, enter this command to start a local +web server: + + jekyll serve + +1. View your staged content at +[http://localhost:4000](http://localhost:4000){: target="_blank"}. + +{% endcapture %} + +{% capture whatsnext %} +* Learn about [writing a new topic](/docs/contribute/write-new-topic/). +* Learn about [using page templates](/docs/contribute/page-templates/). +* Learn about [creating a pull request](/docs/contribute/create-pull-request/). +{% endcapture %} + +{% include templates/task.md %} diff --git a/docs/contribute/write-new-topic.md b/docs/contribute/write-new-topic.md new file mode 100644 index 0000000000..c34f3cfde1 --- /dev/null +++ b/docs/contribute/write-new-topic.md @@ -0,0 +1,83 @@ +--- +--- + +{% capture overview %} +This page shows how to create a new topic for the Kubernetes docs. +{% endcapture %} + +{% capture prerequisites %} +Create a fork of the Kubernetes documentation repository as described in +[Creating a Documentation Pull Request](/docs/contribute/create-pull-request/). +{% endcapture %} + +{% capture steps %} + +### Choosing a page type + +As you prepare to write a new topic, think about which of these page types +is the best fit for your content: + + + + + + + + + + + + + + + + + + +
TaskA task page shows how to do a single thing, typically by giving a short sequence of steps. Task pages have minimal explanation, but often provide links to conceptual topics that provide related background and knowledge.
TutorialA tutorial page shows how to accomplish a goal that is larger than a single task. Typically a tutorial page has several sections, each of which has a sequence of steps. For example, a tutorial might provide a walkthrough of a code sample that illustrates a certain feature of Kubernetes. Tutorials can include surface-level explanations, but should link to related concept topics for deep explanations.
ConceptA concept page explains some aspect of Kubernetes. For example, a concept page might describe the Kubernetes Deployment object and explain the role it plays as an application is deployed, scaled, and updated. Typically, concept pages don't include sequences of steps, but instead provide links to tasks or tutorials.
+ +Each page type has a +[template](/docs/contribute/page-templates/) +that you can use as you write your topic. +Using templates helps ensure consistency among topics of a given type. + +### Choosing a title and filename + +Choose a title that has the keywords you want search engines to find. +Create a filename that uses the words in your title separated by hyphens. +For example, the topic with title +[Using an HTTP Proxy to Access the Kubernetes API](/docs/tasks/access-kubernetes-api/http-proxy-access-api/) +has filename `http-proxy-access-api.md`. You don't need to put +"kubernetes" in the filename, because "kubernetes" is already in the +URL for the topic, for example: + + http://kubernetes.io/docs/tasks/access-kubernetes-api/http-proxy-access-api/ + +### Choosing a directory + +Depending on your page type, put your new file in a subdirectory of one of these: + +* /docs/tasks/ +* /docs/tutorials/ +* /docs/concepts/ + +You can put your file in an existing subdirectory, or you can create a new +subdirectory. + +### Creating an entry in the table of contents + +Depending page type, create an entry in one of these files: + +* /_data/tasks.yaml +* /_data/tutorials.yaml +* /_data/concepts.yaml + +{% endcapture %} + +{% capture whatsnext %} +* Learn about [using page templates](/docs/contribute/page-templates/). +* Learn about [staging your changes](/docs/contribute/stage-documentation-changes). +* Learn about [creating a pull request](/docs/contribute/write-new-topic). +{% endcapture %} + +{% include templates/task.md %} diff --git a/docs/index.md b/docs/index.md index 5e29c42dcb..9499ae68a2 100644 --- a/docs/index.md +++ b/docs/index.md @@ -117,7 +117,7 @@ h2, h3, h4 {

Contribute to Our Docs

The docs for Kubernetes are open-source, just like the code for Kubernetes itself. The docs are on GitHub Pages, so you can fork it and it will auto-stage on username.github.io, previewing your changes!

- Write Docs for K8s + Write Docs for K8s

Need Help?

diff --git a/docs/tasks/access-kubernetes-api/access-kubernetes-api/http-proxy-access-api.md b/docs/tasks/access-kubernetes-api/access-kubernetes-api/http-proxy-access-api.md deleted file mode 100644 index 0c7ad2ca87..0000000000 --- a/docs/tasks/access-kubernetes-api/access-kubernetes-api/http-proxy-access-api.md +++ /dev/null @@ -1,90 +0,0 @@ ---- ---- - -{% capture overview %} -This page shows how to use an HTTP proxy to access the Kubernetes API. -{% endcapture %} - -{% capture prerequisites %} - -* Install [kubectl](http://kubernetes.io/docs/user-guide/prereqs). - -* Create a Kubernetes cluster, including a running Kubernetes - API server. One way to create a new cluster is to use - [Minikube](/docs/getting-started-guides/minikube). - -* Configure `kubectl` to communicate with your Kubernetes API server. This - configuration is done automatically if you use Minikube. - -* If you do not already have an application running in your cluster, start - a Hello world application by entering this command: - - kubectl run --image=gcr.io/google-samples/node-hello:1.0 --port=8080 - -{% endcapture %} - -{% capture steps %} - -### Using kubectl to start a proxy server - -This command starts a proxy to the Kubernetes API server: - - kubectl proxy --port=8080 - -### Exploring the Kubernetes API - -When the proxy server is running, you can explore the API using `curl`, `wget`, -or a browser. - -Get the API versions: - - curl http://localhost:8080/api/ - - { - "kind": "APIVersions", - "versions": [ - "v1" - ], - "serverAddressByClientCIDRs": [ - { - "clientCIDR": "0.0.0.0/0", - "serverAddress": "10.0.2.15:8443" - } - ] - } - -Get a list of pods: - - curl http://localhost:8080/api/v1/namespaces/default/pods - - { - "kind": "PodList", - "apiVersion": "v1", - "metadata": { - "selfLink": "/api/v1/namespaces/default/pods", - "resourceVersion": "33074" - }, - "items": [ - { - "metadata": { - "name": "kubernetes-bootcamp-2321272333-ix8pt", - "generateName": "kubernetes-bootcamp-2321272333-", - "namespace": "default", - "selfLink": "/api/v1/namespaces/default/pods/kubernetes-bootcamp-2321272333-ix8pt", - "uid": "ba21457c-6b1d-11e6-85f7-1ef9f1dab92b", - "resourceVersion": "33003", - "creationTimestamp": "2016-08-25T23:43:30Z", - "labels": { - "pod-template-hash": "2321272333", - "run": "kubernetes-bootcamp" - }, - ... - } - -{% endcapture %} - -{% capture whatsnext %} -Learn more about [kubectl proxy](/docs/user-guide/kubectl/kubectl_proxy). -{% endcapture %} - -{% include templates/task.md %} diff --git a/editdocs.md b/editdocs.md deleted file mode 100644 index 0291912aca..0000000000 --- a/editdocs.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -layout: docwithnav ---- - - -

 

- -
- -

Continue your edit

- -

Click the below link to edit the page you were just on. When you are done, press "Commit Changes" at the bottom of the screen. This will create a copy of our site on your GitHub account called a "fork." You can make other changes in your fork after it is created, if you want. When you are ready to send us all your changes, go to the index page for your fork and click "New Pull Request" to let us know about it.

- -

- -
-
- -

Edit our site in the cloud

- -

Click the below button to visit the repo for our site. You can then click the "Fork" button in the upper-right area of the screen to create a copy of our site on your GitHub account called a "fork." Make any changes you want in your fork, and when you are ready to send those changes to us, go to the index page for your fork and click "New Pull Request" to let us know about it.

- -

Browse this site's source code

- -
- - - -{% include_relative README.md %} From 047974c924c4fbd6e762be1fbd05b11a770e3bd6 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Mon, 17 Oct 2016 15:13:44 -0600 Subject: [PATCH 021/138] Added more prequisites. --- docs/getting-started-guides/ubuntu.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting-started-guides/ubuntu.md b/docs/getting-started-guides/ubuntu.md index 56ef9d9515..e5a849d909 100644 --- a/docs/getting-started-guides/ubuntu.md +++ b/docs/getting-started-guides/ubuntu.md @@ -29,6 +29,7 @@ Internet to download the necessary files, while worker nodes do not. Ubuntu 15 which uses systemd instead of upstart. 4. Dependencies of this guide: etcd-2.2.1, flannel-0.5.5, k8s-1.2.0, may work with higher versions. 5. All the remote servers can be ssh logged in without a password by using key authentication. +6. The remote user on all machines is using /bin/bash as its login shell, and has sudo access. ## Starting a Cluster From 1480754235a31300b933887810443300d7bdeffd Mon Sep 17 00:00:00 2001 From: Feynman Liang Date: Mon, 17 Oct 2016 15:58:45 -0700 Subject: [PATCH 022/138] Correct typo in authorization header --- docs/admin/authentication.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/admin/authentication.md b/docs/admin/authentication.md index 5664e8b266..6819677107 100644 --- a/docs/admin/authentication.md +++ b/docs/admin/authentication.md @@ -101,7 +101,7 @@ quoting facilities of HTTP. For example: if the bearer token is header as shown below. ```http -Authentication: Bearer 31ada4fd-adec-460c-809a-9e56ceb75269 +Authorization: Bearer 31ada4fd-adec-460c-809a-9e56ceb75269 ``` ### Static Password File From 827ae558ec269a57a65186edd81efb27ee1c4a9d Mon Sep 17 00:00:00 2001 From: Fede Diaz Date: Tue, 18 Oct 2016 08:13:10 +0200 Subject: [PATCH 023/138] Update centos_manual_config.md Request change done. Fixed errata in flannel network. --- docs/getting-started-guides/centos/centos_manual_config.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/getting-started-guides/centos/centos_manual_config.md b/docs/getting-started-guides/centos/centos_manual_config.md index 1f1c3ff1dc..75b7cccbf7 100644 --- a/docs/getting-started-guides/centos/centos_manual_config.md +++ b/docs/getting-started-guides/centos/centos_manual_config.md @@ -10,7 +10,7 @@ assignees: ## Prerequisites -You need a machine acting as master and as many CentOS 7 hosts as you would like, that act as cluster nodes. +To configure Kubernetes with CentOS, you'll need a machine to act as a master, and one or more CentOS 7 hosts to act as cluster nodes. ## Starting a cluster @@ -119,11 +119,11 @@ KUBE_API_ARGS="" ``` * Configure ETCD to hold the network overlay configuration on master: -**Warning** This network must be unused in your network infrastructure! `172.40.0.0/16` is free in our network. +**Warning** This network must be unused in your network infrastructure! `172.30.0.0/16` is free in our network. ```shell $ etcdctl mkdir /kube-centos/network -$ etcdclt mk /kube-centos/network/config "{ \"Network\": \"172.40.0.0/16\", \"SubnetLen\": 24, \"Backend\": { \"Type\": \"vxlan\" } }" +$ etcdclt 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 4e1dd8314c64df24a04d14d70362cd3895d089b5 Mon Sep 17 00:00:00 2001 From: Clemens Tolboom Date: Tue, 18 Oct 2016 13:10:11 +0200 Subject: [PATCH 024/138] 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 025/138] 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 026/138] 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 65f244993cff22d76561f8cc9839e3bbdb803182 Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Tue, 18 Oct 2016 09:50:31 -0700 Subject: [PATCH 027/138] Revise the section on Branch Structure and Staging. --- README.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a4d5092fdf..40f2b42a32 100644 --- a/README.md +++ b/README.md @@ -28,17 +28,20 @@ When you create a pull request (either against master or the upcoming release), - Look for "deploy/netlify"; you'll see "Deploy Preview Ready!" if staging was successful - Click "Details" to bring up the staged site and navigate to your changes -## Release Branch Staging +## Branch structure and staging -The Kubernetes site maintains staged versions at a subdomain provided by Netlify. Every PR for the Kubernetes site, either against the master branch or the upcoming release branch, is staged automatically. +The current version of the website is served out of the `master` branch. To make changes to the live docs, such as bug fixes, broken links, typos, etc, **target your pull request to the master branch** -The staging site for the next upcoming Kubernetes release is here: [http://kubernetes-io-vnext-staging.netlify.com/](http://kubernetes-io-vnext-staging.netlify.com/) +The `release-1.x` branch stores changes for **upcoming releases of Kubernetes**. For example, the `release-1.5` branch has changes for the 1.5 release. These changes target branches (and *not* master) to avoid publishing documentation updates prior to the release for which they're relevant. If you have a change for an upcoming release of Kubernetes, **target your pull request to the appropriate release branch**. -The staging site reflects the current state of what's been merged in the release branch, or in other words, what the docs will look like for the next upcoming release. It's automatically updated as new PRs get merged. +The staging site for the next upcoming Kubernetes release is here: [http://kubernetes-io-vnext-staging.netlify.com/](http://kubernetes-io-vnext-staging.netlify.com/). The staging site reflects the current state of what's been merged in the release branch, or in other words, what the docs will look like for the next upcoming release. It's automatically updated as new PRs get merged. + +When you create a pull request, either against the master branch or the upcoming release branch, your changes are staged automatically. +The Kubernetes site maintains staged versions at a subdomain provided by Netlify. ## Staging the site locally (using Docker) -Don't like installing stuff? Download and run a local staging server with a single `docker run` command. +Don't like installing stuff? Download and run a local staging server with a single `docker run` command. git clone https://github.com/kubernetes/kubernetes.github.io.git cd kubernetes.github.io @@ -62,7 +65,7 @@ Install Ruby 2.2 or higher. If you're on Linux, run these commands: apt-get install ruby2.2 apt-get install ruby2.2-dev -* If you're on a Mac, follow [these instructions](https://gorails.com/setup/osx/). +* If you're on a Mac, follow [these instructions](https://gorails.com/setup/osx/). * If you're on a Windows machine you can use the [Ruby Installer](http://rubyinstaller.org/downloads/). During the installation make sure to check the option for *Add Ruby executables to your PATH*. The remainder of the steps should work the same across operating systems. From ebbe5bbcc1a1a9331113a76c48fd39841349e3ea Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Tue, 18 Oct 2016 16:40:10 -0700 Subject: [PATCH 028/138] Additional updates to the Staging sections of the README. --- README.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/README.md b/README.md index 40f2b42a32..c03defb3f7 100644 --- a/README.md +++ b/README.md @@ -11,14 +11,6 @@ For more information about contributing to the Kubernetes documentation, see: * [Staging Your Documentation Changes](http://kubernetes.io/docs/contribute/stage-documentation-changes/) * [Using Page Templates](http://kubernetes.io/docs/contribute/page-templates/) -## Release Branch Staging - -The Kubernetes site maintains staged versions at a subdomain provided by Netlify. Every PR for the Kubernetes site, either against the master branch or the upcoming release branch, is staged automatically. - -The staging site for the next upcoming Kubernetes release is here: [http://kubernetes-io-vnext-staging.netlify.com/](http://kubernetes-io-vnext-staging.netlify.com/) - -The staging site reflects the current state of what's been merged in the release branch, or in other words, what the docs will look like for the next upcoming release. It's automatically updated as new PRs get merged. - ## Automatic Staging for Pull Requests When you create a pull request (either against master or the upcoming release), your changes are staged in a custom subdomain on Netlify so that you can see your changes in rendered form before the PR is merged. You can use this to verify that everything is correct before the PR gets merged. To view your changes: @@ -36,9 +28,6 @@ The `release-1.x` branch stores changes for **upcoming releases of Kubernetes**. The staging site for the next upcoming Kubernetes release is here: [http://kubernetes-io-vnext-staging.netlify.com/](http://kubernetes-io-vnext-staging.netlify.com/). The staging site reflects the current state of what's been merged in the release branch, or in other words, what the docs will look like for the next upcoming release. It's automatically updated as new PRs get merged. -When you create a pull request, either against the master branch or the upcoming release branch, your changes are staged automatically. -The Kubernetes site maintains staged versions at a subdomain provided by Netlify. - ## Staging the site locally (using Docker) Don't like installing stuff? Download and run a local staging server with a single `docker run` command. From e41f80c9a508d2c6f7f23e6ae42452fd65b0b906 Mon Sep 17 00:00:00 2001 From: Steve Perry Date: Tue, 18 Oct 2016 17:25:48 -0700 Subject: [PATCH 029/138] Update README.md --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index c03defb3f7..381cd46567 100644 --- a/README.md +++ b/README.md @@ -77,11 +77,6 @@ Make any changes you want. Then, to see your changes locally: Your copy of the site will then be viewable at: [http://localhost:4000](http://localhost:4000) (or wherever Jekyll tells you). -======= - -The staging site reflects the current state of what's been merged in the release branch, or in other words, what the docs will look like for the next upcoming release. It's automatically updated as new PRs get merged. - ->>>>>>> contribution-guide-2 ## GitHub help If you're a bit rusty with git/GitHub, you might want to read From 5b6055a3749df91ae277904117944d7020c524a8 Mon Sep 17 00:00:00 2001 From: Rodrigo Campos Date: Wed, 12 Oct 2016 18:47:00 -0300 Subject: [PATCH 030/138] 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 031/138] 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 032/138] 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 033/138] 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 034/138] 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 035/138] 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 036/138] 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 68a0c5195b89281ae281cf7fb88c4fd2648b863b Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Tue, 18 Oct 2016 20:01:43 -0700 Subject: [PATCH 037/138] Write new task: Defining Environment Variables for a Container. --- _data/tasks.yml | 4 + _includes/task-tutorial-prereqs.md | 4 + .../define-environment-variable-container.md | 77 +++++++++++++++++++ .../tasks/configure-pod-container/envars.yaml | 13 ++++ 4 files changed, 98 insertions(+) create mode 100644 _includes/task-tutorial-prereqs.md create mode 100644 docs/tasks/configure-pod-container/define-environment-variable-container.md create mode 100644 docs/tasks/configure-pod-container/envars.yaml diff --git a/_data/tasks.yml b/_data/tasks.yml index 86209a52aa..91bbe1bcca 100644 --- a/_data/tasks.yml +++ b/_data/tasks.yml @@ -2,6 +2,10 @@ bigheader: "Tasks" toc: - title: Tasks path: /docs/tasks/ +- title: Configuring Pods and Containers + section: + - title: Defining Environment Variables for a Container + path: /docs/tasks/configure-pod-container/define-environment-variable-container/ - title: Accessing Applications in a Cluster section: - title: Using Port Forwarding to Access Applications in a Cluster diff --git a/_includes/task-tutorial-prereqs.md b/_includes/task-tutorial-prereqs.md new file mode 100644 index 0000000000..a9cf90d265 --- /dev/null +++ b/_includes/task-tutorial-prereqs.md @@ -0,0 +1,4 @@ +You need to have a Kubernetes cluster, and the kubectl command-line tool must +be configured to communicate with your cluster. If you do not already have a +cluster, you can create one by using +[Minikube](/docs/getting-started-guides/minikube). diff --git a/docs/tasks/configure-pod-container/define-environment-variable-container.md b/docs/tasks/configure-pod-container/define-environment-variable-container.md new file mode 100644 index 0000000000..2cba3c55f1 --- /dev/null +++ b/docs/tasks/configure-pod-container/define-environment-variable-container.md @@ -0,0 +1,77 @@ +--- +--- + +{% capture overview %} + +This page shows how to define environment variables when you run a container +in a Kubernetes Pod. + +{% endcapture %} + + +{% capture prerequisites %} + +{% include task-tutorial-prereqs.md %} + +{% endcapture %} + + +{% capture steps %} + +### Defining an environment variable for a container + +When you create a Pod, you can set environment variables for the containers +that run in the Pod. To set environment variables, include the `env` field in +the configuration file. + +In this exercise, you create a Pod that runs one container. The configuration +file for the Pod defines an environment variable with name `DEMO_GREETING` and +value `"Hello from the environment"`. Here is the configuration file for the +Pod: + +{% include code.html language="yaml" file="envars.yaml" ghlink="/docs/tasks/configure-pod-container/envars.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/envars.yaml + +1. List the running Pods: + + kubectl get pods + + The output is similar to this: + + NAME READY STATUS RESTARTS AGE + envar-demo 1/1 Running 0 9s + +1. Get a shell to the container running in your Pod: + + kubectl exec -it envar-demo -- /bin/bash + +1. In your shell, run the `printenv` command to list the environment variables. + + root@envar-demo:/# printenv + + The output is similar to this: + + NODE_VERSION=4.4.2 + EXAMPLE_SERVICE_PORT_8080_TCP_ADDR=10.3.245.237 + HOSTNAME=envar-demo + ... + DEMO_GREETING=Hello from the environment + +1. To exit the shell, enter `exit`. + +{% endcapture %} + +{% capture whatsnext %} + +* Learn more about [environment variables](/docs/user-guide/environment-guide/). +* Learn about [using secrets as environment variables](/docs/user-guide/secrets/#using-secrets-as-environment-variables). +* See [EnvVarSource](/docs/api-reference/v1/definitions/#_v1_envvarsource). + +{% endcapture %} + + +{% include templates/task.md %} diff --git a/docs/tasks/configure-pod-container/envars.yaml b/docs/tasks/configure-pod-container/envars.yaml new file mode 100644 index 0000000000..97b296ac52 --- /dev/null +++ b/docs/tasks/configure-pod-container/envars.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + name: envar-demo + labels: + purpose: demonstrate-envars +spec: + containers: + - name: envar-demo-container + image: gcr.io/google-samples/node-hello:1.0 + env: + - name: DEMO_GREETING + value: "Hello from the environment" From ff780984743807c4db523246ca2c141ffbc4a00b Mon Sep 17 00:00:00 2001 From: Sascha Brawer Date: Thu, 20 Oct 2016 07:50:07 -0700 Subject: [PATCH 038/138] Fix broken links in work queue user guide --- docs/user-guide/jobs/work-queue-1/index.md | 8 ++++---- docs/user-guide/jobs/work-queue-2/index.md | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/user-guide/jobs/work-queue-1/index.md b/docs/user-guide/jobs/work-queue-1/index.md index e579f4b295..9b0735b574 100644 --- a/docs/user-guide/jobs/work-queue-1/index.md +++ b/docs/user-guide/jobs/work-queue-1/index.md @@ -166,7 +166,7 @@ We will use the `amqp-consume` utility to read the message from the queue and run our actual program. Here is a very simple example program: -{% include code.html language="python" file="worker.py" ghlink="/docs/user-guide/job/work-queue-1/worker.py" %} +{% include code.html language="python" file="worker.py" ghlink="/docs/user-guide/jobs/work-queue-1/worker.py" %} Now, build an image. If you are working in the source tree, then change directory to `examples/job/work-queue-1`. @@ -204,7 +204,7 @@ Here is a job definition. You'll need to make a copy of the Job and edit the image to match the name you used, and call it `./job.yaml`. -{% include code.html language="yaml" file="job.yaml" ghlink="/docs/user-guide/job/work-queue-1/job.yaml" %} +{% include code.html language="yaml" file="job.yaml" ghlink="/docs/user-guide/jobs/work-queue-1/job.yaml" %} In this example, each pod works on one item from the queue and then exits. So, the completion count of the Job corresponds to the number of work items @@ -258,12 +258,12 @@ want to consider one of the other [job patterns](/docs/user-guide/jobs/#job-patt This approach creates a pod for every work item. If your work items only take a few seconds, though, creating a Pod for every work item may add a lot of overhead. Consider another -[example](/docs/user-guide/job/work-queue-2), that executes multiple work items per Pod. +[example](/docs/user-guide/jobs/work-queue-2/), that executes multiple work items per Pod. In this example, we used use the `amqp-consume` utility to read the message from the queue and run our actual program. This has the advantage that you do not need to modify your program to be aware of the queue. -A [different example](/docs/user-guide/job/work-queue-2), shows how to +A [different example](/docs/user-guide/jobs/work-queue-2/), shows how to communicate with the work queue using a client library. ## Caveats diff --git a/docs/user-guide/jobs/work-queue-2/index.md b/docs/user-guide/jobs/work-queue-2/index.md index 328ece5a64..fc31850c91 100644 --- a/docs/user-guide/jobs/work-queue-2/index.md +++ b/docs/user-guide/jobs/work-queue-2/index.md @@ -108,7 +108,7 @@ called rediswq.py ([Download](rediswq.py?raw=true)). The "worker" program in each Pod of the Job uses the work queue client library to get work. Here it is: -{% include code.html language="python" file="worker.py" ghlink="/docs/user-guide/job/work-queue-2/worker.py" %} +{% include code.html language="python" file="worker.py" ghlink="/docs/user-guide/jobs/work-queue-2/worker.py" %} If you are working from the source tree, change directory to the `examples/job/work-queue-2` directory. @@ -147,7 +147,7 @@ gcloud docker push gcr.io//job-wq-2 Here is the job definition: -{% include code.html language="yaml" file="job.yaml" ghlink="/docs/user-guide/job/work-queue-2/job.yaml" %} +{% include code.html language="yaml" file="job.yaml" ghlink="/docs/user-guide/jobs/work-queue-2/job.yaml" %} Be sure to edit the job template to change `gcr.io/myproject` to your own path. From 32f45fb417fb3bf0fc29e6792fa059206af7ecd3 Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Thu, 20 Oct 2016 11:05:23 -0700 Subject: [PATCH 039/138] 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 7b330390e2f83b6c9671581e9b3971329879a361 Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Thu, 20 Oct 2016 12:23:08 -0700 Subject: [PATCH 040/138] mungers: fix preformat balance Signed-off-by: Jess Frazelle --- docs/user-guide/networkpolicies.md | 6 ++++-- docs/user-guide/production-pods.md | 6 ++++-- docs/user-guide/walkthrough/index.md | 6 ++++-- docs/user-guide/walkthrough/k8s201.md | 6 ++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/docs/user-guide/networkpolicies.md b/docs/user-guide/networkpolicies.md index a45534ad96..d1fe76d7ba 100644 --- a/docs/user-guide/networkpolicies.md +++ b/docs/user-guide/networkpolicies.md @@ -44,9 +44,11 @@ metadata: To configure the annotation via `kubectl`: -```shell{% raw %} +```shell +{% raw %} kubectl annotate ns "net.beta.kubernetes.io/network-policy={\"ingress\": {\"isolation\": \"DefaultDeny\"}}" -{% endraw %}``` +{% endraw %} +``` See the [NetworkPolicy getting started guide](/docs/getting-started-guides/network-policy/walkthrough) for an example. diff --git a/docs/user-guide/production-pods.md b/docs/user-guide/production-pods.md index c345ada200..440ac4619a 100644 --- a/docs/user-guide/production-pods.md +++ b/docs/user-guide/production-pods.md @@ -226,7 +226,8 @@ Here is a toy example: The message is recorded along with the other state of the last (i.e., most recent) termination: -```shell{% raw %} +```shell +{% raw %} $ kubectl create -f ./pod-w-message.yaml pod "pod-w-message" created $ sleep 70 @@ -234,7 +235,8 @@ $ kubectl get pods/pod-w-message -o go-template="{{range .status.containerStatus Sleep expired $ kubectl get pods/pod-w-message -o go-template="{{range .status.containerStatuses}}{{.lastState.terminated.exitCode}}{{end}}" 0 -{% endraw %}``` +{% endraw %} +``` ## What's next? diff --git a/docs/user-guide/walkthrough/index.md b/docs/user-guide/walkthrough/index.md index 4cc23cb71e..4c095e1c05 100644 --- a/docs/user-guide/walkthrough/index.md +++ b/docs/user-guide/walkthrough/index.md @@ -59,12 +59,14 @@ On most providers, the pod IPs are not externally accessible. The easiest way to Provided the pod IP is accessible, you should be able to access its http endpoint with wget on port 80: -```shell{% raw %} +```shell +{% raw %} $ kubectl run busybox --image=busybox --restart=Never --tty -i --generator=run-pod/v1 --env "POD_IP=$(kubectl get pod nginx -o go-template='{{.status.podIP}}')" u@busybox$ wget -qO- http://$POD_IP # Run in the busybox container u@busybox$ exit # Exit the busybox container $ kubectl delete pod busybox # Clean up the pod we created with "kubectl run" -{% endraw %}``` +{% endraw %} +``` Delete the pod by name: diff --git a/docs/user-guide/walkthrough/k8s201.md b/docs/user-guide/walkthrough/k8s201.md index 2f1f62ad1f..782bfbe418 100644 --- a/docs/user-guide/walkthrough/k8s201.md +++ b/docs/user-guide/walkthrough/k8s201.md @@ -136,7 +136,8 @@ On most providers, the service IPs are not externally accessible. The easiest wa Provided the service IP is accessible, you should be able to access its http endpoint with wget on the exposed port: -```shell{% raw %} +```shell +{% raw %} $ export SERVICE_IP=$(kubectl get service nginx-service -o go-template='{{.spec.clusterIP}}') $ export SERVICE_PORT=$(kubectl get service nginx-service -o go-template='{{(index .spec.ports 0).port}}') $ echo "$SERVICE_IP:$SERVICE_PORT" @@ -144,7 +145,8 @@ $ kubectl run busybox --generator=run-pod/v1 --image=busybox --restart=Never -- u@busybox$ wget -qO- http://$SERVICE_IP:$SERVICE_PORT # Run in the busybox container u@busybox$ exit # Exit the busybox container $ kubectl delete pod busybox # Clean up the pod we created with "kubectl run" -{% endraw %}``` +{% endraw %} +``` To delete the service by name: From a4972014d7fe95dec1447df9ca178a2b66b4f26a Mon Sep 17 00:00:00 2001 From: scotty Date: Thu, 20 Oct 2016 16:19:21 -0700 Subject: [PATCH 041/138] new partners layout --- _includes/partner-script.js | 202 +++++++++++++++++++++++ _includes/partner-style.css | 94 +++++++++++ images/community_logos/distelli_logo.png | Bin 0 -> 3872 bytes partners/index.html | 45 ++--- 4 files changed, 307 insertions(+), 34 deletions(-) create mode 100644 _includes/partner-script.js create mode 100644 _includes/partner-style.css create mode 100644 images/community_logos/distelli_logo.png diff --git a/_includes/partner-script.js b/_includes/partner-script.js new file mode 100644 index 0000000000..851b109e61 --- /dev/null +++ b/_includes/partner-script.js @@ -0,0 +1,202 @@ +;(function () { + var partners = [ + { + type: 0, + name: 'CoreOS', + logo: 'core_os', + link: 'https://tectonic.com/', + blurb: 'Tectonic is the enterprise-ready Kubernetes product, by CoreOS. It adds key features to allow you to manage, update, and control clusters in production.' + }, + { + type: 0, + name: 'Deis', + logo: 'deis', + link: 'https://deis.com', + blurb: 'Deis the creators of Helm, Workflow, and Steward, helps developers and operators build, deploy, manage and scale their applications on top of Kubernetes.' + }, + { + type: 0, + name: 'Sysdig Cloud', + logo: 'sys_dig', + link: 'https://sysdig.com/blog/monitoring-kubernetes-with-sysdig-cloud/', + blurb: 'Container native monitoring with deep support for Kubernetes.' + }, + { + type: 0, + name: 'Puppet', + logo: 'puppet', + link: 'https://puppet.com/blog/managing-kubernetes-configuration-puppet', + blurb: 'The Puppet module for Kubernetes makes it easy to manage Pods, Replication Controllers, Services and more in Kubernetes, and to build domain-specific interfaces to one\'s Kubernetes configuration.' + }, + { + type: 0, + name: 'Citrix', + logo: 'citrix', + link: 'http://wercker.com/workflows/partners/kubernetes/', + blurb: 'Netscaler CPX gives app developers all the features they need to load balance their microservices and containerized apps with Kubernetes.' + }, + { + type: 0, + name: 'Wercker', + logo: 'wercker', + link: 'http://wercker.com/workflows/partners/kubernetes/', + blurb: 'Wercker automates your build, test and deploy pipelines for launching containers and triggering rolling updates on your Kubernetes cluster. ' + }, + { + type: 0, + name: 'Rancher', + logo: 'rancher', + link: 'http://rancher.com/kubernetes/', + blurb: 'Rancher is an open-source, production-ready container management platform that makes it easy to deploy and leverage Kubernetes in the enterprise.' + }, + { + type: 0, + name: 'Red Hat', + logo: 'redhat', + link: 'https://www.openshift.com/', + blurb: 'Leverage an enterprise Kubernetes platform to orchestrate complex, multi-container apps.' + }, + { + type: 0, + name: 'Intel', + logo: 'intel', + link: 'https://tectonic.com/press/intel-coreos-collaborate-on-openstack-with-kubernetes.html', + blurb: 'Powering the GIFEE (Google’s Infrastructure for Everyone Else), to run OpenStack deployments on Kubernetes.' + }, + { + type: 0, + name: 'ElasticKube', + logo: 'elastickube', + link: 'https://www.ctl.io/elastickube-kubernetes/', + blurb: 'Self-service container management for Kubernetes.' + }, + { + type: 0, + name: 'Platform9', + logo: 'platform9', + link: 'https://platform9.com/products/kubernetes/', + blurb: 'Platform9 is the open source-as-a-service company that takes all of the goodness of Kubernetes and delivers it as a managed service.' + }, + { + type: 0, + name: 'Datadog', + logo: 'datadog', + link: 'http://docs.datadoghq.com/integrations/kubernetes/', + blurb: 'Full-stack observability for dynamic infrastructure & applications. Includes precision alerting, analytics and deep Kubernetes integrations. ' + }, + { + type: 0, + name: 'AppFormix', + logo: 'appformix', + link: 'http://www.appformix.com/solutions/appformix-for-kubernetes/', + blurb: 'AppFormix is a cloud infrastructure performance optimization service helping enterprise operators streamline their cloud operations on any Kubernetes cloud. ' + }, + { + type: 0, + name: 'Crunchy', + logo: 'crunchy', + link: 'http://info.crunchydata.com/blog/advanced-crunchy-containers-for-postgresql', + blurb: 'Crunchy PostgreSQL Container Suite is a set of containers for managing PostgreSQL with DBA microservices leveraging Kubernetes and Helm.' + }, + { + type: 0, + name: 'Aqua', + logo: 'aqua', + link: 'http://blog.aquasec.com/security-best-practices-for-kubernetes-deployment', + blurb: 'Deep, automated security for your containers running on Kubernetes.' + }, + { + type: 0, + name: 'Canonical', + logo: 'canonical', + link: 'https://jujucharms.com/canonical-kubernetes/', + blurb: 'The Canonical Distribution of Kubernetes enables you to operate Kubernetes clusters on demand on any major public cloud and private infrastructure.' + }, + { + type: 0, + name: 'Distelli', + logo: 'distelli', + link: 'https://www.distelli.com/', + blurb: 'Pipelines from your source repositories to your Kubernetes Clusters on any cloud.' + }, + { + type: 0, + name: 'Nuage networks', + logo: 'nuagenetworks', + 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: 1, + name: 'Apprenda', + logo: 'apprenda', + link: 'https://apprenda.com/kubernetes-support/', + blurb: 'Apprenda offers flexible and wide range of support plans for pure play Kubernetes on your choice of infrastructure, cloud provider and operating system.' + }, + { + type: 1, + name: 'Reactive Ops', + logo: 'reactive_ops', + link: 'https://www.reactiveops.com/kubernetes/', + blurb: 'ReactiveOps has written automation on best practices for infrastructure as code on GCP & AWS using Kubernetes, helping you build and maintain a world-class infrastructure at a fraction of the price of an internal hire.' + }, + { + type: 1, + name: 'Livewyer', + logo: 'livewyer', + link: 'https://livewyer.io/services/kubernetes-experts/', + blurb: 'Kubernetes experts that on-board applications and empower IT teams to get the most out of containerised technology.' + }, + { + type: 1, + name: 'Deis', + logo: 'deis', + link: 'https://deis.com/services/', + blurb: 'Deis provides professional services and 24x7 operational support for any Kubernetes cluster managed by our global cluster operations team.' + }, + { + type: 1, + name: 'Samsung SDS', + logo: 'samsung_sds', + link: 'http://www.samsungsdsa.com/cloud-infrastructure_kubernetes', + blurb: 'Samsung SDS’s Cloud Native Computing Team offers expert consulting across the range of technical aspects involved in building services targeted at a Kubernetes cluster.' + }, + { + type: 1, + name: 'Container Solutions', + logo: 'container_solutions', + link: 'http://container-solutions.com/resources/kubernetes/', + blurb: 'Container Solutions is a premium software consultancy that focuses on programmable infrastructure, offering our expertise in software development, strategy and operations to help you innovate at speed and scale.' + } + ] + + var isvContainer = document.getElementById('isvContainer') + var servContainer = document.getElementById('servContainer') + + partners.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' + link.textContent = 'Learn more' + + div.appendChild(p) + div.appendChild(link) + + box.appendChild(img) + box.appendChild(div) + + var container = obj.type ? servContainer : isvContainer + container.appendChild(box) + }) +})(); \ No newline at end of file diff --git a/_includes/partner-style.css b/_includes/partner-style.css new file mode 100644 index 0000000000..a8cc125992 --- /dev/null +++ b/_includes/partner-style.css @@ -0,0 +1,94 @@ +h5 { + font-size: 18px; + line-height: 1.5em; + margin-bottom: 2em; +} + +#usersGrid a { + display: inline-block; + background-color: #f9f9f9; +} + +#isvContainer, #servContainer { + position: relative; + width: 100%; + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +#isvContainer { + margin-bottom: 80px; +} + +.partner-box { + position: relative; + width: 47%; + max-width: 48%; + min-width: 48%; + margin-bottom: 20px; + padding: 20px; + flex: 1; + display: flex; + justify-content: space-between; + align-items: flex-start; +} + +.partner-box img { + background-color: #f9f9f9; +} + +.partner-box > div { + margin-left: 30px; +} + +.partner-box a { + color: #3576E3; +} + +@media screen and (max-width: 1024px) { + .partner-box { + flex-direction: column; + justify-content: flex-start; + } + + .partner-box > div { + margin: 20px 0 0; + } +} + +@media screen and (max-width: 568px) { + #isvContainer, #servContainer { + justify-content: center; + } + + .partner-box { + flex-direction: column; + justify-content: flex-start; + width: 100%; + max-width: 100%; + min-width: 100%; + } + + .partner-box > div { + margin: 20px 0 0; + } +} + +@media screen and (max-width: 568px) { + #isvContainer, #servContainer { + justify-content: center; + } + + .partner-box { + flex-direction: column; + justify-content: flex-start; + width: 100%; + max-width: 100%; + min-width: 100%; + } + + .partner-box > div { + margin: 20px 0 0; + } +} diff --git a/images/community_logos/distelli_logo.png b/images/community_logos/distelli_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d31e1d4226f49c9f27d66650e0456a35f35131cd GIT binary patch literal 3872 zcmcJS`6CmKJ@5(tv)55q`8r*{?XT!krAIq?eYQbK%(ih>eX$H461J~f>-ldBm% zSSY-3&h6+(Yv`yzlU6`Rt(@*e&296XlX!Oi?*9y~@ldF+2Z!^7U%!P~O;H}rk%)1b zC#Y+~^E+&>Pak#pC$yBQ!`*$yb&5j9BCQnVHcO7QveAgJwJ>tnkwz)O%zY#y=ubur ze+uMAkGh~sI|11IqQ{Lb^4$j=(l`2+?%IXPvaIlvnu&@pUBplJHPJq%Jyla5$Ne0{ z`Ci9nEHy5r`saSmuA0}R)d_cyKoK!)=xTmZ4g29H(srkjCFzCwy -vBlS?=?zf= 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 IcVUVD2jIYa(*OVf literal 0 HcmV?d00001 diff --git a/partners/index.html b/partners/index.html index c47f0998a7..fd7ed3eeef 100644 --- a/partners/index.html +++ b/partners/index.html @@ -16,45 +16,22 @@ title: Partners
We are working with a broad group of partners who contribute to the Kubernetes core codebase, making it stronger and richer, creating a vibrant Kubernetes ecosystem supporting a spectrum of complementing platforms, from open source solutions to market-leading technologies.

ISV Partners

-
- - - - - - - - - - - - - - - - - - - - -
+
+

Services Partners

+
- {% include footer.html %} {% include case-study-styles.html %} + + + + From 9b18efd3345496aa1e078a3c00b1b184ffec33a9 Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Thu, 20 Oct 2016 16:36:00 -0700 Subject: [PATCH 042/138] 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 973b6c1e996268b61e28831143e4a3fa0c479ef4 Mon Sep 17 00:00:00 2001 From: scotty Date: Fri, 21 Oct 2016 08:37:47 -0700 Subject: [PATCH 043/138] square logos --- images/square-logos/appformix.png | Bin 0 -> 8598 bytes images/square-logos/apprenda.png | Bin 0 -> 5933 bytes images/square-logos/aqua.png | Bin 0 -> 8847 bytes images/square-logos/canonical.png | Bin 0 -> 12615 bytes images/square-logos/citrix.png | Bin 0 -> 7569 bytes images/square-logos/container_solutions.png | Bin 0 -> 10083 bytes images/square-logos/core_os.png | Bin 0 -> 9252 bytes images/square-logos/crunchy.png | Bin 0 -> 17123 bytes images/square-logos/datadog.png | Bin 0 -> 13224 bytes images/square-logos/deis.png | Bin 0 -> 3576 bytes images/square-logos/distelli.png | Bin 0 -> 3872 bytes images/square-logos/elastickube.png | Bin 0 -> 10550 bytes images/square-logos/intel.png | Bin 0 -> 7454 bytes images/square-logos/livewyer.png | Bin 0 -> 1993 bytes images/square-logos/nuagenetworks.png | Bin 0 -> 15060 bytes images/square-logos/platform9.png | Bin 0 -> 8286 bytes images/square-logos/puppet.png | Bin 0 -> 11473 bytes images/square-logos/rancher.png | Bin 0 -> 11733 bytes images/square-logos/reactive_ops.png | Bin 0 -> 4545 bytes images/square-logos/redhat.png | Bin 0 -> 9029 bytes images/square-logos/samsung_sds.png | Bin 0 -> 9446 bytes images/square-logos/sys_dig.png | Bin 0 -> 7002 bytes images/square-logos/wercker.png | Bin 0 -> 9583 bytes 23 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/square-logos/appformix.png create mode 100644 images/square-logos/apprenda.png create mode 100644 images/square-logos/aqua.png create mode 100644 images/square-logos/canonical.png create mode 100644 images/square-logos/citrix.png create mode 100644 images/square-logos/container_solutions.png create mode 100644 images/square-logos/core_os.png create mode 100644 images/square-logos/crunchy.png create mode 100644 images/square-logos/datadog.png create mode 100644 images/square-logos/deis.png create mode 100644 images/square-logos/distelli.png create mode 100644 images/square-logos/elastickube.png create mode 100644 images/square-logos/intel.png create mode 100644 images/square-logos/livewyer.png create mode 100644 images/square-logos/nuagenetworks.png create mode 100644 images/square-logos/platform9.png create mode 100644 images/square-logos/puppet.png create mode 100644 images/square-logos/rancher.png create mode 100644 images/square-logos/reactive_ops.png create mode 100644 images/square-logos/redhat.png create mode 100644 images/square-logos/samsung_sds.png create mode 100644 images/square-logos/sys_dig.png create mode 100644 images/square-logos/wercker.png diff --git a/images/square-logos/appformix.png b/images/square-logos/appformix.png new file mode 100644 index 0000000000000000000000000000000000000000..47ad7e9722712ada4d7e9e3bbf30e4fa45ac4734 GIT binary patch literal 8598 zcmch7hc{f``}GilX!Air^cp2f^jpbT?dp~=hlVobFOM8d)4gdh4)z{N9Bi>QO6G?fS zcm!>+k$Yiy4hgq`Bz>z) zIfS9%FlrAa7N3AaCN^q7gyDvM;uwVOsxyST6qpH=NII2WVX&QZ8AetOEV|1`PgNas z5L>*Klzvm7@PT|X!Cwu#J~Sulu`+qNRn;9tBlPCu|IKl^$bDp)4#lZo3{XB+;jI1H z7J1gYzrSy9-s{B2qjgSAt&Ce-EV6I&S(p|tlje?DN#-VteHZT}Lz{0HRzP!CjY5co zAD}};qm%K_ab&)mf#>A_i5^wzf8Rl%5~i1t%j+)am&Dg1y^6X@g*poCw|OwvO?P-! z{S{12O##9JLa6r$Ue2`s^+OEBeQfiiy)Z1yK$)V@p?Xpl6=k1-cXgWO$EwX+Xt8ra=h@eio%paMmzTyby%h^It42 z)JKzahf!IBUdwl?M@*h4tq;0VKv9yBvT$%{FUn-4 z)cpn1znhMkkr`(Ky-rG^vO*s3&b)au7WHqqt1 ztCY>%N6O6uO^U=&qqL*h)q;PoJY2RPh2jF`?* zUxW0T){j~J0=v(%<|0%89&%R;LkCuq+On~F9u0Dh`|C^BLCMlfSAekCS3RUX0*LG0t zXlh-(uR~P^f2~^Bo0y=P#Bj1GORzJSAOX3Z_~qG)jKO_<9|$#6XucMMPYCohV5q4? zMFXGTJ`@qc-`lD+DgO^hx*t;SCOU9*8fvU6%JY~qgUY<+N?bK#bZ$64AHkiwC~2Oc zRdb;Cn16V#IMJqeI~X~p92<9uqDfSs>1ftd=yNH?-j@pCc_sCY0> zFMu?)&mHj{?#4VW@Y2q_h=YcT=ROLKL9}Dtrm*}zJWp1qK1gQjV|aUvrYh6}py!X1 zsXgk3TIxzrzav;Rcb^6wVD6;K-^rO@DY{UUUMNn0qR#~eGhhYC_=Y}}&)6a?|9 ztH)H;bY0`QHycMc^US%!`{%E*Cyr4ZNAlmO_#ab>oIm(sYh-JhY{(bEEXe|fqxOPFP-Y@+0gio;Z1`GD-%2Cr6GT#M z_-gch0|^xXYkx=WJT*&R?Sa5MEDFpV@t2K2xQb{^m!CByYk7W$9l%1P(Tsk;|Llao zMVJw0;Q`D(;>aCrs(j{$@AkuQv$!(kM)v3HI1~h#IXFa%;kT7_UheGXu|67fV$pd( zB@m%nYkxLk53A9M7PFu4Woh4$Y~|09&obm1%g()8G1D3T#ry^cqC{nyDdo>Ap0-i) zG}Nj(R{9cwN%tJYO=d`coDhR8pY(Lqcc38u5B~TB%#So4D~&<}Y(|z}ReBwz&9qF# z@``cB!`Xv&f<<&h=uS=W0b=h&VUkojByMG~FO9m;>Lw;R7b%9PtBVQTC?ui7~~J0~I-&=BNlFbrQT2ljI{KROx^7_i5j zkC~NQKwuu*5hz3{s(MfN?CeZ_5M904Ss0t>oov@>%XW#SJ2{1Nad35y?*xM}jm>JC z{t6EQdm(ub;J}*L*jN}5`DXV!IwS%3OKn#OXI3N$NFzS|+x@1I$U#azI3vjIz|AWl z1J4+S|MM}%<{7ffll*p`P7R$OfyQLk9Oz(XGk2^39Y4It^NNY|WU-A2hV0&|3meho zc?{WN6MEc3{w|$c3Rgi*_Z`%?#Xtx0uaXbE`PXPYE)<*2z|<4JmOI|bc(^&fxt{~g z$Q|QP;m-RJ@2DQSZk{vr5u7sl3!{>i?dD1LurkWy+EaJDL^eKLRb4^-`XWO470fFI z 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 literal 0 HcmV?d00001 diff --git a/images/square-logos/apprenda.png b/images/square-logos/apprenda.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e52068b102f2829481af9bc06363f4bc4721e3 GIT binary patch literal 5933 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 U=uO~vHaNjkwP&hT%9dgO13@uY9RL6T literal 0 HcmV?d00001 diff --git a/images/square-logos/aqua.png b/images/square-logos/aqua.png new file mode 100644 index 0000000000000000000000000000000000000000..ae480d582acceb78220ce60c06c48e86679c23d8 GIT binary patch literal 8847 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 O2pOQFM2(nn$o~Ma-XN#| literal 0 HcmV?d00001 diff --git a/images/square-logos/citrix.png b/images/square-logos/citrix.png new file mode 100644 index 0000000000000000000000000000000000000000..76a5682209d41ec27991dcfd4fc6e99381210b75 GIT binary patch literal 7569 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 literal 0 HcmV?d00001 diff --git a/images/square-logos/container_solutions.png b/images/square-logos/container_solutions.png new file mode 100644 index 0000000000000000000000000000000000000000..a386cf9ab2c5920e04434a2bde498db0a6ee94fb GIT binary patch literal 10083 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 W+X#Su`#zyVPa? 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%0Am7+YAh%#@r|7cAlzt1SYCSpN z%}=Su1~QP~xs9O9zZNktjKl$oCfhr$`UMNKZy2HMrmJ*fQcxsdJBF%|>ZZ#C)2LGG z5Q4KLs@3C2_RC*^+$se+LZFE-GOx!J z1Dxf#PC811-sGH$F%^PT{kC*o^~SgBv07QXso|RKPm3SIQ_)t%;F(Pw~FnAIpz z=HTp>0Up){lx3E}%cQ z5ZmrU#-cA+Ni{z{rG`+)xX4HUI=aHvQdqKADt+*&D6#AswizBA8JWpXPj^PZ;kE8} zn{V0LaxOVK78c&f4Km5NO2@Z~%}N6!8$`4`oNz*pKozZ9{Lh<=l>iNvAY46b)Sq{9tX zmX05qsz0u-9a-DjzgB#!T#W)4t9~L23ur{Rve&#RrQ?{dce?WoJrDlX?NlTcpEmLF z@+t!RQrTz0VRVZsu!a}TRF>AKSkutZ!Yv@sAi}{^CfJjs<7;)4CvL>xTp zhD?e^z=6Q{!9(?W(~X7Z?Sp_((^Q^6{>Ipdn>Jxmv8txw1`$Z;So;H zdf?@Dt#-`$xob)9i%K~r_8InHSC<+Vx$> zZZU)*XPuuj1a5l>PO^u>9o<$0TMQ0)`?K_rg(?NrO_uVWG6P`s_A*xBS9(SaS9(Bv zFm5Yp+bNZc1jhaB7E3aOGm}4h$C&FXBh_3=V9*}|`j@a%<(+c)PbRDC5M>Y!oGQUb5hIGkLGf2HgDBB-^^o&&MQ_i&crW*WRWIl-y~#@Lc&VW^^A z(KJ%)F5&T}#4vP;l?$JE;N0e~8oQss*;}j-lTGtFhg_{W9FR%99-J<0!pq2F)2m9m zV#*yC zH28PEuC9s@RV9%YF`p|R3x}#MwlvZmS%xESo;Ly5l41KbtS)3^!|^LMk7uu$N;HyW zy>x%6s0Q|THJC~4cr^DFq`hvdJe=RP)qj6?Jy)))WxaNC9crsgDbnt;vRV>+=r1xF z?v!HRXeahXY=vJfO~K3ECL_S{M(Kz8L#f;A>@Cuv2l#AL=a}a^l(~}631vEjGxHH5 zqP&9bEm`#nZwCChPIfhnnceSxx13qB4!NNIy-3u=>j^yBdW^~+vj3JaPfD4cnEKF4C4=%6C=#sIH3){FPr&k*kB+U9*|0JTX#!sLsWeD_@ykez5cLyrXAQQX9BSjg0~hn-IR zTs#%ir}eZ20!=t4#5@{ctH5$g=?N`hLcqqM&1G SD=t-lba}e^xvXZ!; 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 literal 0 HcmV?d00001 diff --git a/images/square-logos/deis.png b/images/square-logos/deis.png new file mode 100644 index 0000000000000000000000000000000000000000..278b8a44e084865dd87857246887686309e7a3c1 GIT binary patch literal 3576 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 -vBlS?=?zf= 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 IcVUVD2jIYa(*OVf literal 0 HcmV?d00001 diff --git a/images/square-logos/elastickube.png b/images/square-logos/elastickube.png new file mode 100644 index 0000000000000000000000000000000000000000..957c55a8e6fb14085bd0e94f3da66cea6a1a8302 GIT binary patch literal 10550 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 Ge*Hi0gyaSQ literal 0 HcmV?d00001 diff --git a/images/square-logos/intel.png b/images/square-logos/intel.png new file mode 100644 index 0000000000000000000000000000000000000000..0100964f559478ce2b14677976aae78a832333c3 GIT binary patch literal 7454 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 literal 0 HcmV?d00001 diff --git a/images/square-logos/livewyer.png b/images/square-logos/livewyer.png new file mode 100644 index 0000000000000000000000000000000000000000..e49b2d55c926a095177a35a59a2991e9935ad147 GIT binary patch literal 1993 zcmcJQ`CpQW7RFye((7(&R+=_V13Efx;3O_s7OvMdm(*MdmohQbOhv`fv;~(&6HO4) zQb!Y^#d0YzM;&#-YcAm6!nn0SN^zsNGQ8YBV$SDt&iVa&p7T6c1N=NR)%L3a0HEpR zc_K)$?<%@Rb(dle413N4fJ&v;iDSW+Xz%_ipcvy1jK0qr{m^_R-Y4L6Ru}fTTjSqh zO|y;1q>V?LlC%YEl_Ws#V8!qkXnYfKYVQrceuu`{AH8$G4dRBI+zciv8>jT;EW{&Q zd1{}?{jjibcu(PP1QnmSd>=ZUN{Sv!utP3qZ`3VrIZrxIYF+s!>JMYvu0NkQ znK`Oe;=`BM-2+i-G$@UVpEo;7gKI;#AkW@Xp7tb#U${j9!eo)9zbw6?JRKPQ>wP;(AlNA2XtD;&K2%;@cv}|BnANuiB;Vx%6M?d(z;@L zZI#Qv=OYd{l>jRDS@>1?(AgeRtt-=KOjx$Rn<~pg8s*vWB|tZAw`BK!UhCvKOWcJS zLZYxG;*s4c0&2&mOzLkZs3IaHh;6Ek@*d13{Hp4yjd zhS>Dw+-H5s5z;wBXttCb68AA;+xL=fnv3Lx)ohQh4M$0sk|=(V7xiyKSx$4$o$2z3 zM?~Xiw?Vr!6IMrPCoPJA8Xb4c4h}tr{O+NRXz1-|&hTimo#{>ygw(m#OIhig2!l{F z|8@S+ubq36@KpX|B_B62d|MO7`q{5)+Ufrw>Nw}Ynvd=KJpW+6E!&WObeAS_E+5rv zQ{q);mxt4<2i>FoR0JIFf87_K6Mb5ruIyoP(h!(WYL@aoH@%`mQ(_$fI>t zqN}R8e2-Psyk@@vgI13a%gtB-$VAG^EsO6+!pk$TSyAf%x*=d_bg zr%p$*O!DfHUi%ib9Ja}cNQF)4rXAe;X;2%!8vF zn@xlBN)rd?+H#AnXzT(7qMyLT$r7ZDfwic`&o5$eP7c8Y6yiWkN2nHb8Cr5~cHDow z0Y#{rEkJgwe?K<>Ksk1aVw^(prcbmz>1@MH^8$_KJZoBNP>Ip)az?(RI)gHxVv;cu z{qj3`^mfMVT~0H{RZ_9P%i@D|h--_~Xr}$<58#cRLaVA*MiQ54OlJ75e|115pJ?9V%l&0t07lhVJ;nOhO6c`-k2Nfr?@Ujf z79|46s?b$ab8bATof(||qj`}gSU6JpylqCfb8X>s0n?*H6m@y4w?Y^x_PYovC9iWz z1?5|K-TdF377eYv0|}@KA>p2FY)EIso6r7{0~@D<9C4$PN&8VdjH~RUiM7k0CtPHZ z0hk}O2BPhNV~kyOq4@JJgFQ1v;MI@l-Gc1h~V08WG>QWgt|BNZ9@Cail!v*=GO`bzzHotYD|7W zN2s59=O*4j-&mEwhA?C*YY7hBufAq;`L0O$7k<`3gQWXto@JHpG$c_fsd8TveiB3+UnWYyUuUdB*KPC$V0)S+5`JC?Xp0 M!up+Hy2bwTKZtYR1poj5 literal 0 HcmV?d00001 diff --git a/images/square-logos/nuagenetworks.png b/images/square-logos/nuagenetworks.png new file mode 100644 index 0000000000000000000000000000000000000000..c84a1414a7505cc7e63d33029bd8fb77d17b6ca2 GIT binary patch literal 15060 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

gAYCP6? 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 literal 0 HcmV?d00001 diff --git a/images/square-logos/reactive_ops.png b/images/square-logos/reactive_ops.png new file mode 100644 index 0000000000000000000000000000000000000000..5d699e0194faf03509620d74d59507fbea16be81 GIT binary patch literal 4545 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 literal 0 HcmV?d00001 diff --git a/images/square-logos/samsung_sds.png b/images/square-logos/samsung_sds.png new file mode 100644 index 0000000000000000000000000000000000000000..2afbc1b5a0d02422b0f68410c200c8cc804a9689 GIT binary patch literal 9446 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 Date: Fri, 21 Oct 2016 08:43:51 -0700 Subject: [PATCH 044/138] new opening message for partners page --- partners/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/partners/index.html b/partners/index.html index fd7ed3eeef..40dd076b30 100644 --- a/partners/index.html +++ b/partners/index.html @@ -14,7 +14,7 @@ title: Partners
-
We are working with a broad group of partners who contribute to the Kubernetes core codebase, making it stronger and richer, creating a vibrant Kubernetes ecosystem supporting a spectrum of complementing platforms, from open source solutions to market-leading technologies.
+
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

Services Partners

From a02e7918b0c29bff6b29b4d3e2cadf9fc7dff717 Mon Sep 17 00:00:00 2001 From: scotty Date: Fri, 21 Oct 2016 09:11:23 -0700 Subject: [PATCH 045/138] alpha sort partners --- _includes/partner-script.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/_includes/partner-script.js b/_includes/partner-script.js index 851b109e61..79cbf6d513 100644 --- a/_includes/partner-script.js +++ b/_includes/partner-script.js @@ -173,7 +173,13 @@ var isvContainer = document.getElementById('isvContainer') var servContainer = document.getElementById('servContainer') - partners.forEach(function (obj) { + 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' From 5ea3366ddebce1a589942d50b7d4f569ceeae4d4 Mon Sep 17 00:00:00 2001 From: scotty Date: Fri, 21 Oct 2016 09:17:01 -0700 Subject: [PATCH 046/138] remove parters and customers from community page --- community.html | 42 ------------------------------------------ 1 file changed, 42 deletions(-) diff --git a/community.html b/community.html index f47bff33e7..1cc5d57141 100644 --- a/community.html +++ b/community.html @@ -29,20 +29,6 @@ title: Community from AWS and Openstack to Big Data and Scalability, there’s a place for you to contribute and instructions for forming a new SIG if your special interest isn’t covered (yet).

-
-

Customers

-
- - - - - - - - - -
-

Events

@@ -50,34 +36,6 @@ title: Community frameborder="0" scrolling="no">
-
-

Partners

-

We are working with a broad group of partners who contribute to the kubernetes core codebase, making it stronger and richer, as well as help in growing the kubernetes ecosystem supporting - a sprectrum of compelmenting platforms, from open source solutions to market-leading technologies.

-
- - - - - - - - - - - - - - - - - - - - - -
-
From 772455e8c121e4bdb3faeeada6e2e5c309cd5a42 Mon Sep 17 00:00:00 2001 From: scotty Date: Fri, 21 Oct 2016 09:17:28 -0700 Subject: [PATCH 047/138] add partners to footer nav --- _includes/footer.html | 1 + _sass/_desktop.sass | 3 ++- _sass/_tablet.sass | 3 +-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/_includes/footer.html b/_includes/footer.html index f98dde06b5..15dacb72e0 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -4,6 +4,7 @@ Get Started Documentation Blog + Partners Community Case Studies diff --git a/_sass/_desktop.sass b/_sass/_desktop.sass index 033e998ba0..9c02fbcf6c 100644 --- a/_sass/_desktop.sass +++ b/_sass/_desktop.sass @@ -164,10 +164,11 @@ $video-section-height: 550px margin-bottom: 20px a - width: 20% + width: 16.65% float: left font-size: 24px font-weight: 300 + white-space: nowrap .social padding: 0 30px diff --git a/_sass/_tablet.sass b/_sass/_tablet.sass index ce9bcd941d..15d5b496f4 100644 --- a/_sass/_tablet.sass +++ b/_sass/_tablet.sass @@ -222,8 +222,7 @@ $feature-box-div-width: 45% text-align: center a - font-size: 22px - width: auto + width: 30% padding: 0 20px .social From 5c16dcf76560a10653fba09915b7ad65679d34e7 Mon Sep 17 00:00:00 2001 From: scotty Date: Fri, 21 Oct 2016 09:25:51 -0700 Subject: [PATCH 048/138] hiccup --- _includes/footer.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_includes/footer.html b/_includes/footer.html index 15dacb72e0..b913c2a824 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -4,7 +4,7 @@ Get Started Documentation Blog - Partners + Partners Community Case Studies From 1e2a44d57f4c9bf8976727ca7ffbbfb118adb994 Mon Sep 17 00:00:00 2001 From: scotty Date: Fri, 21 Oct 2016 09:29:10 -0700 Subject: [PATCH 049/138] footer test --- _includes/footer.html | 1 + 1 file changed, 1 insertion(+) diff --git a/_includes/footer.html b/_includes/footer.html index b913c2a824..baac25dff3 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -1,5 +1,6 @@