Merge branch 'master' into hpa-doc-fix
@@ -4,16 +4,22 @@ Welcome! We are very pleased you want to contribute to the documentation and/or
|
|||||||
|
|
||||||
You can click the "Fork" button in the upper-right area of the screen to create a copy of our site on your GitHub account called a "fork." Make any changes you want in your fork, and when you are ready to send those changes to us, go to the index page for your fork and click "New Pull Request" to let us know about it.
|
You can click the "Fork" button in the upper-right area of the screen to create a copy of our site on your GitHub account called a "fork." Make any changes you want in your fork, and when you are ready to send those changes to us, go to the index page for your fork and click "New Pull Request" to let us know about it.
|
||||||
|
|
||||||
## Staging the site on GitHub Pages
|
## Automatic Staging for Pull Requests
|
||||||
|
|
||||||
If you want to see your changes staged without having to install anything locally, remove the CNAME file in this directory and
|
When you create a pull request (either against master or the upcoming release), your changes are staged in a custom subdomain on Netlify so that you can see your changes in rendered form before the PR is merged. You can use this to verify that everything is correct before the PR gets merged. To view your changes:
|
||||||
change the name of the fork to be:
|
|
||||||
|
|
||||||
YOUR_GITHUB_USERNAME.github.io
|
- Scroll down to the PR's list of Automated Checks
|
||||||
|
- Click "Show All Checks"
|
||||||
|
- Look for "deploy/netlify"; you'll see "Deploy Preview Ready!" if staging was successful
|
||||||
|
- Click "Details" to bring up the staged site and navigate to your changes
|
||||||
|
|
||||||
Then make your changes.
|
## Release Branch Staging
|
||||||
|
|
||||||
When you visit [http://YOUR_GITHUB_USERNAME.github.io](http://YOUR_GITHUB_USERNAME.github.io) you should see a special-to-you version of the site that contains the changes you just made.
|
The Kubernetes site maintains staged versions at a subdomain provided by Netlify. Every PR for the Kubernetes site, either against the master branch or the upcoming release branch, is staged automatically.
|
||||||
|
|
||||||
|
The staging site for the next upcoming Kubernetes release is here: [http://kubernetes-io-vnext-staging.netlify.com/](http://kubernetes-io-vnext-staging.netlify.com/)
|
||||||
|
|
||||||
|
The staging site reflects the current state of what's been merged in the release branch, or in other words, what the docs will look like for the next upcoming release. It's automatically updated as new PRs get merged.
|
||||||
|
|
||||||
## Staging the site locally (using Docker)
|
## Staging the site locally (using Docker)
|
||||||
|
|
||||||
@@ -64,7 +70,6 @@ Make any changes you want. Then, to see your changes locally:
|
|||||||
Your copy of the site will then be viewable at: [http://localhost:4000](http://localhost:4000)
|
Your copy of the site will then be viewable at: [http://localhost:4000](http://localhost:4000)
|
||||||
(or wherever Jekyll tells you).
|
(or wherever Jekyll tells you).
|
||||||
|
|
||||||
|
|
||||||
## GitHub help
|
## GitHub help
|
||||||
|
|
||||||
If you're a bit rusty with git/GitHub, you might want to read
|
If you're a bit rusty with git/GitHub, you might want to read
|
||||||
@@ -137,20 +142,13 @@ That, of course, will send users to:
|
|||||||
|
|
||||||
## Branch structure
|
## Branch structure
|
||||||
|
|
||||||
The current version of the website is served out of the `master` branch.
|
The current version of the website is served out of the `master` branch. To make changes to the live docs, such as bug fixes, broken links, typos, etc, **target your pull request to the master branch**.
|
||||||
|
|
||||||
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).
|
The `release-1.x` branches store changes for **upcoming releases of Kubernetes**. For example, the `release-1.5` branch has changes for the upcoming 1.5 release. These changes target branches (and *not* master) to avoid publishing documentation updates prior to the release for which they're relevant. If you have a change for an upcoming release of Kubernetes, **target your pull request to the appropriate release branch**.
|
||||||
|
|
||||||
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/
|
http://k8sdocs.github.io/docs/tutorials/
|
||||||
|
|
||||||
Changes in the "release-1.1" branch (for k8s v1.1 docs) are automatically staged here:
|
|
||||||
http://kubernetes-v1-1.github.io/
|
|
||||||
|
|
||||||
Changes in the "release-1.3" branch (for k8s v1.3 docs) are automatically staged here:
|
|
||||||
http://kubernetes-v1-3.github.io/
|
|
||||||
|
|
||||||
Editing of these branches will kick off a build using Travis CI that auto-updates these URLs; you can monitor the build progress at [https://travis-ci.org/kubernetes/kubernetes.github.io](https://travis-ci.org/kubernetes/kubernetes.github.io).
|
|
||||||
|
|
||||||
## Config yaml guidelines
|
## Config yaml guidelines
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ defaults:
|
|||||||
values:
|
values:
|
||||||
version: "v1.3"
|
version: "v1.3"
|
||||||
githubbranch: "master"
|
githubbranch: "master"
|
||||||
docsbranch: "release-1.3"
|
docsbranch: "master"
|
||||||
-
|
-
|
||||||
scope:
|
scope:
|
||||||
path: "docs"
|
path: "docs"
|
||||||
|
|||||||
@@ -4,5 +4,6 @@ tocs:
|
|||||||
- tasks
|
- tasks
|
||||||
- concepts
|
- concepts
|
||||||
- reference
|
- reference
|
||||||
|
- tools
|
||||||
- samples
|
- samples
|
||||||
- support
|
- support
|
||||||
|
|||||||
@@ -163,10 +163,10 @@ toc:
|
|||||||
path: /docs/getting-started-guides/gce/
|
path: /docs/getting-started-guides/gce/
|
||||||
- title: Running Kubernetes on AWS EC2
|
- title: Running Kubernetes on AWS EC2
|
||||||
path: /docs/getting-started-guides/aws/
|
path: /docs/getting-started-guides/aws/
|
||||||
|
- title: Running Kubernetes on Azure
|
||||||
|
path: /docs/getting-started-guides/azure/
|
||||||
- title: Running Kubernetes on Azure (Weave-based)
|
- title: Running Kubernetes on Azure (Weave-based)
|
||||||
path: /docs/getting-started-guides/coreos/azure/
|
path: /docs/getting-started-guides/coreos/azure/
|
||||||
- title: Running Kubernetes on Azure (Flannel-based)
|
|
||||||
path: /docs/getting-started-guides/azure/
|
|
||||||
- title: Running Kubernetes on CenturyLink Cloud
|
- title: Running Kubernetes on CenturyLink Cloud
|
||||||
path: /docs/getting-started-guides/clc/
|
path: /docs/getting-started-guides/clc/
|
||||||
- title: Running Kubernetes on IBM SoftLayer
|
- title: Running Kubernetes on IBM SoftLayer
|
||||||
|
|||||||
@@ -230,6 +230,8 @@ toc:
|
|||||||
path: /docs/user-guide/services/
|
path: /docs/user-guide/services/
|
||||||
- title: Service Accounts
|
- title: Service Accounts
|
||||||
path: /docs/user-guide/service-accounts/
|
path: /docs/user-guide/service-accounts/
|
||||||
|
- title: Third Party Resources
|
||||||
|
path: /docs/user-guide/thirdpartyresources/
|
||||||
- title: Volumes
|
- title: Volumes
|
||||||
path: /docs/user-guide/volumes/
|
path: /docs/user-guide/volumes/
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
bigheader: "Tools"
|
||||||
|
toc:
|
||||||
|
- title: Tools
|
||||||
|
path: /docs/tools/
|
||||||
@@ -2,56 +2,44 @@ bigheader: "Tutorials"
|
|||||||
toc:
|
toc:
|
||||||
- title: Tutorials
|
- title: Tutorials
|
||||||
path: /docs/tutorials/
|
path: /docs/tutorials/
|
||||||
- title: Getting Started
|
- title: Kubernetes Basics
|
||||||
section:
|
section:
|
||||||
- title: 1. Create a Cluster
|
- title: 1. Create a Cluster
|
||||||
section:
|
section:
|
||||||
- title: Creating a Cluster
|
|
||||||
path: /docs/tutorials/getting-started/create-cluster/
|
|
||||||
- title: Using Minikube to Create a Cluster
|
- title: Using Minikube to Create a Cluster
|
||||||
path: /docs/tutorials/getting-started/cluster-intro/
|
path: /docs/tutorials/kubernetes-basics/cluster-intro/
|
||||||
- title: Interactive Tutorial - Creating a Cluster
|
- title: Interactive Tutorial - Creating a Cluster
|
||||||
path: /docs/tutorials/getting-started/cluster-interactive/
|
path: /docs/tutorials/kubernetes-basics/cluster-interactive/
|
||||||
- title: 2. Deploy an App
|
- title: 2. Deploy an App
|
||||||
section:
|
section:
|
||||||
- title: Deploying an App
|
|
||||||
path: /docs/tutorials/getting-started/deploy-app/
|
|
||||||
- title: Using kubectl to Create a Deployment
|
- title: Using kubectl to Create a Deployment
|
||||||
path: /docs/tutorials/getting-started/deploy-intro/
|
path: /docs/tutorials/kubernetes-basics/deploy-intro/
|
||||||
- title: Interactive Tutorial - Deploying an App
|
- title: Interactive Tutorial - Deploying an App
|
||||||
path: /docs/tutorials/getting-started/deploy-interactive/
|
path: /docs/tutorials/kubernetes-basics/deploy-interactive/
|
||||||
- title: 3. Explore Your App
|
- title: 3. Explore Your App
|
||||||
section:
|
section:
|
||||||
- title: Exploring Your App
|
|
||||||
path: /docs/tutorials/getting-started/explore-app/
|
|
||||||
- title: Viewing Pods and Nodes
|
- title: Viewing Pods and Nodes
|
||||||
path: /docs/tutorials/getting-started/explore-intro/
|
path: /docs/tutorials/kubernetes-basics/explore-intro/
|
||||||
- title: Interactive Tutorial - Exploring Your App
|
- title: Interactive Tutorial - Exploring Your App
|
||||||
path: /docs/tutorials/getting-started/explore-interactive/
|
path: /docs/tutorials/kubernetes-basics/explore-interactive/
|
||||||
- title: 4. Expose Your App Publicly
|
- title: 4. Expose Your App Publicly
|
||||||
section:
|
section:
|
||||||
- title: Exposing Your App Publicly
|
|
||||||
path: /docs/tutorials/getting-started/expose-app/
|
|
||||||
- title: Using a Service to Expose Your App
|
- title: Using a Service to Expose Your App
|
||||||
path: /docs/tutorials/getting-started/expose-intro/
|
path: /docs/tutorials/kubernetes-basics/expose-intro/
|
||||||
- title: Interactive Tutorial - Exposing Your App
|
- title: Interactive Tutorial - Exposing Your App
|
||||||
path: /docs/tutorials/getting-started/expose-interactive/
|
path: /docs/tutorials/kubernetes-basics/expose-interactive/
|
||||||
- title: 5. Scale Your App
|
- title: 5. Scale Your App
|
||||||
section:
|
section:
|
||||||
- title: Scaling Your App
|
|
||||||
path: /docs/tutorials/getting-started/scale-app/
|
|
||||||
- title: Running Multiple Instances of Your App
|
- title: Running Multiple Instances of Your App
|
||||||
path: /docs/tutorials/getting-started/scale-intro/
|
path: /docs/tutorials/kubernetes-basics/scale-intro/
|
||||||
- title: Interactive Tutorial - Scaling Your App
|
- title: Interactive Tutorial - Scaling Your App
|
||||||
path: /docs/tutorials/getting-started/scale-interactive/
|
path: /docs/tutorials/kubernetes-basics/scale-interactive/
|
||||||
- title: 6. Update Your App
|
- title: 6. Update Your App
|
||||||
section:
|
section:
|
||||||
- title: Updating Your App
|
|
||||||
path: /docs/tutorials/getting-started/update-app/
|
|
||||||
- title: Performing a Rolling Update
|
- title: Performing a Rolling Update
|
||||||
path: /docs/tutorials/getting-started/update-intro/
|
path: /docs/tutorials/kubernetes-basics/update-intro/
|
||||||
- title: Interactive Tutorial - Updating Your App
|
- title: Interactive Tutorial - Updating Your App
|
||||||
path: /docs/tutorials/getting-started/update-interactive/
|
path: /docs/tutorials/kubernetes-basics/update-interactive/
|
||||||
- title: Stateless Applications
|
- title: Stateless Applications
|
||||||
section:
|
section:
|
||||||
- title: Running a Stateless Application Using a Deployment
|
- title: Running a Stateless Application Using a Deployment
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
<li><a href="/docs/tasks/" {% if site.data[foundTOC].bigheader == "Tasks" %}class="YAH"{% endif %}>TASKS</a></li>
|
<li><a href="/docs/tasks/" {% if site.data[foundTOC].bigheader == "Tasks" %}class="YAH"{% endif %}>TASKS</a></li>
|
||||||
<li><a href="/docs/concepts/" {% if site.data[foundTOC].bigheader == "Concepts" %}class="YAH"{% endif %}>CONCEPTS</a></li>
|
<li><a href="/docs/concepts/" {% if site.data[foundTOC].bigheader == "Concepts" %}class="YAH"{% endif %}>CONCEPTS</a></li>
|
||||||
<li><a href="/docs/reference" {% if site.data[foundTOC].bigheader == "Reference Documentation" %}class="YAH"{% endif %}>REFERENCE</a></li>
|
<li><a href="/docs/reference" {% if site.data[foundTOC].bigheader == "Reference Documentation" %}class="YAH"{% endif %}>REFERENCE</a></li>
|
||||||
|
<li><a href="/docs/tools" {% if site.data[foundTOC].bigheader == "Tools" %}class="YAH"{% endif %}>TOOLS</a></li>
|
||||||
<li><a href="/docs/samples" {% if site.data[foundTOC].bigheader == "Samples" %}class="YAH"{% endif %}>SAMPLES</a></li>
|
<li><a href="/docs/samples" {% if site.data[foundTOC].bigheader == "Samples" %}class="YAH"{% endif %}>SAMPLES</a></li>
|
||||||
<li><a href="/docs/troubleshooting/" {% if site.data[foundTOC].bigheader == "Support" %}class="YAH"{% endif %}>SUPPORT</a></li>
|
<li><a href="/docs/troubleshooting/" {% if site.data[foundTOC].bigheader == "Support" %}class="YAH"{% endif %}>SUPPORT</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -48,7 +49,6 @@
|
|||||||
(function(d,c,j){if(!document.getElementById(j)){var pd=d.createElement(c),s;pd.id=j;pd.src=('https:'==document.location.protocol)?'https://polldaddy.com/js/rating/rating.js':'http://i0.poll.fm/js/rating/rating.js';s=document.getElementsByTagName(c)[0];s.parentNode.insertBefore(pd,s);}}(document,'script','pd-rating-js'));
|
(function(d,c,j){if(!document.getElementById(j)){var pd=d.createElement(c),s;pd.id=j;pd.src=('https:'==document.location.protocol)?'https://polldaddy.com/js/rating/rating.js':'http://i0.poll.fm/js/rating/rating.js';s=document.getElementsByTagName(c)[0];s.parentNode.insertBefore(pd,s);}}(document,'script','pd-rating-js'));
|
||||||
</script>
|
</script>
|
||||||
<a href="" onclick="window.open('https://github.com/kubernetes/kubernetes.github.io/issues/new?title=Issue%20with%20' +
|
<a href="" onclick="window.open('https://github.com/kubernetes/kubernetes.github.io/issues/new?title=Issue%20with%20' +
|
||||||
window.location.pathname + '&body=Issue%20with%20' +
|
|
||||||
window.location.pathname)" class="button issue">Create Issue</a>
|
window.location.pathname)" class="button issue">Create Issue</a>
|
||||||
<a href="/editdocs#{{ page.path }}" class="button issue">Edit This Page</a>
|
<a href="/editdocs#{{ page.path }}" class="button issue">Edit This Page</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -25,10 +25,11 @@ manually through API calls. Service accounts are tied to a set of credentials
|
|||||||
stored as `Secrets`, which are mounted into pods allowing in cluster processes
|
stored as `Secrets`, which are mounted into pods allowing in cluster processes
|
||||||
to talk to the Kubernetes API.
|
to talk to the Kubernetes API.
|
||||||
|
|
||||||
All API requests are tied to either a normal user or a service account. This
|
API requests are tied to either a normal user or a service account, or are treated
|
||||||
means every process inside or outside the cluster, from a human user typing
|
as anonymous requests. This means every process inside or outside the cluster, from
|
||||||
`kubectl` on a workstation, to `kubelets` on nodes, to members of the control
|
a human user typing `kubectl` on a workstation, to `kubelets` on nodes, to members
|
||||||
plane, must authenticate when making requests to the the API server.
|
of the control plane, must authenticate when making requests to the the API server,
|
||||||
|
or be treated as an anonymous user.
|
||||||
|
|
||||||
## Authentication strategies
|
## Authentication strategies
|
||||||
|
|
||||||
@@ -54,13 +55,25 @@ When multiple are enabled, the first authenticator module
|
|||||||
to successfully authenticate the request short-circuits evaluation.
|
to successfully authenticate the request short-circuits evaluation.
|
||||||
The API server does not guarantee the order authenticators run in.
|
The API server does not guarantee the order authenticators run in.
|
||||||
|
|
||||||
|
The `system:authenticated` group is included in the list of groups for all authenticated users.
|
||||||
|
|
||||||
### X509 Client Certs
|
### X509 Client Certs
|
||||||
|
|
||||||
Client certificate authentication is enabled by passing the `--client-ca-file=SOMEFILE`
|
Client certificate authentication is enabled by passing the `--client-ca-file=SOMEFILE`
|
||||||
option to API server. The referenced file must contain one or more certificates authorities
|
option to API server. The referenced file must contain one or more certificates authorities
|
||||||
to use to validate client certificates presented to the API server. If a client certificate
|
to use to validate client certificates presented to the API server. If a client certificate
|
||||||
is presented and verified, the common name of the subject is used as the user name for the
|
is presented and verified, the common name of the subject is used as the user name for the
|
||||||
request.
|
request. As of Kubernetes 1.4, client certificates can also indicate a user's group memberships
|
||||||
|
using the certificate's organization fields. To include multiple group memberships for a user,
|
||||||
|
include multiple organization fields in the certificate.
|
||||||
|
|
||||||
|
For example, using the `openssl` command line tool to generate a certificate signing request:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
openssl req -new -key jbeda.pem -out jbeda-csr.pem -subj "/CN=jbeda/O=app1/O=app2"
|
||||||
|
```
|
||||||
|
|
||||||
|
This would create a CSR for the username "jbeda", belonging to two groups, "app1" and "app2".
|
||||||
|
|
||||||
See [APPENDIX](#appendix) for how to generate a client cert.
|
See [APPENDIX](#appendix) for how to generate a client cert.
|
||||||
|
|
||||||
@@ -363,6 +376,22 @@ Please refer to the [discussion](https://github.com/kubernetes/kubernetes/pull/1
|
|||||||
[blueprint](https://github.com/kubernetes/kubernetes/issues/11626) and [proposed
|
[blueprint](https://github.com/kubernetes/kubernetes/issues/11626) and [proposed
|
||||||
changes](https://github.com/kubernetes/kubernetes/pull/25536) for more details.
|
changes](https://github.com/kubernetes/kubernetes/pull/25536) for more details.
|
||||||
|
|
||||||
|
## Anonymous requests
|
||||||
|
|
||||||
|
Anonymous access is enabled by default, and can be disabled by passing `--anonymous-auth=false`
|
||||||
|
option to the API server during startup.
|
||||||
|
|
||||||
|
When enabled, requests that are not rejected by other configured authentication methods are
|
||||||
|
treated as anonymous requests, and given a username of `system:anonymous` and a group of
|
||||||
|
`system:unauthenticated`.
|
||||||
|
|
||||||
|
For example, on a server with token authentication configured, and anonymous access enabled,
|
||||||
|
a request providing an invalid bearer token would receive a `401 Unauthorized` error.
|
||||||
|
A request providing no bearer token would be treated as an anonymous request.
|
||||||
|
|
||||||
|
If you rely on authentication alone to authorize access, either change to use an
|
||||||
|
authorization mode other than `AlwaysAllow`, or set `--anonymous-auth=false`.
|
||||||
|
|
||||||
## Plugin Development
|
## Plugin Development
|
||||||
|
|
||||||
We plan for the Kubernetes API server to issue tokens after the user has been
|
We plan for the Kubernetes API server to issue tokens after the user has been
|
||||||
|
|||||||
@@ -323,6 +323,32 @@ roleRef:
|
|||||||
apiVersion: rbac.authorization.k8s.io/v1alpha1
|
apiVersion: rbac.authorization.k8s.io/v1alpha1
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Referring to Resources
|
||||||
|
|
||||||
|
Most resources are represented by a string representation of their name, such as "pods", just as it
|
||||||
|
appears in the URL for the relevant API endpoint. However, some Kubernetes APIs involve a
|
||||||
|
"subresource" such as the logs for a pod. The URL for the pods logs endpoint is:
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /api/v1/namespaces/{namespace}/pods/{name}/log
|
||||||
|
```
|
||||||
|
|
||||||
|
In this case, "pods" is the namespaced resource, and "log" is a subresource of pods. To represent
|
||||||
|
this in an RBAC role, use a slash to delimit the resource and subresource names. To allow a subject
|
||||||
|
to read both pods and pod logs, you would write:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
kind: Role
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1alpha1
|
||||||
|
metadata:
|
||||||
|
namespace: default
|
||||||
|
name: pod-and-pod-logs-reader
|
||||||
|
rules:
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources: ["pods", "pods/log"]
|
||||||
|
verbs: ["get", "list"]
|
||||||
|
```
|
||||||
|
|
||||||
### Referring to Subjects
|
### Referring to Subjects
|
||||||
|
|
||||||
RoleBindings and ClusterRoleBindings bind "subjects" to "roles".
|
RoleBindings and ClusterRoleBindings bind "subjects" to "roles".
|
||||||
@@ -351,6 +377,7 @@ to groups with the `system:` prefix.
|
|||||||
Only the `subjects` section of a RoleBinding object shown in the following examples.
|
Only the `subjects` section of a RoleBinding object shown in the following examples.
|
||||||
|
|
||||||
For a user called `alice@example.com`, specify
|
For a user called `alice@example.com`, specify
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
subjects:
|
subjects:
|
||||||
- kind: User
|
- kind: User
|
||||||
@@ -358,6 +385,7 @@ subjects:
|
|||||||
```
|
```
|
||||||
|
|
||||||
For a group called `frontend-admins`, specify:
|
For a group called `frontend-admins`, specify:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
subjects:
|
subjects:
|
||||||
- kind: Group
|
- kind: Group
|
||||||
@@ -365,6 +393,7 @@ subjects:
|
|||||||
```
|
```
|
||||||
|
|
||||||
For the default service account in the kube-system namespace:
|
For the default service account in the kube-system namespace:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
subjects:
|
subjects:
|
||||||
- kind: ServiceAccount
|
- kind: ServiceAccount
|
||||||
@@ -373,6 +402,7 @@ subjects:
|
|||||||
```
|
```
|
||||||
|
|
||||||
For all service accounts in the `qa` namespace:
|
For all service accounts in the `qa` namespace:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
subjects:
|
subjects:
|
||||||
- kind: Group
|
- kind: Group
|
||||||
@@ -380,6 +410,7 @@ subjects:
|
|||||||
```
|
```
|
||||||
|
|
||||||
For all service accounts everywhere:
|
For all service accounts everywhere:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
subjects:
|
subjects:
|
||||||
- kind: Group
|
- kind: Group
|
||||||
|
|||||||
@@ -9,10 +9,14 @@ assignees:
|
|||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
As of Kubernetes 1.3, DNS is a built-in service launched automatically using the addon manager [cluster add-on](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/README.md).
|
As of Kubernetes 1.3, DNS is a built-in service launched automatically using the addon manager [cluster add-on](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/README.md).
|
||||||
A DNS Pod and Service will be scheduled on the cluster, and the kubelets will be
|
|
||||||
configured to tell individual containers to use the DNS Service's IP to resolve DNS names.
|
|
||||||
|
|
||||||
Every Service defined in the cluster (including the DNS server itself) will be
|
Kubernetes DNS schedules a DNS Pod and Service on the cluster, and configures
|
||||||
|
the kubelets to tell individual containers to use the DNS Service's IP to
|
||||||
|
resolve DNS names.
|
||||||
|
|
||||||
|
## What things get DNS names?
|
||||||
|
|
||||||
|
Every Service defined in the cluster (including the DNS server itself) is
|
||||||
assigned a DNS name. By default, a client Pod's DNS search list will
|
assigned a DNS name. By default, a client Pod's DNS search list will
|
||||||
include the Pod's own namespace and the cluster's default domain. This is best
|
include the Pod's own namespace and the cluster's default domain. This is best
|
||||||
illustrated by example:
|
illustrated by example:
|
||||||
@@ -22,17 +26,161 @@ in namespace `bar` can look up this service by simply doing a DNS query for
|
|||||||
`foo`. A Pod running in namespace `quux` can look up this service by doing a
|
`foo`. A Pod running in namespace `quux` can look up this service by doing a
|
||||||
DNS query for `foo.bar`.
|
DNS query for `foo.bar`.
|
||||||
|
|
||||||
The Kubernetes cluster DNS server (based off the [SkyDNS](https://github.com/skynetservices/skydns) library)
|
## Supported DNS schema
|
||||||
supports forward lookups (A records), service lookups (SRV records) and reverse IP address lookups (PTR records).
|
|
||||||
|
|
||||||
|
The following sections detail the supported record types and layout that is
|
||||||
|
supported. Any other layout or names or queries that happen to work are
|
||||||
|
considered implementation details and are subject to change without warning.
|
||||||
|
|
||||||
## How it Works
|
### Services
|
||||||
|
|
||||||
The running Kubernetes DNS pod holds 3 containers - kubedns, dnsmasq and a health check called healthz.
|
#### A records
|
||||||
The kubedns process watches the Kubernetes master for changes in Services and Endpoints, and maintains
|
|
||||||
in-memory lookup structures to service DNS requests. The dnsmasq container adds DNS caching to improve
|
"Normal" (not headless) Services are assigned a DNS A record for a name of the
|
||||||
performance. The healthz container provides a single health check endpoint while performing dual healthchecks
|
form `my-svc.my-namespace.svc.cluster.local`. This resolves to the cluster IP
|
||||||
(for dnsmasq and kubedns).
|
of the Service.
|
||||||
|
|
||||||
|
"Headless" (without a cluster IP) Services are also assigned a DNS A record for
|
||||||
|
a name of the form `my-svc.my-namespace.svc.cluster.local`. Unlike normal
|
||||||
|
Services, this resolves to the set of IPs of the pods selected by the Service.
|
||||||
|
Clients are expected to consume the set or else use standard round-robin
|
||||||
|
selection from the set.
|
||||||
|
|
||||||
|
### SRV records
|
||||||
|
|
||||||
|
SRV Records are created for named ports that are part of normal or Headless
|
||||||
|
Services.
|
||||||
|
For each named port, the SRV record would have the form
|
||||||
|
`_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster.local`.
|
||||||
|
For a regular service, this resolves to the port number and the CNAME:
|
||||||
|
`my-svc.my-namespace.svc.cluster.local`.
|
||||||
|
For a headless service, this resolves to multiple answers, one for each pod
|
||||||
|
that is backing the service, and contains the port number and a CNAME of the pod
|
||||||
|
of the form `auto-generated-name.my-svc.my-namespace.svc.cluster.local`.
|
||||||
|
|
||||||
|
### Backwards compatibility
|
||||||
|
|
||||||
|
Previous versions of kube-dns made names of the for
|
||||||
|
`my-svc.my-namespace.cluster.local` (the 'svc' level was added later). This
|
||||||
|
is no longer supported.
|
||||||
|
|
||||||
|
### Pods
|
||||||
|
|
||||||
|
#### A Records
|
||||||
|
|
||||||
|
When enabled, pods are assigned a DNS A record in the form of `pod-ip-address.my-namespace.pod.cluster.local`.
|
||||||
|
|
||||||
|
For example, a pod with ip `1.2.3.4` in the namespace `default` with a dns name of `cluster.local` would have an entry: `1-2-3-4.default.pod.cluster.local`.
|
||||||
|
|
||||||
|
#### A Records and hostname based on Pod's hostname and subdomain fields
|
||||||
|
|
||||||
|
Currently when a pod is created, its hostname is the Pod's `metadata.name` value.
|
||||||
|
|
||||||
|
With v1.2, users can specify a Pod annotation, `pod.beta.kubernetes.io/hostname`, to specify what the Pod's hostname should be.
|
||||||
|
The Pod annotation, if specified, takes precendence over the Pod's name, to be the hostname of the pod.
|
||||||
|
For example, given a Pod with annotation `pod.beta.kubernetes.io/hostname: my-pod-name`, the Pod will have its hostname set to "my-pod-name".
|
||||||
|
|
||||||
|
With v1.3, the PodSpec has a `hostname` field, which can be used to specify the Pod's hostname. This field value takes precedence over the
|
||||||
|
`pod.beta.kubernetes.io/hostname` annotation value.
|
||||||
|
|
||||||
|
v1.2 introduces a beta feature where the user can specify a Pod annotation, `pod.beta.kubernetes.io/subdomain`, to specify the Pod's subdomain.
|
||||||
|
The final domain will be "<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>".
|
||||||
|
For example, a Pod with the hostname annotation set to "foo", and the subdomain annotation set to "bar", in namespace "my-namespace", will have the FQDN "foo.bar.my-namespace.svc.cluster.local"
|
||||||
|
|
||||||
|
With v1.3, the PodSpec has a `subdomain` field, which can be used to specify the Pod's subdomain. This field value takes precedence over the
|
||||||
|
`pod.beta.kubernetes.io/subdomain` annotation value.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: busybox
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
hostname: busybox-1
|
||||||
|
subdomain: default
|
||||||
|
containers:
|
||||||
|
- image: busybox
|
||||||
|
command:
|
||||||
|
- sleep
|
||||||
|
- "3600"
|
||||||
|
name: busybox
|
||||||
|
```
|
||||||
|
|
||||||
|
If there exists a headless service in the same namespace as the pod and with the same name as the subdomain, the cluster's KubeDNS Server also returns an A record for the Pod's fully qualified hostname.
|
||||||
|
Given a Pod with the hostname set to "foo" and the subdomain set to "bar", and a headless Service named "bar" in the same namespace, the pod will see it's own FQDN as "foo.bar.my-namespace.svc.cluster.local". DNS serves an A record at that name, pointing to the Pod's IP.
|
||||||
|
|
||||||
|
With v1.2, the Endpoints object also has a new annotation `endpoints.beta.kubernetes.io/hostnames-map`. Its value is the json representation of map[string(IP)][endpoints.HostRecord], for example: '{"10.245.1.6":{HostName: "my-webserver"}}'.
|
||||||
|
If the Endpoints are for a headless service, an A record is created with the format <hostname>.<service name>.<pod namespace>.svc.<cluster domain>
|
||||||
|
For the example json, if endpoints are for a headless service named "bar", and one of the endpoints has IP "10.245.1.6", an A is created with the name "my-webserver.bar.my-namespace.svc.cluster.local" and the A record lookup would return "10.245.1.6".
|
||||||
|
This endpoints annotation generally does not need to be specified by end-users, but can used by the internal service controller to deliver the aforementioned feature.
|
||||||
|
|
||||||
|
With v1.3, The Endpoints object can specify the `hostname` for any endpoint, along with its IP. The hostname field takes precedence over the hostname value
|
||||||
|
that might have been specified via the `endpoints.beta.kubernetes.io/hostnames-map` annotation.
|
||||||
|
|
||||||
|
With v1.3, the following annotations are deprecated: `pod.beta.kubernetes.io/hostname`, `pod.beta.kubernetes.io/subdomain`, `endpoints.beta.kubernetes.io/hostnames-map`
|
||||||
|
|
||||||
|
## How do I test if it is working?
|
||||||
|
|
||||||
|
### Create a simple Pod to use as a test environment.
|
||||||
|
|
||||||
|
Create a file named busybox.yaml with the
|
||||||
|
following contents:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: busybox
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: busybox
|
||||||
|
command:
|
||||||
|
- sleep
|
||||||
|
- "3600"
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
name: busybox
|
||||||
|
restartPolicy: Always
|
||||||
|
```
|
||||||
|
|
||||||
|
Then create a pod using this file:
|
||||||
|
|
||||||
|
```
|
||||||
|
kubectl create -f busybox.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Wait for this pod to go into the running state.
|
||||||
|
|
||||||
|
You can get its status with:
|
||||||
|
```
|
||||||
|
kubectl get pods busybox
|
||||||
|
```
|
||||||
|
|
||||||
|
You should see:
|
||||||
|
```
|
||||||
|
NAME READY STATUS RESTARTS AGE
|
||||||
|
busybox 1/1 Running 0 <some-time>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Validate DNS works
|
||||||
|
Once that pod is running, you can exec nslookup in that environment:
|
||||||
|
```
|
||||||
|
kubectl exec busybox -- nslookup kubernetes.default
|
||||||
|
```
|
||||||
|
|
||||||
|
You should see something like:
|
||||||
|
```
|
||||||
|
Server: 10.0.0.10
|
||||||
|
Address 1: 10.0.0.10
|
||||||
|
|
||||||
|
Name: kubernetes.default
|
||||||
|
Address 1: 10.0.0.1
|
||||||
|
```
|
||||||
|
|
||||||
|
If you see that, DNS is working correctly.
|
||||||
|
|
||||||
## Kubernetes Federation (Multiple Zone support)
|
## Kubernetes Federation (Multiple Zone support)
|
||||||
|
|
||||||
@@ -44,6 +192,25 @@ the lookup of federated services (which span multiple Kubernetes clusters).
|
|||||||
See the [Cluster Federation Administrators' Guide](/docs/admin/federation) for more
|
See the [Cluster Federation Administrators' Guide](/docs/admin/federation) for more
|
||||||
details on Cluster Federation and multi-site support.
|
details on Cluster Federation and multi-site support.
|
||||||
|
|
||||||
|
## How it Works
|
||||||
|
|
||||||
|
The running Kubernetes DNS pod holds 3 containers - kubedns, dnsmasq and a health check called healthz.
|
||||||
|
The kubedns process watches the Kubernetes master for changes in Services and Endpoints, and maintains
|
||||||
|
in-memory lookup structures to service DNS requests. The dnsmasq container adds DNS caching to improve
|
||||||
|
performance. The healthz container provides a single health check endpoint while performing dual healthchecks
|
||||||
|
(for dnsmasq and kubedns).
|
||||||
|
|
||||||
|
The DNS pod is exposed as a Kubernetes Service with a static IP. Once assigned the
|
||||||
|
kubelet passes DNS configured using the `--cluster-dns=10.0.0.10` flag to each
|
||||||
|
container.
|
||||||
|
|
||||||
|
DNS names also need domains. The local domain is configurable, in the kubelet using
|
||||||
|
the flag `--cluster-domain=<default local domain>`
|
||||||
|
|
||||||
|
The Kubernetes cluster DNS server (based off the [SkyDNS](https://github.com/skynetservices/skydns) library)
|
||||||
|
supports forward lookups (A records), service lookups (SRV records) and reverse IP address lookups (PTR records).
|
||||||
|
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
||||||
- [Docs for the DNS cluster addon](http://releases.k8s.io/{{page.githubbranch}}/build/kube-dns/README.md)
|
- [Docs for the DNS cluster addon](http://releases.k8s.io/{{page.githubbranch}}/build/kube-dns/README.md)
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ nginx-2040093540-s8vzu 1/1 Running 0 11s
|
|||||||
|
|
||||||
Let's print this Pod with yaml output format (using `-o yaml` flag), and then `grep` the `resources` field. Note that your pod name will be different.
|
Let's print this Pod with yaml output format (using `-o yaml` flag), and then `grep` the `resources` field. Note that your pod name will be different.
|
||||||
|
|
||||||
``` shell
|
```shell
|
||||||
$ kubectl get pods nginx-2040093540-s8vzu --namespace=limit-example -o yaml | grep resources -C 8
|
$ kubectl get pods nginx-2040093540-s8vzu --namespace=limit-example -o yaml | grep resources -C 8
|
||||||
resourceVersion: "57"
|
resourceVersion: "57"
|
||||||
selfLink: /api/v1/namespaces/limit-example/pods/nginx-2040093540-ivimu
|
selfLink: /api/v1/namespaces/limit-example/pods/nginx-2040093540-ivimu
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ table below. The value of each signal is described in the description column ba
|
|||||||
summary API.
|
summary API.
|
||||||
|
|
||||||
| Eviction Signal | Description |
|
| Eviction Signal | Description |
|
||||||
|------------------|---------------------------------------------------------------------------------|
|
|----------------------------|-----------------------------------------------------------------------|
|
||||||
| `memory.available` | `memory.available` := `node.status.capacity[memory]` - `node.stats.memory.workingSet` |
|
| `memory.available` | `memory.available` := `node.status.capacity[memory]` - `node.stats.memory.workingSet` |
|
||||||
| `nodefs.available` | `nodefs.available` := `node.stats.fs.available` |
|
| `nodefs.available` | `nodefs.available` := `node.stats.fs.available` |
|
||||||
| `nodefs.inodesFree` | `nodefs.inodesFree` := `node.stats.fs.inodesFree` |
|
| `nodefs.inodesFree` | `nodefs.inodesFree` := `node.stats.fs.inodesFree` |
|
||||||
@@ -128,7 +128,7 @@ reflects the node is under pressure.
|
|||||||
The following node conditions are defined that correspond to the specified eviction signal.
|
The following node conditions are defined that correspond to the specified eviction signal.
|
||||||
|
|
||||||
| Node Condition | Eviction Signal | Description |
|
| Node Condition | Eviction Signal | Description |
|
||||||
|----------------|------------------|------------------------------------------------------------------|
|
|-------------------------|-------------------------------|--------------------------------------------|
|
||||||
| `MemoryPressure` | `memory.available` | Available memory on the node has satisfied an eviction threshold |
|
| `MemoryPressure` | `memory.available` | Available memory on the node has satisfied an eviction threshold |
|
||||||
| `DiskPressure` | `nodefs.available`, `nodefs.inodesFree`, `imagefs.available`, or `imagefs.inodesFree` | Available disk space and inodes on either the node's root filesytem or image filesystem has satisfied an eviction threshold |
|
| `DiskPressure` | `nodefs.available`, `nodefs.inodesFree`, `imagefs.available`, or `imagefs.inodesFree` | Available disk space and inodes on either the node's root filesytem or image filesystem has satisfied an eviction threshold |
|
||||||
|
|
||||||
@@ -270,7 +270,7 @@ the node depends on the [oom_killer](https://lwn.net/Articles/391222/) to respon
|
|||||||
The `kubelet` sets a `oom_score_adj` value for each container based on the quality of service for the pod.
|
The `kubelet` sets a `oom_score_adj` value for each container based on the quality of service for the pod.
|
||||||
|
|
||||||
| Quality of Service | oom_score_adj |
|
| Quality of Service | oom_score_adj |
|
||||||
| ----------------- | ------------- |
|
|----------------------------|-----------------------------------------------------------------------|
|
||||||
| `Guaranteed` | -998 |
|
| `Guaranteed` | -998 |
|
||||||
| `BestEffort` | 1000 |
|
| `BestEffort` | 1000 |
|
||||||
| `Burstable` | min(max(2, 1000 - (1000 * memoryRequestBytes) / machineMemoryCapacityBytes), 999) |
|
| `Burstable` | min(max(2, 1000 - (1000 * memoryRequestBytes) / machineMemoryCapacityBytes), 999) |
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ that can be requested in a given namespace.
|
|||||||
The following resource types are supported:
|
The following resource types are supported:
|
||||||
|
|
||||||
| Resource Name | Description |
|
| Resource Name | Description |
|
||||||
| ------------ | ----------- |
|
| --------------------- | ----------------------------------------------------------- |
|
||||||
| `cpu` | Across all pods in a non-terminal state, the sum of CPU requests cannot exceed this value. |
|
| `cpu` | Across all pods in a non-terminal state, the sum of CPU requests cannot exceed this value. |
|
||||||
| `limits.cpu` | Across all pods in a non-terminal state, the sum of CPU limits cannot exceed this value. |
|
| `limits.cpu` | Across all pods in a non-terminal state, the sum of CPU limits cannot exceed this value. |
|
||||||
| `limits.memory` | Across all pods in a non-terminal state, the sum of memory limits cannot exceed this value. |
|
| `limits.memory` | Across all pods in a non-terminal state, the sum of memory limits cannot exceed this value. |
|
||||||
@@ -73,7 +73,7 @@ The number of objects of a given type can be restricted. The following types
|
|||||||
are supported:
|
are supported:
|
||||||
|
|
||||||
| Resource Name | Description |
|
| Resource Name | Description |
|
||||||
| ------------ | ----------- |
|
| ------------------------------- | ------------------------------------------------- |
|
||||||
| `configmaps` | The total number of config maps that can exist in the namespace. |
|
| `configmaps` | The total number of config maps that can exist in the namespace. |
|
||||||
| `persistentvolumeclaims` | The total number of [persistent volume claims](/docs/user-guide/persistent-volumes/#persistentvolumeclaims) that can exist in the namespace. |
|
| `persistentvolumeclaims` | The total number of [persistent volume claims](/docs/user-guide/persistent-volumes/#persistentvolumeclaims) that can exist in the namespace. |
|
||||||
| `pods` | The total number of pods in a non-terminal state that can exist in the namespace. A pod is in a terminal state if `status.phase in (Failed, Succeeded)` is true. |
|
| `pods` | The total number of pods in a non-terminal state that can exist in the namespace. A pod is in a terminal state if `status.phase in (Failed, Succeeded)` is true. |
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ Each hosting environment has a slightly different grains.conf file that is used
|
|||||||
The following enumerates the set of defined key/value pairs that are supported today. If you add new ones, please make sure to update this list.
|
The following enumerates the set of defined key/value pairs that are supported today. If you add new ones, please make sure to update this list.
|
||||||
|
|
||||||
Key | Value
|
Key | Value
|
||||||
------------- | -------------
|
-----------------------------------|----------------------------------------------------------------
|
||||||
`api_servers` | (Optional) The IP address / host name where a kubelet can get read-only access to kube-apiserver
|
`api_servers` | (Optional) The IP address / host name where a kubelet can get read-only access to kube-apiserver
|
||||||
`cbr-cidr` | (Optional) The minion IP address range used for the docker container bridge.
|
`cbr-cidr` | (Optional) The minion IP address range used for the docker container bridge.
|
||||||
`cloud` | (Optional) Which IaaS platform is used to host Kubernetes, *gce*, *azure*, *aws*, *vagrant*
|
`cloud` | (Optional) Which IaaS platform is used to host Kubernetes, *gce*, *azure*, *aws*, *vagrant*
|
||||||
|
|||||||
@@ -5,12 +5,8 @@ assignees:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
* TOC
|
|
||||||
{:toc}
|
|
||||||
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
The recommended approach for deploying a Kubernetes 1.4 cluster on Azure is the
|
The recommended approach for deploying a Kubernetes 1.4 cluster on Azure is the
|
||||||
[`kubernetes-anywhere`](https://github.com/kubernetes/kubernetes-anywhere) project. You will want to take a look at the
|
[`kubernetes-anywhere`](https://github.com/kubernetes/kubernetes-anywhere) project.
|
||||||
|
|
||||||
|
You will want to take a look at the
|
||||||
[Azure Getting Started Guide](https://github.com/kubernetes/kubernetes-anywhere/blob/master/phase1/azure/README.md).
|
[Azure Getting Started Guide](https://github.com/kubernetes/kubernetes-anywhere/blob/master/phase1/azure/README.md).
|
||||||
@@ -16,7 +16,7 @@ and a _worker_ node which receives work from the master. You can repeat the proc
|
|||||||
times to create larger clusters.
|
times to create larger clusters.
|
||||||
|
|
||||||
Here's a diagram of what the final result will look like:
|
Here's a diagram of what the final result will look like:
|
||||||

|

|
||||||
|
|
||||||
### Bootstrap Docker
|
### Bootstrap Docker
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ Clone the `kube-deploy` repo, and run `worker.sh` on the worker machine _with ro
|
|||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ git clone https://github.com/kubernetes/kube-deploy
|
$ git clone https://github.com/kubernetes/kube-deploy
|
||||||
$ cd docker-multinode
|
$ cd kube-deploy/docker-multinode
|
||||||
$ export MASTER_IP=${SOME_IP}
|
$ export MASTER_IP=${SOME_IP}
|
||||||
$ ./worker.sh
|
$ ./worker.sh
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -48,8 +48,8 @@ few commands, and have active community support.
|
|||||||
|
|
||||||
- [GCE](/docs/getting-started-guides/gce)
|
- [GCE](/docs/getting-started-guides/gce)
|
||||||
- [AWS](/docs/getting-started-guides/aws)
|
- [AWS](/docs/getting-started-guides/aws)
|
||||||
|
- [Azure](/docs/getting-started-guides/azure/)
|
||||||
- [Azure](/docs/getting-started-guides/coreos/azure/) (Weave-based, contributed by WeaveWorks employees)
|
- [Azure](/docs/getting-started-guides/coreos/azure/) (Weave-based, contributed by WeaveWorks employees)
|
||||||
- [Azure](/docs/getting-started-guides/azure/) (Flannel-based, contributed by Microsoft employee)
|
|
||||||
- [CenturyLink Cloud](/docs/getting-started-guides/clc)
|
- [CenturyLink Cloud](/docs/getting-started-guides/clc)
|
||||||
- [IBM SoftLayer](https://github.com/patrocinio/kubernetes-softlayer)
|
- [IBM SoftLayer](https://github.com/patrocinio/kubernetes-softlayer)
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@ writing a new solution](https://github.com/kubernetes/kubernetes/tree/{{page.git
|
|||||||
|
|
||||||
These solutions are combinations of cloud provider and OS not covered by the above solutions.
|
These solutions are combinations of cloud provider and OS not covered by the above solutions.
|
||||||
|
|
||||||
- [AWS + coreos](/docs/getting-started-guides/coreos)
|
- [AWS + CoreOS](/docs/getting-started-guides/coreos)
|
||||||
- [GCE + CoreOS](/docs/getting-started-guides/coreos)
|
- [GCE + CoreOS](/docs/getting-started-guides/coreos)
|
||||||
- [AWS + Ubuntu](/docs/getting-started-guides/juju)
|
- [AWS + Ubuntu](/docs/getting-started-guides/juju)
|
||||||
- [Joyent + Ubuntu](/docs/getting-started-guides/juju)
|
- [Joyent + Ubuntu](/docs/getting-started-guides/juju)
|
||||||
@@ -122,7 +122,7 @@ Stackpoint.io | | multi-support | multi-support | [d
|
|||||||
AppsCode.com | Saltstack | Debian | multi-support | [docs](https://appscode.com/products/cloud-deployment/) | | Commercial
|
AppsCode.com | Saltstack | Debian | multi-support | [docs](https://appscode.com/products/cloud-deployment/) | | Commercial
|
||||||
GCE | Saltstack | Debian | GCE | [docs](/docs/getting-started-guides/gce) | ['œ“][1] | Project
|
GCE | Saltstack | Debian | GCE | [docs](/docs/getting-started-guides/gce) | ['œ“][1] | Project
|
||||||
Azure | CoreOS | CoreOS | Weave | [docs](/docs/getting-started-guides/coreos/azure/) | | Community ([@errordeveloper](https://github.com/errordeveloper), [@squillace](https://github.com/squillace), [@chanezon](https://github.com/chanezon), [@crossorigin](https://github.com/crossorigin))
|
Azure | CoreOS | CoreOS | Weave | [docs](/docs/getting-started-guides/coreos/azure/) | | Community ([@errordeveloper](https://github.com/errordeveloper), [@squillace](https://github.com/squillace), [@chanezon](https://github.com/chanezon), [@crossorigin](https://github.com/crossorigin))
|
||||||
Azure | CoreOS | CoreOS | flannel | [docs](/docs/getting-started-guides/azure) | | Community ([@colemickens](https://github.com/colemickens))
|
Azure | Ignition | Ubuntu | Azure | [docs](/docs/getting-started-guides/azure) | | Community (Microsoft: [@brendandburns](https://github.com/brendandburns), [@colemickens](https://github.com/colemickens))
|
||||||
Docker Single Node | custom | N/A | local | [docs](/docs/getting-started-guides/docker) | | Project ([@brendandburns](https://github.com/brendandburns))
|
Docker Single Node | custom | N/A | local | [docs](/docs/getting-started-guides/docker) | | Project ([@brendandburns](https://github.com/brendandburns))
|
||||||
Docker Multi Node | custom | N/A | flannel | [docs](/docs/getting-started-guides/docker-multinode) | | Project ([@brendandburns](https://github.com/brendandburns))
|
Docker Multi Node | custom | N/A | flannel | [docs](/docs/getting-started-guides/docker-multinode) | | Project ([@brendandburns](https://github.com/brendandburns))
|
||||||
Bare-metal | Ansible | Fedora | flannel | [docs](/docs/getting-started-guides/fedora/fedora_ansible_config) | | Project
|
Bare-metal | Ansible | Fedora | flannel | [docs](/docs/getting-started-guides/fedora/fedora_ansible_config) | | Project
|
||||||
|
|||||||
@@ -182,9 +182,9 @@ To learn more about the sample microservices app, see the [GitHub README](https:
|
|||||||
|
|
||||||
You can then find out the port that the [NodePort feature of services](/docs/user-guide/services/) allocated for the front-end service by running:
|
You can then find out the port that the [NodePort feature of services](/docs/user-guide/services/) allocated for the front-end service by running:
|
||||||
|
|
||||||
# kubectl describe svc front-end
|
# kubectl describe svc front-end -n sock-shop
|
||||||
Name: front-end
|
Name: front-end
|
||||||
Namespace: default
|
Namespace: sock-shop
|
||||||
Labels: name=front-end
|
Labels: name=front-end
|
||||||
Selector: name=front-end
|
Selector: name=front-end
|
||||||
Type: NodePort
|
Type: NodePort
|
||||||
@@ -194,7 +194,7 @@ You can then find out the port that the [NodePort feature of services](/docs/use
|
|||||||
Endpoints: <none>
|
Endpoints: <none>
|
||||||
Session Affinity: None
|
Session Affinity: None
|
||||||
|
|
||||||
It takes several minutes to download and start all the containers, watch the output of `kubectl get pods` to see when they're all up and running.
|
It takes several minutes to download and start all the containers, watch the output of `kubectl get pods -n sock-shop` to see when they're all up and running.
|
||||||
|
|
||||||
Then go to the IP address of your cluster's master node in your browser, and specify the given port.
|
Then go to the IP address of your cluster's master node in your browser, and specify the given port.
|
||||||
So for example, `http://<master_ip>:<port>`.
|
So for example, `http://<master_ip>:<port>`.
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
assignees:
|
||||||
|
- janetkuo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
* TOC
|
||||||
|
{:toc}
|
||||||
|
|
||||||
|
## Native Tools
|
||||||
|
|
||||||
|
### Kubectl
|
||||||
|
|
||||||
|
[`kubectl`](/docs/user-guide/kubectl/) is the command line tool for Kubernetes. It controls the Kubernetes cluster manager.
|
||||||
|
|
||||||
|
### Dashboard
|
||||||
|
|
||||||
|
[Dashboard](/docs/user-guide/ui/), the web-based user interface of Kubernetes, allows you to deploy containerized applications
|
||||||
|
to a Kubernetes cluster, troubleshoot them, and manage the cluster and its resources itself.
|
||||||
|
|
||||||
|
## Third-Party Tools
|
||||||
|
|
||||||
|
### Helm
|
||||||
|
|
||||||
|
[Kubernetes Helm](https://github.com/kubernetes/helm) is a tool for managing packages of pre-configured
|
||||||
|
Kubernetes resources, aka Kubernetes charts.
|
||||||
|
|
||||||
|
Use Helm to:
|
||||||
|
|
||||||
|
* Find and use popular software packaged as Kubernetes charts
|
||||||
|
* Share your own applications as Kubernetes charts
|
||||||
|
* Create reproducible builds of your Kubernetes applications
|
||||||
|
* Intelligently manage your Kubernetes manifest files
|
||||||
|
* Manage releases of Helm packages
|
||||||
|
|
||||||
|
### Kompose
|
||||||
|
|
||||||
|
[`kompose`](https://github.com/skippbox/kompose) is a tool to help users familiar with `docker-compose`
|
||||||
|
move to Kubernetes. It takes a Docker Compose file and translates it into Kubernetes objects. `kompose`
|
||||||
|
is a convenient tool to go from local Docker development to managing your application with Kubernetes.
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
---
|
|
||||||
---
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<div class="layout" id="top">
|
|
||||||
|
|
||||||
<main class="content">
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8">
|
|
||||||
<h3>Module overview</h3>
|
|
||||||
<ul style="color: #3771e3;">
|
|
||||||
<li><i>learn what a Kubernetes cluster is</i></li>
|
|
||||||
<li><i>learn what <a href="https://github.com/kubernetes/minikube">minikube</a> is</i></li>
|
|
||||||
<li><i>start a Kubernetes cluster using an online terminal</i></li>
|
|
||||||
</ul>
|
|
||||||
<p><img src="/docs/tutorials/getting-started/public/images/module_01.svg?v=1469803628347"></p>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<div class="content__box content__box_lined">
|
|
||||||
<h3>What you need to know first</h3>
|
|
||||||
<p>
|
|
||||||
Before you do this tutorial, you should be familiar with Linux containers.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/cluster-intro.html" role="button">Start Module 1 <span class="btn__next">›</span></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</main>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
---
|
|
||||||
---
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<div class="layout" id="top">
|
|
||||||
|
|
||||||
<main class="content">
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/cluster-interactive.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8">
|
|
||||||
<h3>Module overview</h3>
|
|
||||||
<ul style="color: #3771e3;">
|
|
||||||
<li><i>Learn about application Deployments</i></li>
|
|
||||||
<li><i>Deploy your first app on Kubernetes with Kubectl</i></li>
|
|
||||||
</ul>
|
|
||||||
<p><img src="/docs/tutorials/getting-started/public/images/module_02.svg?v=1469803628347"></p>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<div class="content__box content__box_lined">
|
|
||||||
<h3>What you need to know first</h3>
|
|
||||||
<p>
|
|
||||||
How to <a href="/docs/tutorials/getting-started/create-cluster.html">start a Kubernetes cluster</a> with minikube <br>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/deploy-intro.html" role="button">Start Module 2 <span class="btn__next">›</span></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</main>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
---
|
|
||||||
---
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<div class="layout" id="top">
|
|
||||||
|
|
||||||
<main class="content">
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/deploy-interactive.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8">
|
|
||||||
<h3>Module overview</h3>
|
|
||||||
<ul style="color: #3771e3;">
|
|
||||||
<li><i>Learn about Kubernetes <a href="http://kubernetes.io/docs/user-guide/pods/">Pods</a></i></li>
|
|
||||||
<li><i>Learn about Kubernetes <a href="https://github.com/kubernetes/kubernetes/blob/master/docs/admin/node.md">Nodes</a></i></li>
|
|
||||||
<li><i>Troubleshoot deployed applications</i></li>
|
|
||||||
</ul>
|
|
||||||
<p><img src="/docs/tutorials/getting-started/public/images/module_03.svg?v=1469803628347"></p>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<div class="content__box content__box_lined">
|
|
||||||
<h3>What you need to know first</h3>
|
|
||||||
<p>
|
|
||||||
What are <a href="/docs/tutorials/getting-started/deploy-app.html">Deployments</a> <br>
|
|
||||||
How to deploy applications on Kubernetes
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/explore-intro.html" role="button">Start Module 3 <span class="btn__next">›</span></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</main>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
---
|
|
||||||
---
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<div class="layout" id="top">
|
|
||||||
|
|
||||||
<main class="content">
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/explore-interactive.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8">
|
|
||||||
<h3>Module overview</h3>
|
|
||||||
<ul style="color: #3771e3;">
|
|
||||||
<li><i><a href="http://kubernetes.io/docs/user-guide/services">Services</a></i></li>
|
|
||||||
<li><i>Learn about Kubernetes <a href="http://kubernetes.io/docs/user-guide/labels">Labels</a></i></li>
|
|
||||||
<li><i>Exposing applications outside Kubernetes</i></li>
|
|
||||||
</ul>
|
|
||||||
<p><img src="/docs/tutorials/getting-started/public/images/module_04.svg?v=1469803628347"></p>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<div class="content__box content__box_lined">
|
|
||||||
<h3>What you need to know first</h3>
|
|
||||||
<p>
|
|
||||||
How to <a href="/docs/tutorials/getting-started/deploy-app.html">deploy apps</a> on Kubernetes<br>
|
|
||||||
How to <a href="/docs/tutorials/getting-started/explore-app.html"> troubleshoot </a> applications with Kubectl
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/expose-intro.html" role="button">Start Module 4 <span class="btn__next">›</span></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</main>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
---
|
|
||||||
---
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<div class="layout" id="top">
|
|
||||||
|
|
||||||
<main class="content">
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/explore-interactive.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8">
|
|
||||||
<h3>Module overview</h3>
|
|
||||||
<ul style="color: #3771e3;">
|
|
||||||
<li><i>Scaling an app with Kubectl</i></li>
|
|
||||||
</ul>
|
|
||||||
<p><img src="/docs/tutorials/getting-started/public/images/module_05.svg?v=1469803628347"></p>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<div class="content__box content__box_lined">
|
|
||||||
<h3>What you need to know first</h3>
|
|
||||||
<p>
|
|
||||||
What are <a href="/docs/tutorials/getting-started/deploy-app.html">Deployments</a> <br>
|
|
||||||
What are <a href="/docs/tutorials/getting-started/expose-app.html">Services</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/scale-intro.html" role="button">Start Module 5 <span class="btn__next">›</span></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</main>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
---
|
|
||||||
---
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<div class="layout" id="top">
|
|
||||||
|
|
||||||
<main class="content">
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/scale-interactive.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8">
|
|
||||||
<h3>Module overview</h3>
|
|
||||||
<ul style="color: #3771e3;">
|
|
||||||
<li><i>Performing Rolling Updates with Kubectl</i></li>
|
|
||||||
</ul>
|
|
||||||
<p><img src="/docs/tutorials/getting-started/public/images/module_06.svg?v=1469803628347"></p>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<div class="content__box content__box_lined">
|
|
||||||
<h3>What you need to know first</h3>
|
|
||||||
<p>
|
|
||||||
What are <a href="/docs/tutorials/getting-started/deploy-app.html">Deployments</a> <br>
|
|
||||||
What is <a href="/docs/tutorials/getting-started/scale-app.html">Scaling</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/update-intro.html" role="button">Start Module 6 <span class="btn__next">›</span></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<a class="scrolltop" href="#top"></a>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -7,19 +7,13 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
|
||||||
<script src="https://katacoda.com/embed.js"></script>
|
<script src="https://katacoda.com/embed.js"></script>
|
||||||
|
|
||||||
<div class="layout" id="top">
|
<div class="layout" id="top">
|
||||||
|
|
||||||
<main class="content">
|
<main class="content">
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/cluster-intro.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<br>
|
|
||||||
<div class="katacoda">
|
<div class="katacoda">
|
||||||
<div class="katacoda__alert">
|
<div class="katacoda__alert">
|
||||||
To interact with the Terminal, please use the desktop/tablet version
|
To interact with the Terminal, please use the desktop/tablet version
|
||||||
@@ -28,7 +22,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/deploy-app.html" role="button">Continue to Module 2<span class="btn__next">›</span></a>
|
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/deploy-intro.html" role="button">Continue to Module 2<span class="btn__next">›</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
---
|
---
|
||||||
|
redirect_from: "/docs/tutorials/getting-started/create-cluster/"
|
||||||
---
|
---
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
@@ -7,23 +8,25 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
|
||||||
|
|
||||||
<div class="layout" id="top">
|
<div class="layout" id="top">
|
||||||
|
|
||||||
<main class="content">
|
<main class="content">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/create-cluster.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
<h3>Objectives</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Learn what a Kubernetes cluster is.</li>
|
||||||
|
<li>Learn what Minikube is.</li>
|
||||||
|
<li>Start a Kubernetes cluster using an online terminal.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h3>Kubernetes Clusters</h3>
|
||||||
<p>
|
<p>
|
||||||
<b>Kubernetes coordinates a highly available cluster of computers that are connected to work as a single unit.</b> The abstractions in Kubernetes allow you to deploy containerized applications to a cluster without tying them specifically to individual machines. To make use of this new model of deployment, applications need to be packaged in a way that decouples them from individual hosts: they need to be containerized. Containerized applications are more flexible and available than in past deployment models, where applications were installed directly onto specific machines as packages deeply integrated into the host. <b>Kubernetes automates the distribution and scheduling of application containers across a cluster in a more efficient way.</b> Kubernetes is an <a href="https://github.com/kubernetes/kubernetes">open-source</a> platform and is production-ready.
|
<b>Kubernetes coordinates a highly available cluster of computers that are connected to work as a single unit.</b> The abstractions in Kubernetes allow you to deploy containerized applications to a cluster without tying them specifically to individual machines. To make use of this new model of deployment, applications need to be packaged in a way that decouples them from individual hosts: they need to be containerized. Containerized applications are more flexible and available than in past deployment models, where applications were installed directly onto specific machines as packages deeply integrated into the host. <b>Kubernetes automates the distribution and scheduling of application containers across a cluster in a more efficient way.</b> Kubernetes is an <a href="https://github.com/kubernetes/kubernetes">open-source</a> platform and is production-ready.
|
||||||
</p>
|
</p>
|
||||||
@@ -60,7 +63,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<p><img src="/docs/tutorials/getting-started/public/images/module_01_cluster.svg"></p>
|
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_01_cluster.svg"></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
@@ -92,7 +95,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/cluster-interactive.html" role="button">Start Interactive Tutorial <span class="btn__next">›</span></a>
|
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/cluster-interactive.html" role="button">Start Interactive Tutorial <span class="btn__next">›</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -7,18 +7,13 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
|
||||||
<script src="https://katacoda.com/embed.js"></script>
|
<script src="https://katacoda.com/embed.js"></script>
|
||||||
|
|
||||||
<div class="layout" id="top">
|
<div class="layout" id="top">
|
||||||
|
|
||||||
<main class="content">
|
<main class="content">
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/deploy-intro.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<br>
|
<br>
|
||||||
<div class="katacoda">
|
<div class="katacoda">
|
||||||
<div class="katacoda__alert">
|
<div class="katacoda__alert">
|
||||||
@@ -31,7 +26,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/explore-app.html" role="button">Continue to Module 3<span class="btn__next">›</span></a>
|
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/explore-intro.html" role="button">Continue to Module 3<span class="btn__next">›</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -7,23 +7,24 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
|
||||||
|
|
||||||
<div class="layout" id="top">
|
<div class="layout" id="top">
|
||||||
|
|
||||||
<main class="content">
|
<main class="content">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/deploy-app.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
<h3>Objectives</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Learn about application Deployments.</li>
|
||||||
|
<li>Deploy your first app on Kubernetes with kubectl.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h3>Kubernetes Deployments</h3>
|
||||||
<p>
|
<p>
|
||||||
Once you have a running Kubernetes cluster, you can deploy your containerized applications on top of it. To do so, you create a Kubernetes <b>Deployment</b>. The Deployment is responsible for creating and updating instances of your application. Once you've created a Deployment, the Kubernetes master schedules the application instances that the Deployment creates onto individual Nodes in the cluster.
|
Once you have a running Kubernetes cluster, you can deploy your containerized applications on top of it. To do so, you create a Kubernetes <b>Deployment</b>. The Deployment is responsible for creating and updating instances of your application. Once you've created a Deployment, the Kubernetes master schedules the application instances that the Deployment creates onto individual Nodes in the cluster.
|
||||||
</p>
|
</p>
|
||||||
@@ -59,7 +60,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<p><img src="/docs/tutorials/getting-started/public/images/module_02_first_app.svg"></p>
|
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_02_first_app.svg"></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
@@ -94,7 +95,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/deploy-interactive.html" role="button">Start Interactive Tutorial <span class="btn__next">›</span></a>
|
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/deploy-interactive.html" role="button">Start Interactive Tutorial <span class="btn__next">›</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -7,18 +7,13 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
|
||||||
<script src="https://katacoda.com/embed.js"></script>
|
<script src="https://katacoda.com/embed.js"></script>
|
||||||
|
|
||||||
<div class="layout" id="top">
|
<div class="layout" id="top">
|
||||||
|
|
||||||
<main class="content">
|
<main class="content">
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/explore-intro.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<br>
|
<br>
|
||||||
<div class="katacoda">
|
<div class="katacoda">
|
||||||
|
|
||||||
@@ -31,7 +26,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/expose-app.html" role="button">Continue to Module 4<span class="btn__next">›</span></a>
|
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/expose-intro.html" role="button">Continue to Module 4<span class="btn__next">›</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
|
||||||
|
|
||||||
|
|
||||||
<div class="layout" id="top">
|
<div class="layout" id="top">
|
||||||
@@ -15,18 +15,19 @@
|
|||||||
<main class="content">
|
<main class="content">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/explore-app.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<h2>Pods</h2>
|
<h3>Objectives</h3>
|
||||||
<p>When you created a Deployment in Module <a href="/docs/tutorials/getting-started/deploy-app.html">2</a>, Kubernetes created a <b>Pod</b> to host your application instance. A Pod is Kubernetes abstraction that represents a group of one or more application containers (such as Docker or rkt), and some shared resources for those containers. Those resources include:</p>
|
<ul>
|
||||||
|
<li>Learn about Kubernetes Pods.</li>
|
||||||
|
<li>Learn about Kubernetes Nodes.</li>
|
||||||
|
<li>Troubleshoot deployed applications.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h2>Kubernetes Pods</h2>
|
||||||
|
<p>When you created a Deployment in Module <a href="/docs/tutorials/kubernetes-basics/deploy-app.html">2</a>, Kubernetes created a <b>Pod</b> to host your application instance. A Pod is Kubernetes abstraction that represents a group of one or more application containers (such as Docker or rkt), and some shared resources for those containers. Those resources include:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Shared storage, as Volumes</li>
|
<li>Shared storage, as Volumes</li>
|
||||||
<li>Networking, as a unique cluster IP address</li>
|
<li>Networking, as a unique cluster IP address</li>
|
||||||
@@ -63,7 +64,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<p><img src="/docs/tutorials/getting-started/public/images/module_03_pods.svg"></p>
|
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_03_pods.svg"></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
@@ -97,7 +98,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<p><img src="/docs/tutorials/getting-started/public/images/module_03_nodes.svg"></p>
|
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_03_nodes.svg"></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
@@ -128,7 +129,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/explore-interactive.html" role="button">Start Interactive Tutorial <span class="btn__next">›</span></a>
|
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/explore-interactive.html" role="button">Start Interactive Tutorial <span class="btn__next">›</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -7,19 +7,13 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
|
||||||
<script src="https://katacoda.com/embed.js"></script>
|
<script src="https://katacoda.com/embed.js"></script>
|
||||||
|
|
||||||
<div class="layout" id="top">
|
<div class="layout" id="top">
|
||||||
|
|
||||||
<main class="content">
|
<main class="content">
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/expose-intro.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<br>
|
|
||||||
<div class="katacoda">
|
<div class="katacoda">
|
||||||
<div class="katacoda__alert">
|
<div class="katacoda__alert">
|
||||||
To interact with the Terminal, please use the desktop/tablet version
|
To interact with the Terminal, please use the desktop/tablet version
|
||||||
@@ -29,7 +23,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/scale-app.html" role="button">Continue to Module 5<span class="btn__next">›</span></a>
|
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/scale-intro.html" role="button">Continue to Module 5<span class="btn__next">›</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -7,23 +7,26 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
|
||||||
|
|
||||||
<div class="layout" id="top">
|
<div class="layout" id="top">
|
||||||
|
|
||||||
<main class="content">
|
<main class="content">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/explore-app.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
<h3>Objectives</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Learn about Kubernetes Services.</li>
|
||||||
|
<li>Learn about Kubernetes Labels.</li>
|
||||||
|
<li>Expose an application outside Kubernetes.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h3>Kubernetes Services</h3>
|
||||||
|
|
||||||
<p>While Pods do have their own unique IP across the cluster, those IP’s are not exposed outside Kubernetes. Taking into account that over time Pods may be terminated, deleted or replaced by other Pods, we need a way to let other Pods and applications automatically discover each other. Kubernetes addresses this by grouping Pods in Services. A Kubernetes <b>Service</b> is an abstraction layer which defines a logical set of Pods and enables external traffic exposure, load balancing and service discovery for those Pods.</p>
|
<p>While Pods do have their own unique IP across the cluster, those IP’s are not exposed outside Kubernetes. Taking into account that over time Pods may be terminated, deleted or replaced by other Pods, we need a way to let other Pods and applications automatically discover each other. Kubernetes addresses this by grouping Pods in Services. A Kubernetes <b>Service</b> is an abstraction layer which defines a logical set of Pods and enables external traffic exposure, load balancing and service discovery for those Pods.</p>
|
||||||
|
|
||||||
<p>This abstraction will allow us to expose Pods to traffic originating from outside the cluster. Services have their own unique cluster-private IP address and expose a port to receive traffic. If you choose to expose the service outside the cluster, the options are:</p>
|
<p>This abstraction will allow us to expose Pods to traffic originating from outside the cluster. Services have their own unique cluster-private IP address and expose a port to receive traffic. If you choose to expose the service outside the cluster, the options are:</p>
|
||||||
@@ -58,7 +61,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<p><img src="/docs/tutorials/getting-started/public/images/module_04_services.svg"></p>
|
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_04_services.svg"></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
@@ -106,7 +109,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<p><img src="/docs/tutorials/getting-started/public/images/module_04_labels.svg"></p>
|
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_04_labels.svg"></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
@@ -122,7 +125,7 @@
|
|||||||
<br>
|
<br>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/expose-interactive.html" role="button">Start Interactive Tutorial <span class="btn__next">›</span></a>
|
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/expose-interactive.html" role="button">Start Interactive Tutorial <span class="btn__next">›</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="thumbnail">
|
<div class="thumbnail">
|
||||||
<a href="/docs/tutorials/getting-started/create-cluster.html"><img src="./public/images/module_01.svg?v=1469803628347" alt=""></a>
|
<a href="/docs/tutorials/kubernetes-basics/create-cluster.html"><img src="./public/images/module_01.svg?v=1469803628347" alt=""></a>
|
||||||
<div class="caption">
|
<div class="caption">
|
||||||
<a href="1-0.html"><h5>1. Create a Kubernetes cluster</h5></a>
|
<a href="1-0.html"><h5>1. Create a Kubernetes cluster</h5></a>
|
||||||
</div>
|
</div>
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="thumbnail">
|
<div class="thumbnail">
|
||||||
<a href="/docs/tutorials/getting-started/deploy-app.html"><img src="./public/images/module_02.svg?v=1469803628347" alt=""></a>
|
<a href="/docs/tutorials/kubernetes-basics/deploy-app.html"><img src="./public/images/module_02.svg?v=1469803628347" alt=""></a>
|
||||||
<div class="caption">
|
<div class="caption">
|
||||||
<a href="2-0.html"><h5>2. Deploy an app</h5></a>
|
<a href="2-0.html"><h5>2. Deploy an app</h5></a>
|
||||||
</div>
|
</div>
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="thumbnail">
|
<div class="thumbnail">
|
||||||
<a href="/docs/tutorials/getting-started/explore-app.html"><img src="./public/images/module_03.svg?v=1469803628347" alt=""></a>
|
<a href="/docs/tutorials/kubernetes-basics/explore-app.html"><img src="./public/images/module_03.svg?v=1469803628347" alt=""></a>
|
||||||
<div class="caption">
|
<div class="caption">
|
||||||
<a href="3-0.html"><h5>3. Explore your app</h5></a>
|
<a href="3-0.html"><h5>3. Explore your app</h5></a>
|
||||||
</div>
|
</div>
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="thumbnail">
|
<div class="thumbnail">
|
||||||
<a href="/docs/tutorials/getting-started/expose-app.html"><img src="./public/images/module_04.svg?v=1469803628347" alt=""></a>
|
<a href="/docs/tutorials/kubernetes-basics/expose-app.html"><img src="./public/images/module_04.svg?v=1469803628347" alt=""></a>
|
||||||
<div class="caption">
|
<div class="caption">
|
||||||
<a href="4-0.html"><h5>4. Expose your app publicly</h5></a>
|
<a href="4-0.html"><h5>4. Expose your app publicly</h5></a>
|
||||||
</div>
|
</div>
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="thumbnail">
|
<div class="thumbnail">
|
||||||
<a href="/docs/tutorials/getting-started/scale-app.html"><img src="./public/images/module_05.svg?v=1469803628347" alt=""></a>
|
<a href="/docs/tutorials/kubernetes-basics/scale-app.html"><img src="./public/images/module_05.svg?v=1469803628347" alt=""></a>
|
||||||
<div class="caption">
|
<div class="caption">
|
||||||
<a href="5-0.html"><h5>5. Scale up your app</h5></a>
|
<a href="5-0.html"><h5>5. Scale up your app</h5></a>
|
||||||
</div>
|
</div>
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="thumbnail">
|
<div class="thumbnail">
|
||||||
<a href="/docs/tutorials/getting-started/update-app.html"><img src="./public/images/module_06.svg?v=1469803628347" alt=""></a>
|
<a href="/docs/tutorials/kubernetes-basics/update-app.html"><img src="./public/images/module_06.svg?v=1469803628347" alt=""></a>
|
||||||
<div class="caption">
|
<div class="caption">
|
||||||
<a href="6-0.html"><h5>6. Update your app</h5></a>
|
<a href="6-0.html"><h5>6. Update your app</h5></a>
|
||||||
</div>
|
</div>
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/create-cluster.html" role="button">Start the tutorial<span class="btn__next">›</span></a>
|
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/create-cluster.html" role="button">Start the tutorial<span class="btn__next">›</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 729 B After Width: | Height: | Size: 729 B |
|
Before Width: | Height: | Size: 768 B After Width: | Height: | Size: 768 B |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 425 B After Width: | Height: | Size: 425 B |
|
Before Width: | Height: | Size: 506 B After Width: | Height: | Size: 506 B |
|
Before Width: | Height: | Size: 396 B After Width: | Height: | Size: 396 B |
|
Before Width: | Height: | Size: 396 B After Width: | Height: | Size: 396 B |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
@@ -7,19 +7,13 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
|
||||||
<script src="https://katacoda.com/embed.js"></script>
|
<script src="https://katacoda.com/embed.js"></script>
|
||||||
|
|
||||||
<div class="layout" id="top">
|
<div class="layout" id="top">
|
||||||
|
|
||||||
<main class="content">
|
<main class="content">
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/scale-intro.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<br>
|
|
||||||
<div class="katacoda">
|
<div class="katacoda">
|
||||||
<div class="katacoda__alert">
|
<div class="katacoda__alert">
|
||||||
To interact with the Terminal, please use the desktop/tablet version
|
To interact with the Terminal, please use the desktop/tablet version
|
||||||
@@ -29,7 +23,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/update-app.html" role="button">Continue to Module 6<span class="btn__next">›</span></a>
|
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/update-intro.html" role="button">Continue to Module 6<span class="btn__next">›</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -7,23 +7,24 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
|
||||||
|
|
||||||
<div class="layout" id="top">
|
<div class="layout" id="top">
|
||||||
|
|
||||||
<main class="content">
|
<main class="content">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/scale-app.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
<h3>Objectives</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Scale an app using kubectl.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h3>Scaling an application</h3>
|
||||||
|
|
||||||
<p>In the previous modules we created a <a href="http://kubernetes.io/docs/user-guide/deployments/"> Deployment</a>, and then exposed it publicly via a <a href="http://kubernetes.io/docs/user-guide/services/"> Service </a>. The Deployment created only one Pod for running our application. When traffic increases, we will need to scale the application to keep up with user demand.</p>
|
<p>In the previous modules we created a <a href="http://kubernetes.io/docs/user-guide/deployments/"> Deployment</a>, and then exposed it publicly via a <a href="http://kubernetes.io/docs/user-guide/services/"> Service </a>. The Deployment created only one Pod for running our application. When traffic increases, we will need to scale the application to keep up with user demand.</p>
|
||||||
|
|
||||||
<p><b>Scaling</b> is accomplished by changing the number of replicas in a Deployment</p>
|
<p><b>Scaling</b> is accomplished by changing the number of replicas in a Deployment</p>
|
||||||
@@ -59,11 +60,11 @@
|
|||||||
</ol>
|
</ol>
|
||||||
<div class="carousel-inner" role="listbox">
|
<div class="carousel-inner" role="listbox">
|
||||||
<div class="item active">
|
<div class="item active">
|
||||||
<img src="/docs/tutorials/getting-started/public/images/module_05_scaling1.svg">
|
<img src="/docs/tutorials/kubernetes-basics/public/images/module_05_scaling1.svg">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<img src="/docs/tutorials/getting-started/public/images/module_05_scaling2.svg">
|
<img src="/docs/tutorials/kubernetes-basics/public/images/module_05_scaling2.svg">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -106,7 +107,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/scale-interactive.html" role="button">Start Interactive Tutorial <span class="btn__next">›</span></a>
|
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/scale-interactive.html" role="button">Start Interactive Tutorial <span class="btn__next">›</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -7,19 +7,13 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
|
||||||
<script src="https://katacoda.com/embed.js"></script>
|
<script src="https://katacoda.com/embed.js"></script>
|
||||||
|
|
||||||
<div class="layout" id="top">
|
<div class="layout" id="top">
|
||||||
|
|
||||||
<main class="content">
|
<main class="content">
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/update-intro.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<br>
|
|
||||||
<div class="katacoda">
|
<div class="katacoda">
|
||||||
<div class="katacoda__alert">
|
<div class="katacoda__alert">
|
||||||
To interact with the Terminal, please use the desktop/tablet version
|
To interact with the Terminal, please use the desktop/tablet version
|
||||||
@@ -7,23 +7,24 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<link href="/docs/tutorials/getting-started/public/css/styles.css" rel="stylesheet">
|
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
|
||||||
|
|
||||||
<div class="layout" id="top">
|
<div class="layout" id="top">
|
||||||
|
|
||||||
<main class="content">
|
<main class="content">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 text-left">
|
|
||||||
<a class="btn btn-default" href="/docs/tutorials/getting-started/update-app.html" role="button"><span class="btn__prev">‹</span> Back</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
<h3>Objectives</h3>
|
||||||
|
<ul>
|
||||||
|
<li>Perform a rolling update using kubectl.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h3>Updating an application</h3>
|
||||||
|
|
||||||
<p>Users expect applications to be available all the time and developers are expected to deploy new versions of them several times a day. In Kubernetes this is done with rolling updates. <b>Rolling updates</b> allows Deployments to occur with zero downtime by incrementally updating Pods instances with new ones. The new Pods will be scheduled on Nodes with available resources.</p>
|
<p>Users expect applications to be available all the time and developers are expected to deploy new versions of them several times a day. In Kubernetes this is done with rolling updates. <b>Rolling updates</b> allows Deployments to occur with zero downtime by incrementally updating Pods instances with new ones. The new Pods will be scheduled on Nodes with available resources.</p>
|
||||||
|
|
||||||
<p>In the previous module we scaled our application to run multiple instances. This is a requirement for performing updates without affecting application availability. By default, the maximum number of Pods that can be unavailable during the update and the maximum number of new Pods that can be created, is one. Both options can be configured to either numbers or percentages (of Pods).
|
<p>In the previous module we scaled our application to run multiple instances. This is a requirement for performing updates without affecting application availability. By default, the maximum number of Pods that can be unavailable during the update and the maximum number of new Pods that can be created, is one. Both options can be configured to either numbers or percentages (of Pods).
|
||||||
@@ -61,19 +62,19 @@
|
|||||||
</ol>
|
</ol>
|
||||||
<div class="carousel-inner" role="listbox">
|
<div class="carousel-inner" role="listbox">
|
||||||
<div class="item active">
|
<div class="item active">
|
||||||
<img src="/docs/tutorials/getting-started/public/images/module_06_rollingupdates1.svg" >
|
<img src="/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates1.svg" >
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<img src="/docs/tutorials/getting-started/public/images/module_06_rollingupdates2.svg">
|
<img src="/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates2.svg">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<img src="/docs/tutorials/getting-started/public/images/module_06_rollingupdates3.svg">
|
<img src="/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates3.svg">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<img src="/docs/tutorials/getting-started/public/images/module_06_rollingupdates4.svg">
|
<img src="/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates4.svg">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -121,7 +122,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<a class="btn btn-lg btn-success" href="/docs/tutorials/getting-started/update-interactive.html" role="button">Start Interactive Tutorial <span class="btn__next">›</span></a>
|
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/update-interactive.html" role="button">Start Interactive Tutorial <span class="btn__next">›</span></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ $ kubectl config view
|
|||||||
```
|
```
|
||||||
|
|
||||||
Many of the [examples](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/examples/) provide an introduction to using
|
Many of the [examples](https://github.com/kubernetes/kubernetes/tree/{{page.githubbranch}}/examples/) provide an introduction to using
|
||||||
kubectl and complete documentation is found in the [kubectl manual](/docs/user-guide/kubectl/kubectl).
|
kubectl and complete documentation is found in the [kubectl manual](/docs/user-guide/kubectl/index).
|
||||||
|
|
||||||
### Directly accessing the REST API
|
### Directly accessing the REST API
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ assignees:
|
|||||||
* TOC
|
* TOC
|
||||||
{:toc}
|
{:toc}
|
||||||
|
|
||||||
# The Kubernetes model for connecting containers
|
## The Kubernetes model for connecting containers
|
||||||
|
|
||||||
Now that you have a continuously running, replicated application you can expose it on a network. Before discussing the Kubernetes approach to networking, it is worthwhile to contrast it with the "normal" way networking works with Docker.
|
Now that you have a continuously running, replicated application you can expose it on a network. Before discussing the Kubernetes approach to networking, it is worthwhile to contrast it with the "normal" way networking works with Docker.
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ assignees:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Use this overview of the `kubectl` command line interface to help you start running commands against Kubernetes clusters. This overview quickly covers `kubectl` syntax, describes the command operations, and provides common examples. For details about each command, including all the supported flags and subcommands, see the [kubectl](/docs/user-guide/kubectl/kubectl) reference documentation.
|
Use this overview of the `kubectl` command line interface to help you start running commands against Kubernetes clusters. This overview quickly covers `kubectl` syntax, describes the command operations, and provides common examples. For details about each command, including all the supported flags and subcommands, see the [kubectl](/docs/user-guide/kubectl) reference documentation.
|
||||||
|
|
||||||
TODO: Auto-generate this file to ensure it's always in sync with any `kubectl` changes, see [#14177](http://pr.k8s.io/14177).
|
TODO: Auto-generate this file to ensure it's always in sync with any `kubectl` changes, see [#14177](http://pr.k8s.io/14177).
|
||||||
|
|
||||||
@@ -85,25 +85,33 @@ The following table includes a list of all the supported resource types and thei
|
|||||||
|
|
||||||
Resource type | Abbreviated alias
|
Resource type | Abbreviated alias
|
||||||
-------------------- | --------------------
|
-------------------- | --------------------
|
||||||
`componentstatuses` | `cs`
|
`clusters` |
|
||||||
`daemonsets` | `ds`
|
`componentstatuses` |`cs`
|
||||||
`deployments` |
|
`configmaps` |`cm`
|
||||||
`events` | `ev`
|
`daemonsets` |`ds`
|
||||||
`endpoints` | `ep`
|
`deployments` |`deploy`
|
||||||
`horizontalpodautoscalers` | `hpa`
|
`endpoints` |`ep`
|
||||||
`ingresses` | `ing`
|
`events` |`ev`
|
||||||
|
`horizontalpodautoscalers` |`hpa`
|
||||||
|
`ingresses` |`ing`
|
||||||
`jobs` |
|
`jobs` |
|
||||||
`limitranges` | `limits`
|
`limitranges` |`limits`
|
||||||
`nodes` | `no`
|
`namespaces` |`ns`
|
||||||
`namespaces` | `ns`
|
`networkpolicies` |
|
||||||
`pods` | `po`
|
`nodes` |`no`
|
||||||
`persistentvolumes` | `pv`
|
`persistentvolumeclaims` |`pvc`
|
||||||
`persistentvolumeclaims` | `pvc`
|
`persistentvolumes` |`pv`
|
||||||
`resourcequotas` | `quota`
|
`pods` |`po`
|
||||||
`replicationcontrollers` | `rc`
|
`podsecuritypolicies` |`psp`
|
||||||
|
`podtemplates` |
|
||||||
|
`replicasets` |`rs`
|
||||||
|
`replicationcontrollers` |`rc`
|
||||||
|
`resourcequotas` |`quota`
|
||||||
`secrets` |
|
`secrets` |
|
||||||
`serviceaccounts` |
|
`serviceaccounts` |`sa`
|
||||||
`services` | `svc`
|
`services` |`svc`
|
||||||
|
`storageclasses` |
|
||||||
|
`thirdpartyresources` |
|
||||||
|
|
||||||
## Output options
|
## Output options
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ assignees:
|
|||||||
|
|
||||||
Understanding how an application behaves when deployed is crucial to scaling the application and providing a reliable service. In a Kubernetes cluster, application performance can be examined at many different levels: containers, [pods](/docs/user-guide/pods), [services](/docs/user-guide/services), and whole clusters. As part of Kubernetes we want to provide users with detailed resource usage information about their running applications at all these levels. This will give users deep insights into how their applications are performing and where possible application bottlenecks may be found. In comes [Heapster](https://github.com/kubernetes/heapster), a project meant to provide a base monitoring platform on Kubernetes.
|
Understanding how an application behaves when deployed is crucial to scaling the application and providing a reliable service. In a Kubernetes cluster, application performance can be examined at many different levels: containers, [pods](/docs/user-guide/pods), [services](/docs/user-guide/services), and whole clusters. As part of Kubernetes we want to provide users with detailed resource usage information about their running applications at all these levels. This will give users deep insights into how their applications are performing and where possible application bottlenecks may be found. In comes [Heapster](https://github.com/kubernetes/heapster), a project meant to provide a base monitoring platform on Kubernetes.
|
||||||
|
|
||||||
### Overview
|
## Overview
|
||||||
|
|
||||||
Heapster is a cluster-wide aggregator of monitoring and event data. It currently supports Kubernetes natively and works on all Kubernetes setups. Heapster runs as a pod in the cluster, similar to how any Kubernetes application would run. The Heapster pod discovers all nodes in the cluster and queries usage information from the nodes' [Kubelet](https://releases.k8s.io/{{page.githubbranch}}/DESIGN.md#kubelet)s, the on-machine Kubernetes agent. The Kubelet itself fetches the data from [cAdvisor](https://github.com/google/cadvisor). Heapster groups the information by pod along with the relevant labels. This data is then pushed to a configurable backend for storage and visualization. Currently supported backends include [InfluxDB](http://influxdb.com/) (with [Grafana](http://grafana.org/) for visualization), [Google Cloud Monitoring](https://cloud.google.com/monitoring/) and many others described in more details [here](https://github.com/kubernetes/heapster/blob/master/docs/sink-configuration.md). The overall architecture of the service can be seen below:
|
Heapster is a cluster-wide aggregator of monitoring and event data. It currently supports Kubernetes natively and works on all Kubernetes setups. Heapster runs as a pod in the cluster, similar to how any Kubernetes application would run. The Heapster pod discovers all nodes in the cluster and queries usage information from the nodes' [Kubelet](https://releases.k8s.io/{{page.githubbranch}}/DESIGN.md#kubelet)s, the on-machine Kubernetes agent. The Kubelet itself fetches the data from [cAdvisor](https://github.com/google/cadvisor). Heapster groups the information by pod along with the relevant labels. This data is then pushed to a configurable backend for storage and visualization. Currently supported backends include [InfluxDB](http://influxdb.com/) (with [Grafana](http://grafana.org/) for visualization), [Google Cloud Monitoring](https://cloud.google.com/monitoring/) and many others described in more details [here](https://github.com/kubernetes/heapster/blob/master/docs/sink-configuration.md). The overall architecture of the service can be seen below:
|
||||||
|
|
||||||
|
|||||||
@@ -150,7 +150,9 @@ Pod is exposed as a primitive in order to facilitate:
|
|||||||
* clean composition of Kubelet-level functionality with cluster-level functionality — Kubelet is effectively the "pod controller"
|
* clean composition of Kubelet-level functionality with cluster-level functionality — Kubelet is effectively the "pod controller"
|
||||||
* high-availability applications, which will expect pods to be replaced in advance of their termination and certainly in advance of deletion, such as in the case of planned evictions, image prefetching, or live pod migration [#3949](http://issue.k8s.io/3949)
|
* high-availability applications, which will expect pods to be replaced in advance of their termination and certainly in advance of deletion, such as in the case of planned evictions, image prefetching, or live pod migration [#3949](http://issue.k8s.io/3949)
|
||||||
|
|
||||||
The current best practice for pets is to create a replication controller with `replicas` equal to `1` and a corresponding service. If you find this cumbersome, please comment on [issue #260](http://issue.k8s.io/260).
|
There is new first-class support for pet-like pods with the [PetSet](/docs/user-guide/petset/) feature (currently in alpha).
|
||||||
|
For prior versions of Kubernetes, best practice for pets is to create a replication controller with `replicas` equal to `1` and a corresponding service.
|
||||||
|
|
||||||
|
|
||||||
## Termination of Pods
|
## Termination of Pods
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ assignees:
|
|||||||
To update a service without an outage, `kubectl` supports what is called ['rolling update'](/docs/user-guide/kubectl/kubectl_rolling-update), which updates one pod at a time, rather than taking down the entire service at the same time. See the [rolling update design document](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/design/simple-rolling-update.md) and the [example of rolling update](/docs/user-guide/update-demo/) for more information.
|
To update a service without an outage, `kubectl` supports what is called ['rolling update'](/docs/user-guide/kubectl/kubectl_rolling-update), which updates one pod at a time, rather than taking down the entire service at the same time. See the [rolling update design document](https://github.com/kubernetes/kubernetes/blob/{{page.githubbranch}}/docs/design/simple-rolling-update.md) and the [example of rolling update](/docs/user-guide/update-demo/) for more information.
|
||||||
|
|
||||||
Note that `kubectl rolling-update` only supports Replication Controllers. However, if you deploy applications with Replication Controllers,
|
Note that `kubectl rolling-update` only supports Replication Controllers. However, if you deploy applications with Replication Controllers,
|
||||||
consider switching them to [Deployments](/docs/user-guide/deployments/). A Deployments is a higher-level controller that automates rolling updates
|
consider switching them to [Deployments](/docs/user-guide/deployments/). A Deployment is a higher-level controller that automates rolling updates
|
||||||
of applications declaratively, and therefore is recommended. If you still want to keep your Replication Controllers and use `kubectl rolling-update`, keep reading:
|
of applications declaratively, and therefore is recommended. If you still want to keep your Replication Controllers and use `kubectl rolling-update`, keep reading:
|
||||||
|
|
||||||
A rolling update applies changes to the configuration of pods being managed by
|
A rolling update applies changes to the configuration of pods being managed by
|
||||||
|
|||||||
@@ -377,7 +377,7 @@ To use a secret in an environment variable in a pod:
|
|||||||
1. Modify your Pod definition in each container that you wish to consume the value of a secret key to add an environment variable for each secret key you wish to consume. The environment variable that consumes the secret key should populate the secret's name and key in `env[x].valueFrom.secretKeyRef`.
|
1. Modify your Pod definition in each container that you wish to consume the value of a secret key to add an environment variable for each secret key you wish to consume. The environment variable that consumes the secret key should populate the secret's name and key in `env[x].valueFrom.secretKeyRef`.
|
||||||
1. Modify your image and/or command line so that the program looks for values in the specified environment variables
|
1. Modify your image and/or command line so that the program looks for values in the specified environment variables
|
||||||
|
|
||||||
This is an example of a pod that mounts a secret in a volume:
|
This is an example of a pod that uses secrets from environment variables:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@@ -543,9 +543,9 @@ credentials.
|
|||||||
Make the secrets:
|
Make the secrets:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ kubectl create secret generic prod-db-secret --from-literal=user=produser --from-literal=password=Y4nys7f11
|
$ kubectl create secret generic prod-db-secret --from-literal=username=produser --from-literal=password=Y4nys7f11
|
||||||
secret "prod-db-secret" created
|
secret "prod-db-secret" created
|
||||||
$ kubectl create secret generic test-db-secret --from-literal=user=testuser --from-literal=password=iluvtests
|
$ kubectl create secret generic test-db-secret --from-literal=username=testuser --from-literal=password=iluvtests
|
||||||
secret "test-db-secret" created
|
secret "test-db-secret" created
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,118 @@
|
|||||||
|
---
|
||||||
|
assignees:
|
||||||
|
- IanLewis
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
* TOC
|
||||||
|
{:toc}
|
||||||
|
|
||||||
|
## What is ThirdPartyResource?
|
||||||
|
|
||||||
|
Kubernetes comes with many built-in API objects. However, there are often times when you might need to extend Kubernetes with their own API objects in order to do custom automation.
|
||||||
|
|
||||||
|
`ThirdPartyResource` objects are a way to extend the Kubernetes API with a new API object type. The new API object type will be given an API endpoint URL and support CRUD operations, and watch API. You can then create custom objects using this API endpoint. You can think of `ThirdPartyResources` as being much like the schema for a database table. Once you have created the table, you can then start storing rows in the table. Once created, `ThirdPartyResources` can act as the data model behind custom controllers or automation programs.
|
||||||
|
|
||||||
|
## Structure of a ThirdPartyResource
|
||||||
|
|
||||||
|
Each `ThirdPartyResource` has the following:
|
||||||
|
|
||||||
|
* `metadata` - Standard Kubernetes object metadata.
|
||||||
|
* `kind` - The kind of the resources described by this third party resource.
|
||||||
|
* `description` - A free text description of the resource.
|
||||||
|
* `versions` - A list of the versions of the resource.
|
||||||
|
|
||||||
|
The `kind` for a `ThirdPartyResource` takes the form `<kind name>.<domain>`. You are expected to provide a unique kind and domain name in order to avoid conflicts with other `ThirdPartyResource` objects. Kind names will be converted to CamelCase when creating instances of the `ThirdPartyResource`. Hypens in the `kind` are assumed to be word breaks. For instance the kind `camel-case` would be converted to `CamelCase` but `camelcase` would be converted to `Camelcase`.
|
||||||
|
|
||||||
|
Other fields on the `ThirdPartyResource` are treated as custom data fields. These fields can hold arbitrary JSON data and have any structure.
|
||||||
|
|
||||||
|
You can view the full documentation about `ThirdPartyResources` using the `explain` command in kubectl.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ kubectl explain thirdpartyresource
|
||||||
|
```
|
||||||
|
|
||||||
|
## Creating a ThirdPartyResource
|
||||||
|
|
||||||
|
When you user create a new `ThirdPartyResource`, the Kubernetes API Server reacts by creating a new, namespaced RESTful resource path. For now, non-namespaced objects are not supported. As with existing built-in objects, deleting a namespace deletes all custom objects in that namespace. `ThirdPartyResources` themselves are non-namespaced and are available to all namespaces.
|
||||||
|
|
||||||
|
For example, if a save the following `ThirdPartyResource` to `resource.yaml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: ThirdPartyResource
|
||||||
|
metadata:
|
||||||
|
name: cron-tab.stable.example.com
|
||||||
|
description: "A specification of a Pod to run on a cron style schedule"
|
||||||
|
versions:
|
||||||
|
- name: v1
|
||||||
|
```
|
||||||
|
|
||||||
|
And create it:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ kubectl create -f resource.yaml
|
||||||
|
thirdpartyresource "cron-tab.stable.example.com" created
|
||||||
|
```
|
||||||
|
|
||||||
|
Then a new RESTful API endpoint is created at:
|
||||||
|
|
||||||
|
`/apis/stable.example.com/v1/namespaces/<namespace>/crontabs/...`
|
||||||
|
|
||||||
|
This endpoint URL can then be used to create and manage custom objects.
|
||||||
|
|
||||||
|
## Creating Custom Objects
|
||||||
|
|
||||||
|
After the `ThirdPartyResource` object has been created you can create custom objects. Custom objects can contain custom fields. These fields can contain arbitrary JSON.
|
||||||
|
In the following example, a `cronSpec` and `image` custom fields are set to the custom `CronTab` object. If you save the following YAML to `my-crontab.yaml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: "stable.example.com/v1"
|
||||||
|
kind: CronTab
|
||||||
|
metadata:
|
||||||
|
name: my-new-cron-object
|
||||||
|
cronSpec: "* * * * /5"
|
||||||
|
image: my-awesome-cron-image
|
||||||
|
```
|
||||||
|
|
||||||
|
and create it:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ kubectl create -f my-crontab.yaml
|
||||||
|
crontab "my-new-cron-object" created
|
||||||
|
```
|
||||||
|
|
||||||
|
You can then manage our `CronTab` objects using kubectl. Note that resource names are not case-sensitive when using kubectl:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ kubectl get crontab
|
||||||
|
NAME LABELS DATA
|
||||||
|
my-new-cron-object <none> {"apiVersion":"stable.example.com/v1","cronSpec":"...
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also view the raw JSON data. Here you can see that it contains the custom `cronSpec` and `image` fields from the yaml you used to create it:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
$ kubectl get crontab -o json
|
||||||
|
{
|
||||||
|
"kind": "List",
|
||||||
|
"apiVersion": "v1",
|
||||||
|
"metadata": {},
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"apiVersion": "stable.example.com/v1",
|
||||||
|
"cronSpec": "* * * * /5",
|
||||||
|
"image": "my-awesome-cron-image",
|
||||||
|
"kind": "CronTab",
|
||||||
|
"metadata": {
|
||||||
|
"creationTimestamp": "2016-09-29T04:59:00Z",
|
||||||
|
"name": "my-new-cron-object",
|
||||||
|
"namespace": "default",
|
||||||
|
"resourceVersion": "12601503",
|
||||||
|
"selfLink": "/apis/stable.example.com/v1/namespaces/default/crontabs/my-new-cron-object",
|
||||||
|
"uid": "6f65e7a3-8601-11e6-a23e-42010af0000c"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||