Giới Thiệu
Trong bài viết này, chúng ta sẽ cùng nhau khám phá cách cài đặt một cluster Kubernetes sử dụng Kubeadm. Với những bước hướng dẫn chi tiết và dễ hiểu, bài viết này sẽ giúp bạn thiết lập một môi trường Kubernetes dzễ dàng.
Chuẩn Bị
Trước khi bắt đầu, bạn cần chuẩn bị:
- Một số máy ảo hoặc server với cấu hình tối thiểu:
- Woker Node: 2 vCPUs, 2GB RAM
- Master Node: 2 vCPUs, 4GB RAM
- Tất cả các máy ảo hoặc server phải có thể kết nối mạng với nhau.
I. Cài Đặt Container Runtime
1. Cài Đặt Containerd trên các Node Master và Woker
Bước 1: Cài Đặt Containerd
Cập nhật hệ thống và cài đặt containerd:
bash
sudo apt update
sudo apt install containerd -y
Bước 2: Tạo File Cấu Hình Mặc Định
bash
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
Bước 3: Chỉnh Sửa File Cấu Hình
bash
sudo nano /etc/containerd/config.toml
Tìm và sửa đổi các dòng sau trong file:
toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
Bước 4: Khởi Động Lại Dịch Vụ
bash
sudo systemctl restart containerd
Bước 5: Kiểm Tra Trạng Thái Containerd
bash
sudo systemctl status containerd
Khi trạng thái hiển thị là active (running), bạn đã cài đặt và khởi động thành công containerd.
II. Cài Đặt Kubeadm và Kubelet
Trước khi bắt đầu cài đặt kubeadm và kubelet, bạn cần tắt firewall và swapping:
bash
ufw disable
swapoff -a
1. Cài Đặt Kubeadm và Kubelet trên các Node
Bước 1: Cài Đặt Package apt-transport-https
bash
apt-get update && apt-get install -y apt-transport-https
Bước 2: Tải Public Key
bash
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
Bước 3: Bổ Sung Kubernetes Repo
bash
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
Bước 4: Cài Đặt Kubeadm, Kubelet và Kubectl
bash
apt-get update && apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
2. Khởi Tạo Cluster Ở Node Master
Bước 1: Khởi Tạo Cluster
bash
kubeadm init --pod-network-cidr=192.168.0.0/16 --control-plane-endpoint=192.168.1.129 --cri-socket=unix:///run/containerd/containerd.sock
Giải Thích Tham Số:
--pod-network-cidr=192.168.0.0/16
: Dải IP cho mạng pod.--control-plane-endpoint=192.168.1.129
: Địa chỉ IP của node master.--cri-socket=unix:///run/containerd/containerd.sock
: Đường dẫn socket của containerd.
Xử Lý Lỗi Thường Gặp
Nếu có lỗi xảy ra trong quá trình khởi tạo cluster, hãy làm theo các bước sau để khắc phục:
- Để khắc phục lỗi
/proc/sys/net/bridge/bridge-nf-call-iptables does not exist
:
bash
sudo modprobe br_netfilter
sudo sysctl net.bridge.bridge-nf-call-iptables=1
- Để khắc phục lỗi
/proc/sys/net/ipv4/ip_forward contents are not set to 1
:
bash
sudo sysctl net.ipv4.ip_forward=1
echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Sau khi khắc phục, chạy lại lệnh khởi tạo cluster trên.
Kết Quả Để Kiểm Tra
bash
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get po -A
Thiết Lập Pod Networking
Để cài đặt pod networking, bạn có thể sử dụng Calico:
bash
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/calico.yaml -O
Mở file calico.yaml và tìm kiếm CALICO_IPV4POOL_CIDR
, sau đó uncomment dòng sau:
yaml
# - name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"
Chạy lệnh sau để áp dụng cài đặt:
bash
kubectl apply -f calico.yaml
3. Thêm Worker Node vào Cluster
Để thêm worker node vào cluster, chạy lệnh sau trên các node worker:
bash
kubeadm join 192.168.1.129:6443 --token n25frf.tpys1y9a1hpsdrzy --discovery-token-ca-cert-hash sha256:39381c9cb504145058657e81dca874f2d0e378b97bda335ca31a489ffce81a10 --cri-socket=unix:///run/containerd/containerd.sock
Kiểm Tra Kết Quả
Sau vài phút, quay lại node master và kiểm tra các node:
bash
kubectl get nodes
Tài Liệu Tham Khảo
source: viblo