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. :
, .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
#!/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:
.
. , , .
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.