From feb74148a69c369bc3df69b16915a8615ebe0c8d Mon Sep 17 00:00:00 2001 From: Pick1a1username <20301273+Pick1a1username@users.noreply.github.com> Date: Sun, 17 Feb 2019 18:35:39 +0900 Subject: [PATCH] The chapter 'Provisioning Compute Resources' is updated. --- docs/02-compute-resources.md | 141 +++++++++++++++++++---------------- 1 file changed, 78 insertions(+), 63 deletions(-) diff --git a/docs/02-compute-resources.md b/docs/02-compute-resources.md index ed949ad..e1210a2 100644 --- a/docs/02-compute-resources.md +++ b/docs/02-compute-resources.md @@ -11,15 +11,14 @@ The Kubernetes [networking model](https://kubernetes.io/docs/concepts/cluster-ad ### Virtual Network -In this section Virtual Network will be setup to host the Kubernetes cluster. +In this section, Virtual Network will be setup to host the Kubernetes cluster. -1. Open Virtual Machine Manager, and from menu, go to Edit -> Connection Details. -2. Go to Virtual Networks tab, and click the plus(+) button at the left lower side of the window. +1. Open Virtual Machine Manager, and from menu, go to `Edit` -> `Connection Details`. +2. Go to `Virtual Networks` tab, and click the plus(+) button at the left lower side of the window. 3. Type `kubernetes-nw` in the textbox named `Network Name`, and click Forward. 4. Type `10.240.0.0/24` in the textbox named `Network`, type `10.240.0.2` in the textbox named `Start`, type `10.240.0.254` in the textbox named `end`, and click Forward. -5. You will be asked whether enabling IPv6 or not. Don't check the checkbox, and click Forward. -6. Click the radiobutton named `Forwarding to physical network`, type `kubernetes-nw.com` in the textbox named `DNS Domain Name`, and click Finish. -7. Click the network created above, and take a note of the value of Device. This value will be needed when setting routing. +5. You will be asked whether enabling IPv6 or not. Don't check the checkbox, and click `Forward`. +6. Click the radiobutton named `Forwarding to physical network`, type `kubernetes-nw.com` in the textbox named `DNS Domain Name`, and click `Finish`. ## Virtual Machines @@ -44,14 +43,14 @@ The following virtual machines will be setup in this chapter: As installing OS to each virtual machine manually is time-consuming, using a base image where OS is already installed is very handy. -In this tutorial, `ubuntu-xenial.qcow2` is assumed to be the base image. +In this chapter, `ubuntu-xenial.qcow2` is assumed to be the base image. ### Kubernetes Controllers Create three virtual instances which will host the Kubernetes control plane: -1. Open a terminal, or login to the linux server, and move to the directory where the base image exists (maybe `/var/lib/libvirt/images`?). +1. Open a terminal, or login to the KVM host, and move to the directory where the base image exists (maybe `/var/lib/libvirt/images`?). 2. Create images for Kubernetes controllers backed by the base image: ``` @@ -62,19 +61,16 @@ Create three virtual instances which will host the Kubernetes control plane: (Using each image created above, repeat from 3. to 7..) -3. Open Virtual Machine Manager, and click the icon named 'Create a new virtual machine'. -4. Check the radiobutton named `Importing existing disk image`, and click Forward -5. Click Browse, click the n-th controller image, click Choose Volume, choose the operating system (`Ubuntu 16.04` in this case), and click Forward. +3. Open Virtual Machine Manager, and click the icon named `Create a new virtual machine`. +4. Check the radiobutton named `Importing existing disk image`, and click `Forward`. +5. Click `Browse`, click the n-th controller image, click Choose Volume, choose the operating system (`Ubuntu 16.04` in this case), and click `Forward`. 6. Type `512` in the textbox named `Memory`, and click Forward. -7. Type `controller-n`, click Network selection, select the network `kubernetes-nw`, and click Finish. - - -(Todo: Setup Network Interface) +7. Type `controller-n`(`n` should be `1`, `2`, or `3`), click `Network selection`, select the network `kubernetes-nw`, and click `Finish`. ### Kubernetes Workers -Each worker instance requires a pod subnet allocation from the Kubernetes cluster CIDR range. The pod subnet allocation will be used to configure container networking in a later exercise. The `pod-cidr` instance metadata will be used to expose pod subnet allocations to compute instances at runtime. +Each worker instance requires a pod subnet allocation from the Kubernetes cluster CIDR range. The pod subnet allocation will be used to configure container networking in a later chapter. > The Kubernetes cluster CIDR range is defined by the Controller Manager's `--cluster-cidr` flag. In this tutorial the cluster CIDR range will be set to `10.200.0.0/16`, which supports 254 subnets. @@ -91,37 +87,33 @@ Create three virtual machines which will host the Kubernetes worker nodes: (Using each image created above, repeat from 3. to 7..) -3. Open Virtual Machine Manager, and click the icon named 'Create a new virtual machine'. -4. Check the radiobutton named `Importing existing disk image`, and click Forward -5. Click Browse, click the n-th controller image, click Choose Volume, choose the operating system (`Ubuntu 16.04` in this case), and click Forward. -6. Type `512` in the textbox named `Memory`, and click Forward. -7. Type `worker-n`, click Network selection, select the network `kubernetes-nw`, and click Finish. - -(Todo: Setup Network Interface) +3. Open Virtual Machine Manager, and click the icon named `Create a new virtual machine`. +4. Check the radiobutton named `Importing existing disk image`, and click `Forward`. +5. Click `Browse`, click the n-th controller image, click `Choose Volume`, choose the operating system (`Ubuntu 16.04` in this case), and click `Forward`. +6. Type `1024` in the textbox named `Memory`, and click `Forward`. +7. Type `worker-n`(`n` should be `1`, `2`, or `3`), click `Network selection`, select the network `kubernetes-nw`, and click `Finish`. ### Load Balancer for Kubernetes API Server -Kuberentes API Server... - -1. Open a terminal, or login to the linux server, and move to the directory where the base image exists (maybe `/var/lib/libvirt/images`?). +1. Open a terminal, or login to the KVM host, and move to the directory where the base image exists (maybe `/var/lib/libvirt/images`?). 2. Create images for Kubernetes controllers backed by the base image: ``` # qemu-img create -f qcow2 ubuntu-xenial.qcow -b ubuntu-xenial-lb-1.qcow2 ``` -3. Open Virtual Machine Manager, and click the icon named 'Create a new virtual machine'. -4. Check the radiobutton named `Importing existing disk image`, and click Forward -5. Click Browse, click the n-th controller image, click Choose Volume, choose the operating system (`Ubuntu 16.04` in this case), and click Forward. -6. Type `512` in the textbox named `Memory`, and click Forward. -7. Type `lb-1`, click Network selection, select the network `kubernetes-nw`, and click Finish. +3. Open Virtual Machine Manager, and click the icon named `Create a new virtual machine`. +4. Check the radiobutton named `Importing existing disk image`, and click `Forward`. +5. Click `Browse`, click the load balancer's image, click `Choose Volume`, choose the operating system (`Ubuntu 16.04` in this case), and click `Forward`. +6. Type `256` in the textbox named `Memory`, and click `Forward`. +7. Type `lb-1`, click `Network selection`, select the network `kubernetes-nw`, and click `Finish`. ### Client for Kubernetes -Create a virtual machine, instead of Cloud Shell in GCP, that will be used as a client for Kubernetes. +Instead of Cloud Shell in GCP, create a virtual machine that will be used as a client for Kubernetes. 1. Open a terminal, or login to the linux server, and move to the directory where the base image exists (maybe `/var/lib/libvirt/images`?). @@ -130,11 +122,11 @@ Create a virtual machine, instead of Cloud Shell in GCP, that will be used as a ``` # qemu-img create -f qcow2 ubuntu-xenial.qcow -b ubuntu-xenial-client-1.qcow2 ``` -3. Open Virtual Machine Manager, and click the icon named 'Create a new virtual machine'. -4. Check the radiobutton named `Importing existing disk image`, and click Forward -5. Click Browse, click the n-th controller image, click Choose Volume, choose the operating system (`Ubuntu 16.04` in this case), and click Forward. -6. Type `512` in the textbox named `Memory`, and click Forward. -7. Type `client-1`, click Network selection, select the network `kubernetes-nw`, and click Finish. +3. Open Virtual Machine Manager, and click the icon named `Create a new virtual machine`. +4. Check the radiobutton named `Importing existing disk image`, and click `Forward`. +5. Click `Browse`, click the client's image, click `Choose Volume`, choose the operating system (`Ubuntu 16.04` in this case), and click `Forward`. +6. Type `512` in the textbox named `Memory`, and click `Forward`. +7. Type `client-1`, click `Network selection`, select the network `kubernetes-nw`, and click `Finish`. ## Configuring Virtual Machines @@ -146,7 +138,7 @@ As described above, the IP address of each virtual machine should be fixed. Referring to the environment information described above, Set the IP Address to each virtual machine. -1. Login to the virtual machine. +1. Through SSH or Graphic Console by Virtual Machine Manager, login to the virtual machine. 2. Set the hostname: ``` @@ -190,30 +182,11 @@ $ sudo reboot ``` -### Modifying `hosts` - -Though resolving hostnames is unnecessary, ... - -1. In the host PC, create a text file listing IP addresses and hostnames: - -``` -$ cat << EOF > new_hosts -10.240.0.11 controller-1 -10.240.0.12 controller-2 -10.240.0.13 controller-3 -10.240.0.10 lb-1 -10.240.0.21 worker-1 -10.240.0.22 worker-2 -10.240.0.23 worker-3 -10.240.0.99 client-1 -EOF -``` - ## Configuring SSH Access -SSH will be used to configure the controller and worker instances. +SSH will be used to configure the controller and worker nodes. -1. In the host PC, generate a SSH key. +1. In `client-1`, generate a SSH key. ``` $ ssh-keygen @@ -255,22 +228,64 @@ $ cat << EOF > target_hosts.txt 10.240.0.21 10.240.0.22 10.240.0.23 -10.240.0.99 EOF ``` 3. Distribute the key to the virtual machines. ``` -$ for target in `cat target_hosts`; do ssh-copy-id -i ~/.ssh/id_rsa-k8s.pub @$target; done +$ for target in `cat target_hosts`; do ssh-copy-id -i ~/.ssh/id_rsa-k8s.pub @$target; done ``` You will be asked to enter password of the user(ID). -4. Verify ... +4. Verify it. ``` -$ do ssh -i ~/.ssh/id_rsa-k8s @$target uname -n; done +$ do ssh -i ~/.ssh/id_rsa-k8s @$target uname -n; done ``` + +### Modifying `hosts` + +1. In `client-1`, create a text file listing IP addresses and hostnames. + +``` +$ cat << EOF > new_hosts +10.240.0.10 lb-1 +10.240.0.11 controller-1 +10.240.0.12 controller-2 +10.240.0.13 controller-3 +10.240.0.21 worker-1 +10.240.0.22 worker-2 +10.240.0.23 worker-3 +10.240.0.99 client-1 +EOF +``` + +2. Add new hosts to `client-1`. + +``` +$ sudo cat new_hosts >> /etc/hosts +``` + +3. Distribute `new_hosts` to the other virtual machines. + +``` +$ for i in `cat target_hosts.txt`; \ +do scp -i ~/.ssh/id_rsa-k8s new_hosts @$target:~/; \ +done +``` + +4. Login to each virtual machines to which `new_hosts` is sent to, add `new_hosts` to `/etc/hosts`. + +(`tmux` can make this procedure done simply) + +``` +$ ssh -i ~/.ssh/id_rsa-k8s @ +$ sudo cat new_hosts >> /etc/hosts +$ rm new_hosts +``` + + Next: [Provisioning a CA and Generating TLS Certificates](04-certificate-authority.md)