In den letzten Jahren musste ich mich ziemlich oft mit Kubernetes beschäftigen, aber dies geschah normalerweise immer von der Position eines Entwicklers aus. Zeigen Sie die Liste der Pods, deren Status, Protokolle usw. an. Im Allgemeinen nichts kompliziertes.
Kürzlich habe ich mich entschlossen, Kubernetes etwas genauer zu studieren, um besser zu verstehen, wie es funktioniert und was es kann. Aber hier trat ein offensichtliches Problem auf: Wir brauchen eine Art Sandkasten, in dem man experimentieren kann, ohne Angst zu haben, etwas zu zerbrechen, und noch besser, jederzeit zurückrollen kann.
Normalerweise sollten Sie Kubernetes mit minikube lernen , einem Konsolendienstprogramm, mit dem Sie mithilfe von VirtualBox schnell einen Cluster von einem Knoten aus erstellen können. Dies ist die beste Option für einen schnellen Start.
Es gibt aber noch eine andere Option. Sie können VirtualBox nehmen, mehrere virtuelle Maschinen erstellen, z. B. mit Ubuntu Server, und einen kleinen Kubernetes-Cluster direkt auf Ihrem Heimcomputer einrichten.
Ich entschied mich für den zweiten Weg, aber während des Setups stieß ich auf verschiedene Probleme, deren Lösung für mich nicht so offensichtlich war, wie ich es gerne hätte. Im Internet finden Sie im Allgemeinen viele Artikel in englischer Sprache, die den Einrichtungsprozess beschreiben, aber leider war keiner von ihnen vollständig genug für mich. Ich musste Stück für Stück Informationen aus verschiedenen Quellen sammeln.
Hier habe ich beschlossen, alles zusammenzustellen und den Prozess des Einrichtens eines kleinen Kubernetes-Clusters mit VirtualBox so detailliert zu beschreiben, wie ich es selbst gerne sehen würde. Hoffe, diese Informationen können anderen Entwicklern bei ihren Experimenten helfen.
Achten Sie auf den Verkehr! Der Artikel enthält viele Screenshots.
Ausbildung
, , VirtualBox, Kubernetes, c Ubuntu Server 20.04. Windows 10 Home. :
, .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 mcmc, , .
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 nowShared 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
#!/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#!/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:
.
. , , .
Ich hoffe, dieses Material ist nützlich für Entwickler, die einen Testcluster für sich selbst einrichten möchten, um Kubernetes zu lernen.