My Little Kubernetes: Menyiapkan Test Cluster di VirtualBox

Selama beberapa tahun terakhir, saya cukup sering berurusan dengan Kubernetes, tetapi ini biasanya selalu terjadi dari posisi developer. Lihat daftar pod, statusnya, log, dll. Secara umum, tidak ada yang rumit.

Baru-baru ini saya memutuskan untuk mempelajari Kubernetes sedikit lebih dalam untuk lebih memahami cara kerjanya dan apa yang dapat dilakukannya. Tetapi kemudian muncul masalah yang jelas: kita membutuhkan semacam kotak pasir, di mana seseorang dapat bereksperimen tanpa takut merusak sesuatu, dan bahkan lebih baik untuk dapat memutar kembali kapan saja.

Biasanya, Anda harus mulai mempelajari Kubernetes dengan minikube , utilitas konsol yang dapat dengan cepat membuat cluster dari satu node menggunakan VirtualBox. Ini adalah opsi terbaik untuk memulai dengan cepat.

Tapi ada pilihan lain. Anda dapat menggunakan VirtualBox, membuat beberapa mesin virtual, misalnya, dengan Server Ubuntu dan mengatur cluster Kubernetes kecil langsung di komputer rumah Anda.

Saya memutuskan untuk menggunakan cara kedua, tetapi selama pengaturan saya mulai menghadapi berbagai masalah, yang solusinya tidak sejelas yang saya inginkan. Secara umum, di Internet Anda dapat menemukan banyak artikel dalam bahasa Inggris, yang menjelaskan proses penyiapan, tetapi sayangnya, tidak ada yang cukup lengkap bagi saya. Saya harus mengumpulkan informasi sepotong demi sepotong dari berbagai sumber.

Di sini saya memutuskan untuk menggabungkan semuanya dan mendeskripsikan proses pengaturan cluster Kubernetes kecil menggunakan VirtualBox sedetail yang saya ingin lihat sendiri. Semoga informasi ini dapat membantu pengembang lain dengan eksperimen mereka.

Hati-hati dengan lalu lintas! Ada banyak screenshot di artikel tersebut.

Latihan

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

.

. , , .

Semoga materi ini bermanfaat bagi developer yang ingin menyiapkan cluster pengujian untuk mereka sendiri guna mempelajari Kubernetes.




All Articles