Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions docs/labs/kubernetes-the-hard-way/lab3-compute-resources.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,19 @@ tags:

This is a fork of the original ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way) originally written by Kelsey Hightower (GitHub: kelseyhightower). Unlike the original, which bases itself on Debian-like distributions for the ARM64 architecture, this fork targets Enterprise Linux distributions such as Rocky Linux, which runs on x86_64 architecture.

Kubernetes requires a set of machines to host the Kubernetes control plane and the worker nodes where containers are ultimately run. In this lab you will provision the machines required for setting up a Kubernetes cluster.
Kubernetes requires a set of machines to host the Kubernetes control plane and the worker nodes where containers are ultimately run. In this lab, you will provide the machines required to set up a Kubernetes cluster.

## Machine Database

This tutorial will leverage a text file, which will serve as a machine database, to store the various machine attributes that you will use when setting up the Kubernetes control plane and worker nodes. The following schema represents entries in the machine database, one entry per line:
This tutorial will leverage a text file, which will serve as a machine database, to store the various machine attributes you will use when setting up the Kubernetes control plane and worker nodes. The following schema represents entries in the machine database, one entry per line:

```text
IPV4_ADDRESS FQDN HOSTNAME POD_SUBNET
```

Each of the columns corresponds to a machine IP address `IPV4_ADDRESS`, fully qualified domain name `FQDN`, host name `HOSTNAME`, and the IP subnet `POD_SUBNET`. Kubernetes assigns one IP address per `pod` and the `POD_SUBNET` represents the unique IP address range assigned to each machine in the cluster for doing so.
Each column corresponds to a machine IP address `IPV4_ADDRESS`, fully qualified domain name `FQDN`, host name `HOSTNAME`, and the IP subnet `POD_SUBNET`. Kubernetes assigns one IP address per `pod`, and the `POD_SUBNET` represents the unique IP address range assigned to each machine in the cluster for doing so.

Here is an example machine database similar to the one used when creating this tutorial. Notice the hidden IP addresses. You can assign any IP address to your machines provided that each machine is reachable from each other and the `jumpbox`.
Here is an example machine database similar to the one used to create this tutorial. Please take a look at the hidden IP addresses. You can assign any IP address to your machines, provided they are reachable from each other and the `jumpbox`.

```bash
cat machines.txt
Expand All @@ -37,17 +37,17 @@ XXX.XXX.XXX.XXX node-0.kubernetes.local node-0 10.200.0.0/24
XXX.XXX.XXX.XXX node-1.kubernetes.local node-1 10.200.1.0/24
```

Now it is your turn to create a `machines.txt` file with the details for the three machines you will be using to create your Kubernetes cluster. Use the example machine database from above and add the details for your machines.
Now, it is your turn to create a `machines.txt` file with the details for the three machines you will use to create your Kubernetes cluster. You can use the example machine database from above to add the details for your machines.

## Configuring SSH Access

You will use SSH to configure the machines in the cluster. Verify that you have `root` SSH access to each machine listed in your machine database. You might need to enable root SSH access on each node by updating the `sshd_config` file and restarting the SSH server.

### Enable root SSH Access

If you have `root` SSH access for each of your machines you can skip this section.
You can skip this section if you have `root` SSH access for each of your machines.

By default, a new `Rocky Linux` install disables SSH access for the `root` user. This is for security reasons, as the `root` user has total administrative control of unix-like systems. Weak passwords are very bad for internet connected machines. As mentioned earlier, you are going to enable `root` access over SSH to streamline the steps in this tutorial. Security is a trade-off, and in this case, you are optimizing for convenience.
A new `Rocky Linux` install disables SSH access for the `root` user by default. This is for security reasons, as the `root` user has total administrative control of Unix-like systems. Weak passwords are awful for internet-connected machines. As mentioned earlier, you will enable `root` access over SSH to streamline the steps in this tutorial. Security is a trade-off; in this case, you are optimizing for convenience.

Log on to each machine using SSH and your user account, then switch to the `root` user with the `su` command:

Expand Down Expand Up @@ -114,7 +114,7 @@ x86_64 GNU/Linux

## Hostnames

In this section you will assign hostnames to the `server`, `node-0`, and `node-1` machines. You will use the hostname when executing commands from the `jumpbox` to each machine. The hostname also plays a major role within the cluster. Instead of Kubernetes clients using an IP address to issue commands to the Kubernetes API server, those clients will use the `server` hostname instead. Hostnames are also used by each worker machine, `node-0` and `node-1` when registering with a given Kubernetes cluster.
In this section, you will assign hostnames to the `server`, `node-0`, and `node-1` machines. You will use the hostname when executing commands from the `jumpbox` to each machine. The hostname also plays a major role within the cluster. Instead of Kubernetes clients using an IP address to issue commands to the Kubernetes API server, those clients will use the `server` hostname instead. Hostnames are also used by each worker machine, `node-0` and `node-1`, when registering with a given Kubernetes cluster.

To configure the hostname for each machine, run the following commands on the `jumpbox`.

Expand Down Expand Up @@ -145,7 +145,7 @@ node-1.kubernetes.local

## Host Lookup Table

In this section you will generate a `hosts` file and append it to `/etc/hosts` file on `jumpbox` and to the `/etc/hosts` files on all three cluster members used for this tutorial. This will allow each machine to be reachable using a hostname such as `server`, `node-0`, or `node-1`.
In this section, you will generate a `hosts` file and append it to `/etc/hosts` file on `jumpbox` and to the `/etc/hosts` files on all three cluster members used for this tutorial. This will allow each machine to be reachable using a hostname such as `server`, `node-0`, or `node-1`.

Create a new `hosts` file and add a header to identify the machines being added:

Expand Down Expand Up @@ -179,7 +179,7 @@ XXX.XXX.XXX.XXX node-1.kubernetes.local node-1

## Adding `/etc/hosts` Entries To A Local Machine

In this section you will append the DNS entries from the `hosts` file to the local `/etc/hosts` file on your `jumpbox` machine.
In this section, you will append the DNS entries from the `hosts` file to the local `/etc/hosts` file on your `jumpbox` machine.

Append the DNS entries from `hosts` to `/etc/hosts`:

Expand All @@ -203,7 +203,7 @@ XXX.XXX.XXX.XXX node-0.kubernetes.local node-0
XXX.XXX.XXX.XXX node-1.kubernetes.local node-1
```

At this point you should be able to SSH to each machine listed in the `machines.txt` file by using a hostname.
You should be able to SSH each machine listed in the `machines.txt` file using a hostname.

```bash
for host in server node-0 node-1
Expand All @@ -219,7 +219,7 @@ node-1 x86_64 GNU/Linux

## Adding `/etc/hosts` Entries To The Remote Machines

In this section you will append the host entries from `hosts` to `/etc/hosts` on each machine listed in the `machines.txt` text file.
In this section, you will append the host entries from `hosts` to `/etc/hosts` on each machine listed in the `machines.txt` text file.

Copy the `hosts` file to each machine and append the contents to `/etc/hosts`:

Expand All @@ -231,6 +231,6 @@ while read IP FQDN HOST SUBNET; do
done < machines.txt
```

At this point you can use hostnames when connecting to machines from your `jumpbox` machine, or any of the three machines in the Kubernetes cluster. Instead of using IP addresses you can now connect to machines by using a hostname such as `server`, `node-0`, or `node-1`.
You can use hostnames when connecting to machines from your `jumpbox` machine or any of the three machines in the Kubernetes cluster. Instead of using IP addresses, you can now connect to machines using a hostname such as `server`, `node-0`, or `node-1`.

Next: [Provisioning a CA and Generating TLS Certificates](lab4-certificate-authority.md)