過去数年間、私はKubernetesに頻繁に対処しなければなりませんでしたが、これは通常、開発者の立場から発生しました。ポッド、そのステータス、ログなどのリストを表示します。一般的に、複雑なことは何もありません。
最近、Kubernetesがどのように機能し、何ができるかをよりよく理解するために、Kubernetesをもう少し深く研究することにしました。しかし、その後、明らかな問題が発生しました。何かを壊すことを恐れずに実験できる、またはさらに良いことに、いつでもロールバックできる、ある種のサンドボックスが必要です。
通常、VirtualBoxを使用して1つのノードからクラスターをすばやく作成できるコンソールユーティリティであるminikubeを使用してKubernetesの学習を開始する必要があります。これは、クイックスタートに最適なオプションです。
しかし、別のオプションがあります。VirtualBoxを使用して、たとえばUbuntu Serverを使用して複数の仮想マシンを作成し、自宅のコンピューター上に小さなKubernetesクラスターをセットアップできます。
私は2番目の方法に進むことにしましたが、セットアップ中にさまざまな問題に直面し始めました。その解決策は私が望むほど明白ではありませんでした。一般的に、インターネット上にはセットアッププロセスを説明する英語の記事がたくさんありますが、残念ながら、どれも私にとって十分に完成していませんでした。さまざまな情報源から1つずつ情報を収集する必要がありました。
ここでは、すべてをまとめて、VirtualBoxを使用して小さなKubernetesクラスターをセットアップするプロセスを自分で見たいと思うほど詳細に説明することにしました。この情報が他の開発者の実験に役立つことを願っています。
トラフィックに気をつけろ!記事にはたくさんのスクリーンショットがあります。
トレーニング
, , 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を学習するためのテストクラスターを自分でセットアップしたい開発者にとって役立つことを願っています。