Fork me on GitHub

Herr Knedel/Hal-hal hebat dengan kontainer: Kubenetes cluster dan penyimpanan NFS

Created Sun, 20 Jun 2021 00:00:00 +0000 Modified Sat, 01 Oct 2022 10:39:30 +0000 Schwierigkeitsgrad: Sehr sportlich

828 Words

Hari ini saya menginstal cluster Kubenetes baru dan ada banyak hal yang harus dilakukan!

Saya sudah memesan komponen-komponen ini untuk itu:

Mari kita pergi!

Saya telah membuat gambar saya sendiri untuk instalasi berdasarkan instalasi Raspian Lite. Kunci pengguna/publik saya sudah tersimpan dalam gambar ini dan file “/boot/config.txt” telah disesuaikan untuk LED saya.

# meine Server brauchen kein HDMI, WLAN und Bluetooth
dtoverlay=disable-bt
dtoverlay=disable-wifi
disable_splash=1
hdmi_blanking=1
hdmi_ignore_hotplug=1
hdmi_ignore_composite=1
 
 
# Status-LEDs an GPIO weiterleiten
dtoverlay=act-led,gpio=21
dtparam=act_led_trigger=cpu0

Server 1 - Pasang disk

Pertama, saya menginstal layanan NFS pada “Server 1”. Penyimpanan ini nantinya dapat digunakan untuk cluster container saya. Saya menyambungkan hard drive USB ke “Server 1” dan memformatnya EXT4 dengan bantuan petunjuk ini: https://homecircuits.eu/blog/mount-sata-cubieboard-lubuntu/ Kemudian saya membuat mount point untuk disk USB:

x
+
Terminal

$ sudo mkdir /media/usb-platte

Saya telah memasukkan sistem file baru di file “/etc/fstab” sebagai berikut:

/dev/sda1 /media/usb-platte ext4 defaults 0 2

Pengaturan dapat diperiksa dengan “sudo mount -a”. Sekarang, disk USB harus dipasang di bawah “/media/usb-disk”.

Instal NFS

Paket ini diperlukan untuk NFS:

x
+
Terminal

$ sudo apt-get install nfs-kernel-server -y

Selain itu, folder baru dibuat pada disk USB

x
+
Terminal

$ sudo mkdir /media/usb-platte/nfsshare
$ sudo chown -R pi:pi /media/usb-platte/nfsshare/
$ sudo find /media/usb-platte/nfsshare/ -type d -exec chmod 755 {} \;
$ sudo find /media/usb-platte/nfsshare/ -type f -exec chmod 644 {} \;

Kemudian file “/etc/exports” harus diedit. Jalur, ID pengguna dan ID grup dimasukkan di sana:

/media/usb-platte/nfsshare *(rw,all_squash,insecure,async,no_subtree_check,anonuid=1000,anongid=1000)

Sekarang pengaturan dapat diadopsi sebagai berikut.

x
+
Terminal

$ sudo exportfs -ra

Bagaimana saya bisa melakukan mount NFS?

Saya bisa memasang volume sebagai berikut:

x
+
Terminal

$ sudo mount -t nfs SERVER-1-IP:/media/usb-platte/nfsshare /mnt/nfs

Atau masukkan secara permanen di file “/etc/fstab”:

SERVER-1-IP:/media/usb-platte/nfsshare /mnt/nfs/ nfs defaults 0 0

Di sini, juga, saya bisa menggunakan “sudo mount -a”.

Instal Kubernetes

Perintah-perintah berikut ini harus dieksekusi pada server 1, server 2 dan server 3. Pertama kita menginstal Docker dan menambahkan pengguna “PI” ke grup Docker.

x
+
Terminal

$ curl -sSL get.docker.com | sh
$ sudo usermod pi -aG docker

Setelah itu, pengaturan ukuran swap dinolkan pada semua server. Ini berarti saya mengedit berkas “/etc/dphys-swapfile” dan menetapkan atribut “CONF_SWAPSIZE” ke “0”.

Selain itu, pengaturan “Control-Group” dalam file “/boot/cmdline.txt” harus disesuaikan:

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

Lihat:

Sekarang semua Raspberry harus reboot sekali dan kemudian siap untuk instalasi Kubernetes.

x
+
Terminal

$ sudo reboot

Setelah reboot, saya menginstal paket-paket ini di server 1, server 2 dan server 3:
x
+
Terminal

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - && \
$ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list && \
$ sudo apt-get update -q && sudo apt-get install -qy kubeadm

# Server 1 saja

Sekarang master Kubenetes dapat diinisialisasi.

x
+
Terminal

$ sudo kubeadm init --token-ttl=0 --pod-network-cidr=10.244.0.0/16

Setelah inisialisasi berhasil, saya menerima pengaturan. Saya ingat perintah “kubeadm join” yang ditampilkan untuk menghubungkan node pekerja.
x
+
Terminal

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

Sekarang, sayangnya, sesuatu harus dilakukan untuk jaringan.
x
+
Terminal

$ kubectl apply https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
$ sudo systemctl daemon-reload
$ systemctl restart kubelet

Perintah “kubectl get nodes” sekarang harus menunjukkan “Master” dalam status “Ready”.

Kubernetes - Menambahkan Node

Sekarang kita membutuhkan perintah “kubeadm join” dari inisialisasi Kubenetes. Saya memasukkan perintah ini pada “Server 2” dan “Server 3”.

x
+
Terminal

$ kubeadm join master-ip:port --token r4fddsfjdsjsdfomsfdoi --discovery-token-ca-cert-hash sha256:1adea3bfxfdfddfdfxfdfsdffsfdsdf946da811c27d1807aa

Jika sekarang saya memasukkan perintah “kubectl get nodes” dari “Server 1” lagi, node-node ini mungkin ditampilkan dalam status “Not Ready”. Di sini, juga ada masalah jaringan yang juga dialami oleh sang master. Saya menjalankan perintah dari sebelumnya lagi, tetapi kali ini saya menambahkan “f” untuk force.
x
+
Terminal

$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

Setelah itu, saya melihat semua node siap digunakan.

Deplyment uji kecil (Server 1/Kubenetes-Master)

Saya menulis sendiri penyebaran uji coba kecil dan memeriksa fungsi-fungsinya. Saya membuat file “nginx.yml” dengan konten berikut:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
 selector:
   matchLabels:
     run: my-nginx
 replicas: 2
 template:
   metadata:
     labels:
       run: my-nginx
   spec:
     containers:
     - name: my-nginx
       image: nginx
       ports:
       - containerPort: 80

Sekarang saya mulai deplyment:

x
+
Terminal

$ kubectl apply -f nginx.yml
$ kubectl rollout status deployment/my-nginx
$ kubectl get deplyments

Bagus!

Saya membuat layanan dan dapat memanggil container saya. Saya menskalakan sekali hingga 20 “replika”:
x
+
Terminal

$ kubectl scale deployment my-nginx --replicas=0; kubectl scale deployment my-nginx --replicas=20

Lihat:

Bersihkan deplyment tes

Untuk merapikannya, saya hapus lagi deplyment dan layanannya.

x
+
Terminal

$ kubectl delete service example-service
$ kubectl delete deplyments my-nginx

Lihat: