Cài đặt các master và worker node

Sơ đồ mạng 

 

 sodomang

Sơ đồ logic

sodologic2 

 

Để đảm bảo HA cần tối thiểu: 

- Load balancer api: 1.

Thực hiện load balancer/failover cho các service API Server, kubectl, kubelet, etcd... Nếu 1 trong các master lỗi, hệ thống sẽ hoạt động bình thường. Trước khi khởi tạo Master node, cần cấu hình load balancer trước. Khi khởi tạo master node đầu tiên thì khai báo tới VIP, các worker node cũng phải join cùng với VIP

- Master node: tối thiểu 3 (là số lẻ 3-5-7...). Quy tắc chịu lỗi:

    3 node → chịu lỗi 1 node 

    5 node → chịu lỗi 2 node 

    7 node → chịu lỗi 3 node

- Worker: tối thiểu 2, khuyến nghị từ 3 trở lên

- Load balancer client: 1

Ingress Nginx: load balancer cho các worker node bên trong cụm. ingress sẽ được cài trên worker node và được replica sang các worker node còn lại để đảm bảo HA.

Ingress on premise sẽ để dạng nodeport, service dạng cluster ip. Trên cloud thì ingress để load banlacer, service load banlancer

 

Thực hiện trên cả tất cả servers

 

  •  Cập nhật và nâng cấp hệ thống

 

[root@~]apt update -y && apt upgrade -y

 

  •  Stop firewall

[root@~]systemctl stop ufw

[root@~]systemctl disable ufw

  • Tắt swap

 

[root@~]nano /etc/fstab

 

xóa dòng

 

swap.img none swap sw 0 0

 

Save, thoát và khởi động lại. Sau đó kiểm tra bằng lệnh:

 

[root@~]free

 

# Swap: 0B

 

Hoặc

 

[root@~]cat /proc/swaps

 

Thông tin hiện ra như sau là ok

 Filename                                Type            Size            Used            Priority

  • Cấu hình module kernel

 

[root@~]echo -e "overlaynbr_netfilter" | tee /etc/modules-load.d/containerd.conf > /dev/null

 

  • Tải module kernel

 

[root@~]modprobe overlay

 

[root@~]modprobe br_netfilter

 

  • Cấu hình hệ thống mạng

 

[root@~]echo "net.bridge.bridge-nf-call-ip6tables = 1" | tee -a /etc/sysctl.d/kubernetes.conf

 

[root@~]echo "net.bridge.bridge-nf-call-iptables = 1" | tee -a /etc/sysctl.d/kubernetes.conf

 

[root@~]echo "net.ipv4.ip_forward = 1" | tee -a /etc/sysctl.d/kubernetes.conf

 

  • Áp dụng cấu hình

 

[root@~]sysctl --system

 

  • Cài đặt các gói cần thiết và thêm kho Docker

 

[root@~]apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

 

[root@~]curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg

 

[root@~]add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

 

  • Cài đặt containerd

 

[root@~]apt update -y

 

[root@~]apt install -y containerd.io

 

  • Cấu hình containerd

 

[root@~]containerd config default | tee /etc/containerd/config.toml >/dev/null 2>&1

 

[root@~]sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

 

  • Khởi động containerd

 

[root@~]systemctl restart containerd

 

[root@~]systemctl enable containerd

 

  • Thêm kho lưu trữ Kubernetes

 

[root@~]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

 

[root@~]curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

 

  • Cài đặt các gói Kubernetes

 

[root@~]apt update -y

 

[root@~]apt install -y kubelet kubeadm kubectl

 

[root@~]apt-mark hold kubelet kubeadm kubectl

----------------Chỉ thực hiện trên server k8s-master-1-----------------------------

[root@~]kubeadm init --control-plane-endpoint "VIP:6443" --upload-certs

  • VIP (địa chỉ haproxy api server)

[root@~]mkdir -p $HOME/.kube
[root@~]cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@~]chown $(id -u):$(id -g) $HOME/.kube/config

  •  Cài đặt network trong cụm sử dụng calico

[root@~]kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml

----------------------------------------------------------------------------------------------------------------------------------------

  • Lưu thông tin xuất hiện ra màn hình:

-        Phần để join trên master 2 hay 3 sẽ có thêm --control-plane --certificate-key. Sau khi chạy cần chạy them thông tin xuất ra màn hình như:

mkdir -p $HOME/.kube

         cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

         chown $(id -u):$(id -g) $HOME/.kube/config

-         Phần để join worker không có --control-plane --certificate-key.

  • Kiểm tra cluster

[root@~]kubectl get nodes

[root@~]kubectl get pods -A

Lưu ý: chỉ master mới hiển thị role label. Worker sẽ không hiển thị. Trường hợp muốn đặt label cho worker thì thực hiện lệnh sau trên master node

kubectl label node <NODE_NAME> node-role.kubernetes.io/worker=worker

Ví dụ: nếu node tên là worker1:

[root@~]kubectl label node worker1 node-role.kubernetes.io/worker=worker