My Little Kubernetes: Configurer un cluster de test dans VirtualBox

Au cours des deux dernières années, j'ai rencontré assez souvent Kubernetes, mais cela s'est généralement toujours produit du point de vue d'un développeur. Consultez la liste des pods, leurs statuts, les journaux, etc. En général, rien de compliqué.

Récemment, j'ai décidé d'étudier Kubernetes un peu plus en profondeur afin de mieux comprendre comment cela fonctionne et ce qu'il peut faire. Mais ici, un problème évident s'est posé: nous avons besoin d'une sorte de bac à sable dans lequel on pourrait expérimenter sans craindre de casser quelque chose, et mieux encore, pouvoir reculer à tout moment.

Habituellement, vous devriez commencer à apprendre Kubernetes avec minikube , un utilitaire de console qui peut créer rapidement un cluster à partir d'un nœud à l'aide de VirtualBox. C'est la meilleure option pour un démarrage rapide.

Mais il y a une autre option. Vous pouvez prendre VirtualBox, créer plusieurs machines virtuelles, par exemple, avec Ubuntu Server et configurer un petit cluster Kubernetes directement sur votre ordinateur personnel.

J'ai décidé de passer par la deuxième voie, mais lors de l'installation, j'ai commencé à rencontrer divers problèmes dont la solution ne m'était pas aussi évidente que je le souhaiterais. En général, sur Internet, vous pouvez trouver de nombreux articles en anglais, qui décrivent le processus de configuration, mais, malheureusement, aucun d'entre eux n'était assez complet pour moi. J'ai dû collecter des informations pièce par pièce auprès de diverses sources.

Ici, j'ai décidé de tout rassembler et de décrire le processus de configuration d'un petit cluster Kubernetes à l'aide de VirtualBox avec autant de détails que je voudrais le voir moi-même. J'espère que ces informations pourront aider d'autres développeurs dans leurs expériences.

Attention au trafic! Il y a beaucoup de captures d'écran dans l'article.

Entraînement

, , 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:

.

. , , .

J'espère que ce matériel sera utile pour les développeurs qui souhaitent mettre en place un cluster de test pour eux-mêmes pour apprendre Kubernetes.




All Articles