Bugün yeni bir Kubenetes kümesi kuruyorum ve yapacak çok şey var!
Bunun için bu bileşenleri sipariş ettim:
- 1x WDBU6Y0050BBK WD Elements taşınabilir 5TB: https://www.reichelt.de/wd-elements-portable-5tb-wdbu6y0050bbk-p270625.html?
- 3x fan, çift: https://www.reichelt.de/raspberry-pi-luefter-dual-rpi-fan-dual-p223618.html?
- 1x Raspberry 4 / 4GB Ram: https://www.reichelt.de/raspberry-pi-4-b-4x-1-5-ghz-4-gb-ram-wlan-bt-rasp-pi-4-b-4gb-p259920.html?
- 2x Raspberry 4 / 8GB Ram: https://www.reichelt.de/raspberry-pi-4-b-4x-1-5-ghz-8-gb-ram-wlan-bt-rasp-pi-4-b-8gb-p276923.html?
- 3x güç kaynağı ünitesi: https://www.reichelt.de/raspberry-pi-netzteil-5-1-v-3-0-a-usb-type-c-eu-stecker-s-rpi-ps-15w-bk-eu-p260010.html
- 1x Rackmount: https://amzn.to/3H8vOg7
- 1x 600 adet Dupont fiş kiti: https://amzn.to/3kcfYqQ
- Seri dirençli 1x yeşil LED: https://amzn.to/3EQgXVp
- Seri dirençli 1x mavi LED: https://amzn.to/31ChYSO
- 10x Marquardt 203.007.013 Körleme parçası Siyah: https://www.voelkner.de/products/215024/Marquardt-203.007.013-Blindstueck-Schwarz.html
- 1x lamba tabanı: https://amzn.to/3H0UZkG
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:
$ sudo mkdir /media/usb-platte
/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:
$ sudo apt-get install nfs-kernel-server -y
Ayrıca, USB disk üzerinde yeni bir klasör oluşturuldu
$ 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.
$ sudo exportfs -ra
NFS’yi nasıl bağlayabilirim?
Birimi aşağıdaki gibi bağlayabiliyorum:
$ sudo mount -t nfs SERVER-1-IP:/media/usb-platte/nfsshare /mnt/nfs
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.
$ 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.
Yeniden başlatmanın ardından bu paketleri sunucu 1, sunucu 2 ve sunucu 3’e yüklüyorum:$ sudo reboot
$ 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.
$ sudo kubeadm init --token-ttl=0 --pod-network-cidr=10.244.0.0/16
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ 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.
$ kubeadm join master-ip:port --token r4fddsfjdsjsdfomsfdoi --discovery-token-ca-cert-hash sha256:1adea3bfxfdfddfdfxfdfsdffsfdsdf946da811c27d1807aa
$ 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:
$ 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:Bkz:$ kubectl scale deployment my-nginx --replicas=0; kubectl scale deployment my-nginx --replicas=20
Test departmanını temizleyin
Düzenlemek için, deplyment’ı ve hizmeti tekrar siliyorum.
$ kubectl delete service example-service
$ kubectl delete deplyments my-nginx
Bkz: