From d3cf59c0d52789bb3946d42a2d670cc1b241ee57 Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Thu, 14 Apr 2016 11:27:50 -0400 Subject: [PATCH 001/138] Note service account token cleanup --- docs/user-guide/service-accounts.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/user-guide/service-accounts.md b/docs/user-guide/service-accounts.md index f51dbd87bb..70a3d62e5f 100644 --- a/docs/user-guide/service-accounts.md +++ b/docs/user-guide/service-accounts.md @@ -111,6 +111,8 @@ secrets/build-robot-secret Now you can confirm that the newly built secret is populated with an API token for the "build-robot" service account. +Any tokens for non-existent service accounts will be cleaned up by the token controller. + ```shell $ kubectl describe secrets/build-robot-secret Name: build-robot-secret From dbf7879dc01eed79137ee13be866a9d04eb32a23 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Tue, 19 Apr 2016 09:38:32 -0400 Subject: [PATCH 002/138] Warn that iptables proxier doesn't handle readiness failures. --- docs/user-guide/services/index.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/user-guide/services/index.md b/docs/user-guide/services/index.md index 10189ddad0..232232af27 100644 --- a/docs/user-guide/services/index.md +++ b/docs/user-guide/services/index.md @@ -193,7 +193,10 @@ default is `"None"`). As with the userspace proxy, the net result is that any traffic bound for the `Service`'s IP:Port is proxied to an appropriate backend without the clients knowing anything about Kubernetes or `Services` or `Pods`. This should be -faster and more reliable than the userspace proxy. +faster and more reliable than the userspace proxy. However, unlike the +userspace proxier, the iptables proxier cannot automatically retry another +`Pod` if the one it initially selects does not respond, so it depends on +having working [readiness probes](/docs/user-guide/production-pods/#liveness-and-readiness-probes-aka-health-checks). ![Services overview diagram for iptables proxy](/images/docs/services-iptables-overview.svg) From 163ae4a8eae385be12e055fab71fcc9dbc396ff8 Mon Sep 17 00:00:00 2001 From: dagnello Date: Tue, 19 Apr 2016 12:29:20 -0700 Subject: [PATCH 003/138] Adding vShpere volume section to Volumes doc This documentation is being added in reference to vSphere cloud provider support work (issue #23932) --- docs/user-guide/volumes.md | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/docs/user-guide/volumes.md b/docs/user-guide/volumes.md index 44b9313d1e..eb1cf8dc00 100644 --- a/docs/user-guide/volumes.md +++ b/docs/user-guide/volumes.md @@ -69,6 +69,7 @@ Kubernetes supports several types of Volumes: * `persistentVolumeClaim` * `downwardAPI` * `azureFileVolume` + * `vsphereVirtualDisk` We welcome additional contributions. @@ -379,6 +380,44 @@ into a Pod. More details can be found [here](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/examples/azure_file/README.md) +### vsphereVirtualDisk + +A `VSphereVirtualDisk` is used to mount a vSphere VMDK Volume into your Pod. The contents +of a volume are preserved when it is unmounted. + +__Important: You must create a VMDK volume using `vmware-vdiskmanager -c` or +the VSphere API before you can use it__ + +#### Creating a VMDK volume + +Before you can use a vSphere volume with a pod, you need to create it. + +```shell +vmware-vdiskmanager -c -t 0 -s 40GB -a lsilogic myDisk.vmdk +``` + +#### vSphere VMDK Example configuration + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: test-vmdk +spec: + containers: + - image: gcr.io/google_containers/test-webserver + name: test-container + volumeMounts: + - mountPath: /test-vmdk + name: test-volume + volumes: + - name: test-volume + # This VMDK volume must already exist. + vsphereVirtualDisk: + volumePath: myDisk + fsType: ext4 +``` + ## Resources The storage media (Disk, SSD, etc) of an `emptyDir` volume is determined by the From 9836e662f8803c62c4f291edef63ca6304a9ea40 Mon Sep 17 00:00:00 2001 From: Ihor Dvoretskyi Date: Sun, 1 May 2016 20:01:06 -0700 Subject: [PATCH 004/138] Deleted cluster server pointer Deleted cluster server pointer as `kubectl` might be run from any other location, not only from `localhost`. --- docs/getting-started-guides/docker-multinode/testing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/getting-started-guides/docker-multinode/testing.md b/docs/getting-started-guides/docker-multinode/testing.md index 196d15f19e..c1492bf814 100644 --- a/docs/getting-started-guides/docker-multinode/testing.md +++ b/docs/getting-started-guides/docker-multinode/testing.md @@ -20,7 +20,7 @@ If the status of any node is `Unknown` or `NotReady` your cluster is broken, dou ### Run an application ```shell -kubectl -s http://localhost:8080 run nginx --image=nginx --port=80 +kubectl run nginx --image=nginx --port=80 ``` now run `docker ps` you should see nginx running. You may need to wait a few minutes for the image to get pulled. @@ -65,4 +65,4 @@ And list the pods kubectl get pods ``` -You should see pods landing on the newly added machine. \ No newline at end of file +You should see pods landing on the newly added machine. From 407a05b6d2e8abd2a68f76bf95c905df926e0b68 Mon Sep 17 00:00:00 2001 From: Jan Chaloupka Date: Sat, 7 May 2016 09:49:00 +0200 Subject: [PATCH 005/138] Extend secrets docs with key to path mapping and automatic updates of mounted secrets. Secret volume plugin has been refactored. Currently, AtomicWritter is used to project all keys. Allowing to automatically refresh projected secrets. --- docs/user-guide/secrets/index.md | 70 ++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 18 deletions(-) diff --git a/docs/user-guide/secrets/index.md b/docs/user-guide/secrets/index.md index 25eb5cfbee..7e23b14bd5 100644 --- a/docs/user-guide/secrets/index.md +++ b/docs/user-guide/secrets/index.md @@ -214,6 +214,52 @@ You can package many files into one secret, or use many secrets, whichever is co See another example of creating a secret and a pod that consumes that secret in a volume [here](/docs/user-guide/secrets/). +##### Projection of secret keys to specific paths + +We can also control the paths within the volume where Secret keys are projected. +You can use `spec.volumes[].secret.items` field to change target path of each key: + +```json +{ + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "mypod", + "namespace": "myns" + }, + "spec": { + "containers": [{ + "name": "mypod", + "image": "redis", + "volumeMounts": [{ + "name": "foo", + "mountPath": "/etc/foo", + "readOnly": true + }] + }], + "volumes": [{ + "name": "foo", + "secret": { + "secretName": "mysecret", + "items": [{ + "key": "username", + "path": "my-group/my-username" + }] + } + }] + } +} +``` + +What will happen: + +* `username` secret is stored under `/etc/foo/my-group/my-username` file instead of `/etc/foo/username`. +* `password` secret is not projected + +If `spec.volumes[].secret.items` is used, only keys specified in `items` are projected. +To consume all keys from the secret, all of them must be listed in the `items` field. +All listed keys must exist in the corresponding secret. Otherwise, the volume is not created. + ##### Consuming Secret Values from Volumes Inside the container that mounts a secret volume, the secret keys appear as @@ -234,6 +280,11 @@ $ cat /etc/foo/password The program in a container is responsible for reading the secret(s) from the files. +##### Mounted Secrets are updated automatically + +When a secret being already consumed in a volume is updated, projected keys are eventually updated as well. +The update time depends on the kubelet syncing period. + #### Using Secrets as Environment Variables To use a secret in an environment variable in a pod: @@ -334,27 +385,10 @@ secret exists. Once a pod is scheduled, the kubelet will try to fetch the secret value. If the secret cannot be fetched because it does not exist or because of a temporary lack of connection to the API server, kubelet will periodically retry. It will report an event about the pod explaining the -reason it is not started yet. Once the a secret is fetched, the kubelet will +reason it is not started yet. Once the secret is fetched, the kubelet will create and mount a volume containing it. None of the pod's containers will start until all the pod's volumes are mounted. -Once the kubelet has started a pod's containers, its secret volumes will not -change, even if the secret resource is modified. To change the secret used, -the original pod must be deleted, and a new pod (perhaps with an identical -`PodSpec`) must be created. Therefore, updating a secret follows the same -workflow as deploying a new container image. The `kubectl rolling-update` -command can be used ([man page](/docs/user-guide/kubectl/kubectl_rolling-update)). - -The [`resourceVersion`](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/docs/devel/api-conventions.md#concurrency-control-and-consistency) -of the secret is not specified when it is referenced. -Therefore, if a secret is updated at about the same time as pods are starting, -then it is not defined which version of the secret will be used for the pod. It -is not possible currently to check what resource version of a secret object was -used when a pod was created. It is planned that pods will report this -information, so that a replication controller restarts ones using an old -`resourceVersion`. In the interim, if this is a concern, it is recommended to not -update the data of existing secrets, but to create new ones with distinct names. - ## Use cases ### Use-Case: Pod with ssh keys From aa5d37c508f1d50dc3cdc679e8148f90672d98b8 Mon Sep 17 00:00:00 2001 From: Yasu Date: Tue, 10 May 2016 22:13:35 +0900 Subject: [PATCH 006/138] Fix typo --- docs/user-guide/services/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/services/index.md b/docs/user-guide/services/index.md index 10189ddad0..334e53df8d 100644 --- a/docs/user-guide/services/index.md +++ b/docs/user-guide/services/index.md @@ -165,7 +165,7 @@ will be proxied to one of the `Service`'s backend `Pods` (as reported in `Endpoints`). Which backend `Pod` to use is decided based on the `SessionAffinity` of the `Service`. Lastly, it installs iptables rules which capture traffic to the `Service`'s `clusterIP` (which is virtual) and `Port` -and redirects that traffic to the proxy port which proxies the a backend `Pod`. +and redirects that traffic to the proxy port which proxies the backend `Pod`. The net result is that any traffic bound for the `Service`'s IP:Port is proxied to an appropriate backend without the clients knowing anything about Kubernetes From 5c9d6060f342f4931bdec9e801439e12ee28e384 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joonathan=20M=C3=A4gi?= Date: Wed, 11 May 2016 14:33:33 +0300 Subject: [PATCH 007/138] Use `echo -n` for less ambiguous base64 secret example One could be bitten by having unexpected newline characters in base64 encoded secrets (reference: https://github.com/kubernetes/kubernetes/issues/23404). Calling `echo -n` will omit the trailing newline character. ` The echo utility writes any specified operands, separated by single blank (` ') characters and followed by a newline (`\n') character, to the standard output. The following option is available: -n Do not print the trailing newline character. This may also be achieved by appending `\c' to the end of the string, as is done by iBCS2 compatible systems. Note that this option as well as the effect of `\c' are implementation-defined in IEEE Std 1003.1-2001 (``POSIX.1'') as amended by Cor. 1-2002. Applications aiming for maximum portability are strongly encouraged to use printf(1) to suppress the newline character. ` --- docs/user-guide/secrets/index.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/user-guide/secrets/index.md b/docs/user-guide/secrets/index.md index 25eb5cfbee..5c0a78d064 100644 --- a/docs/user-guide/secrets/index.md +++ b/docs/user-guide/secrets/index.md @@ -94,10 +94,10 @@ in json or yaml format, and then create that object. Each item must be base64 encoded: ```shell -$ echo "admin" | base64 -YWRtaW4K -$ echo "1f2d1e2e67df" | base64 -MWYyZDFlMmU2N2RmCg== +$ echo -n "admin" | base64 +YWRtaW4= +$ echo -n "1f2d1e2e67df" | base64 +MWYyZDFlMmU2N2Rm ``` Now write a secret object that looks like this: @@ -109,8 +109,8 @@ metadata: name: mysecret type: Opaque data: - password: MWYyZDFlMmU2N2RmCg== - username: YWRtaW4K + password: MWYyZDFlMmU2N2Rm + username: YWRtaW4= ``` The data field is a map. Its keys must match @@ -138,8 +138,8 @@ Get back the secret created in the previous section: $ kubectl get secret mysecret -o yaml apiVersion: v1 data: - password: MWYyZDFlMmU2N2RmCg== - username: YWRtaW4K + password: MWYyZDFlMmU2N2Rm + username: YWRtaW4= kind: Secret metadata: creationTimestamp: 2016-01-22T18:41:56Z @@ -154,7 +154,7 @@ type: Opaque Decode the password field: ```shell -$ echo "MWYyZDFlMmU2N2RmCg==" | base64 -D +$ echo "MWYyZDFlMmU2N2Rm" | base64 -D 1f2d1e2e67df ``` From 0700c5ca798fce6d1f323ca70baa5ef45e82e491 Mon Sep 17 00:00:00 2001 From: Rudi C Date: Fri, 13 May 2016 12:01:14 -0400 Subject: [PATCH 008/138] Update service doc with AWS ELB SSL annotations Mostly the same as https://github.com/kubernetes/kubernetes/pull/25574 --- docs/user-guide/services/index.md | 38 +++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/docs/user-guide/services/index.md b/docs/user-guide/services/index.md index 10189ddad0..abbf458f3e 100644 --- a/docs/user-guide/services/index.md +++ b/docs/user-guide/services/index.md @@ -423,6 +423,44 @@ with the user-specified `loadBalancerIP`. If the `loadBalancerIP` field is not s an ephemeral IP will be assigned to the loadBalancer. If the `loadBalancerIP` is specified, but the cloud provider does not support the feature, the field will be ignored. +#### SSL support on AWS +For partial SSL support on clusters running on AWS, starting with 1.3 two +annotations can be added to a `LoadBalancer` service: + +``` + "metadata": { + "name": "my-service", + "annotations": { + "service.beta.kubernetes.io/aws-load-balancer-ssl-cert": "arn:aws:acm:us-east-1:123456789012:certificate/12345678-1234-1234-1234-123456789012" + } + }, +``` + +The first specifies which certificate to use. It can be either a +certificate from a third party issuer that was uploaded to IAM or one created +within AWS Certificate Manager. + +``` + "metadata": { + "name": "my-service", + "annotations": { + "service.beta.kubernetes.io/aws-load-balancer-backend-protocol=": "(https|http|ssl|tcp)" + } + }, +``` + +The second annotation specificies which protocol a pod speaks. For HTTPS and +SSL, the ELB will expect the pod to authenticate itself over the encrypted +connection. + +HTTP and HTTPS will select layer 7 proxying: the ELB will terminate +the connection with the user, parse headers and inject the `X-Forwarded-For` +header with the user's IP address (pods will only see the IP address of the +ELB at the other end of its connection) when forwarding requests. + +TCP and SSL will select layer 4 proxying: the ELB will forward traffic without +modifying the headers. + ### External IPs If there are external IPs that route to one or more cluster nodes, Kubernetes services can be exposed on those From c59312bd5e2c94f577e115c7315b1c0a5f909e0d Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sun, 15 May 2016 06:58:31 +0200 Subject: [PATCH 009/138] Fix kubectl commmand --- docs/user-guide/ingress.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/ingress.md b/docs/user-guide/ingress.md index 78a0d201a9..c6d63ea1f8 100644 --- a/docs/user-guide/ingress.md +++ b/docs/user-guide/ingress.md @@ -102,7 +102,7 @@ There are existing Kubernetes concepts that allow you to expose a single service {% include code.html language="yaml" file="ingress.yaml" ghlink="/docs/user-guide/ingress.yaml" %} -If you create it using `kubectl -f` you should see: +If you create it using `kubectl create -f` you should see: ```shell $ kubectl get ing From 0924dd341c1209c6607045f5caebdacd12f93d94 Mon Sep 17 00:00:00 2001 From: Andrey Kurilin Date: Tue, 17 May 2016 14:49:42 +0300 Subject: [PATCH 010/138] Add diagram for `kubectl drain` command The link to diagram will be added into long description of `kubectl drain` command. resolves #501 --- images/docs/kubectl_drain.svg | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 images/docs/kubectl_drain.svg diff --git a/images/docs/kubectl_drain.svg b/images/docs/kubectl_drain.svg new file mode 100644 index 0000000000..89c4b6682d --- /dev/null +++ b/images/docs/kubectl_drain.svg @@ -0,0 +1,2 @@ + +
$ kubectl drain NODE [flags]
[Not supported by viewer]
APIServer
[Not supported by viewer]
Kubelet
[Not supported by viewer]
cordon NODE
cordon NODE<br>
RunCordonOrUncordon
<b>RunCordonOrUncordon</b>
get all pods of NODE
get all pods of NODE<br>
GetPodsForDeletion
<b>GetPodsForDeletion</b>
delete first pod
delete first pod<br>
deletePods
<b>deletePods</b>
make one call to
API per pod
make one call to <br>API per pod <br>
delete first pod
delete first pod<br>
podList
podList
Kubernetes Cluster
Kubernetes Cluster<br>
filter mirror pods and 
 DaemonSet-managed 
pods 
[Not supported by viewer]
.
.
.
[Not supported by viewer]
.
.
.
[Not supported by viewer]
delete pod N
delete pod N<br>
delete pod N
delete pod N<br>
Mark node as
Unschedulable
Mark node as <br>Unschedulable<br>
\ No newline at end of file From 2b068831fae1fb6125cb37072bda3117cafc4fb8 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:14:29 -0400 Subject: [PATCH 011/138] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 5458d1f5bc..2a7b100ce6 100644 --- a/index.html +++ b/index.html @@ -11,7 +11,7 @@ title: Accelerate Your Delivery
-

Accelerate Your Delivery

+

Accelerate Your Stuff

Manage an infrastructure cluster as a single system to simplify container operations.
Try Our Hello World From eaf56a18d6b9de2731c12f2e3d28aba01de3f7de Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:16:17 -0400 Subject: [PATCH 012/138] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 2a7b100ce6..629647227b 100644 --- a/index.html +++ b/index.html @@ -11,7 +11,7 @@ title: Accelerate Your Delivery
-

Accelerate Your Stuff

+

Accelerate Your Stuffz

Manage an infrastructure cluster as a single system to simplify container operations.
Try Our Hello World From 46fd817d914f888af6c19d9a444429a14280d7eb Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:27:42 -0400 Subject: [PATCH 013/138] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 629647227b..3c3d9b2a61 100644 --- a/index.html +++ b/index.html @@ -11,7 +11,7 @@ title: Accelerate Your Delivery
-

Accelerate Your Stuffz

+

Accelerate Your Things

Manage an infrastructure cluster as a single system to simplify container operations.
Try Our Hello World From 2f3820ea7d449a4126c4501a49bb2e8a56b08cee Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 10:41:41 -0700 Subject: [PATCH 014/138] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 3c3d9b2a61..5458d1f5bc 100644 --- a/index.html +++ b/index.html @@ -11,7 +11,7 @@ title: Accelerate Your Delivery
-

Accelerate Your Things

+

Accelerate Your Delivery

Manage an infrastructure cluster as a single system to simplify container operations.
Try Our Hello World From 36fe83cece3e85649b0b8e38c647325a00e52df1 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 11:14:41 -0700 Subject: [PATCH 015/138] Update reference.md --- docs/reference.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/reference.md b/docs/reference.md index 33f34e033c..f14c33458a 100644 --- a/docs/reference.md +++ b/docs/reference.md @@ -19,8 +19,8 @@ In the reference section, you can find reference documentation for Kubernetes AP ## Glossary -Explore the glossary of essential Kubernetes concepts. Some good starting points are the entries for [Pods](/docs/user-guide/pods/), [Nodes](/docs/user-guide/pods/), [Services](/docs/user-guide/services/), and [Replication Controllers](/docs/user-guide/replication-controller/). +Explore the glossary of essential Kubernetes concepts. Some good starting points are the entries for [Pods](/docs/user-guide/pods/), [Nodes](/docs/admin/node.md), [Services](/docs/user-guide/services/), and [Replication Controllers](/docs/user-guide/replication-controller/). ## Design Docs -An archive of the design docs for Kubernetes functionality. Good starting points are [Kubernetes Architecture](https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/design/architecture.md) and [Kubernetes Design Overview](https://github.com/kubernetes/kubernetes/tree/release-1.1/docs/design). \ No newline at end of file +An archive of the design docs for Kubernetes functionality. Good starting points are [Kubernetes Architecture](https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/design/architecture.md) and [Kubernetes Design Overview](https://github.com/kubernetes/kubernetes/tree/release-1.1/docs/design). From ef989edf468bbc4da66cc0800f6d00e261b3eb15 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 11:21:03 -0700 Subject: [PATCH 016/138] Update reference.md --- docs/reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference.md b/docs/reference.md index f14c33458a..693d0dc7a4 100644 --- a/docs/reference.md +++ b/docs/reference.md @@ -19,7 +19,7 @@ In the reference section, you can find reference documentation for Kubernetes AP ## Glossary -Explore the glossary of essential Kubernetes concepts. Some good starting points are the entries for [Pods](/docs/user-guide/pods/), [Nodes](/docs/admin/node.md), [Services](/docs/user-guide/services/), and [Replication Controllers](/docs/user-guide/replication-controller/). +Explore the glossary of essential Kubernetes concepts. Some good starting points are the entries for [Pods](/docs/user-guide/pods/), [Nodes](/docs/admin/node/), [Services](/docs/user-guide/services/), and [Replication Controllers](/docs/user-guide/replication-controller/). ## Design Docs From 4375837302d01abf9499d7bcea043d78ccca913b Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:14:15 -0700 Subject: [PATCH 017/138] Update aws.md --- docs/getting-started-guides/aws.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/getting-started-guides/aws.md b/docs/getting-started-guides/aws.md index 6ac90d5829..fe748dd7f2 100644 --- a/docs/getting-started-guides/aws.md +++ b/docs/getting-started-guides/aws.md @@ -139,4 +139,6 @@ cluster/kube-down.sh ## Further reading Please see the [Kubernetes docs](/docs/) for more details on administering -and using a Kubernetes cluster. \ No newline at end of file +and using a Kubernetes cluster. + +For support level information, see [Table of solutions] (/docs/getting-started-guides/index.md#table-of-solutions) From 8bfe362e6b376d3765162cdfae134e0b0a21ba69 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:19:59 -0700 Subject: [PATCH 018/138] Update aws.md --- docs/getting-started-guides/aws.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started-guides/aws.md b/docs/getting-started-guides/aws.md index fe748dd7f2..8a7b43f1ed 100644 --- a/docs/getting-started-guides/aws.md +++ b/docs/getting-started-guides/aws.md @@ -141,4 +141,4 @@ cluster/kube-down.sh Please see the [Kubernetes docs](/docs/) for more details on administering and using a Kubernetes cluster. -For support level information, see [Table of solutions] (/docs/getting-started-guides/index.md#table-of-solutions) +For support level information, see [Table of solutions] (/docs/getting-started-guides/#table-of-solutions) From 5e15b25af65a5927c9d77373924d707df78493c0 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:32:01 -0700 Subject: [PATCH 019/138] Update aws.md --- docs/getting-started-guides/aws.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started-guides/aws.md b/docs/getting-started-guides/aws.md index 8a7b43f1ed..8f11f5e29c 100644 --- a/docs/getting-started-guides/aws.md +++ b/docs/getting-started-guides/aws.md @@ -141,4 +141,4 @@ cluster/kube-down.sh Please see the [Kubernetes docs](/docs/) for more details on administering and using a Kubernetes cluster. -For support level information, see [Table of solutions] (/docs/getting-started-guides/#table-of-solutions) +For support level information, see [Table of solutions] (/docs/getting-started-guides/#table-of-solutions) From e1fab5e5c1424e2220a80f46931f242e0ac0702a Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:34:27 -0700 Subject: [PATCH 020/138] Update aws.md --- docs/getting-started-guides/aws.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started-guides/aws.md b/docs/getting-started-guides/aws.md index 8f11f5e29c..91ee9121dd 100644 --- a/docs/getting-started-guides/aws.md +++ b/docs/getting-started-guides/aws.md @@ -141,4 +141,4 @@ cluster/kube-down.sh Please see the [Kubernetes docs](/docs/) for more details on administering and using a Kubernetes cluster. -For support level information, see [Table of solutions] (/docs/getting-started-guides/#table-of-solutions) +For support level information, see the [table of solutions] (/docs/getting-started-guides/) chart. From 3669e9f4d32166b40f48f0eb22367eabc01ffc7c Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:40:29 -0700 Subject: [PATCH 021/138] Update aws.md --- docs/getting-started-guides/aws.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/getting-started-guides/aws.md b/docs/getting-started-guides/aws.md index 91ee9121dd..8c9a26aa5e 100644 --- a/docs/getting-started-guides/aws.md +++ b/docs/getting-started-guides/aws.md @@ -141,4 +141,7 @@ cluster/kube-down.sh Please see the [Kubernetes docs](/docs/) for more details on administering and using a Kubernetes cluster. -For support level information, see the [table of solutions] (/docs/getting-started-guides/) chart. +For support level information, see the [Kubernetes docs](/docs/) + + +[table of solutions] (/docs/getting-started-guides/) chart. From b26fda4d62f97818510d51f4dcf759f4bb7d7145 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:42:26 -0700 Subject: [PATCH 022/138] Update aws.md --- docs/getting-started-guides/aws.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started-guides/aws.md b/docs/getting-started-guides/aws.md index 8c9a26aa5e..2a333d7af9 100644 --- a/docs/getting-started-guides/aws.md +++ b/docs/getting-started-guides/aws.md @@ -141,7 +141,7 @@ cluster/kube-down.sh Please see the [Kubernetes docs](/docs/) for more details on administering and using a Kubernetes cluster. -For support level information, see the [Kubernetes docs](/docs/) +For support level information, see the [Table of solutions](/docs/) [table of solutions] (/docs/getting-started-guides/) chart. From 5ef1b894790c4757e608de06008750ebee383af7 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:45:11 -0700 Subject: [PATCH 023/138] Update aws.md --- docs/getting-started-guides/aws.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/getting-started-guides/aws.md b/docs/getting-started-guides/aws.md index 2a333d7af9..077dcae0e9 100644 --- a/docs/getting-started-guides/aws.md +++ b/docs/getting-started-guides/aws.md @@ -141,7 +141,5 @@ cluster/kube-down.sh Please see the [Kubernetes docs](/docs/) for more details on administering and using a Kubernetes cluster. -For support level information, see the [Table of solutions](/docs/) +For support level information, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. - -[table of solutions] (/docs/getting-started-guides/) chart. From 6be977b6a5d506e6013b63e966337b0b0d8ccfd7 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:51:47 -0700 Subject: [PATCH 024/138] Update gce.md --- docs/getting-started-guides/gce.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/getting-started-guides/gce.md b/docs/getting-started-guides/gce.md index e486022afc..c9d617932e 100644 --- a/docs/getting-started-guides/gce.md +++ b/docs/getting-started-guides/gce.md @@ -212,4 +212,12 @@ being used in `cluster/config-default.sh` create a new rule with the following field values: * Source Ranges: `10.0.0.0/8` -* Allowed Protocols and Port: `tcp:1-65535;udp:1-65535;icmp` \ No newline at end of file +* Allowed Protocols and Port: `tcp:1-65535;udp:1-65535;icmp` + + +## Further reading + +Please see the [Kubernetes docs](/docs/) for more details on administering +and using a Kubernetes cluster. + +For support level information, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From c7cb191e128bda11a16e7d2f4943941b9e9b60b3 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:53:12 -0700 Subject: [PATCH 025/138] Update index.md --- .../coreos/azure/index.md | 143 +++++++++--------- 1 file changed, 75 insertions(+), 68 deletions(-) diff --git a/docs/getting-started-guides/coreos/azure/index.md b/docs/getting-started-guides/coreos/azure/index.md index 3134378705..878c548f7b 100644 --- a/docs/getting-started-guides/coreos/azure/index.md +++ b/docs/getting-started-guides/coreos/azure/index.md @@ -1,11 +1,11 @@ ---- ---- - -* TOC -{:toc} - - -In this guide I will demonstrate how to deploy a Kubernetes cluster to Azure cloud. You will be using CoreOS with Weave, which implements simple and secure networking, in a transparent, yet robust way. The purpose of this guide is to provide an out-of-the-box implementation that can ultimately be taken into production with little change. It will demonstrate how to provision a dedicated Kubernetes master and etcd nodes, and show how to scale the cluster with ease. +--- +--- + +* TOC +{:toc} + + +In this guide I will demonstrate how to deploy a Kubernetes cluster to Azure cloud. You will be using CoreOS with Weave, which implements simple and secure networking, in a transparent, yet robust way. The purpose of this guide is to provide an out-of-the-box implementation that can ultimately be taken into production with little change. It will demonstrate how to provision a dedicated Kubernetes master and etcd nodes, and show how to scale the cluster with ease. ### Prerequisites @@ -15,83 +15,83 @@ In this guide I will demonstrate how to deploy a Kubernetes cluster to Azure clo To get started, you need to checkout the code: -```shell +```shell git clone https://github.com/kubernetes/kubernetes cd kubernetes/docs/getting-started-guides/coreos/azure/ -``` - +``` + You will need to have [Node.js installed](http://nodejs.org/download/) on you machine. If you have previously used Azure CLI, you should have it already. First, you need to install some of the dependencies with -```shell +```shell npm install -``` - +``` + Now, all you need to do is: -```shell +```shell ./azure-login.js -u ./create-kubernetes-cluster.js -``` - -This script will provision a cluster suitable for production use, where there is a ring of 3 dedicated etcd nodes: 1 kubernetes master and 2 kubernetes nodes. The `kube-00` VM will be the master, your work loads are only to be deployed on the nodes, `kube-01` and `kube-02`. Initially, all VMs are single-core, to ensure a user of the free tier can reproduce it without paying extra. I will show how to add more bigger VMs later. +``` + +This script will provision a cluster suitable for production use, where there is a ring of 3 dedicated etcd nodes: 1 kubernetes master and 2 kubernetes nodes. The `kube-00` VM will be the master, your work loads are only to be deployed on the nodes, `kube-01` and `kube-02`. Initially, all VMs are single-core, to ensure a user of the free tier can reproduce it without paying extra. I will show how to add more bigger VMs later. If you need to pass Azure specific options for the creation script you can do this via additional environment variables e.g. ```shell -AZ_SUBSCRIPTION= AZ_LOCATION="East US" ./create-kubernetes-cluster.js -# or -AZ_VM_COREOS_CHANNEL=beta ./create-kubernetes-cluster.js -``` +AZ_SUBSCRIPTION= AZ_LOCATION="East US" ./create-kubernetes-cluster.js +# or +AZ_VM_COREOS_CHANNEL=beta ./create-kubernetes-cluster.js +``` ![VMs in Azure](/images/docs/initial_cluster.png) Once the creation of Azure VMs has finished, you should see the following: -```shell +```shell ... azure_wrapper/info: Saved SSH config, you can use it like so: `ssh -F ./output/kube_1c1496016083b4_ssh_conf ` azure_wrapper/info: The hosts in this deployment are: [ 'etcd-00', 'etcd-01', 'etcd-02', 'kube-00', 'kube-01', 'kube-02' ] azure_wrapper/info: Saved state into `./output/kube_1c1496016083b4_deployment.yml` -``` - +``` + Let's login to the master node like so: -```shell +```shell ssh -F ./output/kube_1c1496016083b4_ssh_conf kube-00 -``` - +``` + > Note: config file name will be different, make sure to use the one you see. Check there are 2 nodes in the cluster: -```shell +```shell core@kube-00 ~ $ kubectl get nodes NAME LABELS STATUS kube-01 kubernetes.io/hostname=kube-01 Ready kube-02 kubernetes.io/hostname=kube-02 Ready -``` - +``` + ## Deploying the workload Let's follow the Guestbook example now: -```shell +```shell kubectl create -f ~/guestbook-example -``` - +``` + You need to wait for the pods to get deployed, run the following and wait for `STATUS` to change from `Pending` to `Running`. -```shell +```shell kubectl get pods --watch -``` - +``` + > Note: the most time it will spend downloading Docker container images on each of the nodes. Eventually you should see: -```shell +```shell NAME READY STATUS RESTARTS AGE frontend-0a9xi 1/1 Running 0 4m frontend-4wahe 1/1 Running 0 4m @@ -99,8 +99,8 @@ frontend-6l36j 1/1 Running 0 4m redis-master-talmr 1/1 Running 0 4m redis-slave-12zfd 1/1 Running 0 4m redis-slave-3nbce 1/1 Running 0 4m -``` - +``` + ## Scaling Two single-core nodes are certainly not enough for a production system of today. Let's scale the cluster by adding a couple of bigger nodes. @@ -109,13 +109,13 @@ You will need to open another terminal window on your machine and go to the same First, lets set the size of new VMs: -```shell +```shell export AZ_VM_SIZE=Large -``` - +``` + Now, run scale script with state file of the previous deployment and number of nodes to add: -```shell +```shell core@kube-00 ~ $ ./scale-kubernetes-cluster.js ./output/kube_1c1496016083b4_deployment.yml 2 ... azure_wrapper/info: Saved SSH config, you can use it like so: `ssh -F ./output/kube_8f984af944f572_ssh_conf ` @@ -129,69 +129,69 @@ azure_wrapper/info: The hosts in this deployment are: 'kube-03', 'kube-04' ] azure_wrapper/info: Saved state into `./output/kube_8f984af944f572_deployment.yml` -``` - +``` + > Note: this step has created new files in `./output`. Back on `kube-00`: -```shell +```shell core@kube-00 ~ $ kubectl get nodes NAME LABELS STATUS kube-01 kubernetes.io/hostname=kube-01 Ready kube-02 kubernetes.io/hostname=kube-02 Ready kube-03 kubernetes.io/hostname=kube-03 Ready kube-04 kubernetes.io/hostname=kube-04 Ready -``` - +``` + You can see that two more nodes joined happily. Let's scale the number of Guestbook instances now. First, double-check how many replication controllers there are: -```shell +```shell core@kube-00 ~ $ kubectl get rc ONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS frontend php-redis kubernetes/example-guestbook-php-redis:v2 name=frontend 3 redis-master master redis name=redis-master 1 redis-slave worker kubernetes/redis-slave:v2 name=redis-slave 2 -``` - +``` + As there are 4 nodes, let's scale proportionally: -```shell +```shell core@kube-00 ~ $ kubectl scale --replicas=4 rc redis-slave >>>>>>> coreos/azure: Updates for 1.0 scaled core@kube-00 ~ $ kubectl scale --replicas=4 rc frontend scaled -``` - +``` + Check what you have now: -```shell +```shell core@kube-00 ~ $ kubectl get rc CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS frontend php-redis kubernetes/example-guestbook-php-redis:v2 name=frontend 4 redis-master master redis name=redis-master 1 redis-slave worker kubernetes/redis-slave:v2 name=redis-slave 4 -``` - +``` + You now will have more instances of front-end Guestbook apps and Redis slaves; and, if you look up all pods labeled `name=frontend`, you should see one running on each node. -```shell +```shell core@kube-00 ~/guestbook-example $ kubectl get pods -l name=frontend NAME READY STATUS RESTARTS AGE frontend-0a9xi 1/1 Running 0 22m frontend-4wahe 1/1 Running 0 22m frontend-6l36j 1/1 Running 0 22m frontend-z9oxo 1/1 Running 0 41s -``` - +``` + ## Exposing the app to the outside world There is no native Azure load-balancer support in Kubernetes 1.0, however here is how you can expose the Guestbook app to the Internet. -```shell +```shell ./expose_guestbook_app_port.sh ./output/kube_1c1496016083b4_ssh_conf Guestbook app is on port 31605, will map it to port 80 on kube-00 info: Executing command vm endpoint create @@ -207,8 +207,8 @@ data: Protcol : tcp data: Virtual IP Address : 137.117.156.164 data: Direct server return : Disabled info: vm endpoint show command OK -``` - +``` + You then should be able to access it from anywhere via the Azure virtual IP for `kube-00` displayed above, i.e. `http://137.117.156.164/` in my case. ## Next steps @@ -221,10 +221,17 @@ You should probably try deploy other [example apps](https://github.com/kubernete If you don't wish care about the Azure bill, you can tear down the cluster. It's easy to redeploy it, as you can see. -```shell +```shell ./destroy-cluster.js ./output/kube_8f984af944f572_deployment.yml -``` - +``` + > Note: make sure to use the _latest state file_, as after scaling there is a new one. -By the way, with the scripts shown, you can deploy multiple clusters, if you like :) \ No newline at end of file +By the way, with the scripts shown, you can deploy multiple clusters, if you like :) + +## Further reading + +Please see the [Kubernetes docs](/docs/) for more details on administering +and using a Kubernetes cluster. + +For support level information, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 023ac48c695d1ca579ecd3afbccd324d26f08cc8 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:54:13 -0700 Subject: [PATCH 026/138] Update clc.md --- docs/getting-started-guides/clc.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/getting-started-guides/clc.md b/docs/getting-started-guides/clc.md index 47992df9a2..639b21b49e 100644 --- a/docs/getting-started-guides/clc.md +++ b/docs/getting-started-guides/clc.md @@ -332,3 +332,11 @@ These are the known items that don't work on CenturyLink cloud but do work on ot If you want more information about our Ansible files, please [read this file](https://github.com/CenturyLinkCloud/adm-kubernetes-on-clc/blob/master/ansible/README.md) +## Further reading + +Please see the [Kubernetes docs](/docs/) for more details on administering +and using a Kubernetes cluster. + +For support level information, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + + From 385c26a05474447e1d60b996cbfc3a6c8d1e04b3 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 13:57:54 -0700 Subject: [PATCH 027/138] Update docker.md --- docs/getting-started-guides/docker.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/getting-started-guides/docker.md b/docs/getting-started-guides/docker.md index e3af1df87f..bcefe69fdd 100644 --- a/docs/getting-started-guides/docker.md +++ b/docs/getting-started-guides/docker.md @@ -209,3 +209,9 @@ output of /proc/cmdline: $ cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-3.18.4-aufs root=/dev/sda5 ro cgroup_enable=memory=1 ``` +## Further reading + +Please see the [Kubernetes docs](/docs/) for more details on administering +and using a Kubernetes cluster. + +For support level information, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 80f4e8670c0796c7be0acedce708495bedc1207d Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:25:07 -0700 Subject: [PATCH 028/138] Update aws.md --- docs/getting-started-guides/aws.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/getting-started-guides/aws.md b/docs/getting-started-guides/aws.md index 077dcae0e9..f4863dbd3c 100644 --- a/docs/getting-started-guides/aws.md +++ b/docs/getting-started-guides/aws.md @@ -135,6 +135,14 @@ Make sure the environment variables you used to provision your cluster are still ```shell cluster/kube-down.sh ``` +## Support Level +Here are all the solutions mentioned above in table form. + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +AWS | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/aws) | | Community + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. ## Further reading From 92a3093795ca86d964e084953a83001aeb434123 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:27:32 -0700 Subject: [PATCH 029/138] Update aws.md --- docs/getting-started-guides/aws.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/getting-started-guides/aws.md b/docs/getting-started-guides/aws.md index f4863dbd3c..f8c2f64f0e 100644 --- a/docs/getting-started-guides/aws.md +++ b/docs/getting-started-guides/aws.md @@ -136,7 +136,7 @@ Make sure the environment variables you used to provision your cluster are still cluster/kube-down.sh ``` ## Support Level -Here are all the solutions mentioned above in table form. + IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level -------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- @@ -149,5 +149,5 @@ For support level information on all solutions, see the [Table of solutions](/do Please see the [Kubernetes docs](/docs/) for more details on administering and using a Kubernetes cluster. -For support level information, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + From e755e30d6931b3b4bae4e68452ee478b411dab17 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:29:30 -0700 Subject: [PATCH 030/138] Update index.md --- docs/getting-started-guides/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started-guides/index.md b/docs/getting-started-guides/index.md index 8a0e139dba..5a43f5116e 100644 --- a/docs/getting-started-guides/index.md +++ b/docs/getting-started-guides/index.md @@ -125,7 +125,7 @@ KVM | custom | Fedora | flannel | [docs](/docs/gettin Mesos/Docker | custom | Ubuntu | Docker | [docs](/docs/getting-started-guides/mesos-docker) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) Mesos/GCE | | | | [docs](/docs/getting-started-guides/mesos) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) DCOS | Marathon | CoreOS/Alpine | custom | [docs](/docs/getting-started-guides/dcos) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) -AWS | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/coreos) | | Community +AWS | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/aws) | | Community GCE | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/coreos) | | Community ([@pires](https://github.com/pires)) Vagrant | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/coreos) | | Community ([@pires](https://github.com/pires), [@AntonioMeireles](https://github.com/AntonioMeireles)) Bare-metal (Offline) | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/coreos/bare_metal_offline) | | Community ([@jeffbean](https://github.com/jeffbean)) From 7abc1dbe35d4e1a140bd6363f920e76bf98875f5 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:32:39 -0700 Subject: [PATCH 031/138] Update gce.md --- docs/getting-started-guides/gce.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/getting-started-guides/gce.md b/docs/getting-started-guides/gce.md index c9d617932e..1308092a87 100644 --- a/docs/getting-started-guides/gce.md +++ b/docs/getting-started-guides/gce.md @@ -214,10 +214,18 @@ field values: * Source Ranges: `10.0.0.0/8` * Allowed Protocols and Port: `tcp:1-65535;udp:1-65535;icmp` +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +GCE | Saltstack | Debian | GCE | [docs](/docs/getting-started-guides/gce) | ['œ“][1] | Project + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. ## Further reading Please see the [Kubernetes docs](/docs/) for more details on administering and using a Kubernetes cluster. -For support level information, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + From b579dbe038f10a35bc04d1af4fd2d1204424181b Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:35:32 -0700 Subject: [PATCH 032/138] Update gce.md --- docs/getting-started-guides/gce.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started-guides/gce.md b/docs/getting-started-guides/gce.md index 1308092a87..e3bbb8f6e5 100644 --- a/docs/getting-started-guides/gce.md +++ b/docs/getting-started-guides/gce.md @@ -219,7 +219,7 @@ field values: IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level -------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- -GCE | Saltstack | Debian | GCE | [docs](/docs/getting-started-guides/gce) | ['œ“][1] | Project +GCE | Saltstack | Debian | GCE | [docs](/docs/getting-started-guides/gce) | | Project For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 0109402f4e1da712b3a307a255bb178ad6bb6578 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:39:52 -0700 Subject: [PATCH 033/138] Update index.md --- .../getting-started-guides/coreos/azure/index.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/getting-started-guides/coreos/azure/index.md b/docs/getting-started-guides/coreos/azure/index.md index 878c548f7b..1aee74e8d2 100644 --- a/docs/getting-started-guides/coreos/azure/index.md +++ b/docs/getting-started-guides/coreos/azure/index.md @@ -229,9 +229,21 @@ If you don't wish care about the Azure bill, you can tear down the cluster. It's By the way, with the scripts shown, you can deploy multiple clusters, if you like :) +## Support Level + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +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)) + + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + + ## Further reading Please see the [Kubernetes docs](/docs/) for more details on administering -and using a Kubernetes cluster. +and using a Kubernetes cluster -For support level information, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 7b7f4048f94852e5a026fb322b408d3d8b117d5a Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:40:32 -0700 Subject: [PATCH 034/138] Update index.md --- docs/getting-started-guides/coreos/azure/index.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/getting-started-guides/coreos/azure/index.md b/docs/getting-started-guides/coreos/azure/index.md index 1aee74e8d2..7101ae7ee7 100644 --- a/docs/getting-started-guides/coreos/azure/index.md +++ b/docs/getting-started-guides/coreos/azure/index.md @@ -231,8 +231,6 @@ By the way, with the scripts shown, you can deploy multiple clusters, if you lik ## Support Level -## Support Level - IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level -------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- From c791ca972c7e596df13f7a0e0638869487c9447b Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:42:13 -0700 Subject: [PATCH 035/138] Update docker.md --- docs/getting-started-guides/docker.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/getting-started-guides/docker.md b/docs/getting-started-guides/docker.md index bcefe69fdd..666df00136 100644 --- a/docs/getting-started-guides/docker.md +++ b/docs/getting-started-guides/docker.md @@ -209,9 +209,19 @@ output of /proc/cmdline: $ cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-3.18.4-aufs root=/dev/sda5 ro cgroup_enable=memory=1 ``` +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +Docker Single Node | custom | N/A | local | [docs](/docs/getting-started-guides/docker) | | Project ([@brendandburns](https://github.com/brendandburns)) + + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + + ## Further reading Please see the [Kubernetes docs](/docs/) for more details on administering and using a Kubernetes cluster. -For support level information, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 51fcf507dace8c3b9c1f9159529d6b280f412780 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:44:10 -0700 Subject: [PATCH 036/138] Update index.md --- docs/getting-started-guides/docker-multinode/index.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/getting-started-guides/docker-multinode/index.md b/docs/getting-started-guides/docker-multinode/index.md index 2f7a17e50e..ec7e033e1b 100644 --- a/docs/getting-started-guides/docker-multinode/index.md +++ b/docs/getting-started-guides/docker-multinode/index.md @@ -86,3 +86,14 @@ See [here](/docs/getting-started-guides/docker-multinode/deployDNS) for instruct Once your cluster has been created you can [test it out](/docs/getting-started-guides/docker-multinode/testing) For more complete applications, please look in the [examples directory](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/examples/) + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +Docker Multi Node | custom | N/A | flannel | [docs](/docs/getting-started-guides/docker-multinode) | | Project ([@brendandburns](https://github.com/brendandburns)) + + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + From e38623ac4c1a1ea616887a5067ff5974ca3d4eca Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:46:52 -0700 Subject: [PATCH 037/138] Update fedora_ansible_config.md --- .../fedora/fedora_ansible_config.md | 150 ++++++++++-------- 1 file changed, 80 insertions(+), 70 deletions(-) diff --git a/docs/getting-started-guides/fedora/fedora_ansible_config.md b/docs/getting-started-guides/fedora/fedora_ansible_config.md index b82242b92c..57532a4fa5 100644 --- a/docs/getting-started-guides/fedora/fedora_ansible_config.md +++ b/docs/getting-started-guides/fedora/fedora_ansible_config.md @@ -1,9 +1,9 @@ ---- ---- +--- +--- Configuring Kubernetes on Fedora via Ansible offers a simple way to quickly create a clustered environment with little effort. -* TOC +* TOC {:toc} ## Prerequisites @@ -18,12 +18,12 @@ The hosts can be virtual or bare metal. Ansible will take care of the rest of th A Kubernetes cluster requires etcd, a master, and n nodes, so we will create a cluster with three hosts, for example: -```shell +```shell master,etcd = kube-master.example.com node1 = kube-node-01.example.com node2 = kube-node-02.example.com -``` - +``` + **Make sure your local machine has** - ansible (must be 1.9.0+) @@ -32,22 +32,22 @@ master,etcd = kube-master.example.com If not -```shell +```shell yum install -y ansible git python-netaddr -``` - +``` + **Now clone down the Kubernetes repository** -```shell +```shell git clone https://github.com/kubernetes/contrib.git cd contrib/ansible -``` - +``` + **Tell ansible about each machine and its role in your cluster** Get the IP addresses from the master and nodes. Add those to the `~/contrib/ansible/inventory` file on the host running Ansible. -```shell +```shell [masters] kube-master.example.com @@ -57,8 +57,8 @@ kube-master.example.com [nodes] kube-node-01.example.com kube-node-02.example.com -``` - +``` + ## Setting up ansible access to your nodes If you already are running on a machine which has passwordless ssh access to the kube-master and kube-node-{01,02} nodes, and 'sudo' privileges, simply set the value of `ansible_ssh_user` in `~/contrib/ansible/group_vars/all.yml` to the username which you use to ssh to the nodes (i.e. `fedora`), and proceed to the next step... @@ -67,52 +67,52 @@ If you already are running on a machine which has passwordless ssh access to the edit: ~/contrib/ansible/group_vars/all.yml -```yaml +```yaml ansible_ssh_user: root -``` - +``` + **Configuring ssh access to the cluster** If you already have ssh access to every machine using ssh public keys you may skip to [setting up the cluster](#setting-up-the-cluster) Make sure your local machine (root) has an ssh key pair if not -```shell +```shell ssh-keygen -``` - +``` + Copy the ssh public key to **all** nodes in the cluster -```shell +```shell for node in kube-master.example.com kube-node-01.example.com kube-node-02.example.com; do ssh-copy-id ${node} done -``` - +``` + ## Setting up the cluster Although the default value of variables in `~/contrib/ansible/group_vars/all.yml` should be good enough, if not, change them as needed. - + ```conf -edit: ~/contrib/ansible/group_vars/all.yml +edit: ~/contrib/ansible/group_vars/all.yml ``` **Configure access to kubernetes packages** Modify `source_type` as below to access kubernetes packages through the package manager. -```yaml +```yaml source_type: packageManager -``` - +``` + **Configure the IP addresses used for services** Each Kubernetes service gets its own IP address. These are not real IPs. You need only select a range of IPs which are not in use elsewhere in your environment. -```yaml +```yaml kube_service_addresses: 10.254.0.0/16 -``` - +``` + **Managing flannel** Modify `flannel_subnet`, `flannel_prefix` and `flannel_host_prefix` only if defaults are not appropriate for your cluster. @@ -122,32 +122,32 @@ Modify `flannel_subnet`, `flannel_prefix` and `flannel_host_prefix` only if defa Set `cluster_logging` to false or true (default) to disable or enable logging with elasticsearch. -```yaml +```yaml cluster_logging: true -``` - +``` + Turn `cluster_monitoring` to true (default) or false to enable or disable cluster monitoring with heapster and influxdb. -```yaml +```yaml cluster_monitoring: true -``` - +``` + Turn `dns_setup` to true (recommended) or false to enable or disable whole DNS configuration. -```yaml +```yaml dns_setup: true -``` - +``` + **Tell ansible to get to work!** This will finally setup your whole Kubernetes cluster for you. -```shell +```shell cd ~/contrib/ansible/ ./setup.sh -``` - +``` + ## Testing and using your new cluster That's all there is to it. It's really that easy. At this point you should have a functioning Kubernetes cluster. @@ -156,25 +156,26 @@ That's all there is to it. It's really that easy. At this point you should hav Run the following on the kube-master: -```shell +```shell kubectl get nodes -``` - +``` + **Show services running on masters and nodes** -```shell +```shell systemctl | grep -i kube -``` - +``` + **Show firewall rules on the masters and nodes** -```shell -iptables -nvL -``` - +```shell +iptables -nvL + +``` + **Create /tmp/apache.json on the master with the following contents and deploy pod** -```json +```json { "kind": "Pod", "apiVersion": "v1", @@ -199,29 +200,38 @@ iptables -nvL ] } } -``` - -```shell +``` + +```shell kubectl create -f /tmp/apache.json -``` - +``` + **Check where the pod was created** -```shell +```shell kubectl get pods -``` - +``` + **Check Docker status on nodes** -```shell +```shell docker ps docker images -``` - +``` + **After the pod is 'Running' Check web server access on the node** -```shell +```shell curl http://localhost -``` - -That's it ! \ No newline at end of file +``` + +That's it ! + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +Bare-metal | Ansible | Fedora | flannel | [docs](/docs/getting-started-guides/fedora/fedora_ansible_config) | | Project + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 4052573aae4e500a18abb0bf0641c3259f60c134 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:48:26 -0700 Subject: [PATCH 038/138] Update fedora_manual_config.md --- .../fedora/fedora_manual_config.md | 112 ++++++++++-------- 1 file changed, 61 insertions(+), 51 deletions(-) diff --git a/docs/getting-started-guides/fedora/fedora_manual_config.md b/docs/getting-started-guides/fedora/fedora_manual_config.md index 224e10fce9..81bf0b138c 100644 --- a/docs/getting-started-guides/fedora/fedora_manual_config.md +++ b/docs/getting-started-guides/fedora/fedora_manual_config.md @@ -1,7 +1,7 @@ ---- ---- +--- +--- -* TOC +* TOC {:toc} ## Prerequisites @@ -20,37 +20,37 @@ The Kubernetes package provides a few services: kube-apiserver, kube-scheduler, Hosts: -```conf +```conf fed-master = 192.168.121.9 fed-node = 192.168.121.65 -``` - +``` + **Prepare the hosts:** * Install Kubernetes on all hosts - fed-{master,node}. This will also pull in docker. Also install etcd on fed-master. This guide has been tested with kubernetes-0.18 and beyond. * The [--enablerepo=updates-testing](https://fedoraproject.org/wiki/QA:Updates_Testing) directive in the yum command below will ensure that the most recent Kubernetes version that is scheduled for pre-release will be installed. This should be a more recent version than the Fedora "stable" release for Kubernetes that you would get without adding the directive. * If you want the very latest Kubernetes release [you can download and yum install the RPM directly from Fedora Koji](http://koji.fedoraproject.org/koji/packageinfo?packageID=19202) instead of using the yum install command below. -```shell +```shell yum -y install --enablerepo=updates-testing kubernetes -``` - +``` + * Install etcd and iptables -```shell +```shell yum -y install etcd iptables -``` - +``` + * Add master and node to /etc/hosts on all machines (not needed if hostnames already in DNS). Make sure that communication works between fed-master and fed-node by using a utility such as ping. -```shell +```shell echo "192.168.121.9 fed-master 192.168.121.65 fed-node" >> /etc/hosts -``` - +``` + * Edit /etc/kubernetes/config which will be the same on all hosts (master and node) to contain: -```shell +```shell # Comma separated list of nodes in the etcd cluster KUBE_MASTER="--master=http://fed-master:8080" @@ -62,20 +62,20 @@ KUBE_LOG_LEVEL="--v=0" # Should this cluster be allowed to run privileged docker containers KUBE_ALLOW_PRIV="--allow-privileged=false" -``` - +``` + * Disable the firewall on both the master and node, as docker does not play well with other firewall rule managers. Please note that iptables-services does not exist on default fedora server install. -```shell +```shell systemctl disable iptables-services firewalld systemctl stop iptables-services firewalld -``` - +``` + **Configure the Kubernetes services on the master.** * Edit /etc/kubernetes/apiserver to appear as such. The service-cluster-ip-range IP addresses must be an unused block of addresses, not used anywhere else. They do not need to be routed or assigned to anything. -```shell +```shell # The address on the local server to listen to. KUBE_API_ADDRESS="--address=0.0.0.0" @@ -87,37 +87,37 @@ KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" # Add your own! KUBE_API_ARGS="" -``` - +``` + * Edit /etc/etcd/etcd.conf,let the etcd to listen all the ip instead of 127.0.0.1, if not, you will get the error like "connection refused". Note that Fedora 22 uses etcd 2.0, One of the changes in etcd 2.0 is that now uses port 2379 and 2380 (as opposed to etcd 0.46 which userd 4001 and 7001). -```shell +```shell ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:4001" -``` - +``` + * Create /var/run/kubernetes on master: -```shell +```shell mkdir /var/run/kubernetes chown kube:kube /var/run/kubernetes chmod 750 /var/run/kubernetes -``` - +``` + * Start the appropriate services on master: -```shell +```shell for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done -``` - +``` + * Addition of nodes: * Create following node.json file on Kubernetes master node: -```json +```json { "apiVersion": "v1", "kind": "Node", @@ -129,18 +129,18 @@ done "externalID": "fed-node" } } -``` - +``` + Now create a node object internally in your Kubernetes cluster by running: -```shell +```shell $ kubectl create -f ./node.json $ kubectl get nodes NAME LABELS STATUS fed-node name=fed-node-label Unknown -``` - +``` + Please note that in the above, it only creates a representation for the node _fed-node_ internally. It does not provision the actual _fed-node_. Also, it is assumed that _fed-node_ (as specified in `name`) can be resolved and is @@ -153,7 +153,7 @@ a Kubernetes node (fed-node) below. * Edit /etc/kubernetes/kubelet to appear as such: -```shell +```shell ### # Kubernetes kubelet (node) config @@ -168,36 +168,46 @@ KUBELET_API_SERVER="--api-servers=http://fed-master:8080" # Add your own! #KUBELET_ARGS="" -``` - +``` + * Start the appropriate services on the node (fed-node). -```shell +```shell for SERVICES in kube-proxy kubelet docker; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done -``` - +``` + * Check to make sure now the cluster can see the fed-node on fed-master, and its status changes to _Ready_. -```shell +```shell kubectl get nodes NAME LABELS STATUS fed-node name=fed-node-label Ready -``` - +``` + * Deletion of nodes: To delete _fed-node_ from your Kubernetes cluster, one should run the following on fed-master (Please do not do it, it is just for information): -```shell +```shell kubectl delete -f ./node.json -``` - +``` + *You should be finished!* **The cluster should be running! Launch a test pod.** You should have a functional cluster, check out [101](/docs/user-guide/walkthrough/)! + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +Bare-metal | custom | Fedora | _none_ | [docs](/docs/getting-started-guides/fedora/fedora_manual_config) | | Project + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + From e1476b3f0f961535d1ceeba4037901b84a3d48ad Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:49:57 -0700 Subject: [PATCH 039/138] Update flannel_multi_node_cluster.md --- .../fedora/flannel_multi_node_cluster.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md b/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md index 73d4ac63ab..e58e8c85dd 100644 --- a/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md +++ b/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md @@ -170,3 +170,14 @@ PING 18.16.90.4 (18.16.90.4) 56(84) bytes of data. ``` Now Kubernetes multi-node cluster is set up with overlay networking set up by flannel. + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +Bare-metal | custom | Fedora | flannel | [docs](/docs/getting-started-guides/fedora/flannel_multi_node_cluster) | | Community ([@aveshagarwal](https://github.com/aveshagarwal)) + + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + From ec5828548e521faaef119a346c77f30b7631be18 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:51:49 -0700 Subject: [PATCH 040/138] Update flannel_multi_node_cluster.md --- .../fedora/flannel_multi_node_cluster.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md b/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md index e58e8c85dd..8de2e9dc4e 100644 --- a/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md +++ b/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md @@ -177,6 +177,9 @@ Now Kubernetes multi-node cluster is set up with overlay networking set up by fl IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level -------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- Bare-metal | custom | Fedora | flannel | [docs](/docs/getting-started-guides/fedora/flannel_multi_node_cluster) | | Community ([@aveshagarwal](https://github.com/aveshagarwal)) +libvirt | custom | Fedora | flannel | [docs](/docs/getting-started-guides/fedora/flannel_multi_node_cluster) | | Community ([@aveshagarwal](https://github.com/aveshagarwal)) +KVM | custom | Fedora | flannel | [docs](/docs/getting-started-guides/fedora/flannel_multi_node_cluster) | | Community ([@aveshagarwal](https://github.com/aveshagarwal)) + For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 98b3966d05152b6c9c7527d54466af23deb881c8 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:55:18 -0700 Subject: [PATCH 041/138] Update dcos.md --- docs/getting-started-guides/dcos.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/getting-started-guides/dcos.md b/docs/getting-started-guides/dcos.md index 310b5fff29..442c485bf9 100644 --- a/docs/getting-started-guides/dcos.md +++ b/docs/getting-started-guides/dcos.md @@ -128,3 +128,11 @@ $ dcos kubectl get pods --all-namespaces ```shell $ dcos package uninstall kubernetes ``` +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +DCOS | Marathon | CoreOS/Alpine | custom | [docs](/docs/getting-started-guides/dcos) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From cdaa269532714d6b4a481efc1e9b2f113dedfde0 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:57:20 -0700 Subject: [PATCH 042/138] Update mesos-docker.md --- docs/getting-started-guides/mesos-docker.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/getting-started-guides/mesos-docker.md b/docs/getting-started-guides/mesos-docker.md index d2b8e95f87..5067c0ba72 100644 --- a/docs/getting-started-guides/mesos-docker.md +++ b/docs/getting-started-guides/mesos-docker.md @@ -304,4 +304,14 @@ Breakdown: - `hack/build-go.sh` - builds the Go binaries for the current architecture (linux/amd64 when in a docker container) - `make` - delegates to `hack/build-go.sh` - `build/run.sh` - executes a command in the build container -- `build/release.sh` - cross compiles Kubernetes for all supported architectures and operating systems (slow) \ No newline at end of file +- `build/release.sh` - cross compiles Kubernetes for all supported architectures and operating systems (slow) + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +Mesos/Docker | custom | Ubuntu | Docker | [docs](/docs/getting-started-guides/mesos-docker) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + From d01439c3e34c32450445b9593eb845e968b1727e Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 14:59:44 -0700 Subject: [PATCH 043/138] Update index.md --- docs/getting-started-guides/mesos/index.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/getting-started-guides/mesos/index.md b/docs/getting-started-guides/mesos/index.md index 8befe27d57..059122c497 100644 --- a/docs/getting-started-guides/mesos/index.md +++ b/docs/getting-started-guides/mesos/index.md @@ -302,6 +302,15 @@ Address 1: 10.10.10.10 Name: kubernetes Address 1: 10.10.10.1 ``` +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +Mesos/GCE | | | | [docs](/docs/getting-started-guides/mesos) | | Community ([Kubernetes-Mesos Authors](https://github.com/mesosphere/kubernetes-mesos/blob/master/AUTHORS.md)) + + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. ## What next? From 4a83be2e6a704eb4b55f4aaa8b72aecf561f6e9f Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:07:07 -0700 Subject: [PATCH 044/138] Update bare_metal_offline.md --- docs/getting-started-guides/coreos/bare_metal_offline.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/getting-started-guides/coreos/bare_metal_offline.md b/docs/getting-started-guides/coreos/bare_metal_offline.md index 1a216f7bc9..030dc87e74 100644 --- a/docs/getting-started-guides/coreos/bare_metal_offline.md +++ b/docs/getting-started-guides/coreos/bare_metal_offline.md @@ -693,3 +693,11 @@ Kill all pods: ```shell for i in `kubectl get pods | awk '{print $1}'`; do kubectl delete pod $i; done ``` +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +Bare-metal (Offline) | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/coreos/bare_metal_offline) | | Community ([@jeffbean](https://github.com/jeffbean)) + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 41a7fbb83a4e543711f95fcede1d9ea61ec200d3 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:08:27 -0700 Subject: [PATCH 045/138] Update bare_metal_calico.md --- .../coreos/bare_metal_calico.md | 257 +++++++++--------- 1 file changed, 134 insertions(+), 123 deletions(-) diff --git a/docs/getting-started-guides/coreos/bare_metal_calico.md b/docs/getting-started-guides/coreos/bare_metal_calico.md index cf7c392c21..b3f4890398 100644 --- a/docs/getting-started-guides/coreos/bare_metal_calico.md +++ b/docs/getting-started-guides/coreos/bare_metal_calico.md @@ -1,59 +1,59 @@ ---- ---- - -This document describes how to deploy Kubernetes with Calico networking on _bare metal_ CoreOS. For more information on Project Calico, visit [projectcalico.org](http://projectcalico.org) and the [calico-containers repository](https://github.com/projectcalico/calico-containers). +--- +--- -To install Calico on an existing Kubernetes cluster, or for more information on deploying Calico with Kubernetes in a number of other environments take a look at our supported [deployment guides](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes). +This document describes how to deploy Kubernetes with Calico networking on _bare metal_ CoreOS. For more information on Project Calico, visit [projectcalico.org](http://projectcalico.org) and the [calico-containers repository](https://github.com/projectcalico/calico-containers). + +To install Calico on an existing Kubernetes cluster, or for more information on deploying Calico with Kubernetes in a number of other environments take a look at our supported [deployment guides](https://github.com/projectcalico/calico-containers/tree/master/docs/cni/kubernetes). + +Specifically, this guide will have you do the following: -Specifically, this guide will have you do the following: - - Deploy a Kubernetes master node on CoreOS using cloud-config. - Deploy two Kubernetes compute nodes with Calico Networking using cloud-config. -- Configure `kubectl` to access your cluster. +- Configure `kubectl` to access your cluster. + +The resulting cluster will use SSL between Kubernetes components. It will run the SkyDNS service and kube-ui, and be fully conformant with the Kubernetes v1.1 conformance tests. -The resulting cluster will use SSL between Kubernetes components. It will run the SkyDNS service and kube-ui, and be fully conformant with the Kubernetes v1.1 conformance tests. - ## Prerequisites and Assumptions - At least three bare-metal machines (or VMs) to work with. This guide will configure them as follows: - 1 Kubernetes Master - 2 Kubernetes Nodes - Your nodes should have IP connectivity to each other and the internet. -- This guide assumes a DHCP server on your network to assign server IPs. -- This guide uses `192.168.0.0/16` as the subnet from which pod IP addresses are assigned. If this overlaps with your host subnet, you will need to configure Calico to use a different [IP pool](https://github.com/projectcalico/calico-containers/blob/master/docs/calicoctl/pool.md#calicoctl-pool-commands). +- This guide assumes a DHCP server on your network to assign server IPs. +- This guide uses `192.168.0.0/16` as the subnet from which pod IP addresses are assigned. If this overlaps with your host subnet, you will need to configure Calico to use a different [IP pool](https://github.com/projectcalico/calico-containers/blob/master/docs/calicoctl/pool.md#calicoctl-pool-commands). ## Cloud-config This guide will use [cloud-config](https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/) to configure each of the nodes in our Kubernetes cluster. -We'll use two cloud-config files: +We'll use two cloud-config files: - `master-config.yaml`: cloud-config for the Kubernetes master - `node-config.yaml`: cloud-config for each Kubernetes node -## Download CoreOS - +## Download CoreOS + Download the stable CoreOS bootable ISO from the [CoreOS website](https://coreos.com/docs/running-coreos/platforms/iso/). ## Configure the Kubernetes Master -1. Once you've downloaded the ISO image, burn the ISO to a CD/DVD/USB key and boot from it (if using a virtual machine you can boot directly from the ISO). Once booted, you should be automatically logged in as the `core` user at the terminal. At this point CoreOS is running from the ISO and it hasn't been installed yet. +1. Once you've downloaded the ISO image, burn the ISO to a CD/DVD/USB key and boot from it (if using a virtual machine you can boot directly from the ISO). Once booted, you should be automatically logged in as the `core` user at the terminal. At this point CoreOS is running from the ISO and it hasn't been installed yet. -2. *On another machine*, download the the [master cloud-config template](https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/cloud-config/master-config-template.yaml) and save it as `master-config.yaml`. +2. *On another machine*, download the the [master cloud-config template](https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/cloud-config/master-config-template.yaml) and save it as `master-config.yaml`. -3. Replace the following variables in the `master-config.yaml` file. - - - ``: The public key you will use for SSH access to this server. See [generating ssh keys](https://help.github.com/articles/generating-ssh-keys/) +3. Replace the following variables in the `master-config.yaml` file. -4. Copy the edited `master-config.yaml` to your Kubernetes master machine (using a USB stick, for example). + - ``: The public key you will use for SSH access to this server. See [generating ssh keys](https://help.github.com/articles/generating-ssh-keys/) -5. The CoreOS bootable ISO comes with a tool called `coreos-install` which will allow us to install CoreOS and configure the machine using a cloud-config file. The following command will download and install stable CoreOS using the `master-config.yaml` file we just created for configuration. Run this on the Kubernetes master. +4. Copy the edited `master-config.yaml` to your Kubernetes master machine (using a USB stick, for example). + +5. The CoreOS bootable ISO comes with a tool called `coreos-install` which will allow us to install CoreOS and configure the machine using a cloud-config file. The following command will download and install stable CoreOS using the `master-config.yaml` file we just created for configuration. Run this on the Kubernetes master. + + > **Warning:** this is a destructive operation that erases disk `sda` on your server. + + ```shell + sudo coreos-install -d /dev/sda -C stable -c master-config.yaml + ``` - > **Warning:** this is a destructive operation that erases disk `sda` on your server. - - ```shell - sudo coreos-install -d /dev/sda -C stable -c master-config.yaml - ``` - 6. Once complete, restart the server and boot from `/dev/sda` (you may need to remove the ISO image). When it comes back up, you should have SSH access as the `core` user using the public key provided in the `master-config.yaml` file. ### Configure TLS @@ -61,14 +61,14 @@ Download the stable CoreOS bootable ISO from the [CoreOS website](https://coreos The master requires the CA certificate, `ca.pem`; its own certificate, `apiserver.pem` and its private key, `apiserver-key.pem`. This [CoreOS guide](https://coreos.com/kubernetes/docs/latest/openssl.html) explains how to generate these. 1. Generate the necessary certificates for the master. This [guide for generating Kubernetes TLS Assets](https://coreos.com/kubernetes/docs/latest/openssl.html) explains how to use OpenSSL to generate the required assets. - + 2. Send the three files to your master host (using `scp` for example). -3. Move them to the `/etc/kubernetes/ssl` folder and ensure that only the root user can read the key: - - ```shell - # Move keys - sudo mkdir -p /etc/kubernetes/ssl/ +3. Move them to the `/etc/kubernetes/ssl` folder and ensure that only the root user can read the key: + + ```shell + # Move keys + sudo mkdir -p /etc/kubernetes/ssl/ sudo mv -t /etc/kubernetes/ssl/ ca.pem apiserver.pem apiserver-key.pem # Set Permissions @@ -77,9 +77,9 @@ The master requires the CA certificate, `ca.pem`; its own certificate, `apiserve ``` 4. Restart the kubelet to pick up the changes: - - ```shell - sudo systemctl restart kubelet + + ```shell + sudo systemctl restart kubelet ``` ## Configure the compute nodes @@ -90,108 +90,119 @@ The following steps will set up a single Kubernetes node for use as a compute ho 2. Make a copy of the [node cloud-config template](https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/cloud-config/node-config-template.yaml) for this machine. -3. Replace the following placeholders in the `node-config.yaml` file to match your deployment. +3. Replace the following placeholders in the `node-config.yaml` file to match your deployment. - ``: Hostname for this node (e.g. kube-node1, kube-node2) - ``: The public key you will use for SSH access to this server. - ``: The IPv4 address of the Kubernetes master. -4. Replace the following placeholders with the contents of their respective files. +4. Replace the following placeholders with the contents of their respective files. - ``: Complete contents of `ca.pem` - - ``: Complete contents of `ca-key.pem` + - ``: Complete contents of `ca-key.pem` - > **Important:** in a production deployment, embedding the secret key in cloud-config is a bad idea! In production you should use an appropriate secret manager. + > **Important:** in a production deployment, embedding the secret key in cloud-config is a bad idea! In production you should use an appropriate secret manager. > **Important:** Make sure you indent the entire file to match the indentation of the placeholder. For example: - > - > ```shell - > - path: /etc/kubernetes/ssl/ca.pem - > owner: core - > permissions: 0644 - > content: | - > - > ``` - > - > should look like this once the certificate is in place: - > - > ```shell - > - path: /etc/kubernetes/ssl/ca.pem - > owner: core - > permissions: 0644 - > content: | - > -----BEGIN CERTIFICATE----- - > MIIC9zCCAd+gAwIBAgIJAJMnVnhVhy5pMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV - > ...... - > QHwi1rNc8eBLNrd4BM/A1ZeDVh/Q9KxN+ZG/hHIXhmWKgN5wQx6/81FIFg== - > -----END CERTIFICATE----- - > ``` + > + > ```shell + > - path: /etc/kubernetes/ssl/ca.pem + > owner: core + > permissions: 0644 + > content: | + > + > ``` + > + > should look like this once the certificate is in place: + > + > ```shell + > - path: /etc/kubernetes/ssl/ca.pem + > owner: core + > permissions: 0644 + > content: | + > -----BEGIN CERTIFICATE----- + > MIIC9zCCAd+gAwIBAgIJAJMnVnhVhy5pMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV + > ...... + > QHwi1rNc8eBLNrd4BM/A1ZeDVh/Q9KxN+ZG/hHIXhmWKgN5wQx6/81FIFg== + > -----END CERTIFICATE----- + > ``` -5. Move the modified `node-config.yaml` to your Kubernetes node machine and install and configure CoreOS on the node using the following command. - - > **Warning:** this is a destructive operation that erases disk `sda` on your server. +5. Move the modified `node-config.yaml` to your Kubernetes node machine and install and configure CoreOS on the node using the following command. - ```shell + > **Warning:** this is a destructive operation that erases disk `sda` on your server. + + ```shell sudo coreos-install -d /dev/sda -C stable -c node-config.yaml - ``` - + ``` + 6. Once complete, restart the server and boot into `/dev/sda`. When it comes back up, you should have SSH access as the `core` user using the public key provided in the `node-config.yaml` file. It will take some time for the node to be fully configured. -## Configure Kubeconfig - -To administer your cluster from a separate host, you will need the client and admin certificates generated earlier (`ca.pem`, `admin.pem`, `admin-key.pem`). With certificates in place, run the following commands with the appropriate filepaths. - -```shell -kubectl config set-cluster calico-cluster --server=https:// --certificate-authority= -kubectl config set-credentials calico-admin --certificate-authority= --client-key= --client-certificate= -kubectl config set-context calico --cluster=calico-cluster --user=calico-admin -kubectl config use-context calico -``` - +## Configure Kubeconfig + +To administer your cluster from a separate host, you will need the client and admin certificates generated earlier (`ca.pem`, `admin.pem`, `admin-key.pem`). With certificates in place, run the following commands with the appropriate filepaths. + +```shell +kubectl config set-cluster calico-cluster --server=https:// --certificate-authority= +kubectl config set-credentials calico-admin --certificate-authority= --client-key= --client-certificate= +kubectl config set-context calico --cluster=calico-cluster --user=calico-admin +kubectl config use-context calico +``` + Check your work with `kubectl get nodes`. - -## Install the DNS Addon - -Most Kubernetes deployments will require the DNS addon for service discovery. To install DNS, create the skydns service and replication controller provided. - -```shell -kubectl create -f https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/dns/skydns.yaml -``` - -## Install the Kubernetes UI Addon (Optional) - -The Kubernetes UI can be installed using `kubectl` to run the following manifest file. - -```shell -kubectl create -f https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/kube-ui/kube-ui.yaml -``` - -## Launch other Services With Calico-Kubernetes - -At this point, you have a fully functioning cluster running on Kubernetes with a master and two nodes networked with Calico. You can now follow any of the [standard documentation](https://github.com/kubernetes/kubernetes/tree/{{page.version}}/examples/) to set up other services on your cluster. - + +## Install the DNS Addon + +Most Kubernetes deployments will require the DNS addon for service discovery. To install DNS, create the skydns service and replication controller provided. + +```shell +kubectl create -f https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/dns/skydns.yaml +``` + +## Install the Kubernetes UI Addon (Optional) + +The Kubernetes UI can be installed using `kubectl` to run the following manifest file. + +```shell +kubectl create -f https://raw.githubusercontent.com/projectcalico/calico-cni/k8s-1.1-docs/samples/kubernetes/master/kube-ui/kube-ui.yaml +``` + +## Launch other Services With Calico-Kubernetes + +At this point, you have a fully functioning cluster running on Kubernetes with a master and two nodes networked with Calico. You can now follow any of the [standard documentation](https://github.com/kubernetes/kubernetes/tree/{{page.version}}/examples/) to set up other services on your cluster. + ## Connectivity to outside the cluster -Because containers in this guide have private `192.168.0.0/16` IPs, you will need NAT to allow connectivity between containers and the internet. However, in a production data center deployment, NAT is not always necessary, since Calico can peer with the data center's border routers over BGP. - -### NAT on the nodes - +Because containers in this guide have private `192.168.0.0/16` IPs, you will need NAT to allow connectivity between containers and the internet. However, in a production data center deployment, NAT is not always necessary, since Calico can peer with the data center's border routers over BGP. + +### NAT on the nodes + The simplest method for enabling connectivity from containers to the internet is to use outgoing NAT on your Kubernetes nodes. - -Calico can provide outgoing NAT for containers. To enable it, use the following `calicoctl` command: - -```shell -ETCD_AUTHORITY= calicoctl pool add --nat-outgoing -``` - -By default, `` will be `192.168.0.0/16`. You can find out which pools have been configured with the following command: - -```shell -ETCD_AUTHORITY= calicoctl pool show -``` - -### NAT at the border router - -In a data center environment, it is recommended to configure Calico to peer with the border routers over BGP. This means that the container IPs will be routable anywhere in the data center, and so NAT is not needed on the nodes (though it may be enabled at the data center edge to allow outbound-only internet connectivity). - -The Calico documentation contains more information on how to configure Calico to [peer with existing infrastructure](https://github.com/projectcalico/calico-containers/blob/master/docs/ExternalConnectivity.md). + +Calico can provide outgoing NAT for containers. To enable it, use the following `calicoctl` command: + +```shell +ETCD_AUTHORITY= calicoctl pool add --nat-outgoing +``` + +By default, `` will be `192.168.0.0/16`. You can find out which pools have been configured with the following command: + +```shell +ETCD_AUTHORITY= calicoctl pool show +``` + +### NAT at the border router + +In a data center environment, it is recommended to configure Calico to peer with the border routers over BGP. This means that the container IPs will be routable anywhere in the data center, and so NAT is not needed on the nodes (though it may be enabled at the data center edge to allow outbound-only internet connectivity). + +The Calico documentation contains more information on how to configure Calico to [peer with existing infrastructure](https://github.com/projectcalico/calico-containers/blob/master/docs/ExternalConnectivity.md). + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +Bare-metal | CoreOS | CoreOS | Calico | [docs](/docs/getting-started-guides/coreos/bare_metal_calico) | | Community ([@caseydavenport](https://github.com/caseydavenport)) + + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + From c2047b8f593b91c5a9aace0053acb3dba5b1a050 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:16:46 -0700 Subject: [PATCH 046/138] Update cloudstack.md --- docs/getting-started-guides/cloudstack.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/getting-started-guides/cloudstack.md b/docs/getting-started-guides/cloudstack.md index 1c8a1f2056..c573e6966b 100644 --- a/docs/getting-started-guides/cloudstack.md +++ b/docs/getting-started-guides/cloudstack.md @@ -78,3 +78,11 @@ SSH to it using the key that was created and using the _core_ user and you can l a017c422... role=node ad13bf84... role=master e9af8293... role=node +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +CloudStack | Ansible | CoreOS | flannel | [docs](/docs/getting-started-guides/cloudstack) | | Community ([@runseb](https://github.com/runseb)) + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 1426735e850dd47cd89ff3b6dfefe020530994f5 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:17:54 -0700 Subject: [PATCH 047/138] Update vsphere.md --- docs/getting-started-guides/vsphere.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/getting-started-guides/vsphere.md b/docs/getting-started-guides/vsphere.md index 02e06adf0d..3c68891b1f 100644 --- a/docs/getting-started-guides/vsphere.md +++ b/docs/getting-started-guides/vsphere.md @@ -94,3 +94,13 @@ The output of `kube-up.sh` displays the IP addresses of the VMs it deploys. You can log into any VM as the `kube` user to poke around and figure out what is going on (find yourself authorized with your SSH key, or use the password `kube` otherwise). + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +Vmware | | Debian | OVS | [docs](/docs/getting-started-guides/vsphere) | | Community ([@pietern](https://github.com/pietern)) + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + From 086e6d8e366844e0e17e30a993e3f1df60f4c87c Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:21:13 -0700 Subject: [PATCH 048/138] Update centos_manual_config.md --- .../centos/centos_manual_config.md | 84 +++++++++++-------- 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/docs/getting-started-guides/centos/centos_manual_config.md b/docs/getting-started-guides/centos/centos_manual_config.md index 553000f43d..9e09cabfcf 100644 --- a/docs/getting-started-guides/centos/centos_manual_config.md +++ b/docs/getting-started-guides/centos/centos_manual_config.md @@ -1,7 +1,7 @@ ---- ---- +--- +--- -* TOC +* TOC {:toc} ## Prerequisites @@ -20,38 +20,38 @@ The Kubernetes package provides a few services: kube-apiserver, kube-scheduler, Hosts: -```conf +```conf centos-master = 192.168.121.9 centos-minion = 192.168.121.65 -``` - +``` + **Prepare the hosts:** * Create a virt7-docker-common-release repo on all hosts - centos-{master,minion} with following information. -```conf +```conf [virt7-docker-common-release] name=virt7-docker-common-release baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/ gpgcheck=0 -``` - +``` + * Install Kubernetes on all hosts - centos-{master,minion}. This will also pull in etcd, docker, and cadvisor. -```shell +```shell yum -y install --enablerepo=virt7-docker-common-release kubernetes -``` - +``` + * Add master and node to /etc/hosts on all machines (not needed if hostnames already in DNS) -```shell +```shell echo "192.168.121.9 centos-master 192.168.121.65 centos-minion" >> /etc/hosts -``` - +``` + * Edit /etc/kubernetes/config which will be the same on all hosts to contain: -```shell +```shell # Comma separated list of nodes in the etcd cluster KUBE_ETCD_SERVERS="--etcd-servers=http://centos-master:2379" @@ -63,20 +63,20 @@ KUBE_LOG_LEVEL="--v=0" # Should this cluster be allowed to run privileged docker containers KUBE_ALLOW_PRIV="--allow-privileged=false" -``` - +``` + * Disable the firewall on both the master and node, as docker does not play well with other firewall rule managers -```shell +```shell systemctl disable iptables-services firewalld systemctl stop iptables-services firewalld -``` - +``` + **Configure the Kubernetes services on the master.** * Edit /etc/kubernetes/apiserver to appear as such: -```shell +```shell # The address on the local server to listen to. KUBE_API_ADDRESS="--address=0.0.0.0" @@ -94,25 +94,25 @@ KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" # Add your own! KUBE_API_ARGS="" -``` - +``` + * Start the appropriate services on master: -```shell +```shell for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done -``` - +``` + **Configure the Kubernetes services on the node.** ***We need to configure the kubelet and start the kubelet and proxy*** * Edit /etc/kubernetes/kubelet to appear as such: -```shell +```shell # The address for the info server to serve on KUBELET_ADDRESS="--address=0.0.0.0" @@ -127,28 +127,38 @@ KUBELET_API_SERVER="--api-servers=http://centos-master:8080" # Add your own! KUBELET_ARGS="" -``` - +``` + * Start the appropriate services on node (centos-minion). -```shell +```shell for SERVICES in kube-proxy kubelet docker; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done -``` - +``` + *You should be finished!* * Check to make sure the cluster can see the node (on centos-master) -```shell +```shell $ kubectl get nodes NAME LABELS STATUS centos-minion Ready -``` - +``` + **The cluster should be running! Launch a test pod.** -You should have a functional cluster, check out [101](/docs/user-guide/walkthrough/)! \ No newline at end of file +You should have a functional cluster, check out [101](/docs/user-guide/walkthrough/)! + +## Support Level + + +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)) + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + From 313c2ef5c461c8f108bb7538ce0c423d534660e9 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:23:47 -0700 Subject: [PATCH 049/138] Update juju.md --- docs/getting-started-guides/juju.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/getting-started-guides/juju.md b/docs/getting-started-guides/juju.md index 6127206404..979974e6b9 100644 --- a/docs/getting-started-guides/juju.md +++ b/docs/getting-started-guides/juju.md @@ -275,3 +275,15 @@ works with [Amazon Web Service](https://jujucharms.com/docs/stable/config-aws), If you do not see your favorite cloud provider listed many clouds with ssh access can be configured for [manual provisioning](https://jujucharms.com/docs/stable/config-manual). + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +AWS | Juju | Ubuntu | flannel | [docs](/docs/getting-started-guides/juju) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) + + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + + From 66d8b5d3f1dc8dce16fc560bcc7d58455dc49408 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:25:15 -0700 Subject: [PATCH 050/138] Update juju.md --- docs/getting-started-guides/juju.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/getting-started-guides/juju.md b/docs/getting-started-guides/juju.md index 979974e6b9..313f10176d 100644 --- a/docs/getting-started-guides/juju.md +++ b/docs/getting-started-guides/juju.md @@ -282,6 +282,9 @@ access can be configured for IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level -------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- AWS | Juju | Ubuntu | flannel | [docs](/docs/getting-started-guides/juju) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) +OpenStack/HPCloud | Juju | Ubuntu | flannel | [docs](/docs/getting-started-guides/juju) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) +Joyent | Juju | Ubuntu | flannel | [docs](/docs/getting-started-guides/juju) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) + For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From ce853d3d1e611a23b0dcb8b81024c9670f14b942 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:26:14 -0700 Subject: [PATCH 051/138] Update aws.md --- docs/getting-started-guides/aws.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting-started-guides/aws.md b/docs/getting-started-guides/aws.md index f8c2f64f0e..19ac55ed3f 100644 --- a/docs/getting-started-guides/aws.md +++ b/docs/getting-started-guides/aws.md @@ -141,6 +141,7 @@ cluster/kube-down.sh IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level -------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- AWS | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/aws) | | Community +AWS | Saltstack | Ubuntu | OVS | [docs](/docs/getting-started-guides/aws) | | Community ([@justinsb](https://github.com/justinsb)) For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 69290363c44646b7e90f9ff4b34092997d3edabc Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:28:34 -0700 Subject: [PATCH 052/138] Update ubuntu-calico.md --- docs/getting-started-guides/ubuntu-calico.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/getting-started-guides/ubuntu-calico.md b/docs/getting-started-guides/ubuntu-calico.md index 2d454cc94a..d1adfa2c73 100644 --- a/docs/getting-started-guides/ubuntu-calico.md +++ b/docs/getting-started-guides/ubuntu-calico.md @@ -463,3 +463,13 @@ ETCD_AUTHORITY= calicoctl pool show In a data center environment, it is recommended to configure Calico to peer with the border routers over BGP. This means that the container IPs will be routable anywhere in the data center, and so NAT is not needed on the nodes (though it may be enabled at the data center edge to allow outbound-only internet connectivity). The Calico documentation contains more information on how to configure Calico to [peer with existing infrastructure](https://github.com/projectcalico/calico-containers/blob/master/docs/ExternalConnectivity.md). + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +Bare-metal | custom | Ubuntu | Calico | [docs](/docs/getting-started-guides/ubuntu-calico) | | Community ([@djosborne](https://github.com/djosborne)) + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + From e850b480f6901093c6d6fbdc802d3387a6192ef6 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:30:09 -0700 Subject: [PATCH 053/138] Update ubuntu.md --- docs/getting-started-guides/ubuntu.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/getting-started-guides/ubuntu.md b/docs/getting-started-guides/ubuntu.md index d6c778b2e9..c47a15dc9d 100644 --- a/docs/getting-started-guides/ubuntu.md +++ b/docs/getting-started-guides/ubuntu.md @@ -280,4 +280,14 @@ You can use the `kubectl` command to check if the newly upgraded kubernetes clus To make sure the version of the upgraded cluster is what you expect, you will find these commands helpful. * upgrade all components or master: `$ kubectl version`. Check the *Server Version*. -* upgrade node `vcap@10.10.102.223`: `$ ssh -t vcap@10.10.102.223 'cd /opt/bin && sudo ./kubelet --version'` +* upgrade node `vcap@10.10.102.223`: `$ ssh -t vcap@10.10.102.223 'cd /opt/bin && sudo ./kubelet --version'`* + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +Bare-metal | custom | Ubuntu | flannel | [docs](/docs/getting-started-guides/ubuntu) | | Community ([@resouer](https://github.com/resouer), [@WIZARD-CXY](https://github.com/WIZARD-CXY)) + + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 27f3707c16b396ad44c9db1e267a1902d94b7d70 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:31:33 -0700 Subject: [PATCH 054/138] Update libvirt-coreos.md --- docs/getting-started-guides/libvirt-coreos.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/getting-started-guides/libvirt-coreos.md b/docs/getting-started-guides/libvirt-coreos.md index ac2ada1c1b..6c003490f5 100644 --- a/docs/getting-started-guides/libvirt-coreos.md +++ b/docs/getting-started-guides/libvirt-coreos.md @@ -320,3 +320,14 @@ usermod -a -G libvirtd $USER #### error: Out of memory initializing network (virsh net-create...) Ensure libvirtd has been restarted since ebtables was installed. + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +libvirt/KVM | CoreOS | CoreOS | libvirt/KVM | [docs](/docs/getting-started-guides/libvirt-coreos) | | Community ([@lhuard1A](https://github.com/lhuard1A)) + + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. + From 209c5c32a71a81e07854ced635e934de922f2ee6 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:33:46 -0700 Subject: [PATCH 055/138] Update scratch.md --- docs/getting-started-guides/scratch.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/getting-started-guides/scratch.md b/docs/getting-started-guides/scratch.md index a6efc189ae..5c9502ff9e 100644 --- a/docs/getting-started-guides/scratch.md +++ b/docs/getting-started-guides/scratch.md @@ -837,3 +837,13 @@ pinging or SSH-ing from one node to another. If you run into trouble, please see the section on [troubleshooting](/docs/getting-started-guides/gce#troubleshooting), post to the [google-containers group](https://groups.google.com/forum/#!forum/google-containers), or come ask questions on [Slack](/docs/troubleshooting#slack). + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +any | any | any | any | [docs](/docs/getting-started-guides/scratch) | | Community ([@erictune](https://github.com/erictune)) + + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 43a95d6b5ec0d3bff9fa1da6a6419651f7042536 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:35:01 -0700 Subject: [PATCH 056/138] Update ovirt.md --- docs/getting-started-guides/ovirt.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/getting-started-guides/ovirt.md b/docs/getting-started-guides/ovirt.md index 9740eaaf60..e1ebe7e67a 100644 --- a/docs/getting-started-guides/ovirt.md +++ b/docs/getting-started-guides/ovirt.md @@ -47,4 +47,13 @@ The `ovirt-cloud.conf` file then must be specified in kube-controller-manager: This short screencast demonstrates how the oVirt Cloud Provider can be used to dynamically add VMs to your Kubernetes cluster. -[![Screencast](http://img.youtube.com/vi/JyyST4ZKne8/0.jpg)](http://www.youtube.com/watch?v=JyyST4ZKne8) \ No newline at end of file +[![Screencast](http://img.youtube.com/vi/JyyST4ZKne8/0.jpg)](http://www.youtube.com/watch?v=JyyST4ZKne8) + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +oVirt | | | | [docs](/docs/getting-started-guides/ovirt) | | Community ([@simon3z](https://github.com/simon3z)) + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From b230cab825bff3a40109e1635cbdd2cf72004c00 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:36:13 -0700 Subject: [PATCH 057/138] Update openstack-heat.md --- docs/getting-started-guides/openstack-heat.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/getting-started-guides/openstack-heat.md b/docs/getting-started-guides/openstack-heat.md index 033f5ce878..3da20528f7 100644 --- a/docs/getting-started-guides/openstack-heat.md +++ b/docs/getting-started-guides/openstack-heat.md @@ -237,3 +237,12 @@ To bring down your cluster, issue the following command: KUBERNETES_PROVIDER=openstack-heat ./cluster/kube-down.sh ``` If you have changed the default `$STACK_NAME`, you must specify the name. Note that this will not remove any Cinder volumes created by Kubernetes. + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +OpenStack Heat | Saltstack | CentOS | Neutron + flannel hostgw | [docs](/docs/getting-started-guides/openstack-heat) | | Community ([@FujitsuEnablingSoftwareTechnologyGmbH](https://github.com/FujitsuEnablingSoftwareTechnologyGmbH)) + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 148af6f78c8a431575f9cf0fef158842352fa675 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:37:42 -0700 Subject: [PATCH 058/138] Update rackspace.md --- docs/getting-started-guides/rackspace.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/getting-started-guides/rackspace.md b/docs/getting-started-guides/rackspace.md index 83666108d5..a91187275e 100644 --- a/docs/getting-started-guides/rackspace.md +++ b/docs/getting-started-guides/rackspace.md @@ -60,4 +60,14 @@ There is a specific `cluster/rackspace` directory with the scripts for the follo - eth0 - Public Interface used for servers/containers to reach the internet - eth1 - ServiceNet - Intra-cluster communication (k8s, etcd, etc) communicate via this interface. The `cloud-config` files use the special CoreOS identifier `$private_ipv4` to configure the services. -- eth2 - Cloud Network - Used for k8s pods to communicate with one another. The proxy service will pass traffic via this interface. \ No newline at end of file +- eth2 - Cloud Network - Used for k8s pods to communicate with one another. The proxy service will pass traffic via this interface. + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +Rackspace | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/rackspace) | | Community ([@doublerr](https://github.com/doublerr)) + + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 0a64b63c185af0d7be4a59f0be0583789249bed0 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 15:52:49 -0700 Subject: [PATCH 059/138] Update index.md --- docs/getting-started-guides/coreos/index.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/getting-started-guides/coreos/index.md b/docs/getting-started-guides/coreos/index.md index 68d5a282b9..e56ebd16e0 100644 --- a/docs/getting-started-guides/coreos/index.md +++ b/docs/getting-started-guides/coreos/index.md @@ -80,4 +80,14 @@ Guide to running an HA etcd cluster with a single master on Azure. Uses the Azur [**Multi-node cluster using cloud-config, CoreOS and VMware ESXi**](https://github.com/xavierbaude/VMware-coreos-multi-nodes-Kubernetes) -Configure a single master, single worker cluster on VMware ESXi. \ No newline at end of file +Configure a single master, single worker cluster on VMware ESXi. + +## Support Level + + +IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level +-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- +GCE | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/coreos) | | Community ([@pires](https://github.com/pires)) +Vagrant | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/coreos) | | Community ([@pires](https://github.com/pires), [@AntonioMeireles](https://github.com/AntonioMeireles)) + +For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From 992848eec1f18b86bbdf96d37d4b54480cf92bd8 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Sun, 22 May 2016 16:00:45 -0700 Subject: [PATCH 060/138] Update reference.md --- docs/reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference.md b/docs/reference.md index 693d0dc7a4..7eefef2cc1 100644 --- a/docs/reference.md +++ b/docs/reference.md @@ -19,7 +19,7 @@ In the reference section, you can find reference documentation for Kubernetes AP ## Glossary -Explore the glossary of essential Kubernetes concepts. Some good starting points are the entries for [Pods](/docs/user-guide/pods/), [Nodes](/docs/admin/node/), [Services](/docs/user-guide/services/), and [Replication Controllers](/docs/user-guide/replication-controller/). +Explore the glossary of essential Kubernetes concepts. Some good starting points are the entries for [Pods](/docs/user-guide/pods/), [Nodes](/docs/admin/nodes/), [Services](/docs/user-guide/services/), and [Replication Controllers](/docs/user-guide/replication-controller/). ## Design Docs From 60d8378a26d3fdf428b97bf0fe82a3577cdc3a00 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Tue, 24 May 2016 11:15:23 -0700 Subject: [PATCH 061/138] Update aws.md Added blank line --- docs/getting-started-guides/aws.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting-started-guides/aws.md b/docs/getting-started-guides/aws.md index 19ac55ed3f..319393c03c 100644 --- a/docs/getting-started-guides/aws.md +++ b/docs/getting-started-guides/aws.md @@ -135,6 +135,7 @@ Make sure the environment variables you used to provision your cluster are still ```shell cluster/kube-down.sh ``` + ## Support Level From 47593c4891b34348f1180a24cc186f0c99f35ab8 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Tue, 24 May 2016 18:10:37 -0700 Subject: [PATCH 062/138] Update clc.md removed support level link --- docs/getting-started-guides/clc.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/getting-started-guides/clc.md b/docs/getting-started-guides/clc.md index 639b21b49e..3e9b3f0858 100644 --- a/docs/getting-started-guides/clc.md +++ b/docs/getting-started-guides/clc.md @@ -337,6 +337,5 @@ If you want more information about our Ansible files, please [read this file](ht Please see the [Kubernetes docs](/docs/) for more details on administering and using a Kubernetes cluster. -For support level information, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. From a1ac9587e3fa76bb82e66a4791c4773535d8d9ba Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Tue, 24 May 2016 18:14:42 -0700 Subject: [PATCH 063/138] Update cloudstack.md added blank line before H2 --- docs/getting-started-guides/cloudstack.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting-started-guides/cloudstack.md b/docs/getting-started-guides/cloudstack.md index c573e6966b..313c97de65 100644 --- a/docs/getting-started-guides/cloudstack.md +++ b/docs/getting-started-guides/cloudstack.md @@ -78,6 +78,7 @@ SSH to it using the key that was created and using the _core_ user and you can l a017c422... role=node ad13bf84... role=master e9af8293... role=node + ## Support Level From 573994d0e75b4224deeda46788e71a077688e9a8 Mon Sep 17 00:00:00 2001 From: DrDePhobia Date: Tue, 24 May 2016 18:29:58 -0700 Subject: [PATCH 064/138] Update bare_metal_offline.md Added blank line before H2 --- docs/getting-started-guides/coreos/bare_metal_offline.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting-started-guides/coreos/bare_metal_offline.md b/docs/getting-started-guides/coreos/bare_metal_offline.md index 030dc87e74..f243caf81d 100644 --- a/docs/getting-started-guides/coreos/bare_metal_offline.md +++ b/docs/getting-started-guides/coreos/bare_metal_offline.md @@ -693,6 +693,7 @@ Kill all pods: ```shell for i in `kubectl get pods | awk '{print $1}'`; do kubectl delete pod $i; done ``` + ## Support Level From 081c9f969e8e7a25adcc7829c7ce3e66de5db08d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Oczad=C5=82y?= Date: Sun, 29 May 2016 13:53:21 +0200 Subject: [PATCH 065/138] Typo in /admin/namespaces --- docs/admin/namespaces/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/admin/namespaces/index.md b/docs/admin/namespaces/index.md index 2b9f14e835..c9f51280ad 100644 --- a/docs/admin/namespaces/index.md +++ b/docs/admin/namespaces/index.md @@ -46,6 +46,7 @@ kube-system Active ``` Kubernetes starts with two initial namespaces: + * `default` The default namespace for objects with no other namespace * `kube-system` The namespace for objects created by the Kubernetes system From ca8c46d75bce447f27ff6078d766505509576473 Mon Sep 17 00:00:00 2001 From: harryz Date: Tue, 31 May 2016 14:36:27 +0800 Subject: [PATCH 066/138] Need export KUBERNETES_PROVIDER=local Fix #26453 Need to export KUBERNETES_PROVIDER=local before using cluster/kubectl.sh --- docs/getting-started-guides/locally.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting-started-guides/locally.md b/docs/getting-started-guides/locally.md index cc2f9f1107..84ecec34c1 100644 --- a/docs/getting-started-guides/locally.md +++ b/docs/getting-started-guides/locally.md @@ -49,6 +49,7 @@ Your cluster is running, and you want to start running containers! You can now use any of the cluster/kubectl.sh commands to interact with your local setup. ```shell +export KUBERNETES_PROVIDER=local cluster/kubectl.sh get pods cluster/kubectl.sh get services cluster/kubectl.sh get deployments From 3589ddbde77fa19442c44b2b55f994a7e62bd865 Mon Sep 17 00:00:00 2001 From: Jan Chaloupka Date: Wed, 1 Jun 2016 09:34:00 +0200 Subject: [PATCH 067/138] Convert level-5 heading into bold heading --- docs/user-guide/secrets/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/user-guide/secrets/index.md b/docs/user-guide/secrets/index.md index 7e23b14bd5..4fcea9e303 100644 --- a/docs/user-guide/secrets/index.md +++ b/docs/user-guide/secrets/index.md @@ -214,7 +214,7 @@ You can package many files into one secret, or use many secrets, whichever is co See another example of creating a secret and a pod that consumes that secret in a volume [here](/docs/user-guide/secrets/). -##### Projection of secret keys to specific paths +**Projection of secret keys to specific paths** We can also control the paths within the volume where Secret keys are projected. You can use `spec.volumes[].secret.items` field to change target path of each key: @@ -260,7 +260,7 @@ If `spec.volumes[].secret.items` is used, only keys specified in `items` are pro To consume all keys from the secret, all of them must be listed in the `items` field. All listed keys must exist in the corresponding secret. Otherwise, the volume is not created. -##### Consuming Secret Values from Volumes +**Consuming Secret Values from Volumes** Inside the container that mounts a secret volume, the secret keys appear as files and the secret values are base-64 decoded and stored inside these files. @@ -280,7 +280,7 @@ $ cat /etc/foo/password The program in a container is responsible for reading the secret(s) from the files. -##### Mounted Secrets are updated automatically +**Mounted Secrets are updated automatically** When a secret being already consumed in a volume is updated, projected keys are eventually updated as well. The update time depends on the kubelet syncing period. @@ -318,7 +318,7 @@ spec: restartPolicy: Never ``` -##### Consuming Secret Values from Environment Variables +**Consuming Secret Values from Environment Variables** Inside a container that consumes a secret in an environment variables, the secret keys appear as normal environment variables containing the base-64 decoded values of the secret data. @@ -336,7 +336,7 @@ $ echo $SECRET_PASSWORD An imagePullSecret is a way to pass a secret that contains a Docker (or other) image registry password to the Kubelet so it can pull a private image on behalf of your Pod. -##### Manually specifying an imagePullSecret +**Manually specifying an imagePullSecret** Use of imagePullSecrets is described in the [images documentation](/docs/user-guide/images/#specifying-imagepullsecrets-on-a-pod) From 03c388d6dae140a3f35f7212cfadbbfce9225e00 Mon Sep 17 00:00:00 2001 From: dlorenc Date: Wed, 1 Jun 2016 14:57:06 -0700 Subject: [PATCH 068/138] Add a warning about Docker For Mac. --- docs/getting-started-guides/docker.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/getting-started-guides/docker.md b/docs/getting-started-guides/docker.md index aa3bf9612a..8efa8ad4e1 100644 --- a/docs/getting-started-guides/docker.md +++ b/docs/getting-started-guides/docker.md @@ -12,6 +12,8 @@ Here's a diagram of what the final result will look like: ## Prerequisites +**Note: These steps have not been tested with the [Docker For Mac or Docker For Windows beta programs](https://blog.docker.com/2016/03/docker-for-mac-windows-beta/).** + 1. You need to have docker installed on one machine. 2. Decide what Kubernetes version to use. Set the `${K8S_VERSION}` variable to a released version of Kubernetes >= "v1.2.0". If you'd like to use the current stable version of Kubernetes, run the following: From 155c261549085788337f89bb22e9f3a2b1f47c56 Mon Sep 17 00:00:00 2001 From: ankurshukla Date: Thu, 2 Jun 2016 10:57:13 -0700 Subject: [PATCH 069/138] Adding partner section to community page --- README.md | 26 +++++++++++++------ _sass/_base.sass | 15 +++++++++-- _sass/_skin.sass | 1 + community.html | 14 +++++++++- images/community_logos/datadog_logo.png | Bin 0 -> 17940 bytes images/community_logos/elastickube_logo.png | Bin 0 -> 7987 bytes images/community_logos/rancher_logo.png | Bin 0 -> 15876 bytes images/community_logos/sysdig_cloud_logo.png | Bin 0 -> 6217 bytes images/community_logos/wercker_logo.png | Bin 0 -> 13676 bytes 9 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 images/community_logos/datadog_logo.png create mode 100644 images/community_logos/elastickube_logo.png create mode 100644 images/community_logos/rancher_logo.png create mode 100644 images/community_logos/sysdig_cloud_logo.png create mode 100644 images/community_logos/wercker_logo.png diff --git a/README.md b/README.md index d51609edf9..a1eb9c58d4 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ change the name of the fork to be: Then, visit: [http://YOUR_GITHUB_USERNAME.github.io](http://YOUR_GITHUB_USERNAME.github.io) -You should see a special-to-you version of the site. +You should see a special-to-you version of the site. ## Editing/staging the site locally @@ -31,12 +31,12 @@ Then install Ruby 2.2 or higher rvm install ruby-2.2.4 rvm use ruby-2.2.4 --default - + Verify that this new version is running (optional) which ruby ruby -v - + Install the GitHub Pages package, which includes Jekyll gem install github-pages @@ -58,13 +58,13 @@ If you're a bit rusty with git/GitHub, you might wanna read The above instructions work on Mac and Linux. [These instructions ](https://martinbuberl.com/blog/setup-jekyll-on-windows-and-host-it-on-github-pages/) -might help for Windows users. +might help for Windows users. ## Common Tasks ### Edit Page Titles or Change the Left Navigation -Edit the yaml files in `/_data/` for the Guides, Reference, Samples, or Support areas. +Edit the yaml files in `/_data/` for the Guides, Reference, Samples, or Support areas. You may have to exit and `jekyll clean` before restarting the `jekyll serve` to get changes to files in `/_data/` to show up. @@ -109,7 +109,7 @@ Example file: [Pods: Multi-Container](/docs/user-guide/pods/multi-container/). ## Use a global variable -The `/_config.yml` file defines some useful variables you can use when editing docs. +The `/_config.yml` file defines some useful variables you can use when editing docs. * `page.githubbranch`: The name of the GitHub branch on the Kubernetes repo that is associated with this branch of the docs. e.g. `release-1.2` * `page.version` The version of Kubernetes associated with this branch of the docs. e.g. `v1.2` @@ -131,17 +131,27 @@ 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: +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: +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). +## Partners +Partners can get their logos added to the partner section of the [community page](http://k8s.io/community) by following the below steps and meeting the below logo specifications. Partners will also need to have a URL that is specific to integrating with Kubernetes ready; this URL will be the destination when the logo is clicked. + +* The partner product logo should be a transparent png image centered in a 215x125 px frame. (look at the existing logos for reference) +* The logo must link to a URL that is specific to integrating with Kubernetes, hosted on the partner's site. +* The logo should be named *product-name*_logo.png and placed in the `/images/community_logos` folder. +* The image reference (including the link to the partner URL) should be added in `community.html` under `
...
`. +* Please do not change the order of the existing partner images. Append your logo to the end of the list. +* Once completed and tested the look and feel, submit the pull request. + ## Thank you! Kubernetes thrives on community participation and we really appreciate your diff --git a/_sass/_base.sass b/_sass/_base.sass index 0fbf8b32ce..c327086561 100644 --- a/_sass/_base.sass +++ b/_sass/_base.sass @@ -834,7 +834,7 @@ dd td font-size: 0.85em - + #editPageButton position: absolute top: -25px @@ -1165,6 +1165,17 @@ $feature-box-div-margin-bottom: 40px margin: 10px background-color: $light-grey + .partner-logos + text-align: center + max-width: 1200px + margin: 0 auto + + img + width: auto + margin: 10px + background-color: $white + box-shadow: 0 5px 5px rgba(0,0,0,.24),0 0 5px rgba(0,0,0,.12) + #calendarWrapper position: relative width: 80vw @@ -1274,4 +1285,4 @@ $feature-box-div-margin-bottom: 40px background-image: url(/images/community_logos/ebay_logo.png) div:nth-child(3) - background-image: url(/images/community_logos/wikimedia_foundation_logo.png) \ No newline at end of file + background-image: url(/images/community_logos/wikimedia_foundation_logo.png) diff --git a/_sass/_skin.sass b/_sass/_skin.sass index d1a5eb3445..67bbce0208 100755 --- a/_sass/_skin.sass +++ b/_sass/_skin.sass @@ -2,6 +2,7 @@ $blue: #3371e3 $light-grey: #f7f7f7 $dark-grey: #303030 $medium-grey: #4c4c4c +$white: #ffffff $base-font: 'Roboto', sans-serif $mono-font: 'Roboto Mono', monospace diff --git a/community.html b/community.html index 7ce6c933c0..a8c884b3df 100644 --- a/community.html +++ b/community.html @@ -64,6 +64,18 @@ title: Community +
+

Partners

+

We are working with a broad group of partners to help grow the kubernetes ecosystem supporting + a sprectrum of compelmenting platforms, from open source solutions to market-leading technologies.

+
+ + + + + +
+
@@ -95,4 +107,4 @@ title: Community {% include footer.html %} - \ No newline at end of file + diff --git a/images/community_logos/datadog_logo.png b/images/community_logos/datadog_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fcc081eabcc6df1d614a8df0a35bd80abebe3a78 GIT binary patch literal 17940 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 DAxc?z literal 0 HcmV?d00001 diff --git a/images/community_logos/elastickube_logo.png b/images/community_logos/elastickube_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..10275d88e517ba3055866f7a695ea6a7d31c6872 GIT binary patch literal 7987 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
Hbn3nYqe+g)(;Lu#vPztW%{x?IQQ!E1 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 VY3=}(|LVN~pJl#)YNbp<{ui1(0bT$A literal 0 HcmV?d00001 diff --git a/images/community_logos/sysdig_cloud_logo.png b/images/community_logos/sysdig_cloud_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8cd1ddcde11ce80d667d2afa6fe6158a23379ed2 GIT binary patch literal 6217 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 U6Cbkk?^gp9Wz}SA!REpL1Jp3^=>Px# literal 0 HcmV?d00001 diff --git a/images/community_logos/wercker_logo.png b/images/community_logos/wercker_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..526e124ca3faa054678761942a62b2658decc151 GIT binary patch literal 13676 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