Cài đặt các master và worker nodeSơ đồ mạng
Sơ đồ logic
Để đả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
[root@~]apt update -y && apt upgrade -y
[root@~]systemctl stop ufw [root@~]systemctl disable ufw
[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
[root@~]echo -e "overlaynbr_netfilter" | tee /etc/modules-load.d/containerd.conf > /dev/null
[root@~]modprobe overlay
[root@~]modprobe br_netfilter
[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
[root@~]sysctl --system
[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"
[root@~]apt update -y
[root@~]apt install -y containerd.io
[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
[root@~]systemctl restart containerd
[root@~]systemctl enable containerd
[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
[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
[root@~]mkdir -p $HOME/.kube
[root@~]kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml ----------------------------------------------------------------------------------------------------------------------------------------
- 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.
[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 |

