Merge branch 'master' into updoc3
This commit is contained in:
@@ -10,4 +10,8 @@ toc:
|
|||||||
section:
|
section:
|
||||||
- title: Using an HTTP Proxy to Access the Kubernetes API
|
- title: Using an HTTP Proxy to Access the Kubernetes API
|
||||||
path: /docs/tasks/access-kubernetes-api/http-proxy-access-api/
|
path: /docs/tasks/access-kubernetes-api/http-proxy-access-api/
|
||||||
|
- title: Administering a Cluster
|
||||||
|
section:
|
||||||
|
- title: Assigning Pods to Nodes
|
||||||
|
path: /docs/tasks/administer-cluster/assign-pods-nodes/
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -56,5 +56,5 @@ toc:
|
|||||||
section:
|
section:
|
||||||
- title: Running a Stateless Application Using a Deployment
|
- title: Running a Stateless Application Using a Deployment
|
||||||
path: /docs/tutorials/stateless-application/run-stateless-application-deployment/
|
path: /docs/tutorials/stateless-application/run-stateless-application-deployment/
|
||||||
- title: Exposing an External IP Address Using a Service
|
- title: Using a Service to Access an Application in a Cluster
|
||||||
path: /docs/tutorials/stateless-application/expose-external-ip-address-service/
|
path: /docs/tutorials/stateless-application/expose-external-ip-address-service/
|
||||||
|
|||||||
@@ -3,40 +3,40 @@
|
|||||||
margin-top: 1em !important;
|
margin-top: 1em !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies p {
|
.gridPage p {
|
||||||
color: rgb(26,26,26) !important;
|
color: rgb(26,26,26) !important;
|
||||||
margin-left: 0 !important;
|
margin-left: 0 !important;
|
||||||
padding-left: 0 !important;
|
padding-left: 0 !important;
|
||||||
font-weight: 300 !important;
|
font-weight: 300 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #mainContent {
|
.gridPage #mainContent {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #mainContent .content {
|
.gridPage #mainContent .content {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies main {
|
.gridPage main {
|
||||||
max-width: 1100px !important;
|
max-width: 1100px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies .content {
|
.gridPage .content {
|
||||||
position: relative;
|
position: relative;
|
||||||
margin: 0 auto 50px;
|
margin: 0 auto 50px;
|
||||||
max-width: 90%;
|
max-width: 90%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies .content p {
|
.gridPage .content p {
|
||||||
line-height: 24px !important;
|
line-height: 24px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies .content h3 {
|
.gridPage .content h3 {
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #hero h5 {
|
.gridPage #hero h5 {
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
left: 0;
|
left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #mainContent .content .case-study p {
|
.gridPage #mainContent .content .case-study p {
|
||||||
font-family: "Roboto", sans-serif;
|
font-family: "Roboto", sans-serif;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
@@ -77,13 +77,13 @@
|
|||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #video {
|
.gridPage #video {
|
||||||
background: #f9f9f9;
|
background: #f9f9f9;
|
||||||
height: auto;
|
height: auto;
|
||||||
/*height: 340px;*/
|
/*height: 340px;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #video main {
|
.gridPage #video main {
|
||||||
position: relative;
|
position: relative;
|
||||||
max-width: 900px !important;
|
max-width: 900px !important;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@@ -93,19 +93,19 @@
|
|||||||
padding: 50px 20px;
|
padding: 50px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #video main > div {
|
.gridPage #video main > div {
|
||||||
width: 50%;
|
width: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #video main #zulilyLogo {
|
.gridPage #video main #zulilyLogo {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #video main img {
|
.gridPage #video main img {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #video h3 {
|
.gridPage #video h3 {
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
line-height: 38px;
|
line-height: 38px;
|
||||||
@@ -113,57 +113,57 @@
|
|||||||
margin: 0 0 1em 0;
|
margin: 0 0 1em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #video p {
|
.gridPage #video p {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #video p.attrib {
|
.gridPage #video p.attrib {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #video button > h6 {
|
.gridPage #video button > h6 {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
margin: 1em 0;
|
margin: 1em 0;
|
||||||
color: #326de6;
|
color: #326de6;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #users {
|
.gridPage #users {
|
||||||
padding: 50px;
|
padding: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #users main {
|
.gridPage #users main {
|
||||||
max-width: 1150px !important;
|
max-width: 1150px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #users main h3 {
|
.gridPage #users main h3 {
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #usersGrid {
|
.gridPage #usersGrid {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #usersGrid a {
|
.gridPage #usersGrid a {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #usersGrid a img {
|
.gridPage #usersGrid a img {
|
||||||
box-shadow: 1px 1px 2px transparent;
|
box-shadow: 1px 1px 2px transparent;
|
||||||
transition: box-shadow 0.25s;
|
transition: box-shadow 0.25s;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #usersGrid a img:hover {
|
.gridPage #usersGrid a img:hover {
|
||||||
box-shadow: 1px 1px 2px #cccccc;
|
box-shadow: 1px 1px 2px #cccccc;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #usersGrid a:last-child img,
|
.gridPage #usersGrid a:last-child img,
|
||||||
#caseStudies #usersGrid a:last-child img:hover {
|
.gridPage #usersGrid a:last-child img:hover {
|
||||||
box-shadow: 1px 1px 2px transparent;
|
box-shadow: 1px 1px 2px transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,12 +173,12 @@
|
|||||||
box-shadow: 1px 2px 2px #dddddd;
|
box-shadow: 1px 2px 2px #dddddd;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies .feature {
|
.gridPage .feature {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 20px 0 20px 242px;
|
padding: 20px 0 20px 242px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies .feature img {
|
.gridPage .feature img {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 20px;
|
top: 20px;
|
||||||
left: 0;
|
left: 0;
|
||||||
@@ -225,7 +225,7 @@
|
|||||||
margin-bottom: 0.5em;
|
margin-bottom: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies .feature p.quote {
|
.gridPage .feature p.quote {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
line-height: 28px !important;
|
line-height: 28px !important;
|
||||||
}
|
}
|
||||||
@@ -250,20 +250,20 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 900px){
|
@media screen and (max-width: 900px){
|
||||||
#caseStudies #video main {
|
.gridPage #video main {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #video main > div {
|
.gridPage #video main > div {
|
||||||
width: 400px;
|
width: 400px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #video main > div + div {
|
.gridPage #video main > div + div {
|
||||||
margin-top: 30px;
|
margin-top: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #video h3 {
|
.gridPage #video h3 {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -282,12 +282,12 @@
|
|||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies .feature {
|
.gridPage .feature {
|
||||||
margin-top: 50px;
|
margin-top: 50px;
|
||||||
padding: 180px 0 0;
|
padding: 180px 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies .feature img {
|
.gridPage .feature img {
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
@@ -295,12 +295,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 480px){
|
@media screen and (max-width: 480px){
|
||||||
#caseStudies #hero {
|
.gridPage #hero {
|
||||||
padding-right: 20px;
|
padding-right: 20px;
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#caseStudies #video main > div {
|
.gridPage #video main > div {
|
||||||
width: 80%;
|
width: 80%;
|
||||||
min-width: 280px;
|
min-width: 280px;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -1131,7 +1131,7 @@ $feature-box-div-margin-bottom: 40px
|
|||||||
|
|
||||||
// Community
|
// Community
|
||||||
|
|
||||||
#community, #caseStudies
|
#community, .gridPage
|
||||||
&.open-nav, &.flip-nav
|
&.open-nav, &.flip-nav
|
||||||
.logo
|
.logo
|
||||||
background-image: url(/images/nav_logo2.svg)
|
background-image: url(/images/nav_logo2.svg)
|
||||||
@@ -1340,3 +1340,4 @@ $feature-box-div-margin-bottom: 40px
|
|||||||
//
|
//
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
//
|
||||||
+1
-1
@@ -270,7 +270,7 @@ $video-section-height: 550px
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#community, #caseStudies
|
#community, .gridPage
|
||||||
#hero
|
#hero
|
||||||
text-align: left
|
text-align: left
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: Case Studies
|
|||||||
---
|
---
|
||||||
|
|
||||||
<!Doctype html>
|
<!Doctype html>
|
||||||
<html id="caseStudies">
|
<html id="caseStudies" class="gridPage">
|
||||||
{% include head-header.html %}
|
{% include head-header.html %}
|
||||||
|
|
||||||
<section id="hero" class="light-text">
|
<section id="hero" class="light-text">
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: Pearson Case Study
|
|||||||
---
|
---
|
||||||
|
|
||||||
<!Doctype html>
|
<!Doctype html>
|
||||||
<html id="caseStudies">
|
<html id="caseStudies" class="gridPage">
|
||||||
{% include head-header.html %}
|
{% include head-header.html %}
|
||||||
|
|
||||||
<section id="hero" class="light-text">
|
<section id="hero" class="light-text">
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: Wikimedia Case Study
|
|||||||
---
|
---
|
||||||
|
|
||||||
<!Doctype html>
|
<!Doctype html>
|
||||||
<html id="caseStudies">
|
<html id="caseStudies" class="gridPage">
|
||||||
{% include head-header.html %}
|
{% include head-header.html %}
|
||||||
|
|
||||||
<section id="hero" class="light-text">
|
<section id="hero" class="light-text">
|
||||||
|
|||||||
@@ -349,8 +349,8 @@ logs or through `journalctl`. More information is provided in
|
|||||||
|
|
||||||
Additional resources:
|
Additional resources:
|
||||||
|
|
||||||
- http://wiki.apparmor.net/index.php/QuickProfileLanguage
|
- [Quick guide to the AppArmor profile language](http://wiki.apparmor.net/index.php/QuickProfileLanguage)
|
||||||
- http://wiki.apparmor.net/index.php/ProfileLanguage
|
- [AppArmor core policy reference](http://wiki.apparmor.net/index.php/ProfileLanguage)
|
||||||
|
|
||||||
## API Reference
|
## API Reference
|
||||||
|
|
||||||
|
|||||||
@@ -42,16 +42,6 @@ You will install the following packages on all the machines:
|
|||||||
|
|
||||||
For each host in turn:
|
For each host in turn:
|
||||||
|
|
||||||
<!--
|
|
||||||
# curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
|
|
||||||
# cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
|
|
||||||
deb http://packages.cloud.google.com/apt kubernetes-xenial main
|
|
||||||
EOF
|
|
||||||
# apt-get update
|
|
||||||
# apt-get install -y kubeadm docker.io§
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
* SSH into the machine and become `root` if you are not already (for example, run `sudo su -`).
|
* SSH into the machine and become `root` if you are not already (for example, run `sudo su -`).
|
||||||
* If the machine is running Ubuntu 16.04, run:
|
* If the machine is running Ubuntu 16.04, run:
|
||||||
|
|
||||||
@@ -92,6 +82,9 @@ To initialize the master, pick one of the machines you previously installed `kub
|
|||||||
|
|
||||||
# kubeadm init
|
# kubeadm init
|
||||||
|
|
||||||
|
**Note:** this will autodetect the network interface to advertise the master on as the interface with the default gateway.
|
||||||
|
If you want to use a different interface, specify `--api-advertise-addresses=<ip-address>` argument to `kubeadm init`.
|
||||||
|
|
||||||
This will download and install the cluster database and "control plane" components.
|
This will download and install the cluster database and "control plane" components.
|
||||||
This may take several minutes.
|
This may take several minutes.
|
||||||
|
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ export KUBERNETES_PROVIDER=libvirt-coreos; wget -q -O - https://get.k8s.io | bas
|
|||||||
Here is the curl version of this command:
|
Here is the curl version of this command:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
export KUBERNETES_PROVIDER=libvirt-coreos; curl -sS https://get.k8s.io | bash`
|
export KUBERNETES_PROVIDER=libvirt-coreos; curl -sS https://get.k8s.io | bash
|
||||||
```
|
```
|
||||||
|
|
||||||
This script downloads and unpacks the tarball, then spawns a Kubernetes cluster on CoreOS instances with the following characteristics:
|
This script downloads and unpacks the tarball, then spawns a Kubernetes cluster on CoreOS instances with the following characteristics:
|
||||||
|
|||||||
@@ -47,9 +47,8 @@ ssh jclouds@${ip_address_of_master_node}
|
|||||||
Build Kubernetes-Mesos.
|
Build Kubernetes-Mesos.
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
git clone https://github.com/kubernetes/kubernetes
|
git clone https://github.com/kubernetes-incubator/kube-mesos-framework
|
||||||
cd kubernetes
|
cd kube-mesos-framework
|
||||||
export KUBERNETES_CONTRIB=mesos
|
|
||||||
make
|
make
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ To start a cluster, run the command:
|
|||||||
```shell
|
```shell
|
||||||
minikube start
|
minikube start
|
||||||
Starting local Kubernetes cluster...
|
Starting local Kubernetes cluster...
|
||||||
Kubernetes is available at https://192.168.99.100:443.
|
Kubectl is now configured to use the cluster.
|
||||||
```
|
```
|
||||||
|
|
||||||
This will build and start a lightweight local cluster, consisting of a master, etcd, Docker and a single node.
|
This will build and start a lightweight local cluster, consisting of a master, etcd, Docker and a single node.
|
||||||
|
|||||||
@@ -0,0 +1,88 @@
|
|||||||
|
---
|
||||||
|
---
|
||||||
|
|
||||||
|
{% capture overview %}
|
||||||
|
This page shows how to assign a Kubernetes Pod to a particular node in a
|
||||||
|
Kubernetes cluster.
|
||||||
|
{% endcapture %}
|
||||||
|
|
||||||
|
{% capture prerequisites %}
|
||||||
|
|
||||||
|
* Install [kubectl](http://kubernetes.io/docs/user-guide/prereqs).
|
||||||
|
|
||||||
|
* Create a Kubernetes cluster, including a running Kubernetes
|
||||||
|
API server. One way to create a new cluster is to use
|
||||||
|
[Minikube](/docs/getting-started-guides/minikube).
|
||||||
|
|
||||||
|
* Configure `kubectl` to communicate with your Kubernetes API server. This
|
||||||
|
configuration is done automatically if you use Minikube.
|
||||||
|
|
||||||
|
{% endcapture %}
|
||||||
|
|
||||||
|
{% capture steps %}
|
||||||
|
|
||||||
|
### Adding a label to a node
|
||||||
|
|
||||||
|
1. List the nodes in your cluster:
|
||||||
|
|
||||||
|
kubectl get nodes
|
||||||
|
|
||||||
|
The output is similar to this:
|
||||||
|
|
||||||
|
NAME STATUS AGE
|
||||||
|
worker0 Ready 1d
|
||||||
|
worker1 Ready 1d
|
||||||
|
worker2 Ready 1d
|
||||||
|
|
||||||
|
1. Chose one of your nodes, and add a label to it:
|
||||||
|
|
||||||
|
kubectl label nodes <your-node-name> disktype=ssd
|
||||||
|
|
||||||
|
where `<your-node-name>` is the name of your chosen node.
|
||||||
|
|
||||||
|
1. Verify that your chosen node has a `disktype=ssd` label:
|
||||||
|
|
||||||
|
kubectl get nodes --show-labels
|
||||||
|
|
||||||
|
|
||||||
|
The output is similar to this:
|
||||||
|
|
||||||
|
NAME STATUS AGE LABELS
|
||||||
|
worker0 Ready 1d ...,disktype=ssd,kubernetes.io/hostname=worker0
|
||||||
|
worker1 Ready 1d ...,kubernetes.io/hostname=worker1
|
||||||
|
worker2 Ready 1d ...,kubernetes.io/hostname=worker2
|
||||||
|
|
||||||
|
In the preceding output, you can see that the `worker0` node has a
|
||||||
|
`disktype=ssd` label.
|
||||||
|
|
||||||
|
### Creating a pod that gets scheduled to your chosen node
|
||||||
|
|
||||||
|
This pod configuration file describes a pod that has a node selector,
|
||||||
|
`disktype: ssd`. This means that the pod will get scheduled on a node that has
|
||||||
|
a `disktype=ssd` label.
|
||||||
|
|
||||||
|
{% include code.html language="yaml" file="pod.yaml" ghlink="/docs/tasks/administer-cluster/pod.yaml" %}
|
||||||
|
|
||||||
|
1. Use the configuration file to create a pod that will get scheduled on your
|
||||||
|
chosen node:
|
||||||
|
|
||||||
|
export REPO=https://raw.githubusercontent.com/kubernetes/kubernetes.github.io/master
|
||||||
|
kubectl create -f $REPO/docs/tasks/administer-cluster/pod.yaml
|
||||||
|
|
||||||
|
1. Verify that the pod is running on your chosen node:
|
||||||
|
|
||||||
|
kubectl get pods --output=wide
|
||||||
|
|
||||||
|
The output is similar to this:
|
||||||
|
|
||||||
|
NAME READY STATUS RESTARTS AGE IP NODE
|
||||||
|
nginx 1/1 Running 0 13s 10.200.0.4 worker0
|
||||||
|
|
||||||
|
{% endcapture %}
|
||||||
|
|
||||||
|
{% capture whatsnext %}
|
||||||
|
Learn more about
|
||||||
|
[labels and selectors](/docs/user-guide/labels/).
|
||||||
|
{% endcapture %}
|
||||||
|
|
||||||
|
{% include templates/task.md %}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: nginx
|
||||||
|
labels:
|
||||||
|
env: test
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: nginx
|
||||||
|
image: nginx
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
nodeSelector:
|
||||||
|
disktype: ssd
|
||||||
@@ -11,6 +11,9 @@ The Tasks section of the Kubernetes documentation is a work in progress
|
|||||||
|
|
||||||
* [Using an HTTP Proxy to Access the Kubernetes API](/docs/tasks/access-kubernetes-api/http-proxy-access-api)
|
* [Using an HTTP Proxy to Access the Kubernetes API](/docs/tasks/access-kubernetes-api/http-proxy-access-api)
|
||||||
|
|
||||||
|
#### Administering a Cluster
|
||||||
|
|
||||||
|
* [Assigning Pods to Nodes](/docs/tasks/administer-cluster/assign-pods-nodes/)
|
||||||
|
|
||||||
### What's next
|
### What's next
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ The Tutorials section of the Kubernetes documentation is a work in progress.
|
|||||||
|
|
||||||
* [Running a Stateless Application Using a Deployment](/docs/tutorials/stateless-application/run-stateless-application-deployment/)
|
* [Running a Stateless Application Using a Deployment](/docs/tutorials/stateless-application/run-stateless-application-deployment/)
|
||||||
|
|
||||||
* [Exposing an External IP Address Using a Service](/docs/tutorials/stateless-application/expose-external-ip-address-service/)
|
* [Using a Service to Access an Application in a Cluster](/docs/tutorials/stateless-application/expose-external-ip-address-service/)
|
||||||
|
|
||||||
### What's next
|
### What's next
|
||||||
|
|
||||||
|
|||||||
@@ -16,4 +16,3 @@ spec:
|
|||||||
image: nginx:1.7.9
|
image: nginx:1.7.9
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 80
|
- containerPort: 80
|
||||||
Contact GitHub API Training Shop Blog About
|
|
||||||
|
|||||||
@@ -4,9 +4,8 @@
|
|||||||
{% capture overview %}
|
{% capture overview %}
|
||||||
|
|
||||||
This page shows how to create a Kubernetes Service object that external
|
This page shows how to create a Kubernetes Service object that external
|
||||||
clients can use to access an application running in a cluster. The
|
clients can use to access an application running in a cluster. The Service
|
||||||
Service exposes a stable IP address and provides load balancing for
|
provides load balancing for an application that has two running instances.
|
||||||
an application that has two running instances.
|
|
||||||
|
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
|
|
||||||
@@ -28,7 +27,7 @@ an application that has two running instances.
|
|||||||
{% capture objectives %}
|
{% capture objectives %}
|
||||||
|
|
||||||
* Run two instances of a Hello World application.
|
* Run two instances of a Hello World application.
|
||||||
* Create a Service object that exposes an external IP address.
|
* Create a Service object that exposes a node port.
|
||||||
* Use the Service object to access the running application.
|
* Use the Service object to access the running application.
|
||||||
|
|
||||||
{% endcapture %}
|
{% endcapture %}
|
||||||
@@ -55,63 +54,68 @@ an application that has two running instances.
|
|||||||
kubectl get deployments hello-world
|
kubectl get deployments hello-world
|
||||||
kubectl describe deployments hello-world
|
kubectl describe deployments hello-world
|
||||||
|
|
||||||
1. Display information about the ReplicaSet:
|
1. Display information about your ReplicaSet objects:
|
||||||
|
|
||||||
kubectl get replicasets hello-world
|
kubectl get replicasets
|
||||||
kubectl describe replicasets hello-world
|
kubectl describe replicasets
|
||||||
|
|
||||||
1. List the pods that are running the Hello World application:
|
|
||||||
|
|
||||||
kubectl get pods --selector="run=load-balancer-example"
|
|
||||||
|
|
||||||
The output is similar to this:
|
|
||||||
|
|
||||||
NAME READY STATUS RESTARTS AGE
|
|
||||||
hello-world-2189936611-8fyp0 1/1 Running 0 6m
|
|
||||||
hello-world-2189936611-9isq8 1/1 Running 0 6m
|
|
||||||
|
|
||||||
1. Create a Service object that exposes the deployment:
|
1. Create a Service object that exposes the deployment:
|
||||||
|
|
||||||
kubectl expose deployment hello-world --type="LoadBalancer" --name="example-service"
|
kubectl expose deployment hello-world --type=NodePort --name=example-service
|
||||||
|
|
||||||
1. Display the IP addresses for your service:
|
1. Display information about the Service:
|
||||||
|
|
||||||
kubectl get services example-service
|
|
||||||
|
|
||||||
The output shows the internal IP address and the external IP address of
|
|
||||||
your service. If the external IP address shows as `<pending>`, repeat the
|
|
||||||
command.
|
|
||||||
|
|
||||||
Note: If you are using Minikube, you don't get an external IP address. The
|
|
||||||
external IP address remains in the pending state.
|
|
||||||
|
|
||||||
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
|
||||||
example-service 10.0.0.160 <pending> 8080/TCP 40s
|
|
||||||
|
|
||||||
1. Use your service to access the Hello World application:
|
|
||||||
|
|
||||||
curl <your-external-ip-address>:8080
|
|
||||||
|
|
||||||
where `<your-external-ip-address>` is the external IP address of your
|
|
||||||
service.
|
|
||||||
|
|
||||||
The output is a hello message from the application:
|
|
||||||
|
|
||||||
Hello Kubernetes!
|
|
||||||
|
|
||||||
Note: If you are using Minikube, enter these commands:
|
|
||||||
|
|
||||||
kubectl cluster-info
|
|
||||||
kubectl describe services example-service
|
kubectl describe services example-service
|
||||||
|
|
||||||
The output displays the IP address of your Minikube node and the NodePort
|
The output is similar to this:
|
||||||
value for your service. Enter this command to access the Hello World
|
|
||||||
application:
|
|
||||||
|
|
||||||
curl <minikube-node-ip-address>:<service-node-port>
|
Name: example-service
|
||||||
|
Namespace: default
|
||||||
|
Labels: run=load-balancer-example
|
||||||
|
Selector: run=load-balancer-example
|
||||||
|
Type: NodePort
|
||||||
|
IP: 10.32.0.16
|
||||||
|
Port: <unset> 8080/TCP
|
||||||
|
NodePort: <unset> 31496/TCP
|
||||||
|
Endpoints: 10.200.1.4:8080,10.200.2.5:8080
|
||||||
|
Session Affinity: None
|
||||||
|
No events.
|
||||||
|
|
||||||
where `<minikube-node-ip-address>` us the IP address of your Minikube node,
|
Make a note of the NodePort value for the service. For example,
|
||||||
and `<service-node-port>` is the NodePort value for your service.
|
in the preceding output, the NodePort value is 31496.
|
||||||
|
|
||||||
|
1. List the pods that are running the Hello World application:
|
||||||
|
|
||||||
|
kubectl get pods --selector="run=load-balancer-example" --output=wide
|
||||||
|
|
||||||
|
The output is similar to this:
|
||||||
|
|
||||||
|
NAME READY STATUS ... IP NODE
|
||||||
|
hello-world-2895499144-bsbk5 1/1 Running ... 10.200.1.4 worker1
|
||||||
|
hello-world-2895499144-m1pwt 1/1 Running ... 10.200.2.5 worker2
|
||||||
|
|
||||||
|
1. Get the public IP address of one of your nodes that is running
|
||||||
|
a Hello World pod. How you get this address depends on how you set
|
||||||
|
up your cluster. For example, if you are using Minikube, you can
|
||||||
|
see the node address by running `kubectl cluster-info`. If you are
|
||||||
|
using Google Compute Engine instances, you can use the
|
||||||
|
`gcloud compute instances list` command to see the public addresses of your
|
||||||
|
nodes.
|
||||||
|
|
||||||
|
1. On your chosen node, create a firewall rule that allows TCP traffic
|
||||||
|
on your node port. For example, if your Service has a NodePort value of
|
||||||
|
31568, create a firewall rule that allows TCP traffic on port 31568.
|
||||||
|
|
||||||
|
1. Use the node address and node port to access the Hello World application:
|
||||||
|
|
||||||
|
curl http://<public-node-ip>:<node-port>
|
||||||
|
|
||||||
|
where `<public-node-ip>` us the public IP address of your node,
|
||||||
|
and `<node-port>` is the NodePort value for your service.
|
||||||
|
|
||||||
|
The response to a successful request is a hello message:
|
||||||
|
|
||||||
|
Hello Kubernetes!
|
||||||
|
|
||||||
### Using a service configuration file
|
### Using a service configuration file
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ a Deployment that runs the nginx:1.7.9 Docker image:
|
|||||||
|
|
||||||
1. Display information about a pod:
|
1. Display information about a pod:
|
||||||
|
|
||||||
kubectl display pod <pod-name>
|
kubectl describe pod <pod-name>
|
||||||
|
|
||||||
where `<pod-name>` is the name of one of your pods.
|
where `<pod-name>` is the name of one of your pods.
|
||||||
|
|
||||||
|
|||||||
@@ -451,7 +451,8 @@ nginx-deployment-2035384211 0 0 1h
|
|||||||
nginx-deployment-3066724191 0 0 1h
|
nginx-deployment-3066724191 0 0 1h
|
||||||
```
|
```
|
||||||
|
|
||||||
Note: A paused Deployment cannot be scaled at this moment, and we will add this feature in 1.3 release, see [issue #20853](https://github.com/kubernetes/kubernetes/issues/20853). You cannot rollback a paused Deployment either, and you should resume a Deployment first before doing a rollback.
|
Note: You cannot rollback a paused Deployment until you resume it.
|
||||||
|
|
||||||
|
|
||||||
## Use Cases
|
## Use Cases
|
||||||
|
|
||||||
|
|||||||
@@ -89,5 +89,5 @@ Pods and containers
|
|||||||
* [Images and registries](/docs/user-guide/images/)
|
* [Images and registries](/docs/user-guide/images/)
|
||||||
* [Migrating from docker-cli to kubectl](/docs/user-guide/docker-cli-to-kubectl/)
|
* [Migrating from docker-cli to kubectl](/docs/user-guide/docker-cli-to-kubectl/)
|
||||||
* [Configuration Best Practices and Tips](/docs/user-guide/config-best-practices/)
|
* [Configuration Best Practices and Tips](/docs/user-guide/config-best-practices/)
|
||||||
* [Assign pods to selected nodes](https://github.com/kubernetes/kubernetes.github.io/tree/{{page.docsbranch}}/docs/user-guide/node-selection/)
|
* [Assign pods to selected nodes](/docs/user-guide/node-selection/)
|
||||||
* [Perform a rolling update on a running group of pods](https://github.com/kubernetes/kubernetes.github.io/tree/{{page.docsbranch}}/docs/user-guide/update-demo/)
|
* [Perform a rolling update on a running group of pods](/docs/user-guide/update-demo/)
|
||||||
|
|||||||
@@ -238,11 +238,11 @@ considering one set of work items that the user wants to manage together —
|
|||||||
There are several different patterns for parallel computation, each with strengths and weaknesses.
|
There are several different patterns for parallel computation, each with strengths and weaknesses.
|
||||||
The tradeoffs are:
|
The tradeoffs are:
|
||||||
|
|
||||||
- One Job object for each work item, vs a single Job object for all work items. The latter is
|
- One Job object for each work item, vs. a single Job object for all work items. The latter is
|
||||||
better for large numbers of work items. The former creates some overhead for the user and for the
|
better for large numbers of work items. The former creates some overhead for the user and for the
|
||||||
system to manage large numbers of Job objects. Also, with the latter, the resource usage of the job
|
system to manage large numbers of Job objects. Also, with the latter, the resource usage of the job
|
||||||
(number of concurrently running pods) can be easily adjusted using the `kubectl scale` command.
|
(number of concurrently running pods) can be easily adjusted using the `kubectl scale` command.
|
||||||
- Number of pods created equals number of work items, vs each pod can process multiple work items.
|
- Number of pods created equals number of work items, vs. each pod can process multiple work items.
|
||||||
The former typically requires less modification to existing code and containers. The latter
|
The former typically requires less modification to existing code and containers. The latter
|
||||||
is better for large numbers of work items, for similar reasons to the previous bullet.
|
is better for large numbers of work items, for similar reasons to the previous bullet.
|
||||||
- Several approaches use a work queue. This requires running a queue service,
|
- Several approaches use a work queue. This requires running a queue service,
|
||||||
|
|||||||
+2
-1
@@ -135,8 +135,9 @@ var kub = (function () {
|
|||||||
// case 'caseStudies':
|
// case 'caseStudies':
|
||||||
bodyHeight = windowHeight;
|
bodyHeight = windowHeight;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'caseStudies':
|
case 'caseStudies':
|
||||||
|
case 'partners':
|
||||||
bodyHeight = windowHeight * 2;
|
bodyHeight = windowHeight * 2;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
---
|
||||||
|
title: Partners
|
||||||
|
---
|
||||||
|
|
||||||
|
<!Doctype html>
|
||||||
|
<html id="partners" class="gridPage">
|
||||||
|
{% include head-header.html %}
|
||||||
|
|
||||||
|
<section id="hero" class="light-text">
|
||||||
|
<h1>Kubernetes Partners</h1>
|
||||||
|
<h5>Growing the Kubernetes ecosystem.</h5>
|
||||||
|
<!--<h5></h5>-->
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="users">
|
||||||
|
<main>
|
||||||
|
<h5>We are working with a broad group of partners who contribute to the Kubernetes core codebase, making it stronger and richer, creating a vibrant Kubernetes ecosystem supporting a spectrum of complementing platforms, from open source solutions to market-leading technologies.</h5>
|
||||||
|
<h3>ISV Partners</h3>
|
||||||
|
<div id="usersGrid">
|
||||||
|
<a target="_blank" href="https://coreos.com/kubernetes"><img src="/images/community_logos/core_os_logo.png"></a>
|
||||||
|
<a target="_blank" href="https://deis.com"><img src="/images/community_logos/deis_logo.png"></a>
|
||||||
|
<a target="_blank" href="https://sysdig.com/blog/monitoring-kubernetes-with-sysdig-cloud"><img src="/images/community_logos/sysdig_cloud_logo.png"></a>
|
||||||
|
<a target="_blank" href="https://puppet.com/blog/managing-kubernetes-configuration-puppet"><img src="/images/community_logos/puppet_logo.png"></a>
|
||||||
|
<a target="_blank" href="https://www.microloadbalancer.com/docs/deploy-netscaler-cpx-kubernetes-environment"><img src="/images/community_logos/citrix_logo.png"></a>
|
||||||
|
<a target="_blank" href="http://wercker.com/workflows/partners/kubernetes/"><img src="/images/community_logos/wercker_logo.png"></a>
|
||||||
|
<a target="_blank" href="http://rancher.com/kubernetes/"><img src="/images/community_logos/rancher_logo.png"></a>
|
||||||
|
<a target="_blank" href="https://www.openshift.com/"><img src="/images/community_logos/red_hat_logo.png"></a>
|
||||||
|
<a target="_blank" href="https://tectonic.com/press/intel-coreos-collaborate-on-openstack-with-kubernetes.html"><img src="/images/community_logos/intel_logo.png"></a>
|
||||||
|
<a target="_blank" href="https://elasticbox.com/kubernetes/"><img src="/images/community_logos/elastickube_logo.png"></a>
|
||||||
|
<a target="_blank" href="https://platform9.com/blog/containers-as-a-service-kubernetes-docker"><img src="/images/community_logos/platform9_logo.png"></a>
|
||||||
|
<a target="_blank" href="http://www.appformix.com/solutions/appformix-for-kubernetes/"><img src="/images/community_logos/appformix_logo.png"></a>
|
||||||
|
<a target="_blank" href="http://kubernetes.io/docs/getting-started-guides/dcos"><img src="/images/community_logos/mesosphere_logo.png"></a>
|
||||||
|
<a target="_blank" href="http://docs.datadoghq.com/integrations/kubernetes/"><img src="/images/community_logos/datadog_logo.png"></a>
|
||||||
|
<a target="_blank" href="https://apprenda.com/kubernetes-support/"><img src="/images/community_logos/apprenda_logo.png"></a>
|
||||||
|
<a target="_blank" href="http://www.ibm.com/cloud-computing/"><img src="/images/community_logos/ibm_logo.png"></a>
|
||||||
|
<a target="_blank" href="http://info.crunchydata.com/blog/advanced-crunchy-containers-for-postgresql"><img src="/images/community_logos/crunchy_data_logo.png"></a>
|
||||||
|
<a target="_blank" href="https://content.mirantis.com/Containerizing-OpenStack-on-Kubernetes-Video-Landing-Page.html"><img src="/images/community_logos/mirantis_logo.png"></a>
|
||||||
|
<a target="_blank" href="http://blog.aquasec.com/security-best-practices-for-kubernetes-deployment"><img src="/images/community_logos/aqua_logo.png"></a>
|
||||||
|
<a target="_blank" href="https://jujucharms.com/canonical-kubernetes/"><img src="/images/community_logos/ubuntu_cannonical_logo.png"></a>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
</section>
|
||||||
|
<style>
|
||||||
|
h5 {
|
||||||
|
font-size: 18px;
|
||||||
|
line-height: 1.5em;
|
||||||
|
margin-bottom: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#usersGrid a {
|
||||||
|
display: inline-block;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
{% include footer.html %}
|
||||||
|
{% include case-study-styles.html %}
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user