Mình rất thích nghiên cứu về Single Board Computer (SBC). Bởi vì mình hay setup và deploy các project lên server của công ty, do đó mình trong một thời gian dài mình đã tìm kiếm và mua nhiều SBC về nghich.

Hiện tại mình có khoảng 10 SBC của đủ hãng (Raspberry Pi, Odroid, Orange Pi, Atomic Pi, Rock64). Mình sẽ review chi tiết nếu có thời gian ở những bài sau.

Mình đã sử dụng chúng tách biệt để setup các service riêng, một ngày mình nảy ra ý tưởng gom chúng lại thành cluster sử dụng Kubenertes.

Ok, Let’s go

Trước hết mình có những thứ sau:

  • Odroid HC 2
  • SSD 512 GB
  • Micro SD 8 GB
  • Rock64 x 2
  • 32 GB eMMC

Cài đặt OS #

Ở những bài trước, mình đều dùng BalenaEtcher để Flash firmware vào thẻ Micro SD hoặc eMMC. Đây là một công cụ thật sự mạnh, nếu không có bạn vẫn có thể dùng câu lệnh dd trong linux.

Master Node – Odroid HC 2 (k8s-master) #

Tải firmware ubuntu ở đây.

  • Tìm IP của SBC này trong router. Hostname mặc định là odroid (Trong ví dụ này là 192.168.88.190)
  • SSH vào ip ở trên bằng lênh ssh root@192.168.88.190
  • Bởi vì node này có ổ cứng SSD 512 nên mình move boot vô ổ cứng này. Xem thêm
  • Khởi động lại và xác nhận /dev/sda1 đã được mount vào /
  • Tạo 1 username
useradd -m -s /bin/bash coolboy
passwd coolboy
usermod -aG sudo coolboy
  • Login vô user mới, confirm lệnh sudo hoạt động
sudo apt update; sudo apt upgrade

Installing Docker CE #

Việc cài Docker CE trên ARM giờ đây rất đơn giản. Chỉ cần run script sau

curl -sSL https://get.docker.com | sudo sh

Sau đó add user đã tạo ở trên vào group docker.

sudo usermod -aG docker coolboy

Sau đó logout và login lại user này và xác nhận nếu nó hoạt động

docker run busybox uname -a

Install Kubernetes #

Tham khảo link sau để nhận được repo mới nhất (nếu có)

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-kubeadm-kubelet-and-kubectl

Install Flannel #

Tham khảo link sau để có cập nhập mới nhất

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

Install Helm #

curl -L https://git.io/get_helm.sh | bash

Deploying Tiller #

Create service account

kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

helm init --tiller-image=jessestuart/tiller:v2.9.0 --service-account tiller

Child Node – Rock64 (k8s-node-1 & 2) #

ayufan đã làm mọi thứ cho chúng ta khi release containers build ở đây

https://github.com/ayufan-rock64/linux-build/releases

Mình đang dùng phiên bản stable mới nhất là 0.8.3

https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/bionic-containers-rock64-0.8.3-1141-arm64.img.xz

Bạn chỉ cần dùng BalenaEtcher để flash vào eMMC là xong.

Login vô Rock64 và lặp lại bước tạo user từ 5-7 như trên master node.

Joining the node #

Vậy là chúng ta đã chuẩn bị xong 1 master và 2 worker nodes. Việc còn lại là join chúng lại với nhau

Master Node #

Sau khi run command sau

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

Bạn sẽ nhận được 1 command dể join node, command này sẽ dùng để run trên 2 worker nodes. Nó có định dạng sau

sudo kubeadm join 192.168.88.190:6443 --token 42zq99.s370ryufwgwj8j0u --discovery-token-ca-cert-hash sha256:73e4ec864d4ad5695e6deed2226c530830c8b45153ab1adf710d23486a495ac7

Ở đây IP 192.168.88.190 là IP của master node. Như vậy worker node sẽ biết phải join vào đâu.

Sau tất cả #

Run command sau ở master node

kubectl get nodes

Nếu bạn nhận được kết quả tương tự như sau. Chúc mừng bạn, đến part 2 nào