Yêu cầu phần cứng và cơ sở hạ tầng
Xác định tài nguyên tối thiểu cho môi trường phát triển và testing trước khi cài đặt.
Đối với Kubernetes Cluster (Node chính): Cần tối thiểu 4 vCPU và 8GB RAM để chạy kube-apiserver, controller-manager, scheduler và các container worker. Đối với Edge Node (Node biên): Cần tối thiểu 2 vCPU và 4GB RAM để chạy các hàm Wasm và proxy edge.
Đảm bảo hệ điều hành là Ubuntu 22.04 LTS hoặc Debian 12 (Bookworm) để tương thích tốt nhất với k3s và các công cụ liên quan.
Verify: Kiểm tra tài nguyên hệ thống bằng lệnh:
cat /proc/cpuinfo | grep processor | wc -l && free -h
Kết quả mong đợi: Số lõi CPU >= 4 và RAM >= 8G trên node chính. Không có lỗi về kiến trúc (phải là x86_64 hoặc arm64).
Cài đặt công cụ nền tảng: Docker, kubectl và k3s
Thiết lập môi trường runtime container và orchestration engine trên Linux.
1. Cài đặt Docker Engine và Docker Compose
Docker cần thiết để đóng gói các hàm Serverless và chạy các service phụ trợ như Redis hoặc MySQL trong cluster.
Trên Ubuntu, sử dụng script chính thức của Docker để cài đặt version mới nhất, tránh dùng package trong apt default thường lỗi thời.
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
Cài đặt Docker Compose Plugin để quản lý multi-container services đơn giản hơn.
sudo mkdir -p /etc/docker && sudo tee /etc/docker/daemon.json
Thêm user hiện tại vào nhóm docker để không cần sudo khi chạy lệnh docker.
sudo usermod -aG docker $USER && newgrp docker
Verify: Kiểm tra version Docker và compose.
docker --version && docker compose version
Kết quả mong đợi: Hiển thị version Docker Engine (ví dụ: version 24.x) và Docker Compose Plugin.
2. Cài đặt k3s (Kubernetes nhẹ)
k3s là phân phối Kubernetes đã được hardening, tích hợp sẵn containerd, traefik (ingress), và local storage, phù hợp nhất cho Edge và môi trường tài nguyên thấp.
Trên node chính (Master), chạy script cài đặt tự động của k3s. Cấu hình để sử dụng containerd làm runtime mặc định.
curl -sfL https://get.k3s.io | sh -
Copy cấu hình kubeconfig để kubectl có thể giao tiếp với cluster.
sudo cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
Trên các node worker (Edge nodes), cài đặt với token từ file config trên master.
curl -sfL https://get.k3s.io | K3S_URL="https://:6443" K3S_TOKEN="" sh -
Verify: Kiểm tra trạng thái các node trong cluster.
kubectl get nodes
Kết quả mong đợi: Tất cả node hiện trạng thái "Ready" và không có error.
3. Cài đặt kubectl và các công cụ CLI hỗ trợ
kubectl là CLI chính để quản lý Kubernetes. Cần cài đặt version tương thích với k3s đang chạy.
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
Cài đặt k3s kubectl alias để tiện lợi (k3s kubectl đã có sẵn trong k3s binary).
alias k='k3s kubectl'
Cài đặt Helm (Package manager cho K8s) để deploy OpenFaaS sau này.
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Verify: Kiểm tra version của kubectl và helm.
kubectl version --short && helm version
Kết quả mong đợi: Client và Server version khớp nhau hoặc tương thích.
Cấu hình mạng nội bộ và truy cập Internet
Thiết lập mạng để các node có thể giao tiếp với nhau và truy cập registry bên ngoài.
1. Cấu hình Firewall và Port mở
K3s cần các port cụ thể để giao tiếp giữa Master và Worker, cũng như để API Server truy cập từ bên ngoài.
Tạo file cấu hình firewall (ufw) cho phép các traffic cần thiết.
sudo ufw allow 6443/tcp && sudo ufw allow 10250/tcp && sudo ufw allow 2379-2380/tcp && sudo ufw allow 4789/udp && sudo ufw enable
Port 6443 cho API Server, 10250 cho kubelet, 2379-2380 cho etcd (chỉ trên Master), 4789 cho flannel (overlay network).
Verify: Kiểm tra trạng thái firewall.
sudo ufw status
Kết quả mong đợi: Các port trên hiển thị trạng thái "ALLOW".
2. Cấu hình DNS và Registry
Để các container trong cluster có thể pull image từ Docker Hub hoặc các registry private, cần cấu hình DNS resolver.
Chỉnh sửa file daemon docker để sử dụng DNS của Google hoặc Cloudflare.
sudo tee /etc/docker/daemon.json
Restart docker để áp dụng thay đổi.
sudo systemctl restart docker
Verify: Test khả năng pull image từ bên ngoài.
docker pull hello-world
Kết quả mong đợi: Image được tải về thành công, không bị lỗi "connection timed out" hay "DNS resolution failed".
Tạo tài khoản và cấu hình API Keys cho Cloudflare
Chuẩn bị thông tin xác thực để tích hợp Cloudflare Workers vào kiến trúc Edge sau này.
1. Tạo Account và Zone trên Cloudflare
Đăng nhập vào dashboard Cloudflare và tạo một account mới. Thêm một Domain (Zone) mới vào Cloudflare để quản lý DNS và SSL.
Trong bước setup DNS, chọn "Orange Cloud" (Proxy) cho các record A cần đi qua Cloudflare, hoặc "Grey Cloud" (DNS only) nếu cần IP thật.
2. Tạo API Token với quyền hạn tối thiểu (Principle of Least Privilege)
Tạo token để script CI/CD hoặc CLI (wrangler) có thể deploy code mà không cần dùng email/password.
Vào Cloudflare Dashboard -> Profile -> API Tokens -> Create Token.
Chọn mẫu "Edit Cloudflare Workers" hoặc tự tạo custom token với các quyền sau:
- Zone: Zone Settings (Read) - Chỉ cho phép đọc cấu hình zone.
- Workers: Workers Scripts (Edit) - Để deploy code.
- Zone: Zone DNS (Edit) - Để tự động tạo DNS record nếu cần.
Sau khi tạo, copy token này (nó chỉ hiển thị 1 lần).
3. Lưu cấu hình API Token trong hệ thống
Tạo file cấu hình bảo mật cho token Cloudflare trên server local hoặc trong Kubernetes Secret sau này. Hiện tại, tạo file .env để lưu token.
mkdir -p $HOME/.cloudflare && echo "CLOUDFLARE_API_TOKEN=" >> $HOME/.cloudflare/cloudflare.env && chmod 600 $HOME/.cloudflare/cloudflare.env
Cấu hình Cloudflare Account ID (tìm trong Dashboard -> My Profile -> My Account).
echo "CLOUDFLARE_ACCOUNT_ID=" >> $HOME/.cloudflare/cloudflare.env
Verify: Kiểm tra file cấu hình đã được tạo và có quyền đọc đúng.
cat $HOME/.cloudflare/cloudflare.env && ls -la $HOME/.cloudflare/cloudflare.env
Kết quả mong đợi: Nội dung file chứa 2 biến môi trường, quyền file là -rw------- (chỉ owner đọc được).
Kiểm tra sức khỏe môi trường trước khi triển khai
Thực hiện bài kiểm tra tổng hợp để đảm bảo mọi thành phần đã sẵn sàng cho Phần 2.
1. Kiểm tra kết nối mạng giữa các Node
Đảm bảo Master node có thể ping đến Worker node và ngược lại.
ping -c 4 && ping -c 4
Kết quả mong đợi: 4 packets transmitted, 4 received, 0% packet loss.
2. Kiểm tra Pod chạy thử nghiệm trên Kubernetes
Deploy một pod đơn giản để xác nhận Kubernetes đang hoạt động, container runtime ok, và network plugin ok.
kubectl create deployment test-deploy --image=nginx:alpine && kubectl expose deployment test-deploy --type=NodePort --port=80
Chờ pod chạy xong và kiểm tra trạng thái.
kubectl get pods -o wide && kubectl get svc
Kết quả mong đợi: Pod có trạng thái "Running", IP nội bộ đã được gán, Service có NodePort.
3. Kiểm tra truy cập từ ngoài vào Service
Truy cập IP public của node thông qua NodePort để xác nhận firewall và ingress network đã mở đúng.
curl -I http://:
Kết quả mong đợi: HTTP/1.1 200 OK.
4. Dọn dẹp môi trường kiểm tra
Xóa các tài nguyên test để môi trường sạch sẽ trước khi vào Phần 2.
kubectl delete deployment test-deploy && kubectl delete svc test-deploy
Kết quả mong đợi: Pod và Service bị xóa, `kubectl get pods` trả về danh sách rỗng hoặc chỉ còn các pod system.
Điều hướng series:
Mục lục: Series: Series: Xây dựng nền tảng Serverless và Edge Computing an toàn với OpenFaaS, Cloudflare Workers và Wasm trên hạ tầng Kubernetes
Phần 2: Triển khai và cấu hình Kubernetes Cluster làm nền tảng »