Skip to content

Commit fd2bb17

Browse files
committed
Merge branch 'develop' into feature/new-docs-ui
2 parents c8abc3a + 9847b50 commit fd2bb17

File tree

32 files changed

+674
-89
lines changed

32 files changed

+674
-89
lines changed

ci/vale/dictionary.txt

+6
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ backticks
9696
backupninja
9797
bampton
9898
balarin
99+
bantime
99100
barebones
100101
base64
101102
basearch
@@ -181,6 +182,7 @@ chrooting
181182
chrooted
182183
citad
183184
cjones
185+
clamav
184186
clearsign
185187
clearspace
186188
cli
@@ -437,6 +439,7 @@ filesystem
437439
filesystems
438440
filezilla
439441
filimonov
442+
findtime
440443
finnix
441444
firewalld
442445
firewalling
@@ -614,6 +617,7 @@ ifnames
614617
iframe
615618
iframes
616619
ifup
620+
ignoreip
617621
ikiwiki
618622
im
619623
imagize
@@ -789,6 +793,7 @@ logdir
789793
logfile
790794
logfiles
791795
loglevel
796+
logpath
792797
logrotate
793798
logstash
794799
logwatch
@@ -838,6 +843,7 @@ matplotlib
838843
mawk
839844
maxconn
840845
maxdepth
846+
maxretry
841847
mbit
842848
mbits
843849
mbox

docs/guides/development/javascript/build-react-video-streaming-app/index.md

+26-30
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ const app = express();
107107
{{< file "server/app.js" js >}}
108108
// add after 'const app = express();'
109109

110-
app.get('/video', function(req, res) {
110+
app.get('/video', (req, res) => {
111111
res.sendFile('assets/sample.mp4', { root: __dirname });
112112
});
113113
{{< /file >}}
@@ -119,7 +119,7 @@ app.get('/video', function(req, res) {
119119
{{< file "server/app.js" js >}}
120120
// add to end of file
121121

122-
app.listen(4000, function () {
122+
app.listen(4000, () => {
123123
console.log('Listening on port 4000!')
124124
});
125125
{{< /file >}}
@@ -425,9 +425,7 @@ const cors = require('cors');
425425
// add after existing app.get('/video', ...) route
426426

427427
app.use(cors());
428-
app.get('/videos', function(req, res) {
429-
res.json(videos);
430-
});
428+
app.get('/videos', (req, res) => res.json(videos));
431429
{{< /file >}}
432430

433431
First, we enable `cors` on the server since we’ll be making the requests from a different origin (domain). `cors` was installed in the [Application Setup](#application-setup) section. Then the `/videos` route is declared, which returns the array we just created in `json` format.
@@ -443,7 +441,7 @@ Our React application fetches the video by `id`, so we can use the `id` to get t
443441
{{< file "server/app.js" js >}}
444442
// add after app.get('/videos', ...) route
445443

446-
app.get('/video/:id/data', function(req, res) {
444+
app.get('/video/:id/data', (req, res) => {
447445
const id = parseInt(req.params.id, 10);
448446
res.json(videos[id]);
449447
});
@@ -472,34 +470,34 @@ We now need to implement two new features that are not supported by that endpoin
472470
{{< file "server/app.js" js >}}
473471
// add after app.get('/video/:id/data', ...) route
474472

475-
app.get('/video/:id', function(req, res) {
473+
app.get('/video/:id', (req, res) => {
476474
const path = `assets/${req.params.id}.mp4`;
477475
const stat = fs.statSync(path);
478476
const fileSize = stat.size;
479477
const range = req.headers.range;
480478
if (range) {
481-
const parts = range.replace(/bytes=/, "").split("-")
482-
const start = parseInt(parts[0], 10)
479+
const parts = range.replace(/bytes=/, "").split("-");
480+
const start = parseInt(parts[0], 10);
483481
const end = parts[1]
484482
? parseInt(parts[1], 10)
485-
: fileSize-1
486-
const chunksize = (end-start)+1
487-
const file = fs.createReadStream(path, {start, end})
483+
: fileSize-1;
484+
const chunksize = (end-start) + 1;
485+
const file = fs.createReadStream(path, {start, end});
488486
const head = {
489487
'Content-Range': `bytes ${start}-${end}/${fileSize}`,
490488
'Accept-Ranges': 'bytes',
491489
'Content-Length': chunksize,
492490
'Content-Type': 'video/mp4',
493-
}
491+
};
494492
res.writeHead(206, head);
495493
file.pipe(res);
496494
} else {
497495
const head = {
498496
'Content-Length': fileSize,
499497
'Content-Type': 'video/mp4',
500-
}
501-
res.writeHead(200, head)
502-
fs.createReadStream(path).pipe(res)
498+
};
499+
res.writeHead(200, head);
500+
fs.createReadStream(path).pipe(res);
503501
}
504502
});
505503
{{< /file >}}
@@ -528,29 +526,29 @@ else {
528526
const head = {
529527
'Content-Length': fileSize,
530528
'Content-Type': 'video/mp4',
531-
}
532-
res.writeHead(200, head)
533-
fs.createReadStream(path).pipe(res)
529+
};
530+
res.writeHead(200, head);
531+
fs.createReadStream(path).pipe(res);
534532
}
535533
{{< / highlight >}}
536534

537535
Subsequent requests will include a range, which we handle in the `if` block:
538536

539537
{{< highlight js >}}
540538
if (range) {
541-
const parts = range.replace(/bytes=/, "").split("-")
542-
const start = parseInt(parts[0], 10)
539+
const parts = range.replace(/bytes=/, "").split("-");
540+
const start = parseInt(parts[0], 10);
543541
const end = parts[1]
544542
? parseInt(parts[1], 10)
545-
: fileSize-1
546-
const chunksize = (end-start)+1
547-
const file = fs.createReadStream(path, {start, end})
543+
: fileSize-1;
544+
const chunksize = (end-start) + 1;
545+
const file = fs.createReadStream(path, {start, end});
548546
const head = {
549547
'Content-Range': `bytes ${start}-${end}/${fileSize}`,
550548
'Accept-Ranges': 'bytes',
551549
'Content-Length': chunksize,
552550
'Content-Type': 'video/mp4',
553-
}
551+
};
554552
res.writeHead(206, head);
555553
file.pipe(res);
556554
}
@@ -587,9 +585,9 @@ const thumbsupply = require('thumbsupply');
587585
{{< file "server/app.js" js >}}
588586
// add after app.get('/video/:id', ...) route
589587

590-
app.get('/video/:id/poster', function(req, res) {
588+
app.get('/video/:id/poster', (req, res) => {
591589
thumbsupply.generateThumbnail(`assets/${req.params.id}.mp4`)
592-
.then(thumb => res.sendFile(thumb))
590+
.then(thumb => res.sendFile(thumb));
593591
});
594592
{{< / highlight >}}
595593

@@ -667,9 +665,7 @@ With the `track` element set up, we can now create the endpoint that will handle
667665
{{< file "server/app.js" js >}}
668666
// add after the app.get('/video/:id/poster', ...) route
669667

670-
app.get('/video/:id/caption', function(req, res) {
671-
res.sendFile('assets/captions/sample.vtt', { root: __dirname });
672-
});
668+
app.get('/video/:id/caption', (req, res) => res.sendFile('assets/captions/sample.vtt', { root: __dirname }));
673669
{{< /file >}}
674670

675671
This route will serve the same caption file, regardless of which `id` is passed as a parameter. In a more complete application, you could serve different caption files for different `id`s.

docs/guides/kubernetes/deploy-and-manage-a-cluster-with-linode-kubernetes-engine-a-tutorial/index.md

+9-9
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ The Linode Kubernetes Engine (LKE) is a fully-managed container orchestration en
3232

3333
{{< disclosure-note "Additional LKE features">}}
3434
* **etcd Backups** : A snapshot of your cluster's metadata is backed up continuously, so your cluster is automatically restored in the event of a failure.
35-
* **High Availability** : All of your control plane components are monitored and will automatically recover if they fail.
35+
* **High Availability** : All of your control plane components are monitored and automatically recover if they fail.
3636
{{</ disclosure-note>}}
3737

3838
### In this Guide
@@ -48,7 +48,7 @@ In this guide you will learn:
4848
- [Next Steps after deploying your cluster.](#next-steps)
4949

5050
{{< caution >}}
51-
This guide's example instructions will create several billable resources on your Linode account. If you do not want to keep using the example cluster that you create, be sure to [remove it](#delete-a-cluster) when you have finished the guide.
51+
This guide's example instructions create several billable resources on your Linode account. If you do not want to keep using the example cluster that you create, be sure to [remove it](#delete-a-cluster) when you have finished the guide.
5252

5353
If you remove the resources afterward, you will only be billed for the hour(s) that the resources were present on your account.
5454
{{< /caution >}}
@@ -57,7 +57,7 @@ If you remove the resources afterward, you will only be billed for the hour(s) t
5757

5858
### Install kubectl
5959

60-
You will need to install the kubectl client to your computer before proceeding. Follow the steps corresponding to your computer's operating system.
60+
You need to install the kubectl client to your computer before proceeding. Follow the steps corresponding to your computer's operating system.
6161

6262
{{< content "how-to-install-kubectl" >}}
6363

@@ -67,21 +67,21 @@ You will need to install the kubectl client to your computer before proceeding.
6767

6868
## Connect to your LKE Cluster with kubectl
6969

70-
After you've created your LKE cluster using the Cloud Manager, you can begin interacting with and managing your cluster. You connect to it using the kubectl client on your computer. To configure kubectl, you'll download your cluster's *kubeconfig* file.
70+
After you've created your LKE cluster using the Cloud Manager, you can begin interacting with and managing your cluster. You connect to it using the kubectl client on your computer. To configure kubectl, download your cluster's *kubeconfig* file.
7171

7272
### Access and Download your kubeconfig
7373

7474
{{< content "kubernetes-download-kubeconfig-shortguide" >}}
7575

7676
### Persist the Kubeconfig Context
7777

78-
If you create a new terminal window, it will not have access to the context that you specified using the previous instructions. This context information can be made persistent between new terminals by setting the [`KUBECONFIG` environment variable](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/#set-the-kubeconfig-environment-variable) in your shell's configuration file.
78+
If you create a new terminal window, it does not have access to the context that you specified using the previous instructions. This context information can be made persistent between new terminals by setting the [`KUBECONFIG` environment variable](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/#set-the-kubeconfig-environment-variable) in your shell's configuration file.
7979

8080
{{< note >}}
8181
If you are using Windows, review the [official Kubernetes documentation](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/#set-the-kubeconfig-environment-variable) for how to persist your context.
8282
{{< /note >}}
8383

84-
These instructions will persist the context for users of the Bash terminal. They will be similar for users of other terminals:
84+
These instructions persist the context for users of the Bash terminal. They are similar for users of other terminals:
8585

8686
1. Navigate to the `$HOME/.kube` directory:
8787

@@ -158,15 +158,15 @@ kube-system kube-proxy-qcjg9 1/1 Running 0
158158

159159
## Modify a Cluster's Node Pools
160160

161-
You can use the Linode Cloud Manager to modify a cluster's existing node pools by adding or removing nodes. You can also recycle your node pools to replace all of their nodes with new ones that are upgraded to the most recent patch of your cluster's Kubernetes version, or remove entire node pools from your cluster. This section will cover completing those tasks. For any other changes to your LKE cluster, you should use kubectl.
161+
You can use the Linode Cloud Manager to modify a cluster's existing node pools by adding or removing nodes. You can also recycle your node pools to replace all of their nodes with new ones that are upgraded to the most recent patch of your cluster's Kubernetes version, or remove entire node pools from your cluster. This section covers completing those tasks. For any other changes to your LKE cluster, you should use kubectl.
162162

163163
### Access your Cluster's Details Page
164164

165-
1. Click the **Kubernetes** link in the sidebar. The Kubernetes listing page will appear and you will see all your clusters listed.
165+
1. Click the **Kubernetes** link in the sidebar. The Kubernetes listing page appears and you see all of your clusters listed.
166166

167167
![Kubernetes cluster listing page](kubernetes-listing-page.png "Kubernetes cluster listing page.")
168168

169-
1. Click the cluster that you wish to modify. The Kubernetes cluster's details page will appear.
169+
1. Click the cluster that you wish to modify. The Kubernetes cluster's details page appears.
170170

171171
![Kubernetes cluster's details page](cluster-details-page.png "Kubernetes cluster's details page.")
172172

docs/guides/kubernetes/getting-started-with-load-balancing-on-a-lke-cluster/index.md

+1-4
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ The Linode CCM accepts annotations that configure the behavior and settings of y
132132
|---------------------|--------|---------------|-------------|
133133
| `throttle` | &bull; integer <br>&bull; `0`-`20` <br> &bull; `0` disables the throttle | `20` | The client connection throttle limits the number of new connections-per-second from the same client IP. |
134134
| `default-protocol` | &bull; string <br> &bull;`tcp`, `http`, `https` | `tcp` | Specifies the protocol for the NodeBalancer to use. |
135+
| `proxy-protocol` | &bull; string <br> &bull;`none`, `v1`, `v2` | `none` | Enables Proxy Protocol on the underlying NodeBalancer and specifies the version of Proxy Protocol to use. The Proxy Protocol allows TCP client connection information, like IP address and port number, to be transferred to cluster nodes. See the [Using Proxy Protocol with NodeBalancers](/docs/platform/nodebalancer/nodebalancer-proxypass-configuration/#what-is-proxy-protocol) guide for details on each Proxy Protocol version. |
135136
| `port-*`| A JSON object of port configurations<br> For example: <br> `{ "tls-secret-name": "prod-app-tls", "protocol": "https"})` | None | &bull; Specifies a NodeBalancer port to configure, i.e. `port-443`. <br><br> &bull; Ports `1-65534` are available for balancing. <br><br> &bull; The available port configurations are: <br><br> `"tls-secret-name"` use this key to provide a Kubernetes secret name when setting up TLS termination for a service to be accessed over HTTPS. The secret type should be `kubernetes.io/tls`. <br><br> `"protocol"` specifies the protocol to use for this port, i.e. `tcp`, `http`, `https`. The default protocol is `tcp`, unless you provided a different configuration for the `default-protocol` annotation. |
136137
| `check-type` | &bull; string <br> &bull; `none`, `connection`, `http`, `http_body` | None | &bull; The type of health check to perform on Nodes to ensure that they are serving requests. The behavior for each check is the following: <br><br> `none` no check is performed <br><br> `connection` checks for a valid TCP handshake <br><br> `http` checks for a `2xx` or `3xx` response code <br><br> `http_body` checks for a specific string within the response body of the healthcheck URL. Use the `check-body` annotation to provide the string to use for the check. |
137138
| `check-path` | string | None | The URL path that the NodeBalancer will use to check on the health of the back-end Nodes. |
@@ -150,10 +151,6 @@ To view a list of deprecated annotations, visit the [Linode CCM GitHub repositor
150151

151152
This section describes how to set up TLS termination on your Linode NodeBalancers so a Kubernetes Service can be accessed over HTTPS.
152153

153-
{{< note >}}
154-
While Linode NodeBalancers do support ProxyProtocol, the Linode CCM does not. For this reason, the Linode Kubernetes Engine does not support ProxyProtocol yet. This means you cannot both terminate TLS inside your Kubernetes cluster and whitelist client IP addresses. ProxyProtocol support is coming soon to the Linode CCM.
155-
{{</ note >}}
156-
157154
#### Generating a TLS type Secret
158155

159156
Kubernetes allows you to store sensitive information in a Secret object for use within your cluster. This is useful for storing things like passwords and API tokens. In this section, you will create a Kubernetes secret to store Transport Layer Security (TLS) certificates and keys that you will then use to configure TLS termination on your Linode NodeBalancers.

docs/guides/kubernetes/how-to-deploy-nginx-ingress-on-linode-kubernetes-engine/index.md

-4
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,6 @@ This guide will show you how to:
3838
- Create two instances of sample application Deployments to create two separate mock websites on a single Kubernetes cluster served over port 80.
3939
- Create an Ingress and a NodeBalancer to route traffic from the internet to Kubernetes Services.
4040

41-
{{< note >}}
42-
[Linode NodeBalancers](https://www.linode.com/products/nodebalancers/0) do not currently support ProxyProtocol. For this reason, Kubernetes LoadBalancer Services running on Linode do not support ProxyProtocol either. This means you cannot both terminate TLS inside your Kubernetes cluster and whitelist client IP addresses. ProxyProtocol support is coming soon to Linode NodeBalancers.
43-
{{</ note >}}
44-
4541
## Before You Begin
4642

4743
- You should have a working knowledge of Kubernetes' key concepts, including master and worker nodes, Pods, Deployments, and Services. For more information on Kubernetes, see our [Beginner's Guide to Kubernetes](/docs/kubernetes/beginners-guide-to-kubernetes/) series.
Loading

docs/guides/networking/dns/use-dig-to-perform-manual-dns-queries/index.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ example.com. 86400 IN NS ns4.linode.com.
220220
;; ADDITIONAL SECTION:
221221
ns1.linode.com. 86400 IN A 69.93.127.10
222222
ns2.linode.com. 86400 IN A 65.19.178.10
223-
ns3.linode.com. 86400 IN A 75.127.96.10
223+
ns3.linode.com. 86400 IN A 74.207.225.10
224224
ns4.linode.com. 86400 IN A 207.192.70.10
225225
ns5.linode.com. 86400 IN A 109.74.194.10
226226

docs/guides/platform/manager/dns-manager-add-domain-shortguide/index.md

+5-3
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,8 @@ Creating a domain also creates its corresponding domain zone.
2727

2828
![This page lets you add a new domain](add-new-domain.png "This page lets you add a new domain")
2929

30-
1. If you want to add a *slave zone* instead of a master zone, click the **Slave** radio button.
30+
1. If you want to add a *slave zone* instead of a master zone, click the **Slave** radio button. If not, you may skip to the next step.
3131

32-
{{< note >}}
3332
In order for Linode's DNS servers to function as slaves, your DNS master server must notify and allow AXFR requests from the following IP addresses:
3433

3534
104.237.137.10
@@ -42,7 +41,10 @@ In order for Linode's DNS servers to function as slaves, your DNS master server
4241
2600:3c02::a
4342
2600:3c03::a
4443
2a01:7e00::a
45-
{{< /note >}}
44+
45+
{{< caution >}}
46+
On **December 15th, 2020** the IP address `75.127.96.10` will be replaced with the IP address `74.207.225.10`. While both IP addresses currently provide AXFR support, users will need to replace `75.127.96.10` with `74.207.225.10` in their configurations by the 15th of December, 2020, for long term AXFR support.
47+
{{< /caution >}}
4648

4749
1. Enter your domain name in the **Domain** field. An example is shown above.
4850
1. Enter an administrator's email address in the **SOA Email Address** field.

0 commit comments

Comments
 (0)