Fork me on GitHub

Herr Knedel/Kapsayıcılarla harika şeyler: Kubenetes kümesi ve NFS depolama

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

780 Words

Bugün yeni bir Kubenetes kümesi kuruyorum ve yapacak çok şey var!

Bunun için bu bileşenleri sipariş ettim:

Hadi gidelim!

Raspian Lite kurulumunu temel alarak kurulum için kendi imajımı oluşturdum. Kullanıcı/genel anahtarım zaten bu imajda saklanıyor ve “/boot/config.txt” dosyası LED’lerim için uyarlandı.

# 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

Sunucu 1 - Diski monte edin

İlk olarak, “Sunucu 1” üzerine bir NFS hizmeti kuruyorum. Bu depolama alanı daha sonra konteyner kümem için kullanılabilir. USB sabit sürücüyü “Sunucu 1 “e bağladım ve aşağıdaki talimatların yardımıyla EXT4 olarak biçimlendirdim: https://homecircuits.eu/blog/mount-sata-cubieboard-lubuntu/ Sonra USB disk için bir bağlama noktası oluşturdum:

x
+
Terminal

$ sudo mkdir /media/usb-platte

Yeni dosya sistemini “/etc/fstab” dosyasına aşağıdaki gibi girdim:

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

Ayar “sudo mount -a” ile kontrol edilebilir. Şimdi USB disk “/media/usb-disk” altına bağlanmalıdır.

NFS’yi yükleyin

Bu paket NFS için gereklidir:

x
+
Terminal

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

Ayrıca, USB disk üzerinde yeni bir klasör oluşturuldu

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 {} \;

Ardından “/etc/exports” dosyası düzenlenmelidir. Yol, kullanıcı kimliği ve grup kimliği buraya girilir:

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

Şimdi ayar aşağıdaki gibi kabul edilebilir.

x
+
Terminal

$ sudo exportfs -ra

NFS’yi nasıl bağlayabilirim?

Birimi aşağıdaki gibi bağlayabiliyorum:

x
+
Terminal

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

Ya da “/etc/fstab” dosyasına kalıcı olarak girin:

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

Burada da “sudo mount -a” kullanabilirim.

Kubernetes’i Yükleme

Aşağıdaki komutlar sunucu 1, sunucu 2 ve sunucu 3 üzerinde çalıştırılmalıdır. İlk olarak Docker’ı kuruyoruz ve “PI” kullanıcısını Docker grubuna ekliyoruz.

x
+
Terminal

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

Bundan sonra, takas boyutu ayarı tüm sunucularda sıfırlanır. Bu, “/etc/dphys-swapfile” dosyasını düzenlediğim ve “CONF_SWAPSIZE” niteliğini “0” olarak ayarladığım anlamına gelir.

Ayrıca, “/boot/cmdline.txt” dosyasındaki “Control-Group” ayarları da ayarlanmalıdır:

cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1

Bak:

Şimdi tüm Raspberry’ler bir kez yeniden başlatılmalı ve Kubernetes kurulumu için hazır olmalıdır.

x
+
Terminal

$ sudo reboot

Yeniden başlatmanın ardından bu paketleri sunucu 1, sunucu 2 ve sunucu 3’e yüklüyorum:
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

# Yalnızca Sunucu 1

Artık Kubenetes master başlatılabilir.

x
+
Terminal

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

Başarılı başlatma işleminden sonra ayarları kabul ediyorum. İşçi düğümlerini bağlamak için görüntülenen “kubeadm join” komutunu hatırlıyorum.
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

Şimdi, ne yazık ki, ağ için bir şeyler yapılması gerekiyor.
x
+
Terminal

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

“kubectl get nodes” komutu artık “Master “ı “Ready” durumunda göstermelidir.

Kubernetes - Düğüm Ekleme

Şimdi Kubenetes başlatmasından “kubeadm join” komutuna ihtiyacımız var. Bu komutu “Sunucu 2” ve “Sunucu 3” üzerinde giriyorum.

x
+
Terminal

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

Şimdi “Sunucu 1 “den “kubectl get nodes” komutunu tekrar girersem, bu düğümler muhtemelen “Hazır Değil” durumunda görüntülenir. Burada da ustanın yaşadığı ağ sorunu var. Daha önceki komutu tekrar çalıştırıyorum, ancak bu sefer force için bir “f” ekliyorum.
x
+
Terminal

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

Bundan sonra, tüm düğümlerin kullanıma hazır olduğunu görüyorum.

Küçük test deposu (Sunucu 1/Kubenetes-Master)

Kendime küçük bir test dağıtımı yazdım ve işlevleri kontrol ettim. Aşağıdaki içeriğe sahip bir “nginx.yml” dosyası oluşturuyorum:

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

Şimdi deplyment’e başlıyorum:

x
+
Terminal

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

Harika!

Bir hizmet oluşturuyorum ve konteynerimi çağırabiliyorum. Bir kez 20 “kopyaya” kadar ölçeklendiriyorum:
x
+
Terminal

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

Bkz:

Test departmanını temizleyin

Düzenlemek için, deplyment’ı ve hizmeti tekrar siliyorum.

x
+
Terminal

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

Bkz: