Hari ini saya menginstal cluster Kubenetes baru dan ada banyak hal yang harus dilakukan!
Saya sudah memesan komponen-komponen ini untuk itu:
- 1x WDBU6Y0050BBK WD Elements portable 5TB: https://www.reichelt.de/wd-elements-portable-5tb-wdbu6y0050bbk-p270625.html?
- 3x kipas, ganda: 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 unit catu daya: 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 buah Dupont plug kit: https://amzn.to/3kcfYqQ
- 1x LED hijau dengan resistor seri: https://amzn.to/3EQgXVp
- 1x LED biru dengan resistor seri: https://amzn.to/31ChYSO
- 10x Marquardt 203.007.013 Potongan blanko Hitam: https://www.voelkner.de/products/215024/Marquardt-203.007.013-Blindstueck-Schwarz.html
- 1x dasar lampu: https://amzn.to/3H0UZkG
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:
$ sudo mkdir /media/usb-platte
/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:
$ sudo apt-get install nfs-kernel-server -y
Selain itu, folder baru dibuat pada disk USB
$ 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.
$ sudo exportfs -ra
Bagaimana saya bisa melakukan mount NFS?
Saya bisa memasang volume sebagai berikut:
$ 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
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.
$ 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.
Setelah reboot, saya menginstal paket-paket ini di server 1, server 2 dan server 3:$ 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
# Server 1 saja
Sekarang master Kubenetes dapat diinisialisasi.
$ 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
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”.
$ 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
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:
$ 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”:Lihat:$ kubectl scale deployment my-nginx --replicas=0; kubectl scale deployment my-nginx --replicas=20
Bersihkan deplyment tes
Untuk merapikannya, saya hapus lagi deplyment dan layanannya.
$ kubectl delete service example-service
$ kubectl delete deplyments my-nginx
Lihat: