Sunday, February 23, 2025

Hướng dẫn cài đặt Kubernetes 1.30 với Cilium

-

1. Giới thiệu.

Nếu bạn đang muốn triển khai một cluster Kubernetes ngay trên laptop của mình để học tập hoặc thử nghiệm, thì bài viết này sẽ hướng dẫn bạn từng bước cài đặt Kubernetes 1.30 trên Ubuntu Server 22.04 bằng kubeadm và sử dụng Cilium làm CNI plugin.

1.1. Kubernetes là gì?

Kubernetes (K8s) là một nền tảng orchestrator (điều phối) mã nguồn mở giúp quản lý, triển khai và mở rộng các ứng dụng containerized (chạy trong container) một cách tự động. Nó được phát triển bởi Google và hiện nay được duy trì bởi Cloud Native Computing Foundation (CNCF).

Tại sao cần Kubernetes?

Trước Kubernetes, các ứng dụng container thường được triển khai và quản lý thủ công bằng Docker. Khi số lượng container tăng lên, việc quản lý trở nên phức tạp. Kubernetes giúp giải quyết vấn đề này bằng cách:

Tự động triển khai: Quản lý việc chạy, cập nhật và rollback container.
Cân bằng tải: Phân phối traffic giữa các container.
Tự động mở rộng: Scale container lên/xuống dựa trên tài nguyên sử dụng.
Tự phục hồi (Self-healing): Nếu một container gặp lỗi, Kubernetes sẽ tự động thay thế.
Quản lý cấu hình và bí mật: Dùng ConfigMaps & Secrets để lưu thông tin nhạy cảm.

Kiến trúc của Kubernetes

Kubernetes hoạt động theo mô hình master-worker, trong đó:

🔹 Control Plane (Master Node) – Quản lý toàn bộ cluster

  • API Server: Cổng giao tiếp chính của Kubernetes.
  • Scheduler: Phân bổ container vào các node phù hợp.
  • Controller Manager: Theo dõi trạng thái cluster và tự động điều chỉnh.
  • etcd: Lưu trữ thông tin cấu hình của cluster.

🔹 Worker Node – Chạy các ứng dụng

  • Kubelet: Tương tác với Control Plane để quản lý container.
  • Container Runtime: Chạy container (Docker, containerd, CRI-O…).
  • Kube Proxy: Xử lý mạng và cân bằng tải giữa các pod.

Các thành phần quan trọng trong Kubernetes

  • Pod: Đơn vị nhỏ nhất chứa container (hoặc nhiều container).
  • Service: Cung cấp IP tĩnh và cân bằng tải giữa các pod.
  • Deployment: Định nghĩa cách triển khai ứng dụng (số lượng replica, cập nhật…).
  • Ingress: Quản lý truy cập từ bên ngoài vào ứng dụng.
  • ConfigMap & Secret: Lưu cấu hình và thông tin nhạy cảm.

Khi nào nên dùng Kubernetes?

✅ Khi bạn muốn triển khai ứng dụng microservices với hàng chục, hàng trăm container.
✅ Khi bạn cần một hệ thống tự động mở rộng và có thể phục hồi khi lỗi.
✅ Khi bạn muốn triển khai ứng dụng trên multi-cloud hoặc hybrid-cloud.
✅ Khi bạn muốn tích hợp với DevOps CI/CD pipelines.

1.2. Cilium là gì?

Cilium là một CNI (Container Network Interface) plugin dành cho Kubernetes, giúp quản lý mạng giữa các container một cách hiệu quả và bảo mật. Nó được xây dựng dựa trên eBPF (Extended Berkeley Packet Filter), một công nghệ mạnh mẽ trong Linux Kernel, giúp xử lý gói tin mà không cần đi qua toàn bộ stack mạng của kernel, từ đó tăng hiệu suất và giảm độ trễ.

Tại sao nên dùng Cilium?

Hiệu suất cao: Nhờ eBPF, Cilium có thể xử lý gói tin ngay trong kernel, tránh overhead của iptables hoặc kube-proxy truyền thống.
Bảo mật nâng cao: Cilium hỗ trợ chính sách network security mạnh mẽ, có thể kiểm soát luồng dữ liệu đến từng API, không chỉ dựa trên địa chỉ IP.
Tích hợp tốt với Kubernetes: Cilium thay thế hoàn toàn kube-proxy, cung cấp khả năng cân bằng tải (load balancing) hiệu quả hơn.
Quan sát và giám sát (Observability): Hỗ trợ theo dõi lưu lượng mạng giữa các pod với các công cụ như Hubble.

Cilium hoạt động như thế nào?

Thay vì sử dụng iptables hoặc IPVS như các plugin mạng khác, Cilium sử dụng eBPF để thực hiện các tác vụ như:

  • Điều phối lưu lượng giữa các pod.
  • Áp dụng chính sách bảo mật trên từng ứng dụng.
  • Kiểm soát và giám sát lưu lượng dữ liệu giữa các dịch vụ.

Khi nào nên sử dụng Cilium?

🔹 Khi bạn cần một giải pháp mạng hiệu suất cao cho Kubernetes.
🔹 Khi bạn muốn bảo mật nâng cao cho ứng dụng bằng cách kiểm soát truy cập ở mức API.
🔹 Khi bạn cần giám sát chi tiết về lưu lượng giữa các pod trong hệ thống.

Cilium đang được sử dụng rộng rãi trong các hệ thống Kubernetes đòi hỏi hiệu suất và bảo mật cao. Nếu bạn đang triển khai Kubernetes, Cilium chắc chắn là một lựa chọn đáng cân nhắc! 🚀

So sánh Cilium và Calico trong Kubernetes

Cilium và Calico đều là CNI (Container Network Interface) plugins phổ biến trong Kubernetes, nhưng chúng có những điểm khác biệt quan trọng về kiến trúc, hiệu suất và tính năng. Dưới đây là bảng so sánh chi tiết:

Tiêu chíCiliumCalico
Công nghệ nền tảngDựa trên eBPF (trong Linux Kernel)Dựa trên iptables/IPVS (hoặc eBPF từ v3.19)
Hiệu suấtRất cao, xử lý gói tin ngay trong kernelCao, nhưng nếu dùng iptables có thể gây overhead
Quản lý chính sáchDựa trên API Layer 7 (hỗ trợ HTTP, gRPC, DNS)Dựa trên Layer 3/4 (IP, Ports)
Cân bằng tải (LB)Thay thế kube-proxy, xử lý LB ngay trong kernelDùng iptables hoặc eBPF (chỉ khi bật BPF mode)
Quan sát (Observability)Hubble để theo dõi lưu lượng mạng, latencyChỉ có công cụ cơ bản, cần thêm Prometheus/Grafana
Hỗ trợ bảo mậtTích hợp mạnh với eBPF để lọc traffic chi tiếtChủ yếu kiểm soát trên IP, ít hỗ trợ Layer 7
Hỗ trợ cluster lớnTốt hơn vì eBPF giảm tải kernelTốt, nhưng có thể bị chậm với nhiều rules iptables
Dễ triển khaiYêu cầu kernel hỗ trợ eBPF (Linux >= 4.19)Dễ dàng hơn, có thể chạy mà không cần eBPF

Khi nào nên chọn Cilium?

✅ Khi bạn cần hiệu suất cao và giảm tải cho kernel bằng eBPF.
✅ Khi bạn cần quan sát chi tiết về lưu lượng mạng giữa các container (Hubble).
✅ Khi bạn muốn bảo mật nâng cao ở Layer 7 (chặn API dựa trên HTTP/gRPC).
✅ Khi bạn chạy Kubernetes trên môi trường cloud-native lớn.

Khi nào nên chọn Calico?

✅ Khi bạn cần mạng đơn giản, dễ triển khai trên cả Kubernetes lẫn Bare-metal.
✅ Khi bạn muốn hỗ trợ tốt cho mô hình hybrid (on-premises + cloud).
✅ Khi bạn đang chạy Kubernetes với iptables và không cần Layer 7 security.
✅ Khi bạn muốn hỗ trợ tốt hơn cho IPv6 (Calico có tính năng IPv6 tốt hơn Cilium).

Kết luận

  • Nếu bạn muốn một giải pháp hiệu suất cao, có bảo mật mạnh mẽ, hãy chọn Cilium.
  • Nếu bạn cần một giải pháp đơn giản, dễ triển khai, hỗ trợ rộng rãi, hãy chọn Calico.

2. Chuẩn bị môi trường.

Trước khi bắt đầu, bạn cần có:

  • Một máy ảo hoặc một server chạy Ubuntu Server 22.04
  • Kết nối internet ổn định
  • Quyền root trên hệ thống

Hãy bắt đầu với việc cập nhật hệ thống và tắt swap để đảm bảo Kubernetes hoạt động ổn định:

sudo -i
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
apt-get update && apt-get upgrade -y

Cài đặt Container Runtime (containerd)

Kubernetes sử dụng containerd làm runtime để quản lý container. Chúng ta sẽ cài đặt nó từ repository của Docker:

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install containerd.io -y

Sau khi cài đặt, cấu hình containerd để sử dụng systemd làm cgroup driver:

mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml
sed -e 's/SystemdCgroup = false/SystemdCgroup = true/g' -i /etc/containerd/config.toml
systemctl restart containerd
systemctl enable containerd

Cài đặt kubeadm, kubelet và kubectl

Đây là những công cụ cần thiết để thiết lập Kubernetes:

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet=1.30.3-1.1 kubeadm=1.30.3-1.1 kubectl=1.30.3-1.1
apt-mark hold kubelet kubeadm kubectl
systemctl enable --now kubelet

Cài đặt Kubernetes Control Plane

Trên node chính (control node), chạy lệnh sau để khởi tạo cluster:

kubeadm init --kubernetes-version 1.30.3 --pod-network-cidr 192.168.0.0/16 --v=5

Xuất file kubeconfig để có thể quản lý cluster:

export KUBECONFIG=/etc/kubernetes/admin.conf

Cài đặt Cilium làm CNI Plugin

Cilium giúp cải thiện hiệu suất mạng, bảo mật và quan sát hệ thống.

export CILIUM_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
export CILIUM_ARCH=$(dpkg --print-architecture)
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/$CILIUM_VERSION/cilium-linux-$CILIUM_ARCH.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-$CILIUM_ARCH.tar.gz.sha256sum
tar xzvf cilium-linux-$CILIUM_ARCH.tar.gz -C /usr/local/bin
rm cilium-linux-$CILIUM_ARCH.tar.gz{,.sha256sum}

Cài đặt plugin mạng Cilium:

cilium install
cilium status --wait

Kết nối Worker Nodes vào Cluster

Trên control node, lấy lệnh tham gia cluster:

kubeadm token create --print-join-command

Sau đó, chạy lệnh đó trên mỗi worker node để tham gia vào cluster.

Kiểm tra và Cấu Hình Kubectl

Sau khi các worker nodes tham gia, kiểm tra trạng thái:

kubectl get nodes

Cấu hình alias và autocomplete cho kubectl:

echo "alias k=kubectl" >> ~/.bashrc
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc

Kết luận

Bạn đã hoàn thành việc thiết lập Kubernetes 1.30 với Cilium trên Ubuntu. Bây giờ bạn có thể bắt đầu triển khai ứng dụng trên cluster của mình.

Tham khảo https://paulyu.dev/article/installing-kubernetes/

Chúc bạn thành công! 🚀

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories