diff --git a/_data/tasks.yml b/_data/tasks.yml
index 7c96d4e271..2f0225dbdc 100644
--- a/_data/tasks.yml
+++ b/_data/tasks.yml
@@ -146,6 +146,7 @@ toc:
- title: Install Network Policy Provider
section:
- docs/tasks/administer-cluster/calico-network-policy.md
+ - docs/tasks/administer-cluster/cilium-network-policy.md
- docs/tasks/administer-cluster/romana-network-policy.md
- docs/tasks/administer-cluster/weave-network-policy.md
- docs/tasks/administer-cluster/change-pv-reclaim-policy.md
diff --git a/_data/tutorials.yml b/_data/tutorials.yml
index 479135958e..60462663a6 100644
--- a/_data/tutorials.yml
+++ b/_data/tutorials.yml
@@ -30,10 +30,11 @@ toc:
- docs/tutorials/kubernetes-basics/update-intro.html
- docs/tutorials/kubernetes-basics/update-interactive.html
- title: Online Training Courses
- section: Scalable Microservices with Kubernetes (Udacity)
- path: https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615
- section: Introduction to Kubernetes (edX)
- path: https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x#
+ section:
+ - title: Scalable Microservices with Kubernetes (Udacity)
+ path: https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615
+ - title: Introduction to Kubernetes (edX)
+ path: https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x#
- docs/tutorials/stateless-application/hello-minikube.md
- title: Configuration
section:
diff --git a/cn/README.md b/cn/README.md
index 5e645ff3cc..3bfbba8c77 100644
--- a/cn/README.md
+++ b/cn/README.md
@@ -7,11 +7,11 @@
关于更多的贡献信息,请参阅:
* [贡献于 Kubernetes 文档](http://kubernetes.io/editdocs/)
-* [创建文档拉取请求](http://kubernetes.io/docs/contribute/create-pull-request/)
+* [创建文档拉取请求](http://kubernetes.io/docs/home/contribute/create-pull-request/)
* [写一个新的话题](http://kubernetes.io/docs/contribute/write-new-topic/)
-* [暂停您的文档更改](http://kubernetes.io/docs/contribute/stage-documentation-changes/)
-* [更用页面模板](http://kubernetes.io/docs/contribute/page-templates/)
-* [文档样式指南](http://kubernetes.io/docs/contribute/style-guide/)
+* [暂停您的文档更改](http://kubernetes.io/docs/home/contribute/stage-documentation-changes/)
+* [更用页面模板](http://kubernetes.io/docs/home/contribute/page-templates/)
+* [文档样式指南](http://kubernetes.io/docs/home/contribute/style-guide/)
## 谢谢您!
diff --git a/docs/admin/admission-controllers.md b/docs/admin/admission-controllers.md
index 0a1b0e289d..0597ca0777 100644
--- a/docs/admin/admission-controllers.md
+++ b/docs/admin/admission-controllers.md
@@ -19,7 +19,7 @@ API server prior to persistence of the object, but after the request is authenti
and authorized. The plug-in code is in the API server process
and must be compiled into the binary in order to be used at this time.
-Each admission control plug-in is run in sequence before a request is accepted into the cluster. If
+Each admission control plug-in runs in sequence before a request is accepted into the cluster. If
any of the plug-ins in the sequence reject the request, the entire request is rejected immediately
and an error is returned to the end-user.
diff --git a/docs/admin/authentication.md b/docs/admin/authentication.md
index 1fc47a57e4..2a3e573c9f 100644
--- a/docs/admin/authentication.md
+++ b/docs/admin/authentication.md
@@ -722,23 +722,23 @@ Finally, add the following parameters into API server start parameters:
1. Download, unpack, and initialize the patched version of easyrsa3.
- curl -L -O https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz
- tar xzf easy-rsa.tar.gz
- cd easy-rsa-master/easyrsa3
- ./easyrsa init-pki
+ curl -L -O https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz
+ tar xzf easy-rsa.tar.gz
+ cd easy-rsa-master/easyrsa3
+ ./easyrsa init-pki
1. Generate a CA. (`--batch` set automatic mode. `--req-cn` default CN to use.)
- ./easyrsa --batch "--req-cn=${MASTER_IP}@`date +%s`" build-ca nopass
+ ./easyrsa --batch "--req-cn=${MASTER_IP}@`date +%s`" build-ca nopass
1. Generate server certificate and key.
(build-server-full [filename]: Generate a keypair and sign locally for a client or server)
- ./easyrsa --subject-alt-name="IP:${MASTER_IP}" build-server-full server nopass
+ ./easyrsa --subject-alt-name="IP:${MASTER_IP}" build-server-full server nopass
1. Copy `pki/ca.crt`, `pki/issued/server.crt`, and `pki/private/server.key` to your directory.
1. Fill in and add the following parameters into the API server start parameters:
- --client-ca-file=/yourdirectory/ca.crt
- --tls-cert-file=/yourdirectory/server.crt
- --tls-private-key-file=/yourdirectory/server.key
+ --client-ca-file=/yourdirectory/ca.crt
+ --tls-cert-file=/yourdirectory/server.crt
+ --tls-private-key-file=/yourdirectory/server.key
#### openssl
@@ -746,22 +746,22 @@ Finally, add the following parameters into API server start parameters:
1. Generate a ca.key with 2048bit:
- openssl genrsa -out ca.key 2048
+ openssl genrsa -out ca.key 2048
1. According to the ca.key generate a ca.crt (use -days to set the certificate effective time):
- openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt
+ openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt
1. Generate a server.key with 2048bit
- openssl genrsa -out server.key 2048
+ openssl genrsa -out server.key 2048
1. According to the server.key generate a server.csr:
- openssl req -new -key server.key -subj "/CN=${MASTER_IP}" -out server.csr
+ openssl req -new -key server.key -subj "/CN=${MASTER_IP}" -out server.csr
1. According to the ca.key, ca.crt and server.csr generate the server.crt:
- openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 10000
+ openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 10000
1. View the certificate.
- openssl x509 -noout -text -in ./server.crt
+ openssl x509 -noout -text -in ./server.crt
Finally, do not forget to fill out and add the same parameters into the API server start parameters.
diff --git a/docs/admin/authorization/rbac.md b/docs/admin/authorization/rbac.md
index c60e6433f9..b6199618eb 100644
--- a/docs/admin/authorization/rbac.md
+++ b/docs/admin/authorization/rbac.md
@@ -648,7 +648,7 @@ Grants a `ClusterRole` across the entire cluster, including all namespaces. Exam
`kubectl create clusterrolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp`
-See the CLI help for detailed usage
+See the CLI help for detailed usage.
## Service Account Permissions
@@ -692,6 +692,7 @@ In order from most secure to least secure, the approaches are:
Many [add-ons](/docs/concepts/cluster-administration/addons/) currently run as the "default" service account in the "kube-system" namespace.
To allow those add-ons to run with super-user access, grant cluster-admin permissions to the "default" service account in the "kube-system" namespace.
+
NOTE: Enabling this means the "kube-system" namespace contains secrets that grant super-user access to the API.
```shell
diff --git a/docs/admin/high-availability/etcd.yaml b/docs/admin/high-availability/etcd.yaml
index fc9fe67e75..8bcf52b159 100644
--- a/docs/admin/high-availability/etcd.yaml
+++ b/docs/admin/high-availability/etcd.yaml
@@ -5,7 +5,7 @@ metadata:
spec:
hostNetwork: true
containers:
- - image: gcr.io/google_containers/etcd:2.0.9
+ - image: gcr.io/google_containers/etcd:3.0.17
name: etcd-container
command:
- /usr/local/bin/etcd
diff --git a/docs/admin/high-availability/index.md b/docs/admin/high-availability/index.md
index 5bff42541a..298598d851 100644
--- a/docs/admin/high-availability/index.md
+++ b/docs/admin/high-availability/index.md
@@ -99,6 +99,7 @@ for `${NODE_IP}` on each machine.
#### Validating your cluster
Once you copy this into all three nodes, you should have a clustered etcd set up. You can validate on master with
+
```shell
kubectl exec < pod_name > etcdctl member list
```
@@ -114,8 +115,8 @@ on a different node.
### Even more reliable storage
-Of course, if you are interested in increased data reliability, there are further options which makes the place where etcd
-installs it's data even more reliable than regular disks (belts *and* suspenders, ftw!).
+Of course, if you are interested in increased data reliability, there are further options which make the place where etcd
+installs its data even more reliable than regular disks (belts *and* suspenders, ftw!).
If you use a cloud provider, then they usually provide this
for you, for example [Persistent Disk](https://cloud.google.com/compute/docs/disks/persistent-disks) on the Google Cloud Platform. These
@@ -126,7 +127,7 @@ Alternatively, you can run a clustered file system like Gluster or Ceph. Finall
Regardless of how you choose to implement it, if you chose to use one of these options, you should make sure that your storage is mounted
to each machine. If your storage is shared between the three masters in your cluster, you should create a different directory on the storage
-for each node. Throughout these instructions, we assume that this storage is mounted to your machine in `/var/etcd/data`
+for each node. Throughout these instructions, we assume that this storage is mounted to your machine in `/var/etcd/data`.
## Replicated API Servers
@@ -164,7 +165,7 @@ in the file.
At this point, you should have 3 apiservers all working correctly. If you set up a network load balancer, you should
be able to access your cluster via that load balancer, and see traffic balancing between the apiserver instances. Setting
up a load balancer will depend on the specifics of your platform, for example instructions for the Google Cloud
-Platform can be found [here](https://cloud.google.com/compute/docs/load-balancing/)
+Platform can be found [here](https://cloud.google.com/compute/docs/load-balancing/).
Note, if you are using authentication, you may need to regenerate your certificate to include the IP address of the balancer,
in addition to the IP addresses of the individual nodes.
@@ -194,8 +195,7 @@ touch /var/log/kube-scheduler.log
touch /var/log/kube-controller-manager.log
```
-Next, set up the descriptions of the scheduler and controller manager pods on each node.
-by copying [kube-scheduler.yaml](/docs/admin/high-availability/kube-scheduler.yaml) and [kube-controller-manager.yaml](/docs/admin/high-availability/kube-controller-manager.yaml) into the `/etc/kubernetes/manifests/` directory.
+Next, set up the descriptions of the scheduler and controller manager pods on each node by copying [kube-scheduler.yaml](/docs/admin/high-availability/kube-scheduler.yaml) and [kube-controller-manager.yaml](/docs/admin/high-availability/kube-controller-manager.yaml) into the `/etc/kubernetes/manifests/` directory.
## Conclusion
diff --git a/docs/admin/kubeadm.md b/docs/admin/kubeadm.md
index c4f0d5a5cd..7b617e60b9 100644
--- a/docs/admin/kubeadm.md
+++ b/docs/admin/kubeadm.md
@@ -54,7 +54,7 @@ steps:
is used to authenticate. The control plane will sign this CSR requested
automatically.
-1. kubeadm configures the local kubelet to connect to the API server
+1. kubeadm configures the local kubelet to connect to the API server.
## Usage
@@ -211,7 +211,7 @@ set up the Kubernetes master to automatically approve these signing requests.
This token is passed in with the `--tls-bootstrap-token abcdef.1234567890abcdef`
flag.
-Often times the same token is use for both parts. In this case, the `--token` flag
+Often times the same token is used for both parts. In this case, the `--token` flag
can be used instead of specifying the each token individually.
Here's an example on how to use it:
diff --git a/docs/admin/kubefed_init.md b/docs/admin/kubefed_init.md
index 8910568b5c..656cdde6ee 100644
--- a/docs/admin/kubefed_init.md
+++ b/docs/admin/kubefed_init.md
@@ -5,7 +5,7 @@ Initialize a federation control plane
### Synopsis
-Init initializes a federation control plane.
+Initialize a federation control plane.
Federation control plane is hosted inside a Kubernetes
cluster. The host cluster must be specified using the
diff --git a/docs/admin/kubelet.md b/docs/admin/kubelet.md
index d4cff05478..cc762ed62b 100644
--- a/docs/admin/kubelet.md
+++ b/docs/admin/kubelet.md
@@ -70,7 +70,7 @@ kubelet
--enable-custom-metrics Support for gathering custom metrics.
--enable-debugging-handlers Enables server endpoints for log collection and local running of containers and commands (default true)
--enable-server Enable the Kubelet's server (default true)
- --enforce-node-allocatable stringSlice A comma separated list of levels of node allocatable enforcement to be enforced by kubelet. Acceptible options are 'pods', 'system-reserved' & 'kube-reserved'. If the latter two options are specified, '--system-reserved-cgroup' & '--kube-reserved-cgroup' must also be set respectively. See https://git.k8s.io/community/contributors/design-proposals/node-allocatable.md for more details. (default [pods])
+ --enforce-node-allocatable stringSlice A comma separated list of levels of node allocatable enforcement to be enforced by kubelet. Acceptable options are 'pods', 'system-reserved' & 'kube-reserved'. If the latter two options are specified, '--system-reserved-cgroup' & '--kube-reserved-cgroup' must also be set respectively. See https://git.k8s.io/community/contributors/design-proposals/node-allocatable.md for more details. (default [pods])
--event-burst int32 Maximum size of a bursty event records, temporarily allows event records to burst to this number, while still not exceeding event-qps. Only used if --event-qps > 0 (default 10)
--event-qps int32 If > 0, limit event creations per second to this value. If 0, unlimited. (default 5)
--eviction-hard string A set of eviction thresholds (e.g. memory.available<1Gi) that if met would trigger a pod eviction. (default "memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%")
diff --git a/docs/admin/service-accounts-admin.md b/docs/admin/service-accounts-admin.md
index 275d5b5c71..0f01e29ca1 100644
--- a/docs/admin/service-accounts-admin.md
+++ b/docs/admin/service-accounts-admin.md
@@ -15,7 +15,7 @@ incomplete features are referred to in order to better describe service accounts
## User accounts vs service accounts
-Kubernetes distinguished between the concept of a user account and a service accounts
+Kubernetes distinguishes between the concept of a user account and a service account
for a number of reasons:
- User accounts are for humans. Service accounts are for processes, which
@@ -60,9 +60,9 @@ It acts synchronously to modify pods as they are created or updated. When this p
TokenController runs as part of controller-manager. It acts asynchronously. It:
- observes serviceAccount creation and creates a corresponding Secret to allow API access.
-- observes serviceAccount deletion and deletes all corresponding ServiceAccountToken Secrets
-- observes secret addition, and ensures the referenced ServiceAccount exists, and adds a token to the secret if needed
-- observes secret deletion and removes a reference from the corresponding ServiceAccount if needed
+- observes serviceAccount deletion and deletes all corresponding ServiceAccountToken Secrets.
+- observes secret addition, and ensures the referenced ServiceAccount exists, and adds a token to the secret if needed.
+- observes secret deletion and removes a reference from the corresponding ServiceAccount if needed.
You must pass a service account private key file to the token controller in the controller-manager by using
the `--service-account-private-key-file` option. The private key will be used to sign generated service account tokens.
diff --git a/docs/api-reference/v1.5/README.md b/docs/api-reference/v1.5/README.md
index f6799c18b9..4bee5de31a 100644
--- a/docs/api-reference/v1.5/README.md
+++ b/docs/api-reference/v1.5/README.md
@@ -6,7 +6,7 @@ Static compilation of html from markdown including processing for grouping code
\> bdocs-tab:kubectl Deployment Config to run 3 nginx instances (max rollback set to 10 revisions).
-bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the prefered tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
+bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the preferred tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
\`\`\`bdocs-tab:kubectl_yaml
apiVersion: extensions/v1beta1
diff --git a/docs/api-reference/v1.5/index.html b/docs/api-reference/v1.5/index.html
index 6f3a30ca19..71b333af82 100644
--- a/docs/api-reference/v1.5/index.html
+++ b/docs/api-reference/v1.5/index.html
@@ -17957,10 +17957,10 @@ Appears In Ingress
name: service-example
spec:
ports:
-
- - name: http
- port: 80
- targetPort: 80
+
+ - name: http
+ port: 80
+ targetPort: 80
selector:
@@ -17981,10 +17981,10 @@ Appears In Ingress
name: service-example
spec:
ports:
-
- - name: http
- port: 80
- targetPort: 80
+
+ - name: http
+ port: 80
+ targetPort: 80
selector:
@@ -18156,11 +18156,11 @@ metadata:
name: service-example
spec:
ports:
- - name: http
- port: 80
- targetPort: 80
+ - name: http
+ port: 80
+ targetPort: 80
selector:
- app: nginx
+ app: nginx
type: LoadBalancer
' | kubectl create -f -
@@ -18176,11 +18176,11 @@ metadata:
name: service-example
spec:
ports:
- - name: http
- port: 80
- targetPort: 80
+ - name: http
+ port: 80
+ targetPort: 80
selector:
- app: nginx
+ app: nginx
type: LoadBalancer
' http://127.0.0.1:8001/api/v1/namespaces/default/services
diff --git a/docs/api-reference/v1.6/index.html b/docs/api-reference/v1.6/index.html
index 130acf039a..7e64251ea9 100644
--- a/docs/api-reference/v1.6/index.html
+++ b/docs/api-reference/v1.6/index.html
@@ -17849,10 +17849,10 @@ Appears In Ingress
name: service-example
spec:
ports:
-
- - name: http
- port: 80
- targetPort: 80
+
+ - name: http
+ port: 80
+ targetPort: 80
selector:
@@ -17873,10 +17873,10 @@ Appears In Ingress
name: service-example
spec:
ports:
-
- - name: http
- port: 80
- targetPort: 80
+
+ - name: http
+ port: 80
+ targetPort: 80
selector:
@@ -18048,11 +18048,11 @@ metadata:
name: service-example
spec:
ports:
- - name: http
- port: 80
- targetPort: 80
+ - name: http
+ port: 80
+ targetPort: 80
selector:
- app: nginx
+ app: nginx
type: LoadBalancer
' | kubectl create -f -
@@ -18068,11 +18068,11 @@ metadata:
name: service-example
spec:
ports:
- - name: http
- port: 80
- targetPort: 80
+ - name: http
+ port: 80
+ targetPort: 80
selector:
- app: nginx
+ app: nginx
type: LoadBalancer
' http://127.0.0.1:8001/api/v1/namespaces/default/services
diff --git a/docs/api-reference/v1.7/README.md b/docs/api-reference/v1.7/README.md
index f6799c18b9..e8c00fe78d 100644
--- a/docs/api-reference/v1.7/README.md
+++ b/docs/api-reference/v1.7/README.md
@@ -6,7 +6,7 @@ Static compilation of html from markdown including processing for grouping code
\> bdocs-tab:kubectl Deployment Config to run 3 nginx instances (max rollback set to 10 revisions).
-bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the prefered tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
+bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the preferred tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
\`\`\`bdocs-tab:kubectl_yaml
apiVersion: extensions/v1beta1
@@ -66,4 +66,4 @@ Apache License Version 2.0
## FAQ
Q: Why is it named brodocs?
-A: This project was born out of a collaboration with my brother to create a suitable docs app for his purposes. It was a fun name for the the two of us to use as actual brothers.
\ No newline at end of file
+A: This project was born out of a collaboration with my brother to create a suitable docs app for his purposes. It was a fun name for the the two of us to use as actual brothers.
diff --git a/docs/api-reference/v1.7/index.html b/docs/api-reference/v1.7/index.html
index 0b82fe44fe..4f7606ea40 100644
--- a/docs/api-reference/v1.7/index.html
+++ b/docs/api-reference/v1.7/index.html
@@ -8018,7 +8018,7 @@ Appears In:
qosClass string |
-The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://github.com/kubernetes/kubernetes/blob/master/docs/design/resource-qos.md |
+The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/resource-qos.md |
reason string |
@@ -17914,10 +17914,10 @@ metadata:
name: service-example
spec:
ports:
- # Accept traffic sent to port 80
- - name: http
- port: 80
- targetPort: 80
+ # Accept traffic sent to port 80
+ - name: http
+ port: 80
+ targetPort: 80
selector:
# Loadbalance traffic across Pods matching
# this label selector
@@ -17938,10 +17938,10 @@ metadata:
name: service-example
spec:
ports:
- # Accept traffic sent to port 80
- - name: http
- port: 80
- targetPort: 80
+ # Accept traffic sent to port 80
+ - name: http
+ port: 80
+ targetPort: 80
selector:
# Loadbalance traffic across Pods matching
# this label selector
@@ -18129,11 +18129,11 @@ $ echo 'kind: Service
name: service-example
spec:
ports:
- - name: http
- port: 80
- targetPort: 80
+ - name: http
+ port: 80
+ targetPort: 80
selector:
- app: nginx
+ app: nginx
type: LoadBalancer
' | kubectl create -f -
@@ -18149,11 +18149,11 @@ metadata:
name: service-example
spec:
ports:
- - name: http
- port: 80
- targetPort: 80
+ - name: http
+ port: 80
+ targetPort: 80
selector:
- app: nginx
+ app: nginx
type: LoadBalancer
' http://127.0.0.1:8001/api/v1/namespaces/default/services
diff --git a/docs/api-reference/v1.7/node_modules/jquery.scrollto/CHANGELOG.md b/docs/api-reference/v1.7/node_modules/jquery.scrollto/CHANGELOG.md
index 874087615c..cdec0977f3 100644
--- a/docs/api-reference/v1.7/node_modules/jquery.scrollto/CHANGELOG.md
+++ b/docs/api-reference/v1.7/node_modules/jquery.scrollto/CHANGELOG.md
@@ -111,7 +111,7 @@
- In addition to window/document, if html or body are received, the plugin will choose the right one.
### Fix
- The plugin accepts floating numbers, Thanks Ramin
-- Using jQuery.nodeName where neccessary so that this works on xml+xhtml
+- Using jQuery.nodeName where necessary so that this works on xml+xhtml
- The max() internal function wasn't completely accurrate, now it is 98% (except for IE on quirks mode and it's not too noticeable).
## 1.4
@@ -183,4 +183,4 @@
- Two axes can be scrolled together, this is set with the option 'axis'.
- In case 2 axes are chosen, the scrolling can be queued: one scrolls, and then the other.
- There's an intermediary event, 'onAfterFirst' called in case the axes are queued, after the first ends.
-- If the option 'margin' is set to true, the plugin will take in account, the margin of the target(no use if target is a value).
\ No newline at end of file
+- If the option 'margin' is set to true, the plugin will take in account, the margin of the target(no use if target is a value).
diff --git a/docs/api-reference/v1.7/node_modules/marked/README.md b/docs/api-reference/v1.7/node_modules/marked/README.md
index efa71aaaab..bb4b3a9652 100644
--- a/docs/api-reference/v1.7/node_modules/marked/README.md
+++ b/docs/api-reference/v1.7/node_modules/marked/README.md
@@ -297,7 +297,7 @@ $ cat hello.html
The point of marked was to create a markdown compiler where it was possible to
frequently parse huge chunks of markdown without having to worry about
-caching the compiled output somehow...or blocking for an unnecesarily long time.
+caching the compiled output somehow...or blocking for an unnecessarily long time.
marked is very concise and still implements all markdown features. It is also
now fully compatible with the client-side.
diff --git a/docs/concepts/architecture/master-node-communication.md b/docs/concepts/architecture/master-node-communication.md
index 1d78c5f920..1152beb383 100644
--- a/docs/concepts/architecture/master-node-communication.md
+++ b/docs/concepts/architecture/master-node-communication.md
@@ -64,12 +64,13 @@ or service through the apiserver's proxy functionality.
### apiserver -> kubelet
-The connections from the apiserver to the kubelet are used for fetching logs
-for pods, attaching (through kubectl) to running pods, and using the kubelet's
-port-forwarding functionality. These connections terminate at the kubelet's
-HTTPS endpoint.
+The connections from the apiserver to the kubelet are used for:
+ * Fetching logs for pods.
+ * Attaching (through kubectl) to running pods.
+ * Providing the kubelet's port-forwarding functionality.
-By default, the apiserver does not verify the kubelet's serving certificate,
+These connections terminate at the kubelet's HTTPS endpoint. By default,
+the apiserver does not verify the kubelet's serving certificate,
which makes the connection subject to man-in-the-middle attacks, and
**unsafe** to run over untrusted and/or public networks.
diff --git a/docs/concepts/cluster-administration/cluster-administration-overview.md b/docs/concepts/cluster-administration/cluster-administration-overview.md
index 968aeb52f5..9f6a9018c0 100644
--- a/docs/concepts/cluster-administration/cluster-administration-overview.md
+++ b/docs/concepts/cluster-administration/cluster-administration-overview.md
@@ -28,7 +28,7 @@ Before choosing a guide, here are some considerations:
offer a greater variety of choices.
- Familiarize yourself with the [components](/docs/admin/cluster-components) needed to run a cluster.
-Note: Not all distros are actively maintained. Choose distros which have been tested a recent version of Kubernetes.
+Note: Not all distros are actively maintained. Choose distros which have been tested with a recent version of Kubernetes.
If you are using a guide involving Salt, see [Configuring Kubernetes with Salt](/docs/admin/salt).
diff --git a/docs/concepts/cluster-administration/federation.md b/docs/concepts/cluster-administration/federation.md
index 8d6ddaf61d..97569451d6 100644
--- a/docs/concepts/cluster-administration/federation.md
+++ b/docs/concepts/cluster-administration/federation.md
@@ -133,7 +133,7 @@ It is okay to have multiple clusters per availability zone, though on balance we
Reasons to prefer fewer clusters are:
- improved bin packing of Pods in some cases with more nodes in one cluster (less resource fragmentation).
- - reduced operational overhead (though the advantage is diminished as ops tooling and processes matures).
+ - reduced operational overhead (though the advantage is diminished as ops tooling and processes mature).
- reduced costs for per-cluster fixed resource costs, e.g. apiserver VMs (but small as a percentage
of overall cluster cost for medium to large clusters).
diff --git a/docs/concepts/cluster-administration/networking.md b/docs/concepts/cluster-administration/networking.md
index 8c41139c44..99b2106829 100644
--- a/docs/concepts/cluster-administration/networking.md
+++ b/docs/concepts/cluster-administration/networking.md
@@ -168,6 +168,10 @@ sysctl net.ipv4.ip_forward=1
The result of all this is that all `Pods` can reach each other and can egress
traffic to the internet.
+### Kube-router
+
+[Kube-router](https://github.com/cloudnativelabs/kube-router) is a purpose-built networking solution for Kubernetes that aims to provide high performance and operational simplicity. Kube-router provides a Linux [LVS/IPVS](http://www.linuxvirtualserver.org/software/ipvs.html)-based service proxy, a Linux kernel forwarding-based pod-to-pod networking solution with no overlays, and iptables/ipset-based network policy enforcer.
+
### L2 networks and linux bridging
If you have a "dumb" L2 network, such as a simple switch in a "bare-metal"
diff --git a/docs/concepts/configuration/assign-pod-node.md b/docs/concepts/configuration/assign-pod-node.md
index d03d5ef811..12331bacfe 100644
--- a/docs/concepts/configuration/assign-pod-node.md
+++ b/docs/concepts/configuration/assign-pod-node.md
@@ -338,7 +338,7 @@ tolerations:
effect: "NoSchedule"
```
-A toleration "matches" a taint if the `key`s are the same and the `effect`s are the same, and:
+A toleration "matches" a taint if the keys are the same and the effects are the same, and:
* the `operator` is `Exists` (in which case no `value` should be specified), or
* the `operator` is `Equal` and the `value`s are equal
diff --git a/docs/concepts/configuration/manage-compute-resources-container.md b/docs/concepts/configuration/manage-compute-resources-container.md
index b9077f63f4..e747e42642 100644
--- a/docs/concepts/configuration/manage-compute-resources-container.md
+++ b/docs/concepts/configuration/manage-compute-resources-container.md
@@ -79,7 +79,7 @@ Mi, Ki. For example, the following represent roughly the same value:
Here's an example.
The following Pod has two Containers. Each Container has a request of 0.25 cpu
-and 64MiB (226 bytes) of memory Each Container has a limit of 0.5
+and 64MiB (226 bytes) of memory. Each Container has a limit of 0.5
cpu and 128MiB of memory. You can say the Pod has a request of 0.5 cpu and 128
MiB of memory, and a limit of 1 cpu and 256MiB of memory.
diff --git a/docs/concepts/overview/components.md b/docs/concepts/overview/components.md
index 09f9f1ce9d..8aa9691437 100644
--- a/docs/concepts/overview/components.md
+++ b/docs/concepts/overview/components.md
@@ -123,7 +123,7 @@ rkt is supported experimentally for running containers as an alternative to dock
### supervisord
-supervisord is a lightweight process monitoring and control system that can be used to keep kubelet and docker
+supervisord is a lightweight process monitor and control system that can be used to keep kubelet and docker
running.
### fluentd
diff --git a/docs/concepts/overview/kubernetes-api.md b/docs/concepts/overview/kubernetes-api.md
index a3218d8db7..b24aef8824 100644
--- a/docs/concepts/overview/kubernetes-api.md
+++ b/docs/concepts/overview/kubernetes-api.md
@@ -26,9 +26,9 @@ What constitutes a compatible change and how to change the API are detailed by t
Complete API details are documented using [Swagger v1.2](http://swagger.io/) and [OpenAPI](https://www.openapis.org/). The Kubernetes apiserver (aka "master") exposes an API that can be used to retrieve the Swagger v1.2 Kubernetes API spec located at `/swaggerapi`. You can also enable a UI to browse the API documentation at `/swagger-ui` by passing the `--enable-swagger-ui=true` flag to apiserver.
-Starting with kubernetes 1.4, OpenAPI spec is also available at [`/swagger.json`](https://git.k8s.io/kubernetes/api/openapi-spec/swagger.json). While we are transitioning from Swagger v1.2 to OpenAPI (aka Swagger v2.0), some of the tools such as kubectl and swagger-ui are still using v1.2 spec. OpenAPI spec is in Beta as of Kubernetes 1.5.
+Starting with Kubernetes 1.4, OpenAPI spec is also available at [`/swagger.json`](https://git.k8s.io/kubernetes/api/openapi-spec/swagger.json). While we are transitioning from Swagger v1.2 to OpenAPI (aka Swagger v2.0), some of the tools such as kubectl and swagger-ui are still using v1.2 spec. OpenAPI spec is in Beta as of Kubernetes 1.5.
-Kubernetes implements an alternative Protobuf based serialization format for the API that is primarily intended for intra-cluster communication, documented in the [design proposal](https://github.com/kubernetes/kubernetes/blob/{{ page.githubbranch }}/docs/proposals/protobuf.md) and the IDL files for each schema are located in the Go packages that define the API objects.
+Kubernetes implements an alternative Protobuf based serialization format for the API that is primarily intended for intra-cluster communication, documented in the [design proposal](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/protobuf.md) and the IDL files for each schema are located in the Go packages that define the API objects.
## API versioning
diff --git a/docs/concepts/policy/resource-quotas.md b/docs/concepts/policy/resource-quotas.md
index c1037784a4..423b0aa40f 100644
--- a/docs/concepts/policy/resource-quotas.md
+++ b/docs/concepts/policy/resource-quotas.md
@@ -26,7 +26,7 @@ Resource quotas work like this:
- If quota is enabled in a namespace for compute resources like `cpu` and `memory`, users must specify
requests or limits for those values; otherwise, the quota system may reject pod creation. Hint: Use
the LimitRange admission controller to force defaults for pods that make no compute resource requirements.
- See the [walkthrough](/docs/tasks/configure-pod-container/apply-resource-quota-limit/) for an example to avoid this problem.
+ See the [walkthrough](/docs/tasks/administer-cluster/quota-memory-cpu-namespace/) for an example to avoid this problem.
Examples of policies that could be created using namespaces and quotas are:
diff --git a/docs/concepts/services-networking/dns-pod-service.md b/docs/concepts/services-networking/dns-pod-service.md
index 6a95bbf93a..7f024f523a 100644
--- a/docs/concepts/services-networking/dns-pod-service.md
+++ b/docs/concepts/services-networking/dns-pod-service.md
@@ -101,9 +101,9 @@ spec:
name: busybox
clusterIP: None
ports:
- - name: foo # Actually, no port is needed.
- port: 1234
- targetPort: 1234
+ - name: foo # Actually, no port is needed.
+ port: 1234
+ targetPort: 1234
---
apiVersion: v1
kind: Pod
@@ -139,7 +139,7 @@ spec:
```
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 "busybox-1" and the subdomain set to "default-subdomain", and a headless Service named "default-subdomain" in the same namespace, the pod will see it's own FQDN as "busybox-1.default-subdomain.my-namespace.svc.cluster.local". DNS serves an A record at that name, pointing to the Pod's IP. Both pods "busybox1" and "busybox2" can have their distinct A records.
+Given a Pod with the hostname set to "busybox-1" and the subdomain set to "default-subdomain", and a headless Service named "default-subdomain" in the same namespace, the pod will see its own FQDN as "busybox-1.default-subdomain.my-namespace.svc.cluster.local". DNS serves an A record at that name, pointing to the Pod's IP. Both pods "busybox1" and "busybox2" can have their distinct A records.
As of Kubernetes v1.2, the Endpoints object also has the 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 ...svc.
@@ -149,7 +149,7 @@ This endpoints annotation generally does not need to be specified by end-users,
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`
+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?
@@ -370,7 +370,7 @@ 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=`
+the flag `--cluster-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).
diff --git a/docs/concepts/services-networking/service.md b/docs/concepts/services-networking/service.md
index 54007a67e5..c566b42047 100644
--- a/docs/concepts/services-networking/service.md
+++ b/docs/concepts/services-networking/service.md
@@ -52,9 +52,9 @@ spec:
selector:
app: MyApp
ports:
- - protocol: TCP
- port: 80
- targetPort: 9376
+ - protocol: TCP
+ port: 80
+ targetPort: 9376
```
This specification will create a new `Service` object named "my-service" which
@@ -97,9 +97,9 @@ metadata:
name: my-service
spec:
ports:
- - protocol: TCP
- port: 80
- targetPort: 9376
+ - protocol: TCP
+ port: 80
+ targetPort: 9376
```
Because this service has no selector, the corresponding `Endpoints` object will not be
@@ -216,17 +216,17 @@ apiVersion: v1
metadata:
name: my-service
spec:
- selector:
- app: MyApp
- ports:
- - name: http
- protocol: TCP
- port: 80
- targetPort: 9376
- - name: https
- protocol: TCP
- port: 443
- targetPort: 9377
+ selector:
+ app: MyApp
+ ports:
+ - name: http
+ protocol: TCP
+ port: 80
+ targetPort: 9376
+ - name: https
+ protocol: TCP
+ port: 443
+ targetPort: 9377
```
## Choosing your own IP address
@@ -404,17 +404,17 @@ spec:
selector:
app: MyApp
ports:
- - protocol: TCP
- port: 80
- targetPort: 9376
- nodePort: 30061
+ - protocol: TCP
+ port: 80
+ targetPort: 9376
+ nodePort: 30061
clusterIP: 10.0.171.239
loadBalancerIP: 78.11.24.19
type: LoadBalancer
status:
loadBalancer:
ingress:
- - ip: 146.148.47.155
+ - ip: 146.148.47.155
```
Traffic from the external load balancer will be directed at the backend `Pods`,
@@ -531,12 +531,12 @@ spec:
selector:
app: MyApp
ports:
- - name: http
- protocol: TCP
- port: 80
- targetPort: 9376
+ - name: http
+ protocol: TCP
+ port: 80
+ targetPort: 9376
externalIPs:
- - 80.11.12.10
+ - 80.11.12.10
```
## Shortcomings
diff --git a/docs/concepts/storage/persistent-volumes.md b/docs/concepts/storage/persistent-volumes.md
index 3e2cbf248c..3a4f6d4db1 100644
--- a/docs/concepts/storage/persistent-volumes.md
+++ b/docs/concepts/storage/persistent-volumes.md
@@ -695,6 +695,8 @@ parameters:
#### Azure Disk
+##### Azure Unmanaged Disk Storage Class
+
```yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
@@ -709,7 +711,26 @@ parameters:
* `skuName`: Azure storage account Sku tier. Default is empty.
* `location`: Azure storage account location. Default is empty.
-* `storageAccount`: Azure storage account name. If storage account is not provided, all storage accounts associated with the resource group are searched to find one that matches `skuName` and `location`. If storage account is provided, it must reside in the same resource group as the cluster, and `skuName` and `location` are ignored.
+* `storageAccount`: Azure storage account name. If a storage account is provided, it must reside in the same resource group as the cluster, and `location` is ignored. If a storage account is not provided, a new storage account will be created in the same resource group as the cluster.
+
+##### New Azure Disk Storage Class (starting from v1.7.2)
+
+```yaml
+kind: StorageClass
+apiVersion: storage.k8s.io/v1
+metadata:
+ name: slow
+provisioner: kubernetes.io/azure-disk
+parameters:
+ storageaccounttype: Standard_LRS
+ kind: Shared
+```
+
+* `storageaccounttype`: Azure storage account Sku tier. Default is empty.
+* `kind`: Possible values are `shared` (default), `dedicated`, and `managed`. When `kind` is `shared`, all unmanaged disks are created in a few shared storage accounts in the same resource group as the cluster. When `kind` is `dedicated`, a new dedicated storage account will be created for the new unmanaged disk in the same resource group as the cluster.
+
+- Premium VM can attach both Standard_LRS and Premium_LRS disks, while Standard VM can only attach Standard_LRS disks.
+- Managed VM can only attach managed disks and unmanaged VM can only attach unmanaged disks.
#### Azure File
@@ -727,10 +748,9 @@ parameters:
* `skuName`: Azure storage account Sku tier. Default is empty.
* `location`: Azure storage account location. Default is empty.
-* `storageAccount`: Azure storage account name. Default is empty.
-If storage account is not provided, all storage accounts associated with the resource group are searched to find one that matches `skuName` and `location`. If storage account is provided, it must reside in the same resource group as the cluster, and `skuName` and `location` are ignored.
+* `storageAccount`: Azure storage account name. Default is empty. If a storage account is not provided, all storage accounts associated with the resource group are searched to find one that matches `skuName` and `location`. If a storage account is provided, it must reside in the same resource group as the cluster, and `skuName` and `location` are ignored.
-During provision, a secret will be created for mounting credentials. If the cluster has enabled both [RBAC](/docs/admin/authorization/rbac/) and [Controller Roles](/docs/admin/authorization/rbac/#controller-roles), you will first need to add `create` permission of resource `secret` for clusterrole `system:controller:persistent-volume-binder`.
+During provision, a secret is created for mounting credentials. If the cluster has enabled both [RBAC](/docs/admin/authorization/rbac/) and [Controller Roles](/docs/admin/authorization/rbac/#controller-roles), add the `create` permission of resource `secret` for clusterrole `system:controller:persistent-volume-binder`.
#### Portworx Volume
diff --git a/docs/concepts/workloads/controllers/daemonset.md b/docs/concepts/workloads/controllers/daemonset.md
index 3e06d892c6..54e85d28aa 100644
--- a/docs/concepts/workloads/controllers/daemonset.md
+++ b/docs/concepts/workloads/controllers/daemonset.md
@@ -98,9 +98,20 @@ when the pod is created, so it is ignored by the scheduler). Therefore:
- DaemonSet controller can make pods even when the scheduler has not been started, which can help cluster
bootstrap.
-Daemon pods do respect [taints and tolerations](/docs/concepts/configuration/assign-pod-node/#taints-and-tolerations-beta-feature), but they are
-created with `NoExecute` tolerations for the `node.alpha.kubernetes.io/notReady` and `node.alpha.kubernetes.io/unreachable`
-taints with no `tolerationSeconds`. This ensures that when the `TaintBasedEvictions` alpha feature is enabled,
+Daemon pods do respect [taints and tolerations](/docs/concepts/configuration/assign-pod-node/#taints-and-tolerations-beta-feature),
+but they are created with `NoExecute` tolerations for the following taints with no `tolerationSeconds`:
+
+ - `node.alpha.kubernetes.io/notReady`
+ - `node.alpha.kubernetes.io/unreachable`
+ - `node.alpha.kubernetes.io/memoryPressure`
+ - `node.alpha.kubernetes.io/diskPressure`
+
+When the support to critical pods is enabled and the pods in a DaemonSet are
+labelled as critical, the Daemon pods are created with an additional
+`NoExecute` toleration for the `node.alpha.kubernetes.io/outOfDisk` taint with
+no `tolerationSeconds`.
+
+This ensures that when the `TaintBasedEvictions` alpha feature is enabled,
they will not be evicted when there are node problems such as a network partition. (When the
`TaintBasedEvictions` feature is not enabled, they are also not evicted in these scenarios, but
due to hard-coded behavior of the NodeController rather than due to tolerations).
diff --git a/docs/concepts/workloads/controllers/deployment.md b/docs/concepts/workloads/controllers/deployment.md
index 2be6f86a01..f70b21b96c 100644
--- a/docs/concepts/workloads/controllers/deployment.md
+++ b/docs/concepts/workloads/controllers/deployment.md
@@ -441,7 +441,7 @@ Events:
You can scale a Deployment by using the following command:
```shell
-$ kubectl scale deployment nginx-deployment --replicas 10
+$ kubectl scale deployment nginx-deployment --replicas=10
deployment "nginx-deployment" scaled
```
@@ -476,7 +476,7 @@ $ kubectl set image deploy/nginx-deployment nginx=nginx:sometag
deployment "nginx-deployment" image updated
```
-The image update starts a new rollout with ReplicaSet nginx-deployment-1989198191 but it's blocked due to the
+The image update starts a new rollout with ReplicaSet nginx-deployment-1989198191, but it's blocked due to the
maxUnavailable requirement that we mentioned above.
```shell
diff --git a/docs/concepts/workloads/controllers/garbage-collection.md b/docs/concepts/workloads/controllers/garbage-collection.md
index b03a19a042..7d9d96131a 100644
--- a/docs/concepts/workloads/controllers/garbage-collection.md
+++ b/docs/concepts/workloads/controllers/garbage-collection.md
@@ -147,7 +147,7 @@ Here's an example that orphans the dependents of a ReplicaSet:
kubectl delete replicaset my-repset --cascade=false
```
-### Addtional note on Deployments
+### Additional note on Deployments
When using cascading deletes with Deployments you *must* use `propagationPolicy: Foreground`
to delete not only the ReplicaSets created, but also their Pods. If this type of _propagationPolicy_
diff --git a/docs/concepts/workloads/pods/init-containers.md b/docs/concepts/workloads/pods/init-containers.md
index d4eaa11117..73cb6b5b40 100644
--- a/docs/concepts/workloads/pods/init-containers.md
+++ b/docs/concepts/workloads/pods/init-containers.md
@@ -157,9 +157,9 @@ metadata:
name: myservice
spec:
ports:
- - protocol: TCP
- port: 80
- targetPort: 9376
+ - protocol: TCP
+ port: 80
+ targetPort: 9376
---
kind: Service
apiVersion: v1
@@ -167,9 +167,9 @@ metadata:
name: mydb
spec:
ports:
- - protocol: TCP
- port: 80
- targetPort: 9377
+ - protocol: TCP
+ port: 80
+ targetPort: 9377
```
This Pod can be started and debugged with the following commands:
diff --git a/docs/getting-started-guides/clc.md b/docs/getting-started-guides/clc.md
index dc787dc8cb..1a9beb0090 100644
--- a/docs/getting-started-guides/clc.md
+++ b/docs/getting-started-guides/clc.md
@@ -165,7 +165,6 @@ order to access the CenturyLinkCloud API
-h (--help) display this help and exit
-c= (--clc_cluster_name=) set the name of the cluster, as used in CLC group names
-m= (--minion_count=) number of kubernetes minion nodes to add
-
```
## Cluster Deletion
@@ -176,7 +175,6 @@ There are two ways to delete an existing cluster:
```shell
python delete_cluster.py --cluster=clc_cluster_name --datacenter=DC1
-
```
2) Use the CenturyLink Cloud UI. To delete a cluster, log into the CenturyLink
diff --git a/docs/getting-started-guides/fedora/fedora_ansible_config.md b/docs/getting-started-guides/fedora/fedora_ansible_config.md
index 0bbbd75106..f3ce1de8c9 100644
--- a/docs/getting-started-guides/fedora/fedora_ansible_config.md
+++ b/docs/getting-started-guides/fedora/fedora_ansible_config.md
@@ -111,7 +111,7 @@ source_type: packageManager
**Configure the IP addresses used for services**
-Each Kubernetes service gets its own IP address. These are not real IPs. You need only select a range of IPs which are not in use elsewhere in your environment.
+Each Kubernetes service gets its own IP address. These are not real IPs. You need to only select a range of IPs which are not in use elsewhere in your environment.
```yaml
kube_service_addresses: 10.254.0.0/16
diff --git a/docs/getting-started-guides/fedora/fedora_manual_config.md b/docs/getting-started-guides/fedora/fedora_manual_config.md
index ccdb8081a9..dd6a301fd9 100644
--- a/docs/getting-started-guides/fedora/fedora_manual_config.md
+++ b/docs/getting-started-guides/fedora/fedora_manual_config.md
@@ -33,7 +33,7 @@ fed-node = 192.168.121.65
**Prepare the hosts:**
* Install Kubernetes on all hosts - fed-{master,node}. This will also pull in docker. Also install etcd on fed-master. This guide has been tested with Kubernetes-0.18 and beyond.
-* Running on AWS EC2 with RHEL 7.2, you need to enable "extras" repository for yum by editing `/etc/yum.repos.d/redhat-rhui.repo` and changing the changing the `enable=0` to `enable=1` for extras.
+* Running on AWS EC2 with RHEL 7.2, you need to enable "extras" repository for yum by editing `/etc/yum.repos.d/redhat-rhui.repo` and changing the `enable=0` to `enable=1` for extras.
```shell
dnf -y install kubernetes
diff --git a/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md b/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md
index d7c3d30e6f..51d3aa0db3 100644
--- a/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md
+++ b/docs/getting-started-guides/fedora/flannel_multi_node_cluster.md
@@ -40,7 +40,7 @@ Add the configuration to the etcd server on fed-master.
etcdctl set /coreos.com/network/config < flannel-config.json
```
-* Verify the key exists in the etcd server on fed-master.
+* Verify that the key exists in the etcd server on fed-master.
```shell
etcdctl get /coreos.com/network/config
diff --git a/docs/getting-started-guides/mesos-docker.md b/docs/getting-started-guides/mesos-docker.md
index 59d0351114..a6540bebdb 100644
--- a/docs/getting-started-guides/mesos-docker.md
+++ b/docs/getting-started-guides/mesos-docker.md
@@ -265,7 +265,7 @@ make test_e2e
## Kubernetes CLI
-When compiling from source, it's simplest to use the `./cluster/kubectl.sh` script, which detects your platform &
+When compiling from source, it's simpler to use the `./cluster/kubectl.sh` script, which detects your platform &
architecture and proxies commands to the appropriate `kubectl` binary.
ex: `./cluster/kubectl.sh get pods`
diff --git a/docs/getting-started-guides/scratch.md b/docs/getting-started-guides/scratch.md
index aff74f962e..5894732059 100644
--- a/docs/getting-started-guides/scratch.md
+++ b/docs/getting-started-guides/scratch.md
@@ -508,9 +508,9 @@ While the basic node services (kubelet, kube-proxy, docker) are typically starte
traditional system administration/automation approaches, the remaining *master* components of Kubernetes are
all configured and managed *by Kubernetes*:
- - their options are specified in a Pod spec (yaml or json) rather than an /etc/init.d file or
+ - Their options are specified in a Pod spec (yaml or json) rather than an /etc/init.d file or
systemd unit.
- - they are kept running by Kubernetes rather than by init.
+ - They are kept running by Kubernetes rather than by init.
### etcd
@@ -839,7 +839,7 @@ of their purpose is in the admin guide](/docs/admin/cluster-components/#addons).
Notes for setting up each cluster service are given below:
* Cluster DNS:
- * required for many Kubernetes examples
+ * Required for many Kubernetes examples
* [Setup instructions](http://releases.k8s.io/{{page.githubbranch}}/cluster/addons/dns/)
* [Admin Guide](/docs/concepts/services-networking/dns-pod-service/)
* Cluster-level Logging
@@ -889,7 +889,7 @@ At this point you should be able to run through one of the basic examples, such
### Running the Conformance Test
-You may want to try to run the [Conformance test](http://releases.k8s.io/{{page.githubbranch}}/hack/conformance-test.sh). Any failures may give a hint as to areas that need more attention.
+You may want to try to run the [Conformance test](http://releases.k8s.io/{{page.githubbranch}}/test/e2e_node/conformance/run_test.sh). Any failures may give a hint as to areas that need more attention.
### Networking
diff --git a/docs/getting-started-guides/ubuntu/manual.md b/docs/getting-started-guides/ubuntu/manual.md
index cf9ee4c675..e45fc69a33 100644
--- a/docs/getting-started-guides/ubuntu/manual.md
+++ b/docs/getting-started-guides/ubuntu/manual.md
@@ -130,7 +130,7 @@ for the recommended settings for various releases.
If your machines are located in a private network that need proxy setting to connect the Internet,
you can set the config `PROXY_SETTING` in cluster/ubuntu/config-default.sh such as:
- PROXY_SETTING="http_proxy=http://server:port https_proxy=https://server:port"
+ PROXY_SETTING="http_proxy=http://server:port https_proxy=https://server:port"
After all the above variables being set correctly, we can use following command in `cluster/` directory to
bring up the whole cluster.
diff --git a/docs/getting-started-guides/ubuntu/monitoring.md b/docs/getting-started-guides/ubuntu/monitoring.md
index 7ac97ea4e9..7885376a60 100644
--- a/docs/getting-started-guides/ubuntu/monitoring.md
+++ b/docs/getting-started-guides/ubuntu/monitoring.md
@@ -12,7 +12,11 @@ This page assumes you have a working Juju deployed cluster.
{% capture steps %}
## Connecting Datadog
-Datadog is a SaaS offering which includes support for a range of integrations, including Kubernetes and ETCD. While the solution is SAAS/Commercial, they include a Free tier which is supported with the following method. To deploy a full Kubernetes stack with Datadog out of the box, do: `juju deploy canonical-kubernetes-datadog`
+Datadog is a SaaS offering which includes support for a range of integrations, including Kubernetes and ETCD. While the solution is SAAS/Commercial, they include a Free tier which is supported with the following method. To deploy a full Kubernetes stack with Datadog out of the box, do:
+
+```
+juju deploy canonical-kubernetes-datadog
+```
### Installation of Datadog
@@ -132,4 +136,4 @@ juju configure nrpe-external-master nagios_master=255.255.255.255
Once configured, connect nrpe-external-master as outlined above.
{% endcapture %}
-{% include templates/task.md %}
\ No newline at end of file
+{% include templates/task.md %}
diff --git a/docs/home/contribute/style-guide.md b/docs/home/contribute/style-guide.md
index 594b5eb5b5..38575713be 100644
--- a/docs/home/contribute/style-guide.md
+++ b/docs/home/contribute/style-guide.md
@@ -221,12 +221,12 @@ Typing multiple lines does **not** work. The callout style only applies to the l
**Note:** This is my note.
- I didn't read the stlye guide.
+ I didn't read the style guide.
{: .note}
**Note:** This is my note.
-I didn't read the stlye guide.
+I didn't read the style guide.
{: .note}
### Ordered Lists
diff --git a/docs/reference/deprecation-policy.md b/docs/reference/deprecation-policy.md
index 62e2bc0d6c..fecd3484da 100644
--- a/docs/reference/deprecation-policy.md
+++ b/docs/reference/deprecation-policy.md
@@ -68,9 +68,9 @@ might have to add an equivalent field or represent it as an annotation.
API version at least as stable is released.**
GA API versions can replace GA API versions as well as beta and alpha API
-version. Beta API versions *may not* replace GA API versions.
+versions. Beta API versions *may not* replace GA API versions.
-**Rule #4: Other than the most recent API version in each track, older API
+**Rule #4: Other than the most recent API versions in each track, older API
versions must be supported after their announced deprecation for a duration of
no less than:**
diff --git a/docs/reference/labels-annotations-taints.md b/docs/reference/labels-annotations-taints.md
index e159fbf818..6ca88a83d2 100644
--- a/docs/reference/labels-annotations-taints.md
+++ b/docs/reference/labels-annotations-taints.md
@@ -63,7 +63,7 @@ of requiring a `g2.2xlarge`)
## failure-domain.beta.kubernetes.io/region
-See [failure-domain.beta.kubernetes.io/zone](#failure-domainbetakubernetesiozone)
+See [failure-domain.beta.kubernetes.io/zone](#failure-domainbetakubernetesiozone).
## failure-domain.beta.kubernetes.io/zone
@@ -82,8 +82,8 @@ On the PersistentVolume: The `PersistentVolumeLabel` admission controller will a
on GCE and AWS.
Kubernetes will automatically spread the pods in a replication controller or service across nodes in a single-zone
-cluster (to reduce the impact of failures.) With multiple-zone clusters, this spreading behaviour is extended
-across zones (to reduce the impact of zone failures.) This is achieved via SelectorSpreadPriority.
+cluster (to reduce the impact of failures). With multiple-zone clusters, this spreading behaviour is extended
+across zones (to reduce the impact of zone failures). This is achieved via SelectorSpreadPriority.
This is a best-effort placement, and so if the zones in your cluster are heterogeneous (e.g. different numbers of nodes,
different types of nodes, or different pod resource requirements), this might prevent equal spreading of
diff --git a/docs/resources-reference/v1.5/README.md b/docs/resources-reference/v1.5/README.md
index f6799c18b9..4bee5de31a 100644
--- a/docs/resources-reference/v1.5/README.md
+++ b/docs/resources-reference/v1.5/README.md
@@ -6,7 +6,7 @@ Static compilation of html from markdown including processing for grouping code
\> bdocs-tab:kubectl Deployment Config to run 3 nginx instances (max rollback set to 10 revisions).
-bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the prefered tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
+bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the preferred tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
\`\`\`bdocs-tab:kubectl_yaml
apiVersion: extensions/v1beta1
diff --git a/docs/resources-reference/v1.6/README.md b/docs/resources-reference/v1.6/README.md
index f6799c18b9..4bee5de31a 100644
--- a/docs/resources-reference/v1.6/README.md
+++ b/docs/resources-reference/v1.6/README.md
@@ -6,7 +6,7 @@ Static compilation of html from markdown including processing for grouping code
\> bdocs-tab:kubectl Deployment Config to run 3 nginx instances (max rollback set to 10 revisions).
-bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the prefered tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
+bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the preferred tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
\`\`\`bdocs-tab:kubectl_yaml
apiVersion: extensions/v1beta1
diff --git a/docs/resources-reference/v1.7/README.md b/docs/resources-reference/v1.7/README.md
index f6799c18b9..e8c00fe78d 100644
--- a/docs/resources-reference/v1.7/README.md
+++ b/docs/resources-reference/v1.7/README.md
@@ -6,7 +6,7 @@ Static compilation of html from markdown including processing for grouping code
\> bdocs-tab:kubectl Deployment Config to run 3 nginx instances (max rollback set to 10 revisions).
-bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the prefered tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
+bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the preferred tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
\`\`\`bdocs-tab:kubectl_yaml
apiVersion: extensions/v1beta1
@@ -66,4 +66,4 @@ Apache License Version 2.0
## FAQ
Q: Why is it named brodocs?
-A: This project was born out of a collaboration with my brother to create a suitable docs app for his purposes. It was a fun name for the the two of us to use as actual brothers.
\ No newline at end of file
+A: This project was born out of a collaboration with my brother to create a suitable docs app for his purposes. It was a fun name for the the two of us to use as actual brothers.
diff --git a/docs/resources-reference/v1.7/index.html b/docs/resources-reference/v1.7/index.html
index a38a3798bc..12aaa81e70 100644
--- a/docs/resources-reference/v1.7/index.html
+++ b/docs/resources-reference/v1.7/index.html
@@ -1315,7 +1315,7 @@ Appears In:
qosClass string |
-The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://github.com/kubernetes/kubernetes/blob/master/docs/design/resource-qos.md |
+The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/resource-qos.md |
reason string |
diff --git a/docs/resources-reference/v1.7/node_modules/jquery.scrollto/CHANGELOG.md b/docs/resources-reference/v1.7/node_modules/jquery.scrollto/CHANGELOG.md
index 874087615c..cdec0977f3 100644
--- a/docs/resources-reference/v1.7/node_modules/jquery.scrollto/CHANGELOG.md
+++ b/docs/resources-reference/v1.7/node_modules/jquery.scrollto/CHANGELOG.md
@@ -111,7 +111,7 @@
- In addition to window/document, if html or body are received, the plugin will choose the right one.
### Fix
- The plugin accepts floating numbers, Thanks Ramin
-- Using jQuery.nodeName where neccessary so that this works on xml+xhtml
+- Using jQuery.nodeName where necessary so that this works on xml+xhtml
- The max() internal function wasn't completely accurrate, now it is 98% (except for IE on quirks mode and it's not too noticeable).
## 1.4
@@ -183,4 +183,4 @@
- Two axes can be scrolled together, this is set with the option 'axis'.
- In case 2 axes are chosen, the scrolling can be queued: one scrolls, and then the other.
- There's an intermediary event, 'onAfterFirst' called in case the axes are queued, after the first ends.
-- If the option 'margin' is set to true, the plugin will take in account, the margin of the target(no use if target is a value).
\ No newline at end of file
+- If the option 'margin' is set to true, the plugin will take in account, the margin of the target(no use if target is a value).
diff --git a/docs/resources-reference/v1.7/node_modules/marked/README.md b/docs/resources-reference/v1.7/node_modules/marked/README.md
index efa71aaaab..bb4b3a9652 100644
--- a/docs/resources-reference/v1.7/node_modules/marked/README.md
+++ b/docs/resources-reference/v1.7/node_modules/marked/README.md
@@ -297,7 +297,7 @@ $ cat hello.html
The point of marked was to create a markdown compiler where it was possible to
frequently parse huge chunks of markdown without having to worry about
-caching the compiled output somehow...or blocking for an unnecesarily long time.
+caching the compiled output somehow...or blocking for an unnecessarily long time.
marked is very concise and still implements all markdown features. It is also
now fully compatible with the client-side.
diff --git a/docs/setup/independent/create-cluster-kubeadm.md b/docs/setup/independent/create-cluster-kubeadm.md
index a4577baff6..5e7a3d0189 100644
--- a/docs/setup/independent/create-cluster-kubeadm.md
+++ b/docs/setup/independent/create-cluster-kubeadm.md
@@ -80,7 +80,7 @@ cloud providers is difficult.
### (1/4) Installing kubeadm on your hosts
-See [Installing kubeadm](/docs/setup/independent/install-kubeadm/)
+See [Installing kubeadm](/docs/setup/independent/install-kubeadm/).
**Note:** If you already have kubeadm installed, you should do a `apt-get update &&
apt-get upgrade` or `yum update` to get the latest version of kubeadm.
@@ -211,7 +211,7 @@ Please select one of the tabs to see installation instructions for the respectiv
{% capture calico %}
-The official Calico guide is [here](http://docs.projectcalico.org/latest/getting-started/kubernetes/installation/hosted/kubeadm/)
+The official Calico guide is [here](http://docs.projectcalico.org/latest/getting-started/kubernetes/installation/hosted/kubeadm/).
**Note:**
- In order for Network Policy to work correctly, you need to pass `--pod-network-cidr=192.168.0.0/16` to `kubeadm init`
@@ -224,7 +224,7 @@ kubectl apply -f http://docs.projectcalico.org/v2.4/getting-started/kubernetes/i
{% capture canal %}
-The official Canal set-up guide is [here](https://github.com/projectcalico/canal/tree/master/k8s-install)
+The official Canal set-up guide is [here](https://github.com/projectcalico/canal/tree/master/k8s-install).
**Note:**
- For Canal to work correctly, `--pod-network-cidr=10.244.0.0/16` has to be passed to `kubeadm init`.
@@ -241,7 +241,7 @@ kubectl apply -f https://raw.githubusercontent.com/projectcalico/canal/master/k8
**Note:**
- For flannel to work correctly, `--pod-network-cidr=10.244.0.0/16` has to be passed to `kubeadm init`.
- flannel works on `amd64`, `arm`, `arm64` and `ppc64le`, but for it to work on an other platform than
-`amd64` you have to manually download the manifest and replace `amd64` occurances with your chosen platform.
+`amd64` you have to manually download the manifest and replace `amd64` occurences with your chosen platform.
```shell
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
@@ -251,7 +251,7 @@ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documen
{% capture romana %}
-The official Romana set-up guide is [here](https://github.com/romana/romana/tree/master/containerize#using-kubeadm)
+The official Romana set-up guide is [here](https://github.com/romana/romana/tree/master/containerize#using-kubeadm).
**Note:** Romana works on `amd64` only.
@@ -262,7 +262,7 @@ kubectl apply -f https://raw.githubusercontent.com/romana/romana/master/containe
{% capture weave_net %}
-The official Weave Net set-up guide is [here](https://www.weave.works/docs/net/latest/kube-addon/)
+The official Weave Net set-up guide is [here](https://www.weave.works/docs/net/latest/kube-addon/).
**Note:** Weave Net works on `amd64`, `arm` and `arm64` without any extra action required.
@@ -297,7 +297,7 @@ kubectl taint nodes --all node-role.kubernetes.io/master-
With output looking something like:
```
-node "test-01" tainted
+node "test-01" untainted
taint key="dedicated" and effect="" not found.
taint key="dedicated" and effect="" not found.
```
@@ -481,7 +481,7 @@ v1.7.
kubeadm deb/rpm packages and binaries are built for amd64, arm (32-bit), arm64, ppc64le, and s390x
following the [multi-platform
-proposal](https://github.com/kubernetes/kubernetes/blob/master/docs/proposals/multi-platform.md).
+proposal](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/multi-platform.md).
Only some of the network providers offer solutions for all platforms. Please consult the list of
network providers above or the documentation from each provider to figure out whether the provider
@@ -538,9 +538,7 @@ You may have trouble in the configuration if you see Pod statuses like `RunConta
second network interface, not the first one). By default, it doesn't do this
and kubelet ends-up using first non-loopback network interface, which is
usually NATed. Workaround: Modify `/etc/hosts`, take a look at this
- [`Vagrantfile`][ubuntu-vagrantfile] for how this can be achieved.
-
-[ubuntu-vagrantfile]: https://github.com/errordeveloper/k8s-playground/blob/22dd39dfc06111235620e6c4404a96ae146f26fd/Vagrantfile#L11)
+ `Vagrantfile`[ubuntu-vagrantfile](https://github.com/errordeveloper/k8s-playground/blob/22dd39dfc06111235620e6c4404a96ae146f26fd/Vagrantfile#L11) for how this can be achieved.
1. The following error indicates a possible certificate mismatch.
@@ -559,6 +557,27 @@ Another workaround is to overwrite the default `kubeconfig` for the "admin" user
sudo chown $(id -u):$(id -g) $HOME/.kube/config
```
+1. If you are using CentOS and encounter difficulty while setting up the master node,
+verify that your Docker cgroup driver matches the kubelet config:
+
+```
+docker info |grep -i cgroup
+cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+```
+
+ If the Docker cgroup driver and the kubelet config don't match, change the kubelet config to match the Docker cgroup driver:
+
+```
+update KUBELET_CGROUP_ARGS=--cgroup-driver=systemd to KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs
+```
+
+ Then restart kubelet:
+
+```
+systemctl daemon-reload
+service kubelet restart
+```
+
The `kubectl describe pod` or `kubectl logs` commands can help you diagnose errors. For example:
```bash
@@ -569,5 +588,4 @@ kubectl -n ${NAMESPACE} logs ${POD_NAME} -c ${CONTAINER_NAME}
{% endcapture %}
-
{% include templates/task.md %}
diff --git a/docs/tasks/access-application-cluster/access-cluster.md b/docs/tasks/access-application-cluster/access-cluster.md
index 4d3335521d..b0b38955fe 100644
--- a/docs/tasks/access-application-cluster/access-cluster.md
+++ b/docs/tasks/access-application-cluster/access-cluster.md
@@ -200,7 +200,7 @@ You have several options for connecting to nodes, pods and services from outside
or it may expose it to the internet. Think about whether the service being exposed is secure.
Does it do its own authentication?
- Place pods behind services. To access one specific pod from a set of replicas, such as for debugging,
- place a unique label on the pod it and create a new service which selects this label.
+ place a unique label on the pod and create a new service which selects this label.
- In most cases, it should not be necessary for application developer to directly access
nodes via their nodeIPs.
- Access services, nodes, or pods using the Proxy Verb.
diff --git a/docs/tasks/access-application-cluster/authenticate-across-clusters-kubeconfig.md b/docs/tasks/access-application-cluster/authenticate-across-clusters-kubeconfig.md
index facc84a0e7..217c62ce5f 100644
--- a/docs/tasks/access-application-cluster/authenticate-across-clusters-kubeconfig.md
+++ b/docs/tasks/access-application-cluster/authenticate-across-clusters-kubeconfig.md
@@ -202,15 +202,15 @@ The rules for loading and merging the kubeconfig files are straightforward, but
Otherwise, use HomeDirectoryLocation (`~/.kube/config`) with no merging.
1. Determine the context to use based on the first hit in this chain
- 1. command line argument - the value of the `context` command line option
+ 1. Command line argument - the value of the `context` command line option
1. `current-context` from the merged kubeconfig file
1. Empty is allowed at this stage
1. Determine the cluster info and user to use. At this point, we may or may not have a context. They are built based on the first hit in this chain. (run it twice, once for user, once for cluster)
- 1. command line argument - `user` for user name and `cluster` for cluster name
+ 1. Command line argument - `user` for user name and `cluster` for cluster name
1. If context is present, then use the context's value
1. Empty is allowed
1. Determine the actual cluster info to use. At this point, we may or may not have a cluster info. Build each piece of the cluster info based on the chain (first hit wins):
- 1. command line arguments - `server`, `api-version`, `certificate-authority`, and `insecure-skip-tls-verify`
+ 1. Command line arguments - `server`, `api-version`, `certificate-authority`, and `insecure-skip-tls-verify`
1. If cluster info is present and a value for the attribute is present, use it.
1. If you don't have a server location, error.
1. Determine the actual user info to use. User is built using the same rules as cluster info, EXCEPT that you can only have one authentication technique per user.
diff --git a/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md b/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md
index 0b7f5603ba..5b8b768123 100644
--- a/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md
+++ b/docs/tasks/access-application-cluster/configure-cloud-provider-firewall.md
@@ -16,7 +16,7 @@ well as any provider specific details that may be necessary.
by using `spec.loadBalancerSourceRanges`. This field takes a list of IP CIDR ranges, which Kubernetes will use to configure firewall exceptions.
This feature is currently supported on Google Compute Engine, Google Container Engine and AWS. This field will be ignored if the cloud provider does not support the feature.
- Assuming 10.0.0.0/8 is the internal subnet. In the following example, a load balancer will be created that is only accessible to cluster internal ips.
+ Assuming 10.0.0.0/8 is the internal subnet. In the following example, a load balancer will be created that is only accessible to cluster internal IPs.
This will not allow clients from outside of your Kubernetes cluster to access the load balancer.
```yaml
@@ -26,8 +26,8 @@ metadata:
name: myapp
spec:
ports:
- - port: 8765
- targetPort: 9376
+ - port: 8765
+ targetPort: 9376
selector:
app: example
type: LoadBalancer
@@ -44,8 +44,8 @@ metadata:
name: myapp
spec:
ports:
- - port: 8765
- targetPort: 9376
+ - port: 8765
+ targetPort: 9376
selector:
app: example
type: LoadBalancer
diff --git a/docs/tasks/access-application-cluster/create-external-load-balancer.md b/docs/tasks/access-application-cluster/create-external-load-balancer.md
index 9947939bc9..3dbf80f4bf 100644
--- a/docs/tasks/access-application-cluster/create-external-load-balancer.md
+++ b/docs/tasks/access-application-cluster/create-external-load-balancer.md
@@ -65,7 +65,7 @@ kubectl expose rc example --port=8765 --target-port=9376 \
This command creates a new service using the same selectors as the referenced
resource (in the case of the example above, a replication controller named
-`example`.)
+`example`).
For more information, including optional flags, refer to the
[`kubectl expose` reference](/docs/user-guide/kubectl/v1.6/#expose).
diff --git a/docs/tasks/access-application-cluster/frontend.yaml b/docs/tasks/access-application-cluster/frontend.yaml
index 62ff60c0df..382c3786e5 100644
--- a/docs/tasks/access-application-cluster/frontend.yaml
+++ b/docs/tasks/access-application-cluster/frontend.yaml
@@ -7,9 +7,9 @@ spec:
app: hello
tier: frontend
ports:
- - protocol: "TCP"
- port: 80
- targetPort: 80
+ - protocol: "TCP"
+ port: 80
+ targetPort: 80
type: LoadBalancer
---
apiVersion: apps/v1beta1
@@ -26,9 +26,9 @@ spec:
track: stable
spec:
containers:
- - name: nginx
- image: "gcr.io/google-samples/hello-frontend:1.0"
- lifecycle:
- preStop:
- exec:
- command: ["/usr/sbin/nginx","-s","quit"]
+ - name: nginx
+ image: "gcr.io/google-samples/hello-frontend:1.0"
+ lifecycle:
+ preStop:
+ exec:
+ command: ["/usr/sbin/nginx","-s","quit"]
diff --git a/docs/tasks/access-application-cluster/hello-service.yaml b/docs/tasks/access-application-cluster/hello-service.yaml
index 8be93e1da6..1e4c7a6c32 100644
--- a/docs/tasks/access-application-cluster/hello-service.yaml
+++ b/docs/tasks/access-application-cluster/hello-service.yaml
@@ -7,6 +7,6 @@ spec:
app: hello
tier: backend
ports:
- - protocol: TCP
- port: 80
- targetPort: http
+ - protocol: TCP
+ port: 80
+ targetPort: http
diff --git a/docs/tasks/access-application-cluster/web-ui-dashboard.md b/docs/tasks/access-application-cluster/web-ui-dashboard.md
index aa3a9ddf1d..d650f69545 100644
--- a/docs/tasks/access-application-cluster/web-ui-dashboard.md
+++ b/docs/tasks/access-application-cluster/web-ui-dashboard.md
@@ -34,7 +34,7 @@ You can access Dashboard using the kubectl command-line tool by running the foll
$ kubectl proxy
```
-kubectl will handle authentication with apiserver and make Dashboard available at http://localhost:8001/ui
+Kubectl will handle authentication with apiserver and make Dashboard available at http://localhost:8001/ui.
The UI can _only_ be accessed from the machine where the command is executed. See `kubectl proxy --help` for more options.
diff --git a/docs/tasks/access-kubernetes-api/http-proxy-access-api.md b/docs/tasks/access-kubernetes-api/http-proxy-access-api.md
index ce3cc1efa8..e1dc1f94e3 100644
--- a/docs/tasks/access-kubernetes-api/http-proxy-access-api.md
+++ b/docs/tasks/access-kubernetes-api/http-proxy-access-api.md
@@ -13,7 +13,7 @@ This page shows how to use an HTTP proxy to access the Kubernetes API.
* If you do not already have an application running in your cluster, start
a Hello world application by entering this command:
- kubectl run node-hello --image=gcr.io/google-samples/node-hello:1.0 --port=8080
+ kubectl run node-hello --image=gcr.io/google-samples/node-hello:1.0 --port=8080
{% endcapture %}
diff --git a/docs/tasks/administer-cluster/access-cluster-services.md b/docs/tasks/administer-cluster/access-cluster-services.md
index 0630274bc3..5c55fa3aca 100644
--- a/docs/tasks/administer-cluster/access-cluster-services.md
+++ b/docs/tasks/administer-cluster/access-cluster-services.md
@@ -100,11 +100,11 @@ If you haven't specified a name for your port, you don't have to specify *port_n
#### Using web browsers to access services running on the cluster
-You may be able to put an apiserver proxy url into the address bar of a browser. However:
+You may be able to put an apiserver proxy URL into the address bar of a browser. However:
- Web browsers cannot usually pass tokens, so you may need to use basic (password) auth. Apiserver can be configured to accept basic auth,
but your cluster may not be configured to accept basic auth.
- - Some web apps may not work, particularly those with client side javascript that construct urls in a
+ - Some web apps may not work, particularly those with client side javascript that construct URLs in a
way that is unaware of the proxy path prefix.
{% endcapture %}
diff --git a/docs/tasks/administer-cluster/change-pv-reclaim-policy.md b/docs/tasks/administer-cluster/change-pv-reclaim-policy.md
index aa769f8227..43080789ed 100644
--- a/docs/tasks/administer-cluster/change-pv-reclaim-policy.md
+++ b/docs/tasks/administer-cluster/change-pv-reclaim-policy.md
@@ -43,7 +43,7 @@ the corresponding `PersistentVolume` is not be deleted. Instead, it is moved to
This list also includes the name of the claims that are bound to each volume
for easier identification of dynamically provisioned volumes.
-1. Chose one of your PersistentVolumes and change its reclaim policy:
+1. Choose one of your PersistentVolumes and change its reclaim policy:
kubectl patch pv -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
diff --git a/docs/tasks/administer-cluster/cilium-network-policy.md b/docs/tasks/administer-cluster/cilium-network-policy.md
new file mode 100644
index 0000000000..6db677f313
--- /dev/null
+++ b/docs/tasks/administer-cluster/cilium-network-policy.md
@@ -0,0 +1,78 @@
+---
+assignees:
+- danwent
+title: Use Cilium for NetworkPolicy
+---
+
+{% capture overview %}
+This page shows how to use Cilium for NetworkPolicy.
+
+For background on Cilium, read the [Introduction to Cilium](http://cilium.readthedocs.io/en/latest/intro/).
+{% endcapture %}
+
+{% capture prerequisites %}
+
+{% include task-tutorial-prereqs.md %}
+
+{% endcapture %}
+
+{% capture steps %}
+## Deploying Cilium on Minikube for Basic Testing
+
+To get familiar with Cilium easily you can follow the
+[Cilium Kubernetes Getting Started Guide](http://www.cilium.io/try)
+to perform a basic DaemonSet installation of Cilium in minikube.
+
+Installation in a minikube setup uses a simple ''all-in-one'' YAML
+file that includes DaemonSet configurations for Cilium and a key-value store
+(consul) as well as appropriate RBAC settings:
+
+```shell
+$ kubectl create -f https://raw.githubusercontent.com/cilium/cilium/master/examples/minikube/cilium-ds.yaml
+clusterrole "cilium" created
+serviceaccount "cilium" created
+clusterrolebinding "cilium" created
+daemonset "cilium-consul" created
+daemonset "cilium" created
+```
+
+The remainder of the Getting Started Guide explains how to enforce both L3/L4 (i.e., IP address + port) security
+policies, as well as L7 (e.g., HTTP) security policies using an example application.
+
+## Deploying Cilium for Production Use
+
+For detailed instructions around deploying Cilium for production, see:
+[Cilium Administrator Guide](http://cilium.readthedocs.io/en/latest/admin/) This
+documentation includes detailed requirements, instructions and example production DaemonSet files.
+
+{% endcapture %}
+
+{% capture discussion %}
+## Understanding Cilium components
+
+Deploying a cluster with Cilium adds Pods to the `kube-system` namespace. To see this list of Pods run:
+
+```shell
+kubectl get pods --namespace=kube-system
+```
+
+You'll see a list of Pods similar to this:
+
+```console
+NAME DESIRED CURRENT READY NODE-SELECTOR AGE
+cilium 1 1 1 2m
+...
+```
+
+There are two main components to be aware of:
+
+- One `cilium` Pod runs on each node in your cluster and enforces network policy on the traffic to/from Pods on that node using Linux BPF.
+- For production deployments, Cilium should leverage the key-value store cluster (e.g., etcd) used by Kubernetes, which typically runs on the Kubernetes master nodes. The [Cilium Administrator Guide](http://cilium.readthedocs.io/en/latest/admin/) includes an example DaemonSet which can be customized to point to this key-value store cluster. The simple ''all-in-one'' DaemonSet for minikube requires no such configuration because it automatically deploys a `cilium-consul` Pod to provide a key-value store.
+
+{% endcapture %}
+
+{% capture whatsnext %}
+Once your cluster is running, you can follow the [NetworkPolicy getting started guide](/docs/getting-started-guides/network-policy/walkthrough) to try out Kubernetes NetworkPolicy with Cilium. Have fun, and if you have questions, contact us using the [Cilium Slack Channel](https://cilium.herokuapp.com/).
+{% endcapture %}
+
+{% include templates/task.md %}
diff --git a/docs/tasks/administer-cluster/configure-upgrade-etcd.md b/docs/tasks/administer-cluster/configure-upgrade-etcd.md
index 4249470678..b672375a9e 100644
--- a/docs/tasks/administer-cluster/configure-upgrade-etcd.md
+++ b/docs/tasks/administer-cluster/configure-upgrade-etcd.md
@@ -194,7 +194,7 @@ If the majority of etcd members have permanently failed, the etcd cluster is con
The upgrade procedure described in this document assumes that either:
-1. The etcd cluster has only a single node
+1. The etcd cluster has only a single node.
2. The etcd cluster has multiple nodes.
In this case, the upgrade procedure requires shutting down the
diff --git a/docs/tasks/administer-cluster/cpu-constraint-namespace.md b/docs/tasks/administer-cluster/cpu-constraint-namespace.md
index 7fc4f68417..fa23322276 100644
--- a/docs/tasks/administer-cluster/cpu-constraint-namespace.md
+++ b/docs/tasks/administer-cluster/cpu-constraint-namespace.md
@@ -243,7 +243,7 @@ kubectl delete namespace constraints-cpu-example
* [Configure Default Memory Requests and Limits for a Namespace](/docs/tasks/administer-cluster/memory-default-namespace/)
-* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/default-cpu-request-limit/)
+* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/cpu-default-namespace/)
* [Configure Minimum and Maximum Memory Constraints for a Namespace](/docs/tasks/administer-cluster/memory-constraint-namespace/)
diff --git a/docs/tasks/administer-cluster/declare-network-policy.md b/docs/tasks/administer-cluster/declare-network-policy.md
index 638993a19e..da7f6f5ecf 100644
--- a/docs/tasks/administer-cluster/declare-network-policy.md
+++ b/docs/tasks/administer-cluster/declare-network-policy.md
@@ -5,13 +5,14 @@ approvers:
title: Declare Network Policy
---
{% capture overview %}
-This document helps you get started using using the Kubernetes [NetworkPolicy API](/docs/concepts/services-networking/network-policies/) to declare network policies that govern how pods communicate with each other.
+This document helps you get started using the Kubernetes [NetworkPolicy API](/docs/concepts/services-networking/network-policies/) to declare network policies that govern how pods communicate with each other.
{% endcapture %}
{% capture prerequisites %}
You'll need to have a Kubernetes cluster in place, with network policy support. There are a number of network providers that support NetworkPolicy, including:
* [Calico](/docs/tasks/configure-pod-container/calico-network-policy/)
+* [Cilium](/docs/tasks/configure-pod-container/cilium-network-policy/)
* [Romana](/docs/tasks/configure-pod-container/romana-network-policy/)
* [Weave Net](/docs/tasks/configure-pod-container/weave-network-policy/)
diff --git a/docs/tasks/administer-cluster/dns-custom-nameservers.md b/docs/tasks/administer-cluster/dns-custom-nameservers.md
index 1e760be394..b2917f96bb 100644
--- a/docs/tasks/administer-cluster/dns-custom-nameservers.md
+++ b/docs/tasks/administer-cluster/dns-custom-nameservers.md
@@ -93,7 +93,7 @@ routed according to the following flow:
## ConfigMap options
-Options for the kube-dns `kube-system:kube-dns` ConfigMap
+Options for the kube-dns `kube-system:kube-dns` ConfigMap:
| Field | Format | Description |
| ----- | ------ | ----------- |
@@ -107,7 +107,7 @@ Options for the kube-dns `kube-system:kube-dns` ConfigMap
In this example, the user has a Consul DNS service discovery system that they wish to
integrate with kube-dns. The consul domain server is located at 10.150.0.1, and
all consul names have the suffix “.consul.local”. To configure Kubernetes, the
-cluster administrator simply creates a ConfigMap object as shown below.
+cluster administrator simply creates a ConfigMap object as shown below.
```yaml
apiVersion: v1
diff --git a/docs/tasks/administer-cluster/encrypt-data.md b/docs/tasks/administer-cluster/encrypt-data.md
index f024f58066..d7644e0f77 100644
--- a/docs/tasks/administer-cluster/encrypt-data.md
+++ b/docs/tasks/administer-cluster/encrypt-data.md
@@ -83,7 +83,7 @@ is the first provider, the first key is used for encryption.
## Encrypting your data
-Create a new encryption config file
+Create a new encryption config file:
```yaml
kind: EncryptionConfig
@@ -107,9 +107,9 @@ To create a new secret perform the following steps:
head -c 32 /dev/urandom | base64
```
-2. Place that value in the secret field.
-3. Set the `--experimental-encryption-provider-config` flag on the `kube-apiserver` to point to the location of the config file
-4. Restart your API server.
+2. Place that value in the secret field.
+3. Set the `--experimental-encryption-provider-config` flag on the `kube-apiserver` to point to the location of the config file.
+4. Restart your API server.
**IMPORTANT:** Your config file contains keys that can decrypt content in etcd, so you must properly restrict permissions on your masters so only the user who runs the kube-apiserver can read it.
@@ -168,7 +168,7 @@ the presence of a highly available deployment where multiple `kube-apiserver` pr
5. Run `kubectl get secrets -o json | kubectl replace -f -` to encrypt all existing secrets with the new key
6. Remove the old decryption key from the config after you back up etcd with the new key in use and update all secrets
-With a single `kube-apiserver`, step 2 may be skipped
+With a single `kube-apiserver`, step 2 may be skipped.
## Decrypting all data
diff --git a/docs/tasks/administer-cluster/ip-masq-agent.md b/docs/tasks/administer-cluster/ip-masq-agent.md
index f5da4a3a76..9ed4987e48 100644
--- a/docs/tasks/administer-cluster/ip-masq-agent.md
+++ b/docs/tasks/administer-cluster/ip-masq-agent.md
@@ -7,7 +7,7 @@ This page shows how to configure and enable the ip-masq-agent.
{% endcapture %}
{% capture prerequisites %}
-Kubernetes 1.7
+
{% include task-tutorial-prereqs.md %}
{% endcapture %}
diff --git a/docs/tasks/administer-cluster/memory-constraint-namespace.md b/docs/tasks/administer-cluster/memory-constraint-namespace.md
index db5ed8296b..e28d66911d 100644
--- a/docs/tasks/administer-cluster/memory-constraint-namespace.md
+++ b/docs/tasks/administer-cluster/memory-constraint-namespace.md
@@ -195,7 +195,7 @@ resources:
```
Because your Container did not specify its own memory request and limit, it was given the
-[default memory request and limit](/docs/tasks/administer-cluster/default-memory-request-limit/)
+[default memory request and limit](/docs/tasks/administer-cluster/memory-default-namespace/)
from the LimitRange.
At this point, your Container might be running or it might not be running. Recall that a prerequisite
@@ -245,7 +245,7 @@ kubectl delete namespace constraints-mem-example
* [Configure Default Memory Requests and Limits for a Namespace](/docs/tasks/administer-cluster/memory-default-namespace/)
-* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/default-cpu-request-limit/)
+* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/cpu-default-namespace/)
* [Configure Minimum and Maximum CPU Constraints for a Namespace](/docs/tasks/administer-cluster/cpu-constraint-namespace/)
diff --git a/docs/tasks/administer-cluster/memory-default-namespace.md b/docs/tasks/administer-cluster/memory-default-namespace.md
index 5fb40e209b..951f015380 100644
--- a/docs/tasks/administer-cluster/memory-default-namespace.md
+++ b/docs/tasks/administer-cluster/memory-default-namespace.md
@@ -166,7 +166,7 @@ it can be allowed to run in a namespace that is restricted by a quota.
### For cluster administrators
-* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/default-cpu-request-limit/)
+* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/cpu-default-namespace/)
* [Configure Minimum and Maximum Memory Constraints for a Namespace](/docs/tasks/administer-cluster/memory-constraint-namespace/)
diff --git a/docs/tasks/administer-cluster/namespaces.md b/docs/tasks/administer-cluster/namespaces.md
index bfdb32bc15..eee6e75e46 100644
--- a/docs/tasks/administer-cluster/namespaces.md
+++ b/docs/tasks/administer-cluster/namespaces.md
@@ -205,7 +205,7 @@ $ kubectl config current-context
lithe-cocoa-92103_kubernetes
```
-The next step is to define a context for the kubectl client to work in each namespace. The value of "cluster" and "user" fields are copied from the current context.
+The next step is to define a context for the kubectl client to work in each namespace. The values of "cluster" and "user" fields are copied from the current context.
```shell
$ kubectl config set-context dev --namespace=development --cluster=lithe-cocoa-92103_kubernetes --user=lithe-cocoa-92103_kubernetes
diff --git a/docs/tasks/administer-cluster/out-of-resource.md b/docs/tasks/administer-cluster/out-of-resource.md
index d693463bc3..2a4945ad18 100644
--- a/docs/tasks/administer-cluster/out-of-resource.md
+++ b/docs/tasks/administer-cluster/out-of-resource.md
@@ -205,7 +205,7 @@ it will begin evicting pods.
The `kubelet` ranks pods for eviction as follows:
-* by their quality of service
+* by their quality of service.
* by the consumption of the starved compute resource relative to the pods scheduling request.
As a result, pod eviction occurs in the following order:
diff --git a/docs/tasks/administer-cluster/quota-api-object.md b/docs/tasks/administer-cluster/quota-api-object.md
index 0518f97f1d..c40566f050 100644
--- a/docs/tasks/administer-cluster/quota-api-object.md
+++ b/docs/tasks/administer-cluster/quota-api-object.md
@@ -147,7 +147,7 @@ kubectl delete namespace quota-object-example
* [Configure Default Memory Requests and Limits for a Namespace](/docs/tasks/administer-cluster/memory-default-namespace/)
-* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/default-cpu-request-limit/)
+* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/cpu-default-namespace/)
* [Configure Minimum and Maximum Memory Constraints for a Namespace](/docs/tasks/administer-cluster/memory-constraint-namespace/)
diff --git a/docs/tasks/administer-cluster/quota-memory-cpu-namespace.md b/docs/tasks/administer-cluster/quota-memory-cpu-namespace.md
index afe659d3c7..75d71d4f07 100644
--- a/docs/tasks/administer-cluster/quota-memory-cpu-namespace.md
+++ b/docs/tasks/administer-cluster/quota-memory-cpu-namespace.md
@@ -152,7 +152,7 @@ kubectl delete namespace quota-mem-cpu-example
* [Configure Default Memory Requests and Limits for a Namespace](/docs/tasks/administer-cluster/memory-default-namespace/)
-* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/default-cpu-request-limit/)
+* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/cpu-default-namespace/)
* [Configure Minimum and Maximum Memory Constraints for a Namespace](/docs/tasks/administer-cluster/memory-constraint-namespace/)
diff --git a/docs/tasks/administer-cluster/quota-pod-namespace.md b/docs/tasks/administer-cluster/quota-pod-namespace.md
index 119c8f0516..dc11c232b9 100644
--- a/docs/tasks/administer-cluster/quota-pod-namespace.md
+++ b/docs/tasks/administer-cluster/quota-pod-namespace.md
@@ -113,7 +113,7 @@ kubectl delete namespace quota-pod-example
* [Configure Default Memory Requests and Limits for a Namespace](/docs/tasks/administer-cluster/memory-default-namespace/)
-* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/default-cpu-request-limit/)
+* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/cpu-default-namespace/)
* [Configure Minimum and Maximum Memory Constraints for a Namespace](/docs/tasks/administer-cluster/memory-constraint-namespace/)
diff --git a/docs/tasks/administer-cluster/running-cloud-controller.md b/docs/tasks/administer-cluster/running-cloud-controller.md
index c56df35f05..0c45ade1c4 100644
--- a/docs/tasks/administer-cluster/running-cloud-controller.md
+++ b/docs/tasks/administer-cluster/running-cloud-controller.md
@@ -16,8 +16,8 @@ In future Kubernetes releases, cloud vendors should link code that satisfies the
To build cloud-controller-manager for your cloud, follow these steps:
-* Write a cloudprovider that satisfies the [cloudprovider.Interface](https://git.k8s.io/kubernetes/pkg/cloudprovider/cloud.go).
-* Link the cloudprovider to cloud-controller-manager
+1. Write a cloudprovider that satisfies the [cloudprovider.Interface](https://git.k8s.io/kubernetes/pkg/cloudprovider/cloud.go).
+2. Link the cloudprovider to cloud-controller-manager.
The methods in [cloudprovider.Interface](https://git.k8s.io/kubernetes/pkg/cloudprovider/cloud.go) are self-explanatory. All of the
[existing providers](https://git.k8s.io/kubernetes/pkg/cloudprovider/providers) satisfy this interface. If your cloud is already a part
diff --git a/docs/tasks/administer-cluster/safely-drain-node.md b/docs/tasks/administer-cluster/safely-drain-node.md
index b45fa8ec59..026b3fc82b 100644
--- a/docs/tasks/administer-cluster/safely-drain-node.md
+++ b/docs/tasks/administer-cluster/safely-drain-node.md
@@ -34,7 +34,7 @@ You can use `kubectl drain` to safely evict all of your pods from a
node before you perform maintenance on the node (e.g. kernel upgrade,
hardware maintenance, etc.). Safe evictions allow the pod's containers
to
-[gracefully terminate](/docs/user-guide/production-pods.md#lifecycle-hooks-and-termination-notice) and
+[gracefully terminate](/docs/tasks/#lifecycle-hooks-and-termination-notice) and
will respect the `PodDisruptionBudgets` you have specified.
**Note:** By default `kubectl drain` will ignore certain system pods on the node
diff --git a/docs/tasks/administer-cluster/securing-a-cluster.md b/docs/tasks/administer-cluster/securing-a-cluster.md
index 43a1308d26..a0f84ad4d3 100644
--- a/docs/tasks/administer-cluster/securing-a-cluster.md
+++ b/docs/tasks/administer-cluster/securing-a-cluster.md
@@ -107,7 +107,7 @@ policy.
The [network policies](/docs/tasks/administer-cluster/declare-network-policy/) for a namespace
allows application authors to restrict which pods in other namespaces may access pods and ports
-within their namespace. Many of the supported [Kubernetes networking providers](/docs/concepts/cluster-administration/networking/)
+within their namespaces. Many of the supported [Kubernetes networking providers](/docs/concepts/cluster-administration/networking/)
now respect network policy.
Quota and limit ranges can also be used to control whether users may request node ports or
diff --git a/docs/tasks/administer-cluster/share-configuration.md b/docs/tasks/administer-cluster/share-configuration.md
index c3068c3659..949ab53eed 100644
--- a/docs/tasks/administer-cluster/share-configuration.md
+++ b/docs/tasks/administer-cluster/share-configuration.md
@@ -94,7 +94,7 @@ $ export KUBECONFIG=/path/to/standalone/.kube/config
* The ca_file, key_file, and cert_file referenced above are generated on the
kube master at cluster turnup. They can be found on the master under
-`/srv/kubernetes`. Bearer token/basic auth are also generated on the kube master.
+`/srv/kubernetes`. Bearer token/basic auth is also generated on the kube master.
For more details on `kubeconfig` see [Authenticating Across Clusters with kubeconfig](/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/),
and/or run `kubectl config -h`.
diff --git a/docs/tasks/administer-cluster/static-pod.md b/docs/tasks/administer-cluster/static-pod.md
index dd048d2dc5..a4c8671e87 100644
--- a/docs/tasks/administer-cluster/static-pod.md
+++ b/docs/tasks/administer-cluster/static-pod.md
@@ -84,7 +84,6 @@ If we look at our Kubernetes API server (running on host `my-master`), we see th
[joe@my-master ~] $ kubectl get pods
NAME READY STATUS RESTARTS AGE
static-web-my-node1 1/1 Running 0 2m
-
```
Labels from the static pod are propagated into the mirror-pod and can be used as usual for filtering.
@@ -97,7 +96,6 @@ pods/static-web-my-node1
[joe@my-master ~] $ kubectl get pods
NAME READY STATUS RESTARTS AGE
static-web-my-node1 1/1 Running 0 12s
-
```
Back to our `my-node1` host, we can try to stop the container manually and see, that kubelet automatically restarts it in a while:
diff --git a/docs/tasks/administer-federation/cluster.md b/docs/tasks/administer-federation/cluster.md
index 7d5a718b12..8392d625f2 100644
--- a/docs/tasks/administer-federation/cluster.md
+++ b/docs/tasks/administer-federation/cluster.md
@@ -78,7 +78,7 @@ kubectl --context=rivendell label cluster gondor key1=value1 key2=value2
Starting in Kubernetes 1.7, there is alpha support for directing objects across the federated clusters with the annotation `federation.alpha.kubernetes.io/cluster-selector`. The *ClusterSelector* is conceptually similar to `nodeSelector`, but instead of selecting against labels on nodes, it selects against labels on federated clusters.
-The annotation value must be json formatted and must be parsable into the [ClusterSelector API type](/docs/reference/federation/v1beta1/definitions/#_v1beta1_clusterselector). For example: `[{"key": "load", "operator": "Lt", "values": ["10"]}]`. Content that doesn't parse correctly will throw an error and prevent distribution of the object to any federated clusters. Objects of type Configmap, Secret, Daemonset, Service and Ingress are included in the alpha implementation.
+The annotation value must be JSON formatted and must be parsable into the [ClusterSelector API type](/docs/reference/federation/v1beta1/definitions/#_v1beta1_clusterselector). For example: `[{"key": "load", "operator": "Lt", "values": ["10"]}]`. Content that doesn't parse correctly will throw an error and prevent distribution of the object to any federated clusters. Objects of type ConfigMap, Secret, Daemonset, Service and Ingress are included in the alpha implementation.
Here is an example ClusterSelector annotation, which will only select clusters WITH the label `pci=true` and WITHOUT the label `environment=test`:
@@ -102,7 +102,7 @@ Currently, only integers are supported with `Gt` or `Lt`.
## Clusters API reference
-The full clusters API reference is currently in `federation/v1beta1` and more details can be found in details in the
+The full clusters API reference is currently in `federation/v1beta1` and more details can be found in the
[Federation API reference page](/docs/reference/federation/).
{% endcapture %}
diff --git a/docs/tasks/administer-federation/ingress.md b/docs/tasks/administer-federation/ingress.md
index 4f0977f4ae..3de0493810 100644
--- a/docs/tasks/administer-federation/ingress.md
+++ b/docs/tasks/administer-federation/ingress.md
@@ -78,7 +78,7 @@ You can create a federated ingress in any of the usual ways, for example, using
``` shell
kubectl --context=federation-cluster create -f myingress.yaml
```
-For example ingress YAML configurations, see the [Ingress User Guide](/docs/concepts/services-networking/ingress/)
+For example ingress YAML configurations, see the [Ingress User Guide](/docs/concepts/services-networking/ingress/).
The '--context=federation-cluster' flag tells kubectl to submit the
request to the Federation API endpoint, with the appropriate
credentials. If you have not yet configured such a context, see the
@@ -183,7 +183,7 @@ services need to be identical. If you're using a federated service
this is easy to do. Simply pick a node port that is not already
being used in any of your clusters, and add that to the spec of your
federated service. If you do not specify a node port for your
-federated service, each cluster will choose it's own node port for
+federated service, each cluster will choose its own node port for
its cluster-local shard of the service, and these will probably end
up being different, which is not what you want.
@@ -253,7 +253,7 @@ how to bring up a cluster federation correctly (or have your cluster administrat
Check that:
-1. Your clusters are correctly registered in the Cluster Federation API (`kubectl describe clusters`)
+1. Your clusters are correctly registered in the Cluster Federation API. (`kubectl describe clusters`)
2. Your clusters are all 'Active'. This means that the cluster
Federation system was able to connect and authenticate against the
clusters' endpoints. If not, consult the event logs of the federation-controller-manager pod to ascertain what the failure might be. (`kubectl --namespace=federation logs $(kubectl get pods --namespace=federation -l module=federation-controller-manager -o name`)
@@ -276,7 +276,7 @@ Check that:
2. The load balancer controllers in each of your clusters are of the
correct type ("GLBC") and have been correctly reconfigured by the
federation control plane to share a global GCE load balancer (this
- should happen automatically). If they of the correct type, and
+ should happen automatically). If they are of the correct type, and
have been correctly reconfigured, the UID data item in the GLBC
configmap in each cluster will be identical across all clusters.
See
@@ -291,9 +291,9 @@ Check that:
your GLBC will interfere with the behavior of your federated
ingresses created after the reconfiguration (see
[the GLBC docs](https://github.com/kubernetes/ingress/blob/7dcb4ae17d5def23d3e9c878f3146ac6df61b09d/controllers/gce/README.md)
- for further information. To remedy this,
+ for further information). To remedy this,
delete any ingresses created before the cluster joined the
- federation (and had it's GLBC reconfigured), and recreate them if
+ federation (and had its GLBC reconfigured), and recreate them if
necessary.
{% endcapture %}
diff --git a/docs/tasks/administer-federation/replicaset.md b/docs/tasks/administer-federation/replicaset.md
index ea20022148..896442b35b 100644
--- a/docs/tasks/administer-federation/replicaset.md
+++ b/docs/tasks/administer-federation/replicaset.md
@@ -56,7 +56,7 @@ federation ReplicaSet.
### Spreading Replicas in Underlying Clusters
-By default, replicas are spread equally in all the underlying clusters. For ex:
+By default, replicas are spread equally in all the underlying clusters. For example:
if you have 3 registered clusters and you create a federated ReplicaSet with
`spec.replicas = 9`, then each ReplicaSet in the 3 clusters will have
`spec.replicas=3`.
diff --git a/docs/tasks/configure-pod-container/assign-cpu-resource.md b/docs/tasks/configure-pod-container/assign-cpu-resource.md
index 6988d5d529..84706fd6f1 100644
--- a/docs/tasks/configure-pod-container/assign-cpu-resource.md
+++ b/docs/tasks/configure-pod-container/assign-cpu-resource.md
@@ -119,10 +119,11 @@ Recall that by setting `-cpu "2"`, you configured the Container to attempt to us
But the Container is only being allowed to use about 1 cpu. The Container's CPU use is being
throttled, because the Container is attempting to use more CPU resources than its limit.
-Note: There's another possible explanation for the CPU throttling. The Node might not have
+**Note:** There's another possible explanation for the CPU throttling. The Node might not have
enough CPU resources available. Recall that the prerequisites for this exercise require that each of
your Nodes has at least 1 cpu. If your Container is running on a Node that has only 1 cpu, the Container
cannot use more than 1 cpu regardless of the CPU limit specified for the Container.
+{: .note}
## CPU units
@@ -255,7 +256,7 @@ kubectl delete namespace cpu-example
* [Configure Default Memory Requests and Limits for a Namespace](/docs/tasks/administer-cluster/memory-default-namespace/)
-* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/default-cpu-request-limit/)
+* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/cpu-default-namespace/)
* [Configure Minimum and Maximum Memory Constraints for a Namespace](/docs/tasks/administer-cluster/memory-constraint-namespace/)
diff --git a/docs/tasks/configure-pod-container/assign-memory-resource.md b/docs/tasks/configure-pod-container/assign-memory-resource.md
index b63b2b7c69..73d0481fa2 100644
--- a/docs/tasks/configure-pod-container/assign-memory-resource.md
+++ b/docs/tasks/configure-pod-container/assign-memory-resource.md
@@ -211,7 +211,6 @@ The output shows that the Container starts and fails repeatedly:
```
... Normal Created Created container with id 66a3a20aa7980e61be4922780bf9d24d1a1d8b7395c09861225b0eba1b1f8511
... Warning BackOff Back-off restarting failed container
-
```
View detailed information about your cluster's Nodes:
diff --git a/docs/tasks/configure-pod-container/configmap.md b/docs/tasks/configure-pod-container/configmap.md
index 508f32e2e3..352ea85c11 100644
--- a/docs/tasks/configure-pod-container/configmap.md
+++ b/docs/tasks/configure-pod-container/configmap.md
@@ -223,7 +223,8 @@ metadata:
ConfigMaps allow you to decouple configuration artifacts from image content to keep containerized applications portable.
The ConfigMap API resource stores configuration data as key-value pairs. The data can be consumed in pods or provide the configurations for system components such as controllers. ConfigMap is similar to [Secrets](/docs/concepts/configuration/secret/), but provides a means of working with strings that don't contain sensitive information. Users and system components alike can store configuration data in ConfigMap.
-Note: ConfigMaps should reference properties files, not replace them. Think of the ConfigMap as representing something similar to the Linux `/etc` directory and its contents. For example, if you create a [Kubernetes Volume](/docs/concepts/storage/volumes/) from a ConfigMap, each data item in the ConfigMap is represented by an individual file in the volume.
+**Note:** ConfigMaps should reference properties files, not replace them. Think of the ConfigMap as representing something similar to the Linux `/etc` directory and its contents. For example, if you create a [Kubernetes Volume](/docs/concepts/storage/volumes/) from a ConfigMap, each data item in the ConfigMap is represented by an individual file in the volume.
+{: .note}
The ConfigMap's `data` field contains the configuration data. As shown in the example below, this can be simple -- like individual properties defined using `--from-literal` -- or complex -- like configuration files or JSON blobs defined using `--from-file`.
diff --git a/docs/tasks/configure-pod-container/configure-liveness-readiness-probes.md b/docs/tasks/configure-pod-container/configure-liveness-readiness-probes.md
index 66dd333b18..a842c449cd 100644
--- a/docs/tasks/configure-pod-container/configure-liveness-readiness-probes.md
+++ b/docs/tasks/configure-pod-container/configure-liveness-readiness-probes.md
@@ -180,7 +180,7 @@ can’t it is considered a failure.
{% include code.html language="yaml" file="tcp-liveness-readiness.yaml" ghlink="/docs/tasks/configure-pod-container/tcp-liveness-readiness.yaml" %}
-As you can see, configuration for a TCP check is quite similar to a HTTP check.
+As you can see, configuration for a TCP check is quite similar to an HTTP check.
This example uses both readiness and liveness probes. The kubelet will send the
first readiness probe 5 seconds after the container starts. This will attempt to
connect to the `goproxy` container on port 8080. If the probe succeeds, the pod
diff --git a/docs/tasks/configure-pod-container/configure-persistent-volume-storage.md b/docs/tasks/configure-pod-container/configure-persistent-volume-storage.md
index f4170b7a41..a396c65c90 100644
--- a/docs/tasks/configure-pod-container/configure-persistent-volume-storage.md
+++ b/docs/tasks/configure-pod-container/configure-persistent-volume-storage.md
@@ -188,6 +188,7 @@ each Container.
**Note**: When a Pod consumes a PersistentVolume, the GIDs associated with the
PersistentVolume are not present on the Pod resource itself.
+{: .note}
{% endcapture %}
diff --git a/docs/tasks/configure-pod-container/configure-pod-configmap.md b/docs/tasks/configure-pod-container/configure-pod-configmap.md
index b8d711d8cb..b0c26d8231 100644
--- a/docs/tasks/configure-pod-container/configure-pod-configmap.md
+++ b/docs/tasks/configure-pod-container/configure-pod-configmap.md
@@ -108,7 +108,8 @@ This page provides a series of usage examples demonstrating how to configure Pod
## Configure all key-value pairs in a ConfigMap as Pod environment variables
-Note: This functionality is available to users running Kubernetes v1.6 and later.
+ **Note:** This functionality is available to users running Kubernetes v1.6 and later.
+ {: .note}
1. Create a ConfigMap containing multiple key-value pairs.
@@ -299,7 +300,10 @@ When a ConfigMap already being consumed in a volume is updated, projected keys a
1. Kubelet doesn't support the use of ConfigMaps for pods not found on the API server.
This includes every pod created using kubectl or indirectly via a replication controller.
- It does not include pods created via the Kubelet's `--manifest-url` flag, `--config` flag, or the Kubelet REST API. (Note: these are not commonly-used ways to create pods.)
+ It does not include pods created via the Kubelet's `--manifest-url` flag, `--config` flag, or the Kubelet REST API.
+
+ **Note:** These are not commonly-used ways to create pods.
+ {: .note}
{% endcapture %}
diff --git a/docs/tasks/configure-pod-container/configure-pod-initialization.md b/docs/tasks/configure-pod-container/configure-pod-initialization.md
index f159344b24..be18f82e4d 100644
--- a/docs/tasks/configure-pod-container/configure-pod-initialization.md
+++ b/docs/tasks/configure-pod-container/configure-pod-initialization.md
@@ -34,7 +34,7 @@ shared Volume at `/work-dir`, and the application container mounts the shared
Volume at `/usr/share/nginx/html`. The init container runs the following command
and then terminates:
- wget -O /work-dir/index.html http://kubernetes.io
+ wget -O /work-dir/index.html http://kubernetes.io
Notice that the init container writes the `index.html` file in the root directory
of the nginx server.
diff --git a/docs/tasks/configure-pod-container/configure-projected-volume-storage.md b/docs/tasks/configure-pod-container/configure-projected-volume-storage.md
index 5cb3153121..77ad75a55a 100644
--- a/docs/tasks/configure-pod-container/configure-projected-volume-storage.md
+++ b/docs/tasks/configure-pod-container/configure-projected-volume-storage.md
@@ -43,8 +43,8 @@ the Pod:
The output looks like this:
- NAME READY STATUS RESTARTS AGE
- test-projected-volume 1/1 Running 0 14s
+ NAME READY STATUS RESTARTS AGE
+ test-projected-volume 1/1 Running 0 14s
1. In another terminal, get a shell to the running Container:
diff --git a/docs/tasks/configure-pod-container/configure-service-account.md b/docs/tasks/configure-pod-container/configure-service-account.md
index 51c1460540..55e115bd10 100644
--- a/docs/tasks/configure-pod-container/configure-service-account.md
+++ b/docs/tasks/configure-pod-container/configure-service-account.md
@@ -11,10 +11,11 @@ A service account provides an identity for processes that run in a Pod.
*This is a user introduction to Service Accounts. See also the
[Cluster Admin Guide to Service Accounts](/docs/admin/service-accounts-admin).*
-*Note: This document describes how service accounts behave in a cluster set up
+**Note:** This document describes how service accounts behave in a cluster set up
as recommended by the Kubernetes project. Your cluster administrator may have
customized the behavior in your cluster, in which case this documentation may
-not apply.*
+not apply.
+{: .note}
When you (a human) access the cluster (e.g. using `kubectl`), you are
authenticated by the apiserver as a particular User Account (currently this is
@@ -159,7 +160,8 @@ token: ...
namespace: 7 bytes
```
-> Note that the content of `token` is elided here.
+**Note:** The content of `token` is elided here.
+{: .note}
## Add ImagePullSecrets to a service account
@@ -176,10 +178,10 @@ Next, modify the default service account for the namespace to use this secret as
```shell
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "myregistrykey"}]}'
-
```
Interactive version requiring manual edit:
+
```shell
$ kubectl get serviceaccounts default -o yaml > ./sa.yaml
$ cat sa.yaml
diff --git a/docs/tasks/configure-pod-container/quality-service-pod.md b/docs/tasks/configure-pod-container/quality-service-pod.md
index 60e1d3fb42..e549effb67 100644
--- a/docs/tasks/configure-pod-container/quality-service-pod.md
+++ b/docs/tasks/configure-pod-container/quality-service-pod.md
@@ -81,10 +81,11 @@ spec:
qosClass: Guaranteed
```
-**Note**: If a Container specifies its own memory limit, but does not specify a memory request, Kubernetes
+**Note:** If a Container specifies its own memory limit, but does not specify a memory request, Kubernetes
automatically assigns a memory request that matches the limit. Similarly, if a Container specifies its own
cpu limit, but does not specify a cpu request, Kubernetes automatically assigns a cpu request that matches
the limit.
+{: .note}
Delete your Pod:
@@ -246,7 +247,7 @@ kubectl delete namespace qos-example
* [Configure Default Memory Requests and Limits for a Namespace](/docs/tasks/administer-cluster/memory-default-namespace/)
-* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/default-cpu-request-limit/)
+* [Configure Default CPU Requests and Limits for a Namespace](/docs/tasks/administer-cluster/cpu-default-namespace/)
* [Configure Minimum and Maximum Memory Constraints for a Namespace](/docs/tasks/administer-cluster/memory-constraint-namespace/)
diff --git a/docs/tasks/configure-pod-container/security-context.md b/docs/tasks/configure-pod-container/security-context.md
index 51cd879c58..92a7c00935 100644
--- a/docs/tasks/configure-pod-container/security-context.md
+++ b/docs/tasks/configure-pod-container/security-context.md
@@ -294,9 +294,8 @@ bits 12 and 25 are set. Bit 12 is `CAP_NET_ADMIN`, and bit 25 is `CAP_SYS_TIME`.
See [capability.h](https://github.com/torvalds/linux/blob/master/include/uapi/linux/capability.h)
for definitions of the capability constants.
-**Note**: Linux capability constants have the form `CAP_XXX`. But when you list capabilities
-in your Container manifest, you must omit the `CAP_` portion of the constant. For example,
-to add `CAP_SYS_TIME`, include `SYS_TIME` in your list of capabilities.
+**Note:** Linux capability constants have the form `CAP_XXX`. But when you list capabilities in your Container manifest, you must omit the `CAP_` portion of the constant. For example, to add `CAP_SYS_TIME`, include `SYS_TIME` in your list of capabilities.
+{: .note}
## Assign SELinux labels to a Container
@@ -313,8 +312,8 @@ securityContext:
level: "s0:c123,c456"
```
-**Note**: To assign SELinux labels, the SELinux security module must be loaded
-on the host operating system.
+**Note:** To assign SELinux labels, the SELinux security module must be loaded on the host operating system.
+{: .note}
## Discussion
@@ -333,9 +332,8 @@ need to set the `level` section. This sets the
[Multi-Category Security (MCS)](https://selinuxproject.org/page/NB_MLS)
label given to all Containers in the Pod as well as the Volumes.
-**Warning**: After you specify an MCS label for a Pod, all Pods with the same
-label will able to access the Volume. So if you need inter-Pod
-protection, you must ensure each Pod is assigned a unique MCS label.
+**Warning:** After you specify an MCS label for a Pod, all Pods with the same label can access the Volume. If you need inter-Pod protection, you must assign a unique MCS label to each Pod.
+{: .warning}
{% endcapture %}
diff --git a/docs/tasks/debug-application-cluster/audit.md b/docs/tasks/debug-application-cluster/audit.md
index 5d2f2d773c..a595469b5b 100644
--- a/docs/tasks/debug-application-cluster/audit.md
+++ b/docs/tasks/debug-application-cluster/audit.md
@@ -48,7 +48,7 @@ for configuring where and how audit logs are handled:
- `audit-log-path` - enables the audit log pointing to a file where the requests are being logged to, '-' means standard out.
- `audit-log-maxage` - specifies maximum number of days to retain old audit log files based on the timestamp encoded in their filename.
- `audit-log-maxbackup` - specifies maximum number of old audit log files to retain.
-- `audit-log-maxsize` - specifies maximum size in megabytes of the audit log file before it gets rotated. Defaults to 100MB
+- `audit-log-maxsize` - specifies maximum size in megabytes of the audit log file before it gets rotated. Defaults to 100MB.
If an audit log file already exists, Kubernetes appends new audit logs to that file.
Otherwise, Kubernetes creates an audit log file at the location you specified in
@@ -80,13 +80,13 @@ webhooks.
The structure of audit events changes when enabling the `AdvancedAuditing` feature
flag. This includes some cleanups, such as the `method` reflecting the verb evaluated
by the [authorization layer](/docs/admin/authorization/) instead of the [HTTP verb](/docs/admin/authorization/#determine-the-request-verb).
-Also, instead of always generating two events per request, events are recorded with an associated "stage."
+Also, instead of always generating two events per request, events are recorded with an associated "stage".
The known stages are:
- `RequestReceived` - The stage for events generated as soon as the audit handler receives the request.
- `ResponseStarted` - Once the response headers are sent, but before the response body is sent. This stage is only generated for long-running requests (e.g. watch).
- `ResponseComplete` - Once the response body has been completed.
-- `Panic` - Events generated when a panic occured.
+- `Panic` - Events generated when a panic occurred.
### Audit Policy
@@ -107,7 +107,7 @@ The policy file holds rules that determine the level of an event. Known audit le
- `Request` - log event metadata and request body but not response body.
- `RequestResponse` - log event metadata, request and response bodies.
-When an event is processed it's compared against the list of rules in order.
+When an event is processed, it's compared against the list of rules in order.
The first matching rule sets the audit level of the event. The audit policy is
defined by the [`audit.k8s.io` API group][audit-api].
diff --git a/docs/tasks/debug-application-cluster/debug-application-introspection.md b/docs/tasks/debug-application-cluster/debug-application-introspection.md
index 8607b267b7..bacbd66163 100644
--- a/docs/tasks/debug-application-cluster/debug-application-introspection.md
+++ b/docs/tasks/debug-application-cluster/debug-application-introspection.md
@@ -102,7 +102,7 @@ Events:
53s 53s 1 {kubelet kubernetes-node-wul5} spec.containers{nginx} Normal Started Started container with docker id 90315cc9f513
```
-Here you can see configuration information about the container(s) and Pod (labels, resource requirements, etc.), as well as status information about the container(s) and Pod (state, readiness, restart count, events, etc.)
+Here you can see configuration information about the container(s) and Pod (labels, resource requirements, etc.), as well as status information about the container(s) and Pod (state, readiness, restart count, events, etc.).
The container state is one of Waiting, Running, or Terminated. Depending on the state, additional information will be provided -- here you can see that for a container in Running state, the system tells you when the container started.
diff --git a/docs/tasks/debug-application-cluster/debug-application.md b/docs/tasks/debug-application-cluster/debug-application.md
index 8b37fe7aa2..4a8004e850 100644
--- a/docs/tasks/debug-application-cluster/debug-application.md
+++ b/docs/tasks/debug-application-cluster/debug-application.md
@@ -7,14 +7,14 @@ title: Troubleshoot Applications
This guide is to help users debug applications that are deployed into Kubernetes and not behaving correctly.
This is *not* a guide for people who want to debug their cluster. For that you should check out
-[this guide](/docs/admin/cluster-troubleshooting)
+[this guide](/docs/admin/cluster-troubleshooting).
* TOC
{:toc}
## FAQ
-Users are highly encouraged to check out our [FAQ](https://github.com/kubernetes/kubernetes/wiki/User-FAQ)
+Users are highly encouraged to check out our [FAQ](https://github.com/kubernetes/kubernetes/wiki/User-FAQ).
## Diagnosing the problem
@@ -57,7 +57,7 @@ scheduled. In most cases, `hostPort` is unnecessary, try using a Service object
If a Pod is stuck in the `Waiting` state, then it has been scheduled to a worker node, but it can't run on that machine.
Again, the information from `kubectl describe ...` should be informative. The most common cause of `Waiting` pods is a failure to pull the image. There are three things to check:
-* Make sure that you have the name of the image correct
+* Make sure that you have the name of the image correct.
* Have you pushed the image to the repository?
* Run a manual `docker pull ` on your machine to see if the image can be pulled.
@@ -184,8 +184,8 @@ in the endpoints list, it's likely that the proxy can't contact your pods.
There are three things to
check:
- * Are your pods working correctly? Look for restart count, and [debug pods](#debugging-pods)
- * Can you connect to your pods directly? Get the IP address for the Pod, and try to connect directly to that IP
+ * Are your pods working correctly? Look for restart count, and [debug pods](#debugging-pods).
+ * Can you connect to your pods directly? Get the IP address for the Pod, and try to connect directly to that IP.
* Is your application serving on the port that you configured? Kubernetes doesn't do port remapping, so if your application serves on 8080, the `containerPort` field needs to be 8080.
#### More information
diff --git a/docs/tasks/debug-application-cluster/logging-stackdriver.md b/docs/tasks/debug-application-cluster/logging-stackdriver.md
index 60bc77cb4c..fb29b010cf 100644
--- a/docs/tasks/debug-application-cluster/logging-stackdriver.md
+++ b/docs/tasks/debug-application-cluster/logging-stackdriver.md
@@ -193,7 +193,7 @@ will have log names `container_1` and `container_2` respectively.
System components have resource type `compute`, which is named
`GCE VM Instance` in the interface. Log names for system components are fixed.
-For a GKE node, every log entry from a system component has one the following
+For a GKE node, every log entry from a system component has one of the following
log names:
* docker
@@ -234,9 +234,9 @@ the Stackdriver [Exporting Logs page](https://cloud.google.com/logging/docs/expo
## Configuring Stackdriver Logging Agents
-Sometimes the default installation of Stackdriver Logging may not suite your needs, for example:
+Sometimes the default installation of Stackdriver Logging may not suit your needs, for example:
-* You may want to add more resources because default performance doesn't suite your needs.
+* You may want to add more resources because default performance doesn't suit your needs.
* You may want to introduce additional parsing to extract more metadata from your log messages,
like severity or source code reference.
* You may want to send logs not only to Stackdriver or send it to Stackdriver only partially.
diff --git a/docs/tasks/debug-application-cluster/resource-usage-monitoring.md b/docs/tasks/debug-application-cluster/resource-usage-monitoring.md
index 159426e29e..9ca48d9bd0 100644
--- a/docs/tasks/debug-application-cluster/resource-usage-monitoring.md
+++ b/docs/tasks/debug-application-cluster/resource-usage-monitoring.md
@@ -16,7 +16,7 @@ Let's look at some of the other components in more detail.
### cAdvisor
-cAdvisor is an open source container resource usage and performance analysis agent. It is purpose-built for containers and supports Docker containers natively. In Kubernetes, cadvisor is integrated into the Kubelet binary. cAdvisor auto-discovers all containers in the machine and collects CPU, memory, filesystem, and network usage statistics. cAdvisor also provides the overall machine usage by analyzing the 'root'? container on the machine.
+cAdvisor is an open source container resource usage and performance analysis agent. It is purpose-built for containers and supports Docker containers natively. In Kubernetes, cAdvisor is integrated into the Kubelet binary. cAdvisor auto-discovers all containers in the machine and collects CPU, memory, filesystem, and network usage statistics. cAdvisor also provides the overall machine usage by analyzing the 'root' container on the machine.
On most Kubernetes clusters, cAdvisor exposes a simple UI for on-machine containers on port 4194. Here is a snapshot of part of cAdvisor's UI that shows the overall machine usage:
diff --git a/docs/tasks/federation/federation-service-discovery.md b/docs/tasks/federation/federation-service-discovery.md
index 3ead57bb01..b71bae58e3 100644
--- a/docs/tasks/federation/federation-service-discovery.md
+++ b/docs/tasks/federation/federation-service-discovery.md
@@ -227,8 +227,8 @@ due to caching by intermediate DNS servers.
1. Notice that there is a normal ('A') record for each service shard that has at least one healthy backend endpoint. For example, in us-central1-a, 104.197.247.191 is the external IP address of the service shard in that zone, and in asia-east1-a the address is 130.211.56.221.
2. Similarly, there are regional 'A' records which include all healthy shards in that region. For example, 'us-central1'. These regional records are useful for clients which do not have a particular zone preference, and as a building block for the automated locality and failover mechanism described below.
-2. For zones where there are currently no healthy backend endpoints, a CNAME ('Canonical Name') record is used to alias (automatically redirect) those queries to the next closest healthy zone. In the example, the service shard in us-central1-f currently has no healthy backend endpoints (i.e. Pods), so a CNAME record has been created to automatically redirect queries to other shards in that region (us-central1 in this case).
-3. Similarly, if no healthy shards exist in the enclosing region, the search progresses further afield. In the europe-west1-d availability zone, there are no healthy backends, so queries are redirected to the broader europe-west1 region (which also has no healthy backends), and onward to the global set of healthy addresses (' nginx.mynamespace.myfederation.svc.example.com.')
+3. For zones where there are currently no healthy backend endpoints, a CNAME ('Canonical Name') record is used to alias (automatically redirect) those queries to the next closest healthy zone. In the example, the service shard in us-central1-f currently has no healthy backend endpoints (i.e. Pods), so a CNAME record has been created to automatically redirect queries to other shards in that region (us-central1 in this case).
+4. Similarly, if no healthy shards exist in the enclosing region, the search progresses further afield. In the europe-west1-d availability zone, there are no healthy backends, so queries are redirected to the broader europe-west1 region (which also has no healthy backends), and onward to the global set of healthy addresses (' nginx.mynamespace.myfederation.svc.example.com.').
The above set of DNS records is automatically kept in sync with the
current state of health of all service shards globally by the
@@ -355,7 +355,7 @@ how to bring up a cluster federation correctly (or have your cluster administrat
#### I can create a federated service successfully against the cluster federation API, but no matching services are created in my underlying clusters
Check that:
-1. Your clusters are correctly registered in the Cluster Federation API (`kubectl describe clusters`)
+1. Your clusters are correctly registered in the Cluster Federation API (`kubectl describe clusters`).
2. Your clusters are all 'Active'. This means that the cluster Federation system was able to connect and authenticate against the clusters' endpoints. If not, consult the logs of the federation-controller-manager pod to ascertain what the failure might be. (`kubectl --namespace=federation logs $(kubectl get pods --namespace=federation -l module=federation-controller-manager -o name`)
3. That the login credentials provided to the Cluster Federation API for the clusters have the correct authorization and quota to create services in the relevant namespace in the clusters. Again you should see associated error messages providing more detail in the above log file if this is not the case.
4. Whether any other error is preventing the service creation operation from succeeding (look for `service-controller` errors in the output of `kubectl logs federation-controller-manager --namespace federation`).
@@ -365,7 +365,7 @@ Check that:
1. Your federation name, DNS provider, DNS domain name are configured correctly. Consult the [federation admin guide](/docs/admin/federation/) or [tutorial](https://github.com/kelseyhightower/kubernetes-cluster-federation) to learn
how to configure your Cluster Federation system's DNS provider (or have your cluster administrator do this for you).
-2. Confirm that the Cluster Federation's service-controller is successfully connecting to and authenticating against your selected DNS provider (look for `service-controller` errors or successes in the output of `kubectl logs federation-controller-manager --namespace federation`)
+2. Confirm that the Cluster Federation's service-controller is successfully connecting to and authenticating against your selected DNS provider (look for `service-controller` errors or successes in the output of `kubectl logs federation-controller-manager --namespace federation`).
3. Confirm that the Cluster Federation's service-controller is successfully creating DNS records in your DNS provider (or outputting errors in its logs explaining in more detail what's failing).
#### Matching DNS records are created in my DNS provider, but clients are unable to resolve against those names
diff --git a/docs/tasks/federation/set-up-cluster-federation-kubefed.md b/docs/tasks/federation/set-up-cluster-federation-kubefed.md
index cf74b87eef..01d0da5d6e 100644
--- a/docs/tasks/federation/set-up-cluster-federation-kubefed.md
+++ b/docs/tasks/federation/set-up-cluster-federation-kubefed.md
@@ -8,10 +8,10 @@ title: Set up Cluster Federation with Kubefed
{:toc}
Kubernetes version 1.5 and above includes a new command line tool called
-`kubefed` to help you administrate your federated clusters.
-`kubefed` helps you to deploy a new Kubernetes cluster federation
-control plane, and to add clusters to or remove clusters from an
-existing federation control plane.
+[`kubefed`](/docs/admin/kubefed/) to help you administrate your federated
+clusters. `kubefed` helps you to deploy a new Kubernetes cluster federation
+control plane, and to add clusters to or remove clusters from an existing
+federation control plane.
This guide explains how to administer a Kubernetes Cluster Federation
using `kubefed`.
@@ -69,7 +69,7 @@ kubefed is available as a [snap](https://snapcraft.io/) application.
sudo snap install kubefed --classic
-2. Run `kubefed version` to verify that the version you've installed is sufficiently up-to-date.
+2. Run [`kubefed version`](/docs/admin/kubefed_version/) to verify that the version you've installed is sufficiently up-to-date.
## Choosing a host cluster.
@@ -101,8 +101,8 @@ control plane.
## Deploying a federation control plane
To deploy a federation control plane on your host cluster, run
-`kubefed init` command. When you use `kubefed init`, you must provide
-the following:
+[`kubefed init`](/docs/admin/kubefed_init/) command. When you use
+`kubefed init`, you must provide the following:
* Federation name
* `--host-cluster-context`, the `kubeconfig` context for the host cluster
@@ -262,7 +262,7 @@ kubefed init fellowship \
[service](/docs/concepts/services-networking/service/) on the host cluster. By default,
this service is exposed as a
[load balanced service](/docs/user-guide/services/#type-loadbalancer).
-Most on-premises and bare-metal enviroments, and some cloud
+Most on-premises and bare-metal environments, and some cloud
environments lack support for load balanced services. `kubefed init`
allows exposing the federation API server as a
[`NodePort` service](/docs/user-guide/services/#type-nodeport) on
@@ -367,13 +367,14 @@ kubefed init fellowship \
```
For more information see
-[Setting up CoreDNS as DNS provider for Cluster Federation](/docs/tutorials/federation/set-up-coredns-provider-federation/)
+[Setting up CoreDNS as DNS provider for Cluster Federation](/docs/tutorials/federation/set-up-coredns-provider-federation/).
## Adding a cluster to a federation
Once you've deployed a federation control plane, you'll need to make
that control plane aware of the clusters it should manage. You can add
-a cluster to your federation by using the `kubefed join` command.
+a cluster to your federation by using the [`kubefed join`](/docs/admin/kubefed_join)
+command.
To use `kubefed join`, you'll need to provide the name of the cluster
you want to add to the federation, and the `--host-cluster-context`
@@ -463,11 +464,11 @@ commands.
In all other cases, you must update `kube-dns` configuration manually
as described in the
-[Updating KubeDNS section of the admin guide](/docs/admin/federation/)
+[Updating KubeDNS section of the admin guide](/docs/admin/federation/).
## Removing a cluster from a federation
-To remove a cluster from a federation, run the `kubefed unjoin`
+To remove a cluster from a federation, run the [`kubefed unjoin`](/docs/admin/kubefed_unjoin)
command with the cluster name and the federation's
`--host-cluster-context`:
diff --git a/docs/tasks/federation/set-up-coredns-provider-federation.md b/docs/tasks/federation/set-up-coredns-provider-federation.md
index 994727dbcf..8bbde349fe 100644
--- a/docs/tasks/federation/set-up-coredns-provider-federation.md
+++ b/docs/tasks/federation/set-up-coredns-provider-federation.md
@@ -13,7 +13,7 @@ DNS provider for Cluster Federation.
{% capture objectives %}
* Configure and deploy CoreDNS server
-* Bringup federation with CoreDNS as dns provider
+* Bring up federation with CoreDNS as dns provider
* Setup CoreDNS server in nameserver lookup chain
{% endcapture %}
diff --git a/docs/tasks/inject-data-application/define-command-argument-container.md b/docs/tasks/inject-data-application/define-command-argument-container.md
index 9ea391a804..808b7b521f 100644
--- a/docs/tasks/inject-data-application/define-command-argument-container.md
+++ b/docs/tasks/inject-data-application/define-command-argument-container.md
@@ -77,8 +77,9 @@ the techniques available for defining environment variables, including
and
[Secrets](/docs/concepts/configuration/secret/).
-NOTE: The environment variable appears in parentheses, `"$(VAR)"`. This is
+**Note:** The environment variable appears in parentheses, `"$(VAR)"`. This is
required for the variable to be expanded in the `command` or `args` field.
+{: .note}
## Run a command in a shell
diff --git a/docs/tasks/inject-data-application/define-environment-variable-container.md b/docs/tasks/inject-data-application/define-environment-variable-container.md
index 11f46f69d3..adb159a5c3 100644
--- a/docs/tasks/inject-data-application/define-environment-variable-container.md
+++ b/docs/tasks/inject-data-application/define-environment-variable-container.md
@@ -51,7 +51,7 @@ Pod:
1. In your shell, run the `printenv` command to list the environment variables.
- root@envar-demo:/# printenv
+ root@envar-demo:/# printenv
The output is similar to this:
diff --git a/docs/tasks/inject-data-application/distribute-credentials-secure.md b/docs/tasks/inject-data-application/distribute-credentials-secure.md
index 946fe40761..c85ea16a29 100644
--- a/docs/tasks/inject-data-application/distribute-credentials-secure.md
+++ b/docs/tasks/inject-data-application/distribute-credentials-secure.md
@@ -41,6 +41,7 @@ username and password:
**Note:** If you want to skip the Base64 encoding step, you can create a Secret
by using the `kubectl create secret` command:
+ {: .note}
kubectl create secret generic test-secret --from-literal=username='my-app' --from-literal=password='39528$vdg7Jb'
diff --git a/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md b/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md
index 606fb99c7d..a497f6f2bd 100644
--- a/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md
+++ b/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md
@@ -46,8 +46,9 @@ The first element specifies that the value of the Pod's
The second element specifies that the value of the Pod's `annotations`
field should be stored in a file named `annotations`.
-**Note**: The fields in this example are Pod fields. They are not
+**Note:** The fields in this example are Pod fields. They are not
fields of the Container in the Pod.
+{: .note}
Create the Pod:
@@ -204,8 +205,9 @@ DownwardAPIVolumeFiles.
* The Pod's labels
* The Pod's annotations
-**Note**: If CPU and memory limits are not specified for a Container, the
+**Note:** If CPU and memory limits are not specified for a Container, the
Downward API defaults to the node allocatable value for CPU and memory.
+{: .note}
## Project keys to specific paths and file permissions
diff --git a/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md b/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md
index 4934aebb17..391b58ee54 100644
--- a/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md
+++ b/docs/tasks/inject-data-application/environment-variable-expose-pod-information.md
@@ -51,8 +51,9 @@ The first element in the array specifies that the `MY_NODE_NAME` environment
variable gets its value from the Pod's `spec.nodeName` field. Similarly, the
other environment variables get their names from Pod fields.
-**Note**: The fields in this example are Pod fields. They are not fields of the
+**Note:** The fields in this example are Pod fields. They are not fields of the
Container in the Pod.
+{: .note}
Create the Pod:
diff --git a/docs/tasks/job/fine-parallel-processing-work-queue/index.md b/docs/tasks/job/fine-parallel-processing-work-queue/index.md
index a3818c89f1..db4a8ebf8f 100644
--- a/docs/tasks/job/fine-parallel-processing-work-queue/index.md
+++ b/docs/tasks/job/fine-parallel-processing-work-queue/index.md
@@ -50,7 +50,7 @@ If you're not working from the source tree, you could also download [`redis-pod.
Now let's fill the queue with some "tasks". In our example, our tasks are just strings to be
printed.
-Start a temporary interactive pod for running the Redis CLI
+Start a temporary interactive pod for running the Redis CLI.
```shell
$ kubectl run -i --tty temp --image redis --command "/bin/sh"
diff --git a/docs/tasks/manage-daemon/rollback-daemon-set.md b/docs/tasks/manage-daemon/rollback-daemon-set.md
index cd1d9fa63f..1bcef271c4 100644
--- a/docs/tasks/manage-daemon/rollback-daemon-set.md
+++ b/docs/tasks/manage-daemon/rollback-daemon-set.md
@@ -16,7 +16,7 @@ This page shows how to perform a rollback on a DaemonSet.
* The DaemonSet rollout history and DaemonSet rollback features are only
supported in `kubectl` in Kubernetes version 1.7 or later.
* Make sure you know how to [perform a rolling update on a
- DaemonSet](/docs/tasks/manage-daemon/update-daemon-set/)
+ DaemonSet](/docs/tasks/manage-daemon/update-daemon-set/).
{% endcapture %}
@@ -147,7 +147,7 @@ have revision 1 and 2 in the system, and roll back from revision 2 to revision
## Troubleshooting
* See [troubleshooting DaemonSet rolling
- update](/docs/tasks/manage-daemon/update-daemon-set/#troubleshooting)
+ update](/docs/tasks/manage-daemon/update-daemon-set/#troubleshooting).
{% endcapture %}
diff --git a/docs/tasks/manage-gpus/scheduling-gpus.md b/docs/tasks/manage-gpus/scheduling-gpus.md
index 7ee29102ed..8981bc5a31 100644
--- a/docs/tasks/manage-gpus/scheduling-gpus.md
+++ b/docs/tasks/manage-gpus/scheduling-gpus.md
@@ -13,7 +13,7 @@ This page describes how users can consume GPUs and the current limitations.
{% capture prerequisites %}
-1. Kubernetes nodes have to be pre-installed with Nvidia drivers. Kubelet will not detect Nvidia GPUs otherwise. Try to re-install nvidia drivers if kubelet fails to expose Nvidia GPUs as part of Node Capacity.
+1. Kubernetes nodes have to be pre-installed with Nvidia drivers. Kubelet will not detect Nvidia GPUs otherwise. Try to re-install Nvidia drivers if kubelet fails to expose Nvidia GPUs as part of Node Capacity. After installing the driver, run `nvidia-docker-plugin` to confirm that all drivers have been loaded.
2. A special **alpha** feature gate `Accelerators` has to be set to true across the system: `--feature-gates="Accelerators=true"`.
3. Nodes must be using `docker engine` as the container runtime.
diff --git a/docs/tasks/run-application/configure-pdb.md b/docs/tasks/run-application/configure-pdb.md
index 0f0eb0769c..9a0c3365aa 100644
--- a/docs/tasks/run-application/configure-pdb.md
+++ b/docs/tasks/run-application/configure-pdb.md
@@ -14,8 +14,8 @@ nodes.
{% capture prerequisites %}
* You are the owner of an application running on a Kubernetes cluster that requires
high availability.
-* You should know how to deploy [Replicated Stateless Applications](/docs/tasks/run-application/run-stateless-application-deployment.md)
- and/or [Replicated Stateful Applications](/docs/tasks/run-application/run-replicated-stateful-application.md).
+* You should know how to deploy [Replicated Stateless Applications](/docs/tasks/run-application/run-stateless-application-deployment/)
+ and/or [Replicated Stateful Applications](/docs/tasks/run-application/run-replicated-stateful-application/).
* You should have read about [Pod Disruptions](/docs/concepts/workloads/pods/disruptions/).
* You should confirm with your cluster owner or service provider that they respect
Pod Disruption Budgets.
@@ -26,7 +26,7 @@ nodes.
## Protecting an Application with a PodDisruptionBudget
1. Identify what application you want to protect with a PodDisruptionBudget (PDB).
-1. Think about how your application reacts to disruptions
+1. Think about how your application reacts to disruptions.
1. Create a PDB definition as a YAML file.
1. Create the PDB object from the YAML file.
@@ -57,22 +57,22 @@ described in [Arbitrary Controllers and Selectors](#arbitrary-controllers-and-se
Decide how many instances can be down at the same time for a short period
due to a voluntary disruption.
-- Stateless frontends
+- Stateless frontends:
- Concern: don't reduce serving capacity by more than 10%.
- Solution: use PDB with minAvailable 90% for example.
-- Single-instance Stateful Application
+- Single-instance Stateful Application:
- Concern: do not terminate this application without talking to me.
- Possible Solution 1: Do not use a PDB and tolerate occasional downtime.
- Possible Solution 2: Set PDB with maxUnavailable=0. Have an understanding
(outside of Kubernetes) that the cluster operator needs to consult you before
termination. When the cluster operator contacts you, prepare for downtime,
and then delete the PDB to indicate readiness for disruption. Recreate afterwards.
-- Multiple-instance Stateful application such as Consul, ZooKeeper, or etcd
+- Multiple-instance Stateful application such as Consul, ZooKeeper, or etcd:
- Concern: Do not reduce number of instances below quorum, otherwise writes fail.
- Possible Solution 1: set maxUnavailable to 1 (works with varying scale of application).
- Possible Solution 2: set minAvailable to quorum-size (e.g. 3 when scale is 5). (Allows more disruptions at once).
- Restartable Batch Job:
- - Concern: Job needs to complete in case of voluntary disruption
+ - Concern: Job needs to complete in case of voluntary disruption.
- Possible solution: Do not create a PDB. The Job controller will create a replacement pod.
## Specifying a PodDisruptionBudget
diff --git a/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md b/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md
index b44baa485f..3775bef981 100644
--- a/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md
+++ b/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md
@@ -134,7 +134,7 @@ by making use of the `autoscaling/v2alpha1` API version.
First, get the YAML of your HorizontalPodAutoscaler in the `autoscaling/v2alpha1` form:
```shell
-$ kubectl get hpa.autoscaling.v2alpha1 -o yaml > /tmp/hpa-v2.yaml
+$ kubectl get hpa.v2alpha1.autoscaling -o yaml > /tmp/hpa-v2.yaml
```
Open the `/tmp/hpa-v2.yaml` file in an editor, and you should see YAML which looks like this:
@@ -294,7 +294,7 @@ Conditions:
---- ------ ------ -------
AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale
ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_requests
- ScalingLimited False DesiredWithinRange the desired replica count is within the acceptible range
+ ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable range
Events:
```
diff --git a/docs/tasks/run-application/mysql-deployment.yaml b/docs/tasks/run-application/mysql-deployment.yaml
index 19e102947f..1bf9671ef1 100644
--- a/docs/tasks/run-application/mysql-deployment.yaml
+++ b/docs/tasks/run-application/mysql-deployment.yaml
@@ -4,7 +4,7 @@ metadata:
name: mysql
spec:
ports:
- - port: 3306
+ - port: 3306
selector:
app: mysql
clusterIP: None
diff --git a/docs/tasks/tools/install-kubectl.md b/docs/tasks/tools/install-kubectl.md
index a2816c0aa5..e7f80b235d 100644
--- a/docs/tasks/tools/install-kubectl.md
+++ b/docs/tasks/tools/install-kubectl.md
@@ -20,13 +20,13 @@ Here are a few methods to install kubectl.
{% capture macos %}
1. Download the latest release with the command:
- curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl
+ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl
To download a specific version, replace the `$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)` portion of the command with the specific version.
For example, to download version {{page.fullversion}} on MacOS, type:
- curl -LO https://storage.googleapis.com/kubernetes-release/release/{{page.fullversion}}/bin/darwin/amd64/kubectl
+ curl -LO https://storage.googleapis.com/kubernetes-release/release/{{page.fullversion}}/bin/darwin/amd64/kubectl
2. Make the kubectl binary executable.
@@ -44,13 +44,13 @@ Here are a few methods to install kubectl.
{% capture linux %}
1. Download the latest release with the command:
- curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
+ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
To download a specific version, replace the `$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)` portion of the command with the specific version.
For example, to download version {{page.fullversion}} on Linux, type:
- curl -LO https://storage.googleapis.com/kubernetes-release/release/{{page.fullversion}}/bin/linux/amd64/kubectl
+ curl -LO https://storage.googleapis.com/kubernetes-release/release/{{page.fullversion}}/bin/linux/amd64/kubectl
2. Make the kubectl binary executable.
@@ -70,7 +70,7 @@ Here are a few methods to install kubectl.
Or if you have `curl` installed, use this command:
- curl -LO https://storage.googleapis.com/kubernetes-release/release/{{page.fullversion}}/bin/windows/amd64/kubectl.exe
+ curl -LO https://storage.googleapis.com/kubernetes-release/release/{{page.fullversion}}/bin/windows/amd64/kubectl.exe
To find out the latest stable version (for example, for scripting), take a look at https://storage.googleapis.com/kubernetes-release/release/stable.txt
@@ -90,9 +90,9 @@ kubectl can be installed as part of the Google Cloud SDK.
1. Install the [Google Cloud SDK](https://cloud.google.com/sdk/).
2. Run the following command to install `kubectl`:
- gcloud components install kubectl
+ gcloud components install kubectl
-3. Run `kubectl version` to verify that the verison you've installed is sufficiently up-to-date.
+3. Run `kubectl version` to verify that the version you've installed is sufficiently up-to-date.
## Install with snap on Ubuntu
@@ -100,31 +100,31 @@ kubectl is available as a [snap](https://snapcraft.io/) application.
1. If you are on Ubuntu or one of other Linux distributions that support [snap](https://snapcraft.io/docs/core/install) package manager, you can install with:
- sudo snap install kubectl --classic
+ sudo snap install kubectl --classic
-2. Run `kubectl version` to verify that the verison you've installed is sufficiently up-to-date.
+2. Run `kubectl version` to verify that the version you've installed is sufficiently up-to-date.
## Install with Homebrew on macOS
1. If you are on macOS and using [Homebrew](https://brew.sh/) package manager, you can install with:
- brew install kubectl
+ brew install kubectl
-2. Run `kubectl version` to verify that the verison you've installed is sufficiently up-to-date.
+2. Run `kubectl version` to verify that the version you've installed is sufficiently up-to-date.
## Install with Chocolatey on Windows
1. If you are on Windows and using [Chocolatey](https://chocolatey.org) package manager, you can install with:
- choco install kubernetes-cli
+ choco install kubernetes-cli
-2. Run `kubectl version` to verify that the verison you've installed is sufficiently up-to-date.
+2. Run `kubectl version` to verify that the version you've installed is sufficiently up-to-date.
3. Configure kubectl to use a remote Kubernetes cluster:
- cd C:\users\yourusername (Or wherever your %HOME% directory is)
- mkdir .kube
- cd .kube
- touch config
+ cd C:\users\yourusername (Or wherever your %HOME% directory is)
+ mkdir .kube
+ cd .kube
+ touch config
Edit the config file with a text editor of your choice, such as Notepad for example.
@@ -137,7 +137,7 @@ By default, kubectl configuration is located at `~/.kube/config`.
Check that kubectl is properly configured by getting the cluster state:
```shell
-$ kubectl cluster-info
+kubectl cluster-info
```
If you see a URL response, kubectl is correctly configured to access your cluster.
diff --git a/docs/tools/kompose/user-guide.md b/docs/tools/kompose/user-guide.md
index 1a54860bba..65e467989c 100644
--- a/docs/tools/kompose/user-guide.md
+++ b/docs/tools/kompose/user-guide.md
@@ -34,19 +34,19 @@ We have multiple ways to install Kompose. Our preferred method is downloading th
### GitHub release
-Kompose is released via GitHub on a three-week cycle, you can see all current releases on the [GitHub release page](https://github.com/kubernetes-incubator/kompose/releases).
+Kompose is released via GitHub on a three-week cycle, you can see all current releases on the [GitHub release page](https://github.com/kubernetes/kompose/releases).
-The current release we use is `0.5.0`.
+The current release we use is `1.0.0`.
```sh
# Linux
-curl -L https://github.com/kubernetes-incubator/kompose/releases/download/v0.5.0/kompose-linux-amd64 -o kompose
+curl -L https://github.com/kubernetes/kompose/releases/download/v1.0.0/kompose-linux-amd64 -o kompose
# macOS
-curl -L https://github.com/kubernetes-incubator/kompose/releases/download/v0.5.0/kompose-darwin-amd64 -o kompose
+curl -L https://github.com/kubernetes/kompose/releases/download/v1.0.0/kompose-darwin-amd64 -o kompose
# Windows
-curl -L https://github.com/kubernetes-incubator/kompose/releases/download/v0.5.0/kompose-windows-amd64.exe -o kompose.exe
+curl -L https://github.com/kubernetes/kompose/releases/download/v1.0.0/kompose-windows-amd64.exe -o kompose.exe
```
Make the binary executable and move it to your PATH (e.g. `/usr/local/bin`)
@@ -127,7 +127,7 @@ frontend-service.yaml mongodb-deployment.yaml redis-slave
redis-master-deployment.yaml
```
-When multiple docker-compose files are provided the configuration is merged. Any configuration that is common will be over ridden by subsequent file.
+When multiple docker-compose files are provided the configuration is merged. Any configuration that is common will be overridden by subsequent file.
Using `--bundle, --dab` to specify a DAB file as below:
@@ -300,7 +300,7 @@ file "redis-rc.yaml" created
file "web-rc.yaml" created
```
-The `*-rc.yaml` files contain the Replication Controller objects. If you want to specify replicas (default is 1), use `--replicas` flag: `$ kompose convert --rc --replicas 3`
+The `*-rc.yaml` files contain the Replication Controller objects. If you want to specify replicas (default is 1), use `--replicas` flag: `$ kompose convert --rc --replicas 3`.
```console
$ kompose convert --ds
@@ -310,7 +310,7 @@ file "redis-daemonset.yaml" created
file "web-daemonset.yaml" created
```
-The `*-daemonset.yaml` files contain the Daemon Set objects
+The `*-daemonset.yaml` files contain the Daemon Set objects.
If you want to generate a Chart to be used with [Helm](https://github.com/kubernetes/helm) simply do:
diff --git a/docs/tutorials/clusters/apparmor.md b/docs/tutorials/clusters/apparmor.md
index 24602f3af3..4e1cec4a1f 100644
--- a/docs/tutorials/clusters/apparmor.md
+++ b/docs/tutorials/clusters/apparmor.md
@@ -44,59 +44,59 @@ Make sure:
will **silently ignore** any AppArmor settings that are provided. To ensure that your Pods are
receiving the expected protections, it is important to verify the Kubelet version of your nodes:
- ```
- $ kubectl get nodes -o=jsonpath=$'{range .items[*]}{@.metadata.name}: {@.status.nodeInfo.kubeletVersion}\n{end}'
- gke-test-default-pool-239f5d02-gyn2: v1.4.0
- gke-test-default-pool-239f5d02-x1kf: v1.4.0
- gke-test-default-pool-239f5d02-xwux: v1.4.0
- ```
+ ```shell
+ $ kubectl get nodes -o=jsonpath=$'{range .items[*]}{@.metadata.name}: {@.status.nodeInfo.kubeletVersion}\n{end}'
+ gke-test-default-pool-239f5d02-gyn2: v1.4.0
+ gke-test-default-pool-239f5d02-x1kf: v1.4.0
+ gke-test-default-pool-239f5d02-xwux: v1.4.0
+ ```
2. AppArmor kernel module is enabled -- For the Linux kernel to enforce an AppArmor profile, the
AppArmor kernel module must be installed and enabled. Several distributions enable the module by
default, such as Ubuntu and SUSE, and many others provide optional support. To check whether the
module is enabled, check the `/sys/module/apparmor/parameters/enabled` file:
- ```
- $ cat /sys/module/apparmor/parameters/enabled
- Y
- ```
+ ```shell
+ $ cat /sys/module/apparmor/parameters/enabled
+ Y
+ ```
- If the Kubelet contains AppArmor support (>= v1.4), it will refuse to run a Pod with AppArmor
- options if the kernel module is not enabled.
+ If the Kubelet contains AppArmor support (>= v1.4), it will refuse to run a Pod with AppArmor
+ options if the kernel module is not enabled.
- **Note:** Ubuntu carries many AppArmor patches that have not been merged into the upstream Linux
- kernel, including patches that add additional hooks and features. Kubernetes has only been
- tested with the upstream version, and does not promise support for other features.
+ **Note:** Ubuntu carries many AppArmor patches that have not been merged into the upstream Linux
+ kernel, including patches that add additional hooks and features. Kubernetes has only been
+ tested with the upstream version, and does not promise support for other features.
3. Container runtime is Docker -- Currently the only Kubernetes-supported container runtime that
also supports AppArmor is Docker. As more runtimes add AppArmor support, the options will be
expanded. You can verify that your nodes are running docker with:
- ```
- $ kubectl get nodes -o=jsonpath=$'{range .items[*]}{@.metadata.name}: {@.status.nodeInfo.containerRuntimeVersion}\n{end}'
- gke-test-default-pool-239f5d02-gyn2: docker://1.11.2
- gke-test-default-pool-239f5d02-x1kf: docker://1.11.2
- gke-test-default-pool-239f5d02-xwux: docker://1.11.2
- ```
+ ```shell
+ $ kubectl get nodes -o=jsonpath=$'{range .items[*]}{@.metadata.name}: {@.status.nodeInfo.containerRuntimeVersion}\n{end}'
+ gke-test-default-pool-239f5d02-gyn2: docker://1.11.2
+ gke-test-default-pool-239f5d02-x1kf: docker://1.11.2
+ gke-test-default-pool-239f5d02-xwux: docker://1.11.2
+ ```
- If the Kubelet contains AppArmor support (>= v1.4), it will refuse to run a Pod with AppArmor
- options if the runtime is not Docker.
+ If the Kubelet contains AppArmor support (>= v1.4), it will refuse to run a Pod with AppArmor
+ options if the runtime is not Docker.
4. Profile is loaded -- AppArmor is applied to a Pod by specifying an AppArmor profile that each
container should be run with. If any of the specified profiles is not already loaded in the
kernel, the Kubelet (>= v1.4) will reject the Pod. You can view which profiles are loaded on a
node by checking the `/sys/kernel/security/apparmor/profiles` file. For example:
- ```
- $ ssh gke-test-default-pool-239f5d02-gyn2 "sudo cat /sys/kernel/security/apparmor/profiles | sort"
- apparmor-test-deny-write (enforce)
- apparmor-test-audit-write (enforce)
- docker-default (enforce)
- k8s-nginx (enforce)
- ```
+ ```shell
+ $ ssh gke-test-default-pool-239f5d02-gyn2 "sudo cat /sys/kernel/security/apparmor/profiles | sort"
+ apparmor-test-deny-write (enforce)
+ apparmor-test-audit-write (enforce)
+ docker-default (enforce)
+ k8s-nginx (enforce)
+ ```
- For more details on loading profiles on nodes, see
- [Setting up nodes with profiles](#setting-up-nodes-with-profiles).
+ For more details on loading profiles on nodes, see
+ [Setting up nodes with profiles](#setting-up-nodes-with-profiles).
As long as the Kubelet version includes AppArmor support (>= v1.4), the Kubelet will reject a Pod
with AppArmor options if any of the prerequisites are not met. You can also verify AppArmor support
@@ -130,7 +130,7 @@ container.apparmor.security.beta.kubernetes.io/:
Where `` is the name of the container to apply the profile to, and ``
specifies the profile to apply. The `profile_ref` can be one of:
-* `runtime/default` to apply the runtime's default profile.
+* `runtime/default` to apply the runtime's default profile
* `localhost/` to apply the profile loaded on the host with the name ``
See the [API Reference](#api-reference) for the full details on the annotation and profile name formats.
@@ -407,7 +407,7 @@ Specifying the profile a container will run with:
containers, and unconfined (no profile) for privileged containers.
- `localhost/`: Refers to a profile loaded on the node (localhost) by name.
- The possible profile names are detailed in the
- [core policy reference](http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference#Profile_names_and_attachment_specifications)
+ [core policy reference](http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference#Profile_names_and_attachment_specifications).
Any other profile reference format is invalid.
@@ -423,7 +423,7 @@ Specifying the list of profiles Pod containers is allowed to specify:
* **key**: `apparmor.security.beta.kubernetes.io/allowedProfileNames`
* **value**: a comma-separated list of profile references (described above)
- Although an escaped comma is a legal character in a profile name, it cannot be explicitly
- allowed here
+ allowed here.
{% endcapture %}
diff --git a/docs/tutorials/kubernetes-basics/deploy-intro.html b/docs/tutorials/kubernetes-basics/deploy-intro.html
index 20b00cff7d..d7b7e731cb 100644
--- a/docs/tutorials/kubernetes-basics/deploy-intro.html
+++ b/docs/tutorials/kubernetes-basics/deploy-intro.html
@@ -27,7 +27,10 @@ title: Using kubectl to Create a Deployment
Kubernetes Deployments
- Once you have a running Kubernetes cluster, you can deploy your containerized applications on top of it. To do so, you create a Kubernetes Deployment. 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 Deployment configuration. The Deployment instructs Kubernetes
+ how to create and update instances of your application. Once you've created a Deployment, the Kubernetes
+ master schedules mentioned application instances onto individual Nodes in the cluster.
Once the application instances are created, a Kubernetes Deployment Controller continuously monitors those instances. If the Node hosting an instance goes down or is deleted, the Deployment controller replaces it. This provides a self-healing mechanism to address machine failure or maintenance.
diff --git a/docs/tutorials/object-management-kubectl/declarative-object-management-configuration.md b/docs/tutorials/object-management-kubectl/declarative-object-management-configuration.md
index d486086a75..74189782fd 100644
--- a/docs/tutorials/object-management-kubectl/declarative-object-management-configuration.md
+++ b/docs/tutorials/object-management-kubectl/declarative-object-management-configuration.md
@@ -30,7 +30,7 @@ the Kubernetes object definitions and configuration. Read and complete
the following documents if you have not already:
- [Managing Kubernetes Objects Using Imperative Commands](/docs/tutorials/object-management-kubectl/imperative-object-management-command/)
-- [Imperative Management of Kubernetes Objects Using Configuration Files](docs/tutorials/object-management-kubectl/imperative-object-management-configuration/)
+- [Imperative Management of Kubernetes Objects Using Configuration Files](/docs/tutorials/object-management-kubectl/imperative-object-management-configuration/)
Following are definitions for terms used in this document:
@@ -41,7 +41,7 @@ Following are definitions for terms used in this document:
values of an object, as observed by the Kubernetes cluster. These are kept in the Kubernetes
cluster storage, typically etcd.
- *declarative configuration writer / declarative writer*: A person or software component
- that makes updates to a live object. The live writers refered to in this topic make changes
+ that makes updates to a live object. The live writers referred to in this topic make changes
to object configuration files and run `kubectl apply` to write the changes.
## How to create objects
diff --git a/docs/tutorials/services/source-ip.md b/docs/tutorials/services/source-ip.md
index fb7ef48f99..bab393d37e 100644
--- a/docs/tutorials/services/source-ip.md
+++ b/docs/tutorials/services/source-ip.md
@@ -311,7 +311,7 @@ protocol between the loadbalancer and backend to communicate the true client IP
such as the HTTP [X-FORWARDED-FOR](https://en.wikipedia.org/wiki/X-Forwarded-For)
header, or the [proxy protocol](http://www.haproxy.org/download/1.5/doc/proxy-protocol.txt).
Loadbalancers in the second category can leverage the feature described above
-by simply creating a HTTP health check pointing at the port stored in
+by simply creating an HTTP health check pointing at the port stored in
the `service.spec.healthCheckNodePort` field on the Service.
{% endcapture %}
diff --git a/docs/tutorials/stateful-application/cassandra-service.yaml b/docs/tutorials/stateful-application/cassandra-service.yaml
index 35b07733b5..31bee74b58 100644
--- a/docs/tutorials/stateful-application/cassandra-service.yaml
+++ b/docs/tutorials/stateful-application/cassandra-service.yaml
@@ -7,6 +7,6 @@ metadata:
spec:
clusterIP: None
ports:
- - port: 9042
+ - port: 9042
selector:
app: cassandra
diff --git a/docs/tutorials/stateful-application/cassandra.md b/docs/tutorials/stateful-application/cassandra.md
index f6172f4321..d17d6d9be6 100644
--- a/docs/tutorials/stateful-application/cassandra.md
+++ b/docs/tutorials/stateful-application/cassandra.md
@@ -46,7 +46,7 @@ Deploying stateful distributed applications, like Cassandra, within a clustered
**Cassandra Docker**
-The pods use the [```gcr.io/google-samples/cassandra:v12```](https://github.com/kubernetes/examples/blob/master/cassandra/image/Dockerfile)
+The Pods use the [`gcr.io/google-samples/cassandra:v12`](https://github.com/kubernetes/examples/blob/master/cassandra/image/Dockerfile)
image from Google's [container registry](https://cloud.google.com/container-registry/docs/).
The docker is based on `debian:jessie` and includes OpenJDK 8. This image includes a standard Cassandra installation from the Apache Debian repo. By using environment variables you can change values that are inserted into `cassandra.yaml`.
@@ -75,31 +75,30 @@ To complete this tutorial, you should already have a basic familiarity with [Pod
* Have a supported Kubernetes Cluster running
-**Note:** Please read the [getting started guides](https://kubernetes.io/docs/setup/pick-right-solution/) if you do not already have a cluster.
+**Note:** Please read the [getting started guides](https://kubernetes.io/docs/setup/pick-right-solution/) if you do not already have a cluster.
+{: .note}
### Additional Minikube Setup Instructions
-**Warning:** [Minikube](https://kubernetes.io/docs/getting-started-guides/minikube/) defaults to 1024MB of memory and 1 CPU which results in an insufficient resource errors.
+**Caution:** [Minikube](https://kubernetes.io/docs/getting-started-guides/minikube/) defaults to 1024MB of memory and 1 CPU which results in an insufficient resource errors during this tutorial.
+{: .caution}
To avoid these errors, run minikube with:
-```
-minikube start --memory 5120 --cpus=4
-```
+ minikube start --memory 5120 --cpus=4
+
{% endcapture %}
{% capture lessoncontent %}
## Creating a Cassandra Headless Service
A Kubernetes [Service](https://kubernetes.io/docs/concepts/services-networking/service/) describes a set of [Pods](https://kubernetes.io/docs/concepts/workloads/pods/pod/) that perform the same task.
-The following `Service` is used for DNS lookups between Cassandra pods and clients within the Kubernetes Cluster.
+The following `Service` is used for DNS lookups between Cassandra Pods and clients within the Kubernetes Cluster.
-1. `cd` to the folder you saved the .yaml files.
-2. Create a `Service` to track all Cassandra StatefulSet Nodes from the following `.yaml` file:
+1. Launch a terminal window in the directory you downloaded the manifest files.
+2. Create a `Service` to track all Cassandra StatefulSet Nodes from the `cassandra-service.yaml` file:
-```shell
-kubectl create -f cassandra-service.yaml
-```
+ kubectl create -f cassandra-service.yaml
{% include code.html language="yaml" file="cassandra-service.yaml" ghlink="/docs/tutorials/stateful-application/cassandra-service.yaml" %}
@@ -107,31 +106,26 @@ kubectl create -f cassandra-service.yaml
Get the Cassandra `Service`.
-```shell
-kubectl get svc cassandra
-```
+ kubectl get svc cassandra
The response should be
-```console
-NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
-cassandra None
9042/TCP 45s
-```
+ NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
+ cassandra None 9042/TCP 45s
If anything else returns, the service was not successfully created. Read [Debug Services](https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/) for common issues.
## Using a StatefulSet to Create a Cassandra Ring
-The StatefulSet manifest, included below, creates a Cassandra ring that consists of three pods.
+The StatefulSet manifest, included below, creates a Cassandra ring that consists of three Pods.
-**Note:** This example uses the default provisioner for Minikube. Please update the following StatefulSet for the cloud you are working with.
+**Note:** This example uses the default provisioner for Minikube. Please update the following StatefulSet for the cloud you are working with.
+{: .note}
1. Update the StatefulSet if necessary.
-2. Create the Cassandra StatefulSet from the following `.yaml` file:
+2. Create the Cassandra StatefulSet from the `cassandra-statefulset.yaml` file:
-```shell
-kubectl create -f cassandra-statefulset.yaml
-```
+ kubectl create -f cassandra-statefulset.yaml
{% include code.html language="yaml" file="cassandra-statefulset.yaml" ghlink="/docs/tutorials/stateful-application/cassandra-statefulset.yaml" %}
@@ -139,131 +133,115 @@ kubectl create -f cassandra-statefulset.yaml
1. Get the Cassandra StatefulSet:
-```shell
-kubectl get statefulset cassandra
-```
+ kubectl get statefulset cassandra
The response should be
-```console
-NAME DESIRED CURRENT AGE
-cassandra 3 0 13s
-```
+ NAME DESIRED CURRENT AGE
+ cassandra 3 0 13s
- The StatefulSet resource deploys pods sequentially.
+ The StatefulSet resource deploys Pods sequentially.
-{:start="2"}
2. Get the Pods to see the ordered creation status:
-```shell
-kubectl get pods -l="app=cassandra"
-NAME READY STATUS RESTARTS AGE
-cassandra-0 1/1 Running 0 1m
-cassandra-1 0/1 ContainerCreating 0 8s
-```
+ kubectl get pods -l="app=cassandra"
+
+ The response should be
+
+ NAME READY STATUS RESTARTS AGE
+ cassandra-0 1/1 Running 0 1m
+ cassandra-1 0/1 ContainerCreating 0 8s
-**Note:** It can take up to ten minutes for all three pods to deploy.
+ **Note:** It can take up to ten minutes for all three Pods to deploy.
+ {: .note}
-Once all pods are deployed, the same command returns:
+ Once all Pods are deployed, the same command returns:
-```shell
-kubectl get pods -l="app=cassandra"
-NAME READY STATUS RESTARTS AGE
-cassandra-0 1/1 Running 0 10m
-cassandra-1 1/1 Running 0 9m
-cassandra-2 1/1 Running 0 8m
-```
+ NAME READY STATUS RESTARTS AGE
+ cassandra-0 1/1 Running 0 10m
+ cassandra-1 1/1 Running 0 9m
+ cassandra-2 1/1 Running 0 8m
-{:start="3"}
3. Run the Cassandra utility nodetool to display the status of the ring.
-```
-kubectl exec cassandra-0 -- nodetool status
-```
+ kubectl exec cassandra-0 -- nodetool status
-```console
-Datacenter: DC1-K8Demo
-======================
-Status=Up/Down
-|/ State=Normal/Leaving/Joining/Moving
--- Address Load Tokens Owns (effective) Host ID Rack
-UN 10.4.2.4 65.26 KiB 32 63.7% a9d27f81-6783-461d-8583-87de2589133e Rack1-K8Demo
-UN 10.4.0.4 102.04 KiB 32 66.7% 5559a58c-8b03-47ad-bc32-c621708dc2e4 Rack1-K8Demo
-UN 10.4.1.4 83.06 KiB 32 69.6% 9dce943c-581d-4c0e-9543-f519969cc805 Rack1-K8Demo
-```
+ The response is:
+
+ Datacenter: DC1-K8Demo
+ ======================
+ Status=Up/Down
+ |/ State=Normal/Leaving/Joining/Moving
+ -- Address Load Tokens Owns (effective) Host ID Rack
+ UN 172.17.0.5 83.57 KiB 32 74.0% e2dd09e6-d9d3-477e-96c5-45094c08db0f Rack1-K8Demo
+ UN 172.17.0.4 101.04 KiB 32 58.8% f89d6835-3a42-4419-92b3-0e62cae1479c Rack1-K8Demo
+ UN 172.17.0.6 84.74 KiB 32 67.1% a6a1e8c2-3dc5-4417-b1a0-26507af2aaad Rack1-K8Demo
## Modifying the Cassandra StatefulSet
Use `kubectl edit` to modify the size of of a Cassandra StatefulSet.
1. Run the following command:
-```shell
-kubectl edit statefulset cassandra
-```
- This command opens an editor in your terminal. The line you need to change is `Replicas`.
+ kubectl edit statefulset cassandra
+
+ This command opens an editor in your terminal. The line you need to change is the `replicas` field.
**Note:** The following sample is an excerpt of the StatefulSet file.
+ {: .note}
-```console
-# Please edit the object below. Lines beginning with a '#' will be ignored,
-# and an empty file will abort the edit. If an error occurs while saving this file will be
-# reopened with the relevant failures.
-#
-apiVersion: apps/v1beta1
-kind: StatefulSet
-metadata:
- creationTimestamp: 2016-08-13T18:40:58Z
- generation: 1
- labels:
- app: cassandra
- name: cassandra
- namespace: default
- resourceVersion: "323"
- selfLink: /apis/apps/v1beta1/namespaces/default/statefulsets/cassandra
- uid: 7a219483-6185-11e6-a910-42010a8a0fc0
-spec:
- replicas: 3
-```
+ ```yaml
+ # Please edit the object below. Lines beginning with a '#' will be ignored,
+ # and an empty file will abort the edit. If an error occurs while saving this file will be
+ # reopened with the relevant failures.
+ #
+ apiVersion: apps/v1beta1
+ kind: StatefulSet
+ metadata:
+ creationTimestamp: 2016-08-13T18:40:58Z
+ generation: 1
+ labels:
+ app: cassandra
+ name: cassandra
+ namespace: default
+ resourceVersion: "323"
+ selfLink: /apis/apps/v1beta1/namespaces/default/statefulsets/cassandra
+ uid: 7a219483-6185-11e6-a910-42010a8a0fc0
+ spec:
+ replicas: 3
+ ```
-{:start="2"}
-2. Increase the number of replicas to 4, and then save the manifest.
+2. Change the number of replicas to 4, and then save the manifest.
- The StatefulSet now contains 4 pods.
+ The StatefulSet now contains 4 Pods.
3. Get the Cassandra StatefulSet to verify:
-```shell
-kubectl get statefulset cassandra
-```
+ kubectl get statefulset cassandra
- The response should be
+ The response should be
-```console
-NAME DESIRED CURRENT AGE
-cassandra 4 4 36m
-```
+ NAME DESIRED CURRENT AGE
+ cassandra 4 4 36m
+
{% endcapture %}
{% capture cleanup %}
Deleting or scaling a StatefulSet down does not delete the volumes associated with the StatefulSet. This ensures safety first: your data is more valuable than an auto purge of all related StatefulSet resources.
-**Warning:** Depending on the storage class and reclaim policy, deleting the Persistent Volume Claims may cause the associated volumes to also be deleted. Never assume you’ll be able to access data if its volume claims are deleted.
+**Warning:** Depending on the storage class and reclaim policy, deleting the Persistent Volume Claims may cause the associated volumes to also be deleted. Never assume you’ll be able to access data if its volume claims are deleted.
+{: .warning}
1. Run the following commands to delete everything in a `StatefulSet`:
-```shell
-grace=$(kubectl get po cassandra-0 -o=jsonpath='{.spec.terminationGracePeriodSeconds}') \
- && kubectl delete statefulset -l app=cassandra \
- && echo "Sleeping $grace" \
- && sleep $grace \
- && kubectl delete pvc -l app=cassandra
-```
+ grace=$(kubectl get po cassandra-0 -o=jsonpath='{.spec.terminationGracePeriodSeconds}') \
+ && kubectl delete statefulset -l app=cassandra \
+ && echo "Sleeping $grace" \
+ && sleep $grace \
+ && kubectl delete pvc -l app=cassandra
2. Run the following command to delete the Cassandra `Service`.
-```shell
-kubectl delete service -l app=cassandra
-```
+ kubectl delete service -l app=cassandra
{% endcapture %}
diff --git a/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md b/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md
index 2ede41834a..22cb8bd142 100644
--- a/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md
+++ b/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md
@@ -1,5 +1,5 @@
---
-title: "Example: WordPress and MySQL with Persistent Volumes"
+title: "Example: Deploying WordPress and MySQL with Persistent Volumes"
---
-This example describes how to run a persistent installation of
-[WordPress](https://wordpress.org/) and
-[MySQL](https://www.mysql.com/) on Kubernetes. We'll use the
-[mysql](https://registry.hub.docker.com/_/mysql/) and
-[wordpress](https://registry.hub.docker.com/_/wordpress/) official
-[Docker](https://www.docker.com/) images for this installation. (The
-WordPress image includes an Apache server).
+{% capture overview %}
+This tutorial shows you how to deploy a WordPress site and a MySQL database using Minikube. Both applications use PersistentVolumes and PersistentVolumeClaims to store data.
-Demonstrated Kubernetes Concepts:
+A [PersistentVolume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) (PV) is a piece of storage in the cluster that has been provisioned by an administrator, and a [PeristentVolumeClaim](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) (PVC) is a set amout of storage in a PV. PersistentVolumes and PeristentVolumeClaims are independent from Pod lifecycles and preserve data through restarting, rescheduling, and even deleting Pods.
-* [Persistent Volumes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) to
- define persistent disks (disk lifecycle not tied to the Pods).
-* [Services](https://kubernetes.io/docs/concepts/services-networking/service/) to enable Pods to
- locate one another.
-* [External Load Balancers](https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer)
- to expose Services externally.
-* [Deployments](http://kubernetes.io/docs/user-guide/deployments/) to ensure Pods
- stay up and running.
-* [Secrets](http://kubernetes.io/docs/user-guide/secrets/) to store sensitive
- passwords.
+**Warning:** This deployment is not suitable for production use cases, as it uses single instance WordPress and MySQL Pods. Consider using [WordPress Helm Chart](https://github.com/kubernetes/charts/tree/master/stable/wordpress) to deploy WordPress in production.
+{: .warning}
-## Quickstart
+{% endcapture %}
-Put your desired MySQL password in a file called `password.txt` with
-no trailing newline. The first `tr` command will remove the newline if
-your editor added one.
+{% capture objectives %}
+* Create a PersistentVolume
+* Create a Secret
+* Deploy MySQL
+* Deploy WordPress
+* Clean up
-**Note:** if your cluster enforces **_selinux_** and you will be using [Host Path](#host-path) for storage, then please follow this [extra step](#selinux).
+{% endcapture %}
-```shell
-tr --delete '\n' .strippedpassword.txt && mv .strippedpassword.txt password.txt
-kubectl create -f https://raw.githubusercontent.com/kubernetes/examples/master/mysql-wordpress-pd/local-volumes.yaml
-kubectl create secret generic mysql-pass --from-file=password.txt
-kubectl create -f https://raw.githubusercontent.com/kubernetes/examples/master/mysql-wordpress-pd/mysql-deployment.yaml
-kubectl create -f https://raw.githubusercontent.com/kubernetes/examples/master/mysql-wordpress-pd/wordpress-deployment.yaml
-```
+{% capture prerequisites %}
-## Table of Contents
+{% include task-tutorial-prereqs.md %}
-
+Download the following configuration files:
-- [Persistent Installation of MySQL and WordPress on Kubernetes](#persistent-installation-of-mysql-and-wordpress-on-kubernetes)
- - [Quickstart](#quickstart)
- - [Table of Contents](#table-of-contents)
- - [Cluster Requirements](#cluster-requirements)
- - [Decide where you will store your data](#decide-where-you-will-store-your-data)
- - [Host Path](#host-path)
- - [SELinux](#selinux)
- - [GCE Persistent Disk](#gce-persistent-disk)
- - [Create the MySQL Password Secret](#create-the-mysql-password-secret)
- - [Deploy MySQL](#deploy-mysql)
- - [Deploy WordPress](#deploy-wordpress)
- - [Visit your new WordPress blog](#visit-your-new-wordpress-blog)
- - [Take down and restart your blog](#take-down-and-restart-your-blog)
- - [Next Steps](#next-steps)
+1. [local-volumes.yaml](https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml)
-
+1. [mysql-deployment.yaml](https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml)
-## Cluster Requirements
+1. [wordpress-deployment.yaml](https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume//wordpress-deployment.yaml)
-Kubernetes runs in a variety of environments and is inherently
-modular. Not all clusters are the same. These are the requirements for
-this example.
+{% endcapture %}
-* Kubernetes version 1.2 is required due to using newer features, such
- at PV Claims and Deployments. Run `kubectl version` to see your
- cluster version.
-* [Cluster DNS](https://github.com/kubernetes/dns) will be used for service discovery.
-* An [external load balancer](https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer)
- will be used to access WordPress.
-* [Persistent Volume Claims](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)
- are used. You must create Persistent Volumes in your cluster to be
- claimed. This example demonstrates how to create two types of
- volumes, but any volume is sufficient.
+{% capture lessoncontent %}
-Consult a
-[Getting Started Guide](http://kubernetes.io/docs/getting-started-guides/)
-to set up a cluster and the
-[kubectl](http://kubernetes.io/docs/user-guide/prereqs/) command-line client.
+## Create a PersistentVolume
-## Decide where you will store your data
+MySQL and Wordpress each use a PersistentVolume to store data. While Kubernetes supports many different [types of PersistentVolumes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#types-of-persistent-volumes), this tutorial covers [hostPath](https://kubernetes.io/docs/concepts/storage/volumes/#hostpath).
-MySQL and WordPress will each use a
-[Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)
-to store their data. We will use a Persistent Volume Claim to claim an
-available persistent volume. This example covers HostPath and
-GCEPersistentDisk volumes. Choose one of the two, or see
-[Types of Persistent Volumes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#types-of-persistent-volumes)
-for more options.
+**Note:** If you have a Kubernetes cluster running on Google Container Engine, please follow [this guide](https://cloud.google.com/container-engine/docs/tutorials/persistent-disk).
+{: .note}
-### Host Path
+### Setting up a hostPath Volume
-Host paths are volumes mapped to directories on the host. **These
-should be used for testing or single-node clusters only**. The data
-will not be moved between nodes if the pod is recreated on a new
-node. If the pod is deleted and recreated on a new node, data will be
-lost.
+A `hostPath` mounts a file or directory from the host node’s filesystem into your Pod.
-##### SELinux
+**Warning:** Only use `hostPath` for developing and testing. With hostPath, your data lives on the node the Pod is scheduled onto and does not move between nodes. If a Pod dies and gets scheduled to another node in the cluster, the data is lost.
+{: .warning}
-On systems supporting selinux it is preferred to leave it enabled/enforcing.
-However, docker containers mount the host path with the "_svirt_sandbox_file_t_"
-label type, which is incompatible with the default label type for /tmp ("_tmp_t_"),
-resulting in a permissions error when the mysql container attempts to `chown`
-_/var/lib/mysql_.
-Therefore, on selinx systems using host path, you should pre-create the host path
-directory (/tmp/data/) and change it's selinux label type to "_svirt_sandbox_file_t_",
-as follows:
+1. Launch a terminal window in the directory you downloaded the manifest files.
-```shell
-## on every node:
-mkdir -p /tmp/data
-chmod a+rwt /tmp/data # match /tmp permissions
-chcon -Rt svirt_sandbox_file_t /tmp/data
-```
+2. Create two PersistentVolumes from the `local-volumes.yaml` file:
-Continuing with host path, create the persistent volume objects in Kubernetes using
-[local-volumes.yaml](https://git.k8s.io/examples/mysql-wordpress-pd/local-volumes.yaml):
+ kubectl create -f local-volumes.yaml
-```shell
-export KUBE_REPO=https://raw.githubusercontent.com/kubernetes/examples/master
-kubectl create -f $KUBE_REPO/mysql-wordpress-pd/local-volumes.yaml
-```
+{% include code.html language="yaml" file="mysql-wordpress-persistent-volume/local-volumes.yaml" ghlink="/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml" %}
+{:start="3"}
+3. Run the following command to verify that two 20GiB PersistentVolumes are available:
-### GCE Persistent Disk
+ kubectl get pv
-This storage option is applicable if you are running on
-[Google Compute Engine](http://kubernetes.io/docs/getting-started-guides/gce/).
+ The response should be like this:
-Create two persistent disks. You will need to create the disks in the
-same [GCE zone](https://cloud.google.com/compute/docs/zones) as the
-Kubernetes cluster. The default setup script will create the cluster
-in the `us-central1-b` zone, as seen in the
-[config-default.sh](https://git.k8s.io/kubernetes/cluster/gce/config-default.sh) file. Replace
-`` below with the appropriate zone. The names `wordpress-1` and
-`wordpress-2` must match the `pdName` fields we have specified in
-[gce-volumes.yaml](https://git.k8s.io/examples/mysql-wordpress-pd/gce-volumes.yaml).
+ NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
+ local-pv-1 20Gi RWO Retain Available 1m
+ local-pv-2 20Gi RWO Retain Available 1m
-```shell
-gcloud compute disks create --size=20GB --zone= wordpress-1
-gcloud compute disks create --size=20GB --zone= wordpress-2
-```
+## Create a Secret for MySQL Password
-Create the persistent volume objects in Kubernetes for those disks:
+A [Secret](https://kubernetes.io/docs/concepts/configuration/secret/) is an object that stores a piece of sensitive data like a password or key. The manifest files are already configured to use a Secret, but you have to create your own Secret.
-```shell
-export KUBE_REPO=https://raw.githubusercontent.com/kubernetes/examples/master
-kubectl create -f $KUBE_REPO/mysql-wordpress-pd/gce-volumes.yaml
-```
+1. Create the Secret object from the following command:
-## Create the MySQL Password Secret
+ kubectl create secret generic mysql-pass --from-literal=password=YOUR_PASSWORD
+
+ **Note:** Replace `YOUR_PASSWORD` with the password you want to apply.
+ {: .note}
+
+2. Verify that the Secret exists by running the following command:
-Use a [Secret](http://kubernetes.io/docs/user-guide/secrets/) object
-to store the MySQL password. First create a file (in the same directory
-as the wordpress sample files) called
-`password.txt` and save your password in it. Make sure to not have a
-trailing newline at the end of the password. The first `tr` command
-will remove the newline if your editor added one. Then, create the
-Secret object.
+ kubectl get secrets
-```shell
-tr --delete '\n' .strippedpassword.txt && mv .strippedpassword.txt password.txt
-kubectl create secret generic mysql-pass --from-file=password.txt
-```
+ The response should be like this:
-This secret is referenced by the MySQL and WordPress pod configuration
-so that those pods will have access to it. The MySQL pod will set the
-database password, and the WordPress pod will use the password to
-access the database.
+ NAME TYPE DATA AGE
+ mysql-pass Opaque 1 42s
+
+ **Note:** To protect the Secret from exposure, neither `get` nor `describe` show its contents.
+ {: .note}
## Deploy MySQL
-Now that the persistent disks and secrets are defined, the Kubernetes
-pods can be launched. Start MySQL using
-[mysql-deployment.yaml](https://git.k8s.io/examples/mysql-wordpress-pd/mysql-deployment.yaml).
+The following manifest describes a single-instance MySQL Deployment. The MySQL container mounts the PersistentVolume at /var/lib/mysql. The `MYSQL_ROOT_PASSWORD` environment variable sets the database password from the Secret.
-```shell
-kubectl create -f $KUBE_REPO/mysql-wordpress-pd/mysql-deployment.yaml
-```
+{% include code.html language="yaml" file="mysql-wordpress-persistent-volume/mysql-deployment.yaml" ghlink="/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml" %}
-Take a look at [mysql-deployment.yaml](https://git.k8s.io/examples/mysql-wordpress-pd/mysql-deployment.yaml), and
-note that we've defined a volume mount for `/var/lib/mysql`, and then
-created a Persistent Volume Claim that looks for a 20G volume. This
-claim is satisfied by any volume that meets the requirements, in our
-case one of the volumes we created above.
+1. Deploy MySQL from the `mysql-deployment.yaml` file:
-Also look at the `env` section and see that we specified the password
-by referencing the secret `mysql-pass` that we created above. Secrets
-can have multiple key:value pairs. Ours has only one key
-`password.txt` which was the name of the file we used to create the
-secret. The [MySQL image](https://hub.docker.com/_/mysql/) sets the
-database password using the `MYSQL_ROOT_PASSWORD` environment
-variable.
+ kubectl create -f mysql-deployment.yaml
-It may take a short period before the new pod reaches the `Running`
-state. List all pods to see the status of this new pod.
+2. Verify that the Pod is running by running the following command:
-```shell
-kubectl get pods
-```
+ kubectl get pods
-```
-NAME READY STATUS RESTARTS AGE
-wordpress-mysql-cqcf4-9q8lo 1/1 Running 0 1m
-```
+ **Note:** It can take up to a few minutes for the Pod's Status to be `RUNNING`.
+ {: .note}
-Kubernetes logs the stderr and stdout for each pod. Take a look at the
-logs for a pod by using `kubectl log`. Copy the pod name from the
-`get pods` command, and then:
+ The response should be like this:
-```shell
-kubectl logs
-```
-
-```
-...
-2016-02-19 16:58:05 1 [Note] InnoDB: 128 rollback segment(s) are active.
-2016-02-19 16:58:05 1 [Note] InnoDB: Waiting for purge to start
-2016-02-19 16:58:05 1 [Note] InnoDB: 5.6.29 started; log sequence number 1626007
-2016-02-19 16:58:05 1 [Note] Server hostname (bind-address): '*'; port: 3306
-2016-02-19 16:58:05 1 [Note] IPv6 is available.
-2016-02-19 16:58:05 1 [Note] - '::' resolves to '::';
-2016-02-19 16:58:05 1 [Note] Server socket created on IP: '::'.
-2016-02-19 16:58:05 1 [Warning] 'proxies_priv' entry '@ root@wordpress-mysql-cqcf4-9q8lo' ignored in --skip-name-resolve mode.
-2016-02-19 16:58:05 1 [Note] Event Scheduler: Loaded 0 events
-2016-02-19 16:58:05 1 [Note] mysqld: ready for connections.
-Version: '5.6.29' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)
-```
-
-Also in [mysql-deployment.yaml](https://git.k8s.io/examples/mysql-wordpress-pd/mysql-deployment.yaml) we created a
-service to allow other pods to reach this mysql instance. The name is
-`wordpress-mysql` which resolves to the pod IP.
-
-Up to this point one Deployment, one Pod, one PVC, one Service, one Endpoint,
-two PVs, and one Secret have been created, shown below:
-
-```shell
-kubectl get deployment,pod,svc,endpoints,pvc -l app=wordpress -o wide && \
- kubectl get secret mysql-pass && \
- kubectl get pv
-```
-
-```shell
-NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
-deploy/wordpress-mysql 1 1 1 1 3m
-NAME READY STATUS RESTARTS AGE IP NODE
-po/wordpress-mysql-3040864217-40soc 1/1 Running 0 3m 172.17.0.2 127.0.0.1
-NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
-svc/wordpress-mysql None 3306/TCP 3m app=wordpress,tier=mysql
-NAME ENDPOINTS AGE
-ep/wordpress-mysql 172.17.0.2:3306 3m
-NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
-pvc/mysql-pv-claim Bound local-pv-2 20Gi RWO 3m
-NAME TYPE DATA AGE
-mysql-pass Opaque 1 3m
-NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE
-local-pv-1 20Gi RWO Available 3m
-local-pv-2 20Gi RWO Bound default/mysql-pv-claim 3m
-```
+ NAME READY STATUS RESTARTS AGE
+ wordpress-mysql-1894417608-x5dzt 1/1 Running 0 40s
## Deploy WordPress
-Next deploy WordPress using
-[wordpress-deployment.yaml](https://git.k8s.io/examples/mysql-wordpress-pd/wordpress-deployment.yaml):
+The following manifest describes a single-instance WordPress Deployment and Service. It uses many of the same features like a PVC for persistent storage and a Secret for the password. But it also uses a different setting: `type: NodePort`. This setting exposes WordPress to traffic from outside of the cluster.
-```shell
-kubectl create -f $KUBE_REPO/mysql-wordpress-pd/wordpress-deployment.yaml
-```
+{% include code.html language="yaml" file="mysql-wordpress-persistent-volume/mysql-deployment.yaml" ghlink="/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml" %}
-Here we are using many of the same features, such as a volume claim
-for persistent storage and a secret for the password.
+1. Create a WordPress Service and Deployment from the `wordpress-deployment.yaml` file:
-The [WordPress image](https://hub.docker.com/_/wordpress/) accepts the
-database hostname through the environment variable
-`WORDPRESS_DB_HOST`. We set the env value to the name of the MySQL
-service we created: `wordpress-mysql`.
+ kubectl create -f wordpress-deployment.yaml
-The WordPress service has the setting `type: LoadBalancer`. This will
-set up the wordpress service behind an external IP.
+2. Verify that the Service is running by running the following command:
-Find the external IP for your WordPress service. **It may take a minute
-to have an external IP assigned to the service, depending on your
-cluster environment.**
+ kubectl get services wordpress
-```shell
-kubectl get services wordpress
-```
+ The response should be like this:
-```
-NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
-wordpress 10.0.0.5 1.2.3.4 80/TCP 19h
-```
+ NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
+ wordpress 10.0.0.89 80:32406/TCP 4m
-## Visit your new WordPress blog
+ **Note:** Minikube can only expose Services through `NodePort`.
The `EXTERNAL-IP` is always ``.
+ {: .note}
-Now, we can visit the running WordPress app. Use the external IP of
-the service that you obtained above.
+3. Run the following command to get the IP Address for the WordPress Service:
-```
-http://
-```
+ minikube service wordpress --url
-You should see the familiar WordPress init page.
+ The response should be like this:
-
+ http://1.2.3.4:32406
-> Warning: Do not leave your WordPress installation on this page. If
-> it is found by another user, they can set up a website on your
-> instance and use it to serve potentially malicious content. You
-> should either continue with the installation past the point at which
-> you create your username and password, delete your instance, or set
-> up a firewall to restrict access.
+4. Copy the IP address, and load the page in your browser to view your site.
-## Take down and restart your blog
+ You should see the WordPress set up page similar to the following screenshot.
-Set up your WordPress blog and play around with it a bit. Then, take
-down its pods and bring them back up again. Because you used
-persistent disks, your blog state will be preserved.
+ 
-All of the resources are labeled with `app=wordpress`, so you can
-easily bring them down using a label selector:
+ **Warning:** Do not leave your WordPress installation on this page. If another user finds it, they can set up a website on your instance and use it to serve malicious content.
Either install WordPress by creating a username and password or delete your instance.
+ {: .warning}
-```shell
-kubectl delete deployment,service -l app=wordpress
-kubectl delete secret mysql-pass
-```
+{% endcapture %}
-Later, re-creating the resources with the original commands will pick
-up the original disks with all your data intact. Because we did not
-delete the PV Claims, no other pods in the cluster could claim them
-after we deleted our pods. Keeping the PV Claims also ensured
-recreating the Pods did not cause the PD to switch Pods.
+{% capture cleanup %}
-If you are ready to release your persistent volumes and the data on them, run:
+1. Run the following command to delete your Secret:
-```shell
-kubectl delete pvc -l app=wordpress
-```
+ kubectl delete secret mysql-pass
-And then delete the volume objects themselves:
+2. Run the following commands to delete all Deployments and Services:
-```shell
-kubectl delete pv local-pv-1 local-pv-2
-```
+ kubectl delete deployment -l app=wordpress
+ kubectl delete service -l app=wordpress
-or
+3. Run the following commands to delete the PersistentVolumeClaims and the PersistentVolumes:
-```shell
-kubectl delete pv wordpress-pv-1 wordpress-pv-2
-```
+ kubectl delete pvc -l app=wordpress
+ kubectl delete pv local-pv-1 local-pv-2
+
+ **Note:** Any other Type of PersistentVolume would allow you to recreate the Deployments and Services at this point without losing data, but `hostPath` loses the data as soon as the Pod stops running.
+ {: .note}
-## Next Steps
+{% endcapture %}
-* [Introspection and Debugging](http://kubernetes.io/docs/user-guide/introspection-and-debugging/)
-* [Jobs](http://kubernetes.io/docs/user-guide/jobs/) may be useful to run SQL queries.
-* [Exec](http://kubernetes.io/docs/user-guide/getting-into-containers/)
-* [Port Forwarding](http://kubernetes.io/docs/user-guide/connecting-to-applications-port-forward/)
+{% capture whatsnext %}
+
+* Learn more about [Introspection and Debugging](https://kubernetes.io/docs/tasks/debug-application-cluster/debug-application-introspection/)
+* Learn more about [Jobs](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/)
+* Learn more about [Port Forwarding](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)
+* Learn how to [Get a Shell to a Container](https://kubernetes.io/docs/tasks/debug-application-cluster/get-shell-running-container/)
+
+{% endcapture %}
+
+{% include templates/tutorial.md %}
[]()
diff --git a/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml b/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml
new file mode 100644
index 0000000000..8964113336
--- /dev/null
+++ b/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml
@@ -0,0 +1,27 @@
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ name: local-pv-1
+ labels:
+ type: local
+spec:
+ capacity:
+ storage: 20Gi
+ accessModes:
+ - ReadWriteOnce
+ hostPath:
+ path: /tmp/data/pv-1
+---
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ name: local-pv-2
+ labels:
+ type: local
+spec:
+ capacity:
+ storage: 20Gi
+ accessModes:
+ - ReadWriteOnce
+ hostPath:
+ path: /tmp/data/pv-2
diff --git a/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml b/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml
new file mode 100644
index 0000000000..2253600de6
--- /dev/null
+++ b/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml
@@ -0,0 +1,61 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: wordpress-mysql
+ labels:
+ app: wordpress
+spec:
+ ports:
+ - port: 3306
+ selector:
+ app: wordpress
+ tier: mysql
+ clusterIP: None
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: mysql-pv-claim
+ labels:
+ app: wordpress
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 20Gi
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: wordpress-mysql
+ labels:
+ app: wordpress
+spec:
+ strategy:
+ type: Recreate
+ template:
+ metadata:
+ labels:
+ app: wordpress
+ tier: mysql
+ spec:
+ containers:
+ - image: mysql:5.6
+ name: mysql
+ env:
+ - name: MYSQL_ROOT_PASSWORD
+ valueFrom:
+ secretKeyRef:
+ name: mysql-pass
+ key: password
+ ports:
+ - containerPort: 3306
+ name: mysql
+ volumeMounts:
+ - name: mysql-persistent-storage
+ mountPath: /var/lib/mysql
+ volumes:
+ - name: mysql-persistent-storage
+ persistentVolumeClaim:
+ claimName: mysql-pv-claim
diff --git a/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml b/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml
new file mode 100644
index 0000000000..e15edc5998
--- /dev/null
+++ b/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml
@@ -0,0 +1,63 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: wordpress
+ labels:
+ app: wordpress
+spec:
+ ports:
+ - port: 80
+ selector:
+ app: wordpress
+ tier: frontend
+ type: LoadBalancer
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: wp-pv-claim
+ labels:
+ app: wordpress
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 20Gi
+---
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: wordpress
+ labels:
+ app: wordpress
+spec:
+ strategy:
+ type: Recreate
+ template:
+ metadata:
+ labels:
+ app: wordpress
+ tier: frontend
+ spec:
+ containers:
+ - image: wordpress:4.8-apache
+ name: wordpress
+ env:
+ - name: WORDPRESS_DB_HOST
+ value: wordpress-mysql
+ - name: WORDPRESS_DB_PASSWORD
+ valueFrom:
+ secretKeyRef:
+ name: mysql-pass
+ key: password
+ ports:
+ - containerPort: 80
+ name: wordpress
+ volumeMounts:
+ - name: wordpress-persistent-storage
+ mountPath: /var/www/html
+ volumes:
+ - name: wordpress-persistent-storage
+ persistentVolumeClaim:
+ claimName: wp-pv-claim
diff --git a/docs/tutorials/stateless-application/expose-external-ip-address.md b/docs/tutorials/stateless-application/expose-external-ip-address.md
index ea7e1e7a36..39b7bfaa0c 100644
--- a/docs/tutorials/stateless-application/expose-external-ip-address.md
+++ b/docs/tutorials/stateless-application/expose-external-ip-address.md
@@ -117,7 +117,7 @@ external IP address.
1. Use the external IP address to access the Hello World application:
- curl http://:
+ curl http://:
where `` is the external IP address of your Service,
and `` is the value of `Port` in your Service description.
diff --git a/docs/tutorials/stateless-application/guestbook.md b/docs/tutorials/stateless-application/guestbook.md
index 331e489922..ca47e5d16e 100644
--- a/docs/tutorials/stateless-application/guestbook.md
+++ b/docs/tutorials/stateless-application/guestbook.md
@@ -61,12 +61,12 @@ This tutorial shows you how to build and deploy a simple, multi-tier web applica
{% include task-tutorial-prereqs.md %}
Download the following configuration files:
-1. [redis-master-deployment.yaml](/docs/tutorials/stateless-application/guestbook/redis-master-deployment.yaml)
-1. [redis-master-service.yaml](/docs/tutorials/stateless-application/guestbook/redis-master-service.yaml)
-1. [redis-slave-deployment.yaml](/docs/tutorials/stateless-application/guestbook/redis-slave-deployment.yaml)
-1. [redis-slave-service.yaml](/docs/tutorials/stateless-application/guestbook/redis-slave-service.yaml)
-1. [frontend-deployment.yaml](/docs/tutorials/stateless-application/guestbook/frontend-deployment.yaml)
-1. [frontend-service.yaml](/docs/tutorials/stateless-application/guestbook/frontend-service.yaml)
+1. [redis-master-deployment.yaml](https://kubernetes.io/docs/tutorials/stateless-application/guestbook/redis-master-deployment.yaml)
+1. [redis-master-service.yaml](https://kubernetes.io/docs/tutorials/stateless-application/guestbook/redis-master-service.yaml)
+1. [redis-slave-deployment.yaml](https://kubernetes.io/docs/tutorials/stateless-application/guestbook/redis-slave-deployment.yaml)
+1. [redis-slave-service.yaml](https://kubernetes.io/docs/tutorials/stateless-application/guestbook/redis-slave-service.yaml)
+1. [frontend-deployment.yaml](https://kubernetes.io/docs/tutorials/stateless-application/guestbook/frontend-deployment.yaml)
+1. [frontend-service.yaml](https://kubernetes.io/docs/tutorials/stateless-application/guestbook/frontend-service.yaml)
{% endcapture %}
diff --git a/docs/user-guide/configmap/README.md b/docs/user-guide/configmap/README.md
index 9a23a29a01..f4c4022053 100644
--- a/docs/user-guide/configmap/README.md
+++ b/docs/user-guide/configmap/README.md
@@ -74,7 +74,7 @@ KUBE_CONFIG_2=value-2
## Step Three: Create a pod that sets the command line using ConfigMap
Use the [`command-pod.yaml`](command-pod.yaml) file to create a Pod with a container
-whose command is injected with the keys of a ConfigMap
+whose command is injected with the keys of a ConfigMap:
```shell
$ kubectl create -f docs/user-guide/configmap/command-pod.yaml
@@ -89,7 +89,7 @@ value-1 value-2
## Step Four: Create a pod that consumes a configMap in a volume
-Pods can also consume ConfigMaps in volumes. Use the [`volume-pod.yaml`](volume-pod.yaml) file to create a Pod that consume the ConfigMap in a volume.
+Pods can also consume ConfigMaps in volumes. Use the [`volume-pod.yaml`](volume-pod.yaml) file to create a Pod that consumes the ConfigMap in a volume.
```shell
$ kubectl create -f docs/user-guide/configmap/volume-pod.yaml
diff --git a/docs/user-guide/docker-cli-to-kubectl.md b/docs/user-guide/docker-cli-to-kubectl.md
index ffbc4cc2a6..cddbd1eda0 100644
--- a/docs/user-guide/docker-cli-to-kubectl.md
+++ b/docs/user-guide/docker-cli-to-kubectl.md
@@ -54,7 +54,7 @@ kubectl run [-i] [--tty] --attach --image=
Unlike `docker run ...`, if `--attach` is specified, we attach to `stdin`, `stdout` and `stderr`, there is no ability to control which streams are attached (`docker -a ...`).
Because we start a Deployment for your container, it will be restarted if you terminate the attached process (e.g. `ctrl-c`), this is different from `docker run -it`.
-To destroy the Deployment (and its pods) you need to run `kubectl delete deployment `
+To destroy the Deployment (and its pods) you need to run `kubectl delete deployment `.
#### docker ps
@@ -78,7 +78,7 @@ nginx-app-5jyvm 1/1 Running 0 1h
#### docker attach
-How do I attach to a process that is already running in a container? Checkout [kubectl attach](/docs/user-guide/kubectl/{{page.version}}/#attach)
+How do I attach to a process that is already running in a container? Checkout [kubectl attach](/docs/user-guide/kubectl/{{page.version}}/#attach).
With docker:
@@ -178,7 +178,7 @@ See [Logging and Monitoring Cluster Activity](/docs/concepts/cluster-administrat
How do I stop and delete a running process? Checkout [kubectl delete](/docs/user-guide/kubectl/{{page.version}}/#delete).
-With docker
+With docker:
```shell
$ docker ps
diff --git a/docs/user-guide/jobs/work-queue-2/redis-service.yaml b/docs/user-guide/jobs/work-queue-2/redis-service.yaml
index 85f2ca2271..519ea60fb9 100644
--- a/docs/user-guide/jobs/work-queue-2/redis-service.yaml
+++ b/docs/user-guide/jobs/work-queue-2/redis-service.yaml
@@ -4,7 +4,7 @@ metadata:
name: redis
spec:
ports:
- - port: 6379
- targetPort: 6379
+ - port: 6379
+ targetPort: 6379
selector:
app: redis
diff --git a/docs/user-guide/jsonpath.md b/docs/user-guide/jsonpath.md
index 0ca17dc318..0efc779a78 100644
--- a/docs/user-guide/jsonpath.md
+++ b/docs/user-guide/jsonpath.md
@@ -5,7 +5,7 @@ title: JSONPath Support
JSONPath template is composed of JSONPath expressions enclosed by {}.
And we add three functions in addition to the original JSONPath syntax:
-1. The `$` operator is optional since the expression always start from the root object by default.
+1. The `$` operator is optional since the expression always starts from the root object by default.
2. We can use `""` to quote text inside JSONPath expressions.
3. We can use `range` operator to iterate lists.
diff --git a/docs/user-guide/kubectl-cheatsheet.md b/docs/user-guide/kubectl-cheatsheet.md
index 7aca9473ef..ddba577c75 100644
--- a/docs/user-guide/kubectl-cheatsheet.md
+++ b/docs/user-guide/kubectl-cheatsheet.md
@@ -18,7 +18,7 @@ $ source <(kubectl completion zsh) # setup autocomplete in zsh
## Kubectl Context and Configuration
-Set which Kubernetes cluster `kubectl` communicates with and modify configuration
+Set which Kubernetes cluster `kubectl` communicates with and modifies configuration
information. See [Authenticating Across Clusters with kubeconfig](/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/) documentation for
detailed config file information.
@@ -231,7 +231,7 @@ $ kubectl taint nodes foo dedicated=special-user:NoSchedule
## Resource types
-The following table includes a list of all the supported resource types and their abbreviated aliases.
+The following table includes a list of all the supported resource types and their abbreviated aliases:
Resource type | Abbreviated alias
-------------------- | --------------------
diff --git a/docs/user-guide/kubectl-overview.md b/docs/user-guide/kubectl-overview.md
index ccfbd5662d..ba735d7fee 100644
--- a/docs/user-guide/kubectl-overview.md
+++ b/docs/user-guide/kubectl-overview.md
@@ -19,20 +19,23 @@ where `command`, `TYPE`, `NAME`, and `flags` are:
* `command`: Specifies the operation that you want to perform on one or more resources, for example `create`, `get`, `describe`, `delete`.
* `TYPE`: Specifies the [resource type](#resource-types). Resource types are case-sensitive and you can specify the singular, plural, or abbreviated forms. For example, the following commands produce the same output:
- ```shell
$ kubectl get pod pod1
$ kubectl get pods pod1
$ kubectl get po pod1
- ```
+
* `NAME`: Specifies the name of the resource. Names are case-sensitive. If the name is omitted, details for all resources are displayed, for example `$ kubectl get pods`.
When performing an operation on multiple resources, you can specify each resource by type and name or specify one or more files:
+
* To specify resources by type and name:
- * To group resources if they are all the same type: `TYPE1 name1 name2 name<#>`
+
+ * To group resources if they are all the same type: `TYPE1 name1 name2 name<#>`.
Example: `$ kubectl get pod example-pod1 example-pod2`
- * To specify multiple resource types individually: `TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>`
+
+ * To specify multiple resource types individually: `TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>`.
Example: `$ kubectl get pod/example-pod1 replicationcontroller/example-rc1`
- * To specify resources with one or more files: `-f file1 -f file2 -f file<#>`
+
+ * To specify resources with one or more files: `-f file1 -f file2 -f file<#>`
[Use YAML rather than JSON](/docs/concepts/configuration/overview/#general-config-tips) since YAML tends to be more user-friendly, especially for configuration files.
Example: `$ kubectl get pod -f ./pod.yaml`
* `flags`: Specifies optional flags. For example, you can use the `-s` or `--server` flags to specify the address and port of the Kubernetes API server.
diff --git a/docs/user-guide/kubectl/v1.5/README.md b/docs/user-guide/kubectl/v1.5/README.md
index f6799c18b9..18abdc4c8b 100644
--- a/docs/user-guide/kubectl/v1.5/README.md
+++ b/docs/user-guide/kubectl/v1.5/README.md
@@ -6,7 +6,7 @@ Static compilation of html from markdown including processing for grouping code
\> bdocs-tab:kubectl Deployment Config to run 3 nginx instances (max rollback set to 10 revisions).
-bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the prefered tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
+bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the preferred tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
\`\`\`bdocs-tab:kubectl_yaml
apiVersion: extensions/v1beta1
@@ -38,7 +38,7 @@ With specific tokens on blockquotes and code blocks, the chunks can be placed ac
Clone the repository, then add documents into documents directory. Modify the manifest.json to contain the document filenames in the order desired. The docs field is an array of objects with a filename key.
-As a NodeJS program, a valid installation of node is required. Once node is installed, verify it can be run from command line.
+As a NodeJS program, a valid installation of node is required. Once node is installed, verify if it can be run from command line.
```
node --version
```
@@ -66,4 +66,4 @@ Apache License Version 2.0
## FAQ
Q: Why is it named brodocs?
-A: This project was born out of a collaboration with my brother to create a suitable docs app for his purposes. It was a fun name for the the two of us to use as actual brothers.
\ No newline at end of file
+A: This project was born out of a collaboration with my brother to create a suitable docs app for his purposes. It was a fun name for the the two of us to use as actual brothers.
diff --git a/docs/user-guide/kubectl/v1.6/README.md b/docs/user-guide/kubectl/v1.6/README.md
index f6799c18b9..18abdc4c8b 100644
--- a/docs/user-guide/kubectl/v1.6/README.md
+++ b/docs/user-guide/kubectl/v1.6/README.md
@@ -6,7 +6,7 @@ Static compilation of html from markdown including processing for grouping code
\> bdocs-tab:kubectl Deployment Config to run 3 nginx instances (max rollback set to 10 revisions).
-bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the prefered tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
+bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the preferred tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
\`\`\`bdocs-tab:kubectl_yaml
apiVersion: extensions/v1beta1
@@ -38,7 +38,7 @@ With specific tokens on blockquotes and code blocks, the chunks can be placed ac
Clone the repository, then add documents into documents directory. Modify the manifest.json to contain the document filenames in the order desired. The docs field is an array of objects with a filename key.
-As a NodeJS program, a valid installation of node is required. Once node is installed, verify it can be run from command line.
+As a NodeJS program, a valid installation of node is required. Once node is installed, verify if it can be run from command line.
```
node --version
```
@@ -66,4 +66,4 @@ Apache License Version 2.0
## FAQ
Q: Why is it named brodocs?
-A: This project was born out of a collaboration with my brother to create a suitable docs app for his purposes. It was a fun name for the the two of us to use as actual brothers.
\ No newline at end of file
+A: This project was born out of a collaboration with my brother to create a suitable docs app for his purposes. It was a fun name for the the two of us to use as actual brothers.
diff --git a/docs/user-guide/kubectl/v1.7/README.md b/docs/user-guide/kubectl/v1.7/README.md
index f6799c18b9..18abdc4c8b 100644
--- a/docs/user-guide/kubectl/v1.7/README.md
+++ b/docs/user-guide/kubectl/v1.7/README.md
@@ -6,7 +6,7 @@ Static compilation of html from markdown including processing for grouping code
\> bdocs-tab:kubectl Deployment Config to run 3 nginx instances (max rollback set to 10 revisions).
-bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the prefered tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
+bdocs-tab:tab will be stripped during rendering and utilized to with CSS to show or hide the preferred tab. kubectl indicates the desired tab, since blockquotes have no specific syntax highlighting.
\`\`\`bdocs-tab:kubectl_yaml
apiVersion: extensions/v1beta1
@@ -38,7 +38,7 @@ With specific tokens on blockquotes and code blocks, the chunks can be placed ac
Clone the repository, then add documents into documents directory. Modify the manifest.json to contain the document filenames in the order desired. The docs field is an array of objects with a filename key.
-As a NodeJS program, a valid installation of node is required. Once node is installed, verify it can be run from command line.
+As a NodeJS program, a valid installation of node is required. Once node is installed, verify if it can be run from command line.
```
node --version
```
@@ -66,4 +66,4 @@ Apache License Version 2.0
## FAQ
Q: Why is it named brodocs?
-A: This project was born out of a collaboration with my brother to create a suitable docs app for his purposes. It was a fun name for the the two of us to use as actual brothers.
\ No newline at end of file
+A: This project was born out of a collaboration with my brother to create a suitable docs app for his purposes. It was a fun name for the the two of us to use as actual brothers.
diff --git a/docs/user-guide/kubectl/v1.7/node_modules/jquery.scrollto/CHANGELOG.md b/docs/user-guide/kubectl/v1.7/node_modules/jquery.scrollto/CHANGELOG.md
index 874087615c..cdec0977f3 100644
--- a/docs/user-guide/kubectl/v1.7/node_modules/jquery.scrollto/CHANGELOG.md
+++ b/docs/user-guide/kubectl/v1.7/node_modules/jquery.scrollto/CHANGELOG.md
@@ -111,7 +111,7 @@
- In addition to window/document, if html or body are received, the plugin will choose the right one.
### Fix
- The plugin accepts floating numbers, Thanks Ramin
-- Using jQuery.nodeName where neccessary so that this works on xml+xhtml
+- Using jQuery.nodeName where necessary so that this works on xml+xhtml
- The max() internal function wasn't completely accurrate, now it is 98% (except for IE on quirks mode and it's not too noticeable).
## 1.4
@@ -183,4 +183,4 @@
- Two axes can be scrolled together, this is set with the option 'axis'.
- In case 2 axes are chosen, the scrolling can be queued: one scrolls, and then the other.
- There's an intermediary event, 'onAfterFirst' called in case the axes are queued, after the first ends.
-- If the option 'margin' is set to true, the plugin will take in account, the margin of the target(no use if target is a value).
\ No newline at end of file
+- If the option 'margin' is set to true, the plugin will take in account, the margin of the target(no use if target is a value).
diff --git a/docs/user-guide/kubectl/v1.7/node_modules/marked/README.md b/docs/user-guide/kubectl/v1.7/node_modules/marked/README.md
index efa71aaaab..bb4b3a9652 100644
--- a/docs/user-guide/kubectl/v1.7/node_modules/marked/README.md
+++ b/docs/user-guide/kubectl/v1.7/node_modules/marked/README.md
@@ -297,7 +297,7 @@ $ cat hello.html
The point of marked was to create a markdown compiler where it was possible to
frequently parse huge chunks of markdown without having to worry about
-caching the compiled output somehow...or blocking for an unnecesarily long time.
+caching the compiled output somehow...or blocking for an unnecessarily long time.
marked is very concise and still implements all markdown features. It is also
now fully compatible with the client-side.
diff --git a/docs/user-guide/services/load-balancer-sample.yaml b/docs/user-guide/services/load-balancer-sample.yaml
index 28b1dd3014..0f53c3a524 100644
--- a/docs/user-guide/services/load-balancer-sample.yaml
+++ b/docs/user-guide/services/load-balancer-sample.yaml
@@ -4,8 +4,8 @@ metadata:
name: myapp
spec:
ports:
- - port: 8765
- targetPort: 9376
+ - port: 8765
+ targetPort: 9376
selector:
app: example
type: LoadBalancer
diff --git a/docs/user-guide/services/service-sample.yaml b/docs/user-guide/services/service-sample.yaml
index c819df7ac5..1563884931 100644
--- a/docs/user-guide/services/service-sample.yaml
+++ b/docs/user-guide/services/service-sample.yaml
@@ -4,7 +4,7 @@ metadata:
name: myapp
spec:
ports:
- - port: 8765
- targetPort: 9376
+ - port: 8765
+ targetPort: 9376
selector:
app: example
diff --git a/update-imported-tutorials.py b/update-imported-tutorials.py
index ba235d1ce5..81b14181f6 100755
--- a/update-imported-tutorials.py
+++ b/update-imported-tutorials.py
@@ -42,7 +42,12 @@ TUTORIALS = [
}),
('mysql-wordpress-pd/README.md',
'./docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md',
- "Example: WordPress and MySQL with Persistent Volumes", {}),
+ "Example: Deploying WordPress and MySQL with Persistent Volumes",
+ {
+ "mysql-wordpress-pd/local-volumes.yaml": "./docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/local-volumes.yaml",
+ "mysql-wordpress-pd/mysql-deployment.yaml": "./docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/mysql-deployment.yaml",
+ "mysql-wordpress-pd/wordpress-deployment.yaml": "./docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/wordpress-deployment.yaml",
+ }),
('cassandra/README.md',
'./docs/tutorials/stateful-application/cassandra.md',
"Example: Deploying Cassandra with Stateful Sets",