Hướng dẫn thiết lập cụm Kubernetes bằng Kubeadm trên CentOS

Kubeadm là một công cụ tiêu chuẩn được cộng đồng Kubernetes cung cấp nhằm đơn giản hóa quá trình khởi tạo và cấu hình cụm (cluster) theo các quy chuẩn vận hành tốt nhất. Bài viết này sẽ hướng dẫn cách triển khai một cụm K8s cơ bản bằng phương pháp này.

1. Yêu cầu hệ thống và môi trường

Trong hướng dẫn này, chúng ta sẽ sử dụng 2 máy chủ ảo (vps) với cấu hình cơ bản:

  • Hệ điều hành: CentOS 7.6
  • Số lượng Node: 1 Master và 1 Worker
  • Cấu hình phần cứng: 1 vCPU, 2GB RAM (Dù thấp hơn khuyến nghị chính thức nhưng vẫn đủ cho mục đích học tập).
  • Mạng: Các node có khả năng kết nối nội bộ với nhau.

2. Các bước chuẩn bị hệ thống

Thực hiện các cấu hình sau trên cả máy Master và Worker để đảm bảo môi trường đồng nhất:

# Cập nhật toàn bộ gói phần mềm hệ thống
yum update -y

# Thiết lập Hostname (Thực hiện riêng cho mỗi node)
# Trên Master: hostnamectl set-hostname k8s-master
# Trên Worker: hostnamectl set-hostname k8s-worker-01

# Cập nhật tệp hosts để nhận diện địa chỉ IP nội bộ
cat >> /etc/hosts <<EOF
172.19.227.80 k8s-master
172.19.138.68 k8s-worker-01
EOF

# Vô hiệu hóa tường lửa và iptables để tránh chặn port
systemctl stop firewalld && systemctl disable firewalld
systemctl stop iptables && systemctl disable iptables

# Tắt cơ chế bảo mật SELinux
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# Quan trọng: Tắt SWAP để Kubelet hoạt động chính xác
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab</code>

3. Cài đặt Docker Engine

Kubernetes yêu cầu một container runtime, ở đây chúng ta sử dụng Docker:

# Thêm Docker Repository
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Cài đặt Docker CE bản mới nhất
yum install -y docker-ce

# Cấu hình Docker Daemon để tối ưu hóa việc tải ảnh và quản lý cgroup
sudo mkdir -p /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "registry-mirrors": ["https://your-mirror-link.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

# Khởi động và kích hoạt Docker cùng hệ thống
systemctl daemon-reload
systemctl enable --now docker</code>

4. Cài đặt các công cụ Kubernetes

Tiến hành thêm repository của Kubernetes và cài đặt bộ ba kubeadm, kubelet, kubectl:

# Thêm Kubernetes Repo
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
EOF

# Cài đặt các thành phần chính
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

# Kích hoạt Kubelet
systemctl enable --now kubelet

Do vấn đề kết nối đến registry k8s.gcr.io, chúng ta thực hiện tải các ảnh cần thiết thông qua một mirror trung gian và gán lại tag chuẩn:

# Danh sách ảnh cần thiết cho bản v1.18.3
K8S_VERSION="v1.18.3"
IMAGES=(
    kube-proxy:${K8S_VERSION}
    kube-apiserver:${K8S_VERSION}
    kube-controller-manager:${K8S_VERSION}
    kube-scheduler:${K8S_VERSION}
    coredns:1.6.7
    etcd:3.4.3-0
    pause:3.2
)

for image in "${IMAGES[@]}"; do
    docker pull lzw5399/${image}
    docker tag lzw5399/${image} k8s.gcr.io/${image}
    docker rmi lzw5399/${image}
done

5. Khởi tạo Master Node

Trên máy Master, sử dụng kubeadm init để thiết lập cụm điều khiển:

# Khởi tạo Master
kubeadm init \
--kubernetes-version="v1.18.3" \
--pod-network-cidr="10.244.0.0/16" \
--ignore-preflight-errors="NumCPU"

# Cấu hình môi trường kubectl cho user hiện tại
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# Triển khai giải pháp mạng Flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

6. Thêm Worker Node vào cụm

Sau khi Master khởi tạo thành công, hệ thống sẽ cung cấp một lệnh kubeadm join. Sao chép và chạy lệnh đó trên máy Worker:

# Ví dụ lệnh join
kubeadm join 172.19.227.80:6443 --token  \
    --discovery-token-ca-cert-hash sha256:

7. Kiểm tra trạng thái triển khai

Cuối cùng, quay lại máy Master để kiểm tra xem cụm đã hoạt động ổn định chưa:

# Kiểm tra danh sách các node
kubectl get nodes

# Xem trạng thái các Pod trong hệ thống
kubectl get pods -n kube-system

# Nếu có Pod gặp lỗi, sử dụng lệnh describe để gỡ lỗi
# kubectl describe pod  -n kube-system

Thẻ: Kubernetes kubeadm docker CentOS DevOps

Đăng vào ngày 8 tháng 11 lúc 09:33