My Little Kubernetes: Configuración de un clúster de prueba en VirtualBox

En los últimos años, he tenido que lidiar con Kubernetes con bastante frecuencia, pero esto generalmente siempre sucedía desde la posición de un desarrollador. Vea la lista de pods, sus estados, registros, etc. En general, nada complicado.

Recientemente, decidí estudiar Kubernetes un poco más para comprender mejor cómo funciona y qué puede hacer. Pero entonces surgió un problema obvio: necesitamos una especie de caja de arena en la que se pueda experimentar sin miedo a romper algo, o mejor aún, poder retroceder en cualquier momento.

Por lo general, debe comenzar a aprender Kubernetes con minikube , una utilidad de consola que puede crear rápidamente un clúster desde un nodo usando VirtualBox. Ésta es la mejor opción para comenzar rápidamente.

Pero hay otra opción. Puede tomar VirtualBox, crear varias máquinas virtuales, por ejemplo, con Ubuntu Server y configurar un pequeño clúster de Kubernetes directamente en la computadora de su hogar.

Decidí tomar el segundo camino, pero durante la configuración comencé a enfrentar varios problemas, cuya solución no era tan obvia para mí como me gustaría. En general, en Internet puede encontrar muchos artículos en inglés, donde se describe el proceso de instalación, pero, desafortunadamente, ninguno de ellos fue lo suficientemente completo para mí. Tuve que recopilar información pieza por pieza de varias fuentes.

Aquí decidí poner todo junto y describir el proceso de configuración de un pequeño clúster de Kubernetes usando VirtualBox con tanto detalle como me gustaría verlo yo mismo. Espero que esta información pueda ayudar a otros desarrolladores con sus experimentos.

¡Cuidado con el tráfico! Hay muchas capturas de pantalla en el artículo.

Formación

, , VirtualBox, Kubernetes, c Ubuntu Server 20.04. Windows 10 Home. :

  • VirtualBox 6.1.16 VirtualBox 6.1.16 Extension Pack. .

  • Ubuntu Server 20.04. .

  • kubectl . .

, .NET , , , . - - =)

Hyper-V

, Docker Windows Subsystem for Linux (WLS), Hyper-V. VirtualBox , :

Hyper-V . :

bcdedit /set hypervisorlaunchtype off

:

bcdedit /set hypervisorlaunchtype auto

, .

VirtualBox

VirtualBox VirtualBox Extension Pack. , . File → Preferences → Extensions , Extension Pack :

VirtualBox , , NAT, NAT Network, Bridged, Host-only .. , , . , ( , ).

NAT Host-only.

NAT , ( NAT Network). , IP , .

Host-only , IP , . . VirtualBox , File → Host Network Manager...:

DHCP Server, IP , NAT.

IPv4 Address IP . , IPv4 Network Mask. , IP 192.168.92.1, 255.255.255.0, 192.168.92.2, 192.168.92.10, 192.168.92.42 ..

, VirtualBox . , - , 192.168.10.1:

( , 192.168.1.1 , .. Wi-Fi )

, .. .

, , . , .

Kube Template:

2:

. VDI (VirtualBox Disk Image), 10:

:

. . Machine → Settings... → System → Processor 2, Kubernetes :

Network , NAT:

( ), Host-only , ( ):

, . Ubuntu Server.

Ubuntu Server

. VirtualBox . iso Ubuntu Server 20.04 :

, , . :

:

, , IP , - . :

IP . , IP 192.168.10.1. .

IP :

, . kube-template, username/password test/test:

OpenSSH server. , SSH PuTTY Multi PuTTY Manager. , :

( .)

. , .. :

, , ( cdrom, ):

, , :

IP :

:

, :

curl https://ya.ru

, . snapshot, .

mc

, - . mc:

sudo apt-get update
sudo apt-get install -y mc
sudo mc
mc, , .
  • F3 -

  • F4 - . , mcedit (3).

    • F2 - C .

  • F5 - .

  • F8 - .

  • CTRL+O - .

swap

Kubernetes , swap, .

, swap :

cat /proc/swaps

, swap , /etc, fstab . :

( ) ( /swap.img), :

shutdown -r now

/swap.img:

Docker Kubernetes, . , . , .. .

, , , , .

, .

( ) :

shutdown now

Shared Folders. , :

.

CD VirtualBox Guest Additions, , VirtualBox Extension Pack. Devices → Insert Guest Additions CD image:

. CD:

sudo mkdir /media/cdrom
sudo mount -t iso9660 /dev/cdrom /media/cdrom

, :

sudo apt-get update
sudo apt-get install -y build-essential linux-headers-`uname -r`

:

sudo /media/cdrom/VBoxLinuxAdditions.run

:

shutdown -r now

:

mkdir ~/shared

test, /home/test/shared.

mc /etc/fstab. ( <username> , test):

shared /home/<username>/shared vboxsf defaults 0 0

:

/etc/modules, :

vboxsf

:

:

shutdown -r now

, . :

, ~/shared , :

Docker Kubernetes

Docker. , ( ):

#!/usr/bin/env bash

sudo apt-get update

sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

Kubernetes . , :

#!/usr/bin/env bash

sudo apt-get update

sudo apt-get install -y \
    apt-transport-https \
    curl

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl

, , . : install-docker.sh install-kubernetes.sh, .

, LF, CRLF.

, , Docker, Kubernetes:

cgroup driver Docker Kubernetes systemd

Linux , Control Groups ( cgroups), , . Docker Kubernetes cgroups, : cgroupfs systemd. , Docker Kubernetes .

systemd, . , Kubernetes .

Docker. /etc/docker daemon.json :

{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

:

Kubernetes /etc/systemd/system/kubelet.service.d/10-kubeadm.conf. :

ExecStart=/usr/bin/kubelet <   >

--cgroup-driver=systemd. :

, :

shutdown now

. . Clone...:

: Kube Master, Kube Node1 Kube Node2.

MAC AddressPolicy Generate new MAC address for all network adapters.

:

hostname IP

, hostname IP .

Kube Master .

hostname. :

sudo hostnamectl set-hostname kube-master

IP Ubuntu Server 20.04 /etc/netplan/00-installer-config.yaml. IP 192.198.10.10:

:

sudo netplan apply

, hostname IP :

hostname && hostname -I

. Kubernetes ( , kubelet) , IP IP , NAT , .

IP , , /etc/systemd/system/kubelet.service.d/10-kubeadm.conf. , --cgroup-driver=systemd. : --node-ip=192.168.10.10:

, .

Kube Node1 kube-node1 IP 192.168.10.11.

Kube Node2 kube-node2 IP 192.168.10.12.

.

master :

sudo kubeadm init \
	--apiserver-advertise-address=192.168.10.10 \
  --pod-network-cidr=10.10.0.0/16 > ~/shared/kubeadm-join.sh

.

--apiserver-advertise-address , IP apiserver. IP , NAT, master . 192.168.10.10.

--pod-network-cidr , IP . , , . 10.10.0.0/16.

master , output kubeadm join ... . , .

, , kubeadm-join.sh:

. :

Kube Node1 Kube Node2, kubeadm-join.sh:

Kubernetes . - . admin.conf /etc/kubernetes, master .

admin.conf config:

sudo cp /etc/kubernetes/admin.conf ~/shared/config

config %UserProfile%/.kube.

:

kubectl get nodes -o wide

, , NotReady.

, , , , Pending:

kubectl get pods -A

, Kubernetes , , Flannel Calico. .

Flannel (.. ).

GitHub , :

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

, .. . kube-flannel.yml .

:

  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }

10.244.0.0 10.10.0.0. , kubectl init.

Flannel :

kubectl apply -f .\Desktop\kube-flannel.yml

, , , Flannel. Running .

Ready:

.

. , , .

Espero que este material sea útil para los desarrolladores que quieran configurar un clúster de prueba para aprender Kubernetes.




All Articles