- vừa được xem lúc

Dựng 1 cluster kubernetes với Kubeadm

0 0 1

Người đăng: Hoàng Nguyên

Theo Viblo Asia

Chuẩn bị :

Các máy ảo hoặc server có cấu hình tối thiểu 2 vCPUs 2GB RAM cho woker node và 2 vCPUs - 4 GB RAM cho master node, các máy ảo hoặc các server phải được thông 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

sudo apt update
sudo apt install containerd -y

Bước 2: Tạo file cấu hình mặc định:

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:

sudo nano /etc/containerd/config.toml

Tìm và sửa các dòng sau:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] ... [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true

Bước 5: Khởi động lại dịch vụ

sudo systemctl restart containerd

Bước 6: Kiểm tra trạng thái containerd

sudo systemctl status containerd

Status hiện trạng thái active (running) như hình thì containerd đã cài đặt và chạy thành công.

image.png

II. Cài đặt kubeadm, kubelet

Ở các máy ảo, tắt firewall, swapping bằng lệnh sau:

ufw disable
swapoff -a

1. Cài đặt kubeadm, kubelet ở các node

Bước 1: Cài đặt “apt-transport-https” package

apt-get update && apt-get install -y apt-transport-https

Bước 2: Download public key

curl -fsSL [https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key](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 kubernate repo

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
<aside> 💡 **Chú ý:** + Với v1.28 là version k8s muốn cài </aside>

Bước 4: Cài đặt kubeadm, kubelet, kubectl

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

kubeadm init --pod-network-cidr=192.168.0.0/16 --control-plane-endpoint=192.168.1.129 --cri-socket=unix:///run/containerd/containerd.sock
<aside> 💡 **Giải thích các tham số :**
  • -pod-network-cidr=192.168.0.0/16:
    • Xác định dải địa chỉ IP cho mạng pod trong cluster.
    • Trong trường hợp này, nó dùng dải 192.168.0.0/16, cho phép khoảng 65,536 địa chỉ IP.
    • Quan trọng cho việc cấu hình plugin mạng (như Calico, Flannel) sau này.
  • -control-plane-endpoint=192.168.1.129:
    • Xác định địa chỉ IP hoặc hostname mà các thành phần khác sẽ sử dụng để kết nối tới control plane.
    • Hữu ích khi bạn muốn thiết lập high availability cho control plane.
    • Trong trường hợp này, 192.168.1.129 là địa chỉ IP của node master.
  • -cri-socket=unix:///run/containerd/containerd.sock:
    • Chỉ định đường dẫn tới Unix socket của Container Runtime Interface (CRI).
    • Đối với containerd, đường dẫn mặc định là /run/containerd/containerd.sock.
    • Nó cho kubeadm biết cần sử dụng containerd làm container runtime thay vì Docker.
</aside>

Một số lỗi thường gặp

root@node-master:~# kubeadm init --pod-network-cidr=192.168.0.0/16 --control-plane-endpoint=192.168.1.129 --cri-socket=unix:///run/containerd/containerd.sock
I0905 11:00:19.609910 4406 version.go:256] remote version is much newer: v1.31.0; falling back to: stable-1.28
[init] Using Kubernetes version: v1.28.13
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

Hướng dẫn sửa một số lỗi thường gặp:

**** Lỗi: [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist**

Để sửa:

sudo modprobe br_netfilter
sudo sysctl net.bridge.bridge-nf-call-iptables=1

** Lỗi: [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1 :

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 sửa các lỗi trên thì chạy lại lệnh khởi tạo cluster ở trên.

Kết quả: image 1.png

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

image 2.png

Lý do coredns bị pending do ta chưa cài pod networking. Có rất nhiều pod network add-on cho ta cài, ở đây mình sẽ chọn calico.

curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/calico.yaml -O

Vào file calico.yaml bằng nano hoặc vim, tìm kiếm đoạn text “CALICO_IPV4POOL_CIDR” và uncomment đoạn sau

# - name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"

Sau đó chạy lệnh :

kubectl apply -f calico.yaml

Đợi 1 thời gian và kết quả: image 3.png

3. Thêm worker node vào cluster trên các node worker

Chạy lệnh sau để thêm node woker vào cluser

kubeadm join 192.168.1.129:6443 --token n25frf.tpys1y9a1hpsdrzy \ --discovery-token-ca-cert-hash sha256:39381c9cb504145058657e81dca874f2d0e378b97bda335ca31a489ffce81a10 \ --cri-socket=unix:///run/containerd/containerd.sock

Kết quả ở node woker:

image 4.png

Đợi 1 thời gian khoảng vài phút rồi quay lại node master để kiểm tra

kubectl get nodes

image 5.png

** Tài liệu tham khảo:

https://techmaster.vn/posts/37882/cach-khoi-tao-cum-kubernete-su-dung-kubeadm

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

https://www.itzgeek.com/how-tos/linux/ubuntu-how-tos/install-containerd-on-ubuntu-22-04.html

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đề thi interview DevOps ở Châu Âu

Well. Chào mọi người, mình là Rice - một DevOps Engineers ở đâu đó tại Châu Âu.

0 0 81

- vừa được xem lúc

In calculus, love also means zero.

Mình nhớ hồi năm 2 đại học, thầy giáo môn calculus, trong một giây phút ngẫu hứng, đã đưa ra cái definition này. Lúc đấy mình cũng không nghĩ gì nhiều.

0 0 62

- vừa được xem lúc

Chuyện thay đổi

Thay đổi là một thứ gì đó luôn luôn đáng sợ. Cách đây vài tháng mình có duyên đi làm cho một banking solution tên là X.

0 0 41

- vừa được xem lúc

Pet vs Cattle - Thú cưng và gia súc

Khái niệm. Pets vs Cattle là một khái niệm cơ bản của DevOps. Bài viết này sẽ nói về sự phát triển của các mô hình dịch vụ từ cốt lõi Pets and Cattle. 1.

0 0 31

- vừa được xem lúc

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 78

- vừa được xem lúc

Kubernetes - Học cách sử dụng Kubernetes Namespace cơ bản

Namespace trong Kubernetes là gì. Tại sao nên sử dụng namespace.

0 0 108