على مدار العامين الماضيين ، كان علي التعامل مع Kubernetes كثيرًا ، ولكن هذا يحدث دائمًا من موقع مطور. اعرض قائمة البودات وحالاتها وسجلاتها وما إلى ذلك. بشكل عام ، لا شيء معقد.
قررت مؤخرًا دراسة Kubernetes بشكل أعمق قليلاً من أجل فهم أفضل لكيفية عملها وما يمكن أن تفعله. ولكن بعد ذلك نشأت مشكلة واضحة: نحن بحاجة إلى نوع من الصندوق الرمل يمكن للمرء أن يجرب فيه دون خوف من كسر شيء ما ، بل ومن الأفضل أن يكون قادرًا على التراجع في أي وقت.
عادة ، يجب أن تبدأ في تعلم Kubernetes باستخدام minikube ، وهي أداة مساعدة لوحدة التحكم يمكنها بسرعة إنشاء مجموعة من عقدة واحدة باستخدام VirtualBox. هذا هو الخيار الأفضل لبداية سريعة.
ولكن هناك خيار آخر. يمكنك استخدام VirtualBox ، وإنشاء العديد من الأجهزة الافتراضية ، على سبيل المثال ، باستخدام Ubuntu Server وإعداد مجموعة Kubernetes صغيرة على جهاز الكمبيوتر المنزلي مباشرةً.
قررت أن أذهب في الاتجاه الثاني ، لكن أثناء الإعداد بدأت أواجه مشكلات مختلفة ، لم يكن حلها واضحًا بالنسبة لي كما أريد. بشكل عام ، على الإنترنت ، يمكنك العثور على الكثير من المقالات باللغة الإنجليزية ، والتي تصف عملية الإعداد ، ولكن لسوء الحظ ، لم يكن أي منها مكتملًا بدرجة كافية بالنسبة لي. كان علي أن أجمع المعلومات قطعة قطعة من مصادر مختلفة.
قررت هنا تجميع كل شيء معًا ووصف عملية إعداد مجموعة Kubernetes صغيرة باستخدام VirtualBox بقدر التفاصيل التي أرغب في رؤيتها بنفسي. آمل أن تساعد هذه المعلومات المطورين الآخرين في تجاربهم.
احترس من حركة المرور! هناك الكثير من لقطات الشاشة في المقالة.
تدريب
, , 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:
.
. , , .
آمل أن تكون هذه المادة مفيدة للمطورين الذين يرغبون في إعداد مجموعة اختبار لأنفسهم لتعلم Kubernetes.