Upgrade version K8S mà vẫn giữ nguyên IP worker node

Các bước upgrade version K8S mà vẫn muốn giữ nguyên node IP các bước như sau:

  1. Chọn cluster > Chọn nâng cấp > chọn Chỉ nâng cấp thành phần control-plane

image

  1. Kiểm tra API server

    ➜  ~ kubectl get node -A                          
    NAME                                           STATUS   ROLES    AGE     VERSION
    pool-tgyk07om-ggzayhz3inp71wg6-node-yv9ngyuq   Ready    <none>   7m49s   v1.30.9
    ➜  ~ kubectl version    
    Client Version: v1.32.0
    Kustomize Version: v5.5.0
    **Server Version: v1.31.5 #### Để ý trường này**
    
  2. Mở firewall để ssh vào node

  • Truy cập firewall kengine-xxxxx-public
  • mở port SSH

image

  1. SSH vào node và chạy tạo script sau: install_k8s.sh
#!/bin/bash

# Check if version parameter is provided
if [ -z "$1" ]; then
  echo "Error: Please provide a Kubernetes version"
  echo "Usage: $0 <version> (e.g., $0 v1.31.5)"
  exit 1
fi

# Set Kubernetes version from input
KUBE_VERSION=$1

# Create download directory
DOWNLOAD_DIR="/tmp/k8s-install"
mkdir -p "$DOWNLOAD_DIR"
cd "$DOWNLOAD_DIR"

echo "Downloading kubelet version $KUBE_VERSION..."
curl -L "https://dl.k8s.io/$KUBE_VERSION/bin/linux/amd64/kubelet" -o kubelet

# Make kubelet executable
echo "Making kubelet executable..."
chmod +x kubelet

# Move kubelet to /usr/local/bin
echo "Moving kubelet to /usr/local/bin..."
sudo mv kubelet /usr/local/bin/

# Restart kubelet service
echo "Restarting kubelet service..."
sudo systemctl restart kubelet

echo "Installation complete. Kubelet version $KUBE_VERSION has been installed."

# Clean up
cd - > /dev/null
rm -rf "$DOWNLOAD_DIR"
  1. Chạy script
root@pool-tgyk07om-ggzayhz3inp71wg6-node-yv9ngyuq:~# bash install_k8s.sh v1.31.5
Downloading kubelet version v1.31.5...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   138  100   138    0     0    420      0 --:--:-- --:--:-- --:--:--   422
100 73.3M  100 73.3M    0     0  4747k      0  0:00:15  0:00:15 --:--:-- 6068k
Making kubelet executable...
Moving kubelet to /usr/local/bin...
Restarting kubelet service...
Installation complete. Kubelet version v1.31.5 has been installed.
  1. Kiểm tra lại node trên api server
➜  ~ kubectl get node -A
NAME                                           STATUS   ROLES    AGE   VERSION
pool-tgyk07om-ggzayhz3inp71wg6-node-yv9ngyuq   Ready    <none>   10m   v1.31.5
  1. Tiếp tục thực hiện với các node còn lại

Lưu ý 1:

image

Khi nâng cấp bằng cách này thì không thể nâng cấp tiếp vì hệ thống k tự cập nhật dc version của worker_pool do thực hiện thủ công

⇒ Nếu muốn nâng cấp lên version tiếp theo liên hệ support để được hỗ trợ vì hệ thống chặn control-plane và worker-pool chênh nhau quá 1 version

Lưu ý 2:

Sau khi nâng cấp xong hãy xoá rule SSH để đảm bảo an toàn cho các worker (chỉ xoá rule đừng xoá cả firewall)

Lưu ý 3:

Nên drain và cordon node được nâng cấp trước khi tiến hành nâng cấp sử dụng lệnh

kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

Lưu ý 4: Những worker được tạo mới trong pool vào lúc thời điểm trước upgrade sẽ vẫn tạo ở version cũ khởi điểm lúc tạo cụm

Những worker-pool và worker được tạo mới sẽ được tạo version ngang với control plane

➜  ~ kubectl get node -A
NAME                                           STATUS     ROLES    AGE   VERSION
**pool-oncrhzl5-ggzayhz3inp71wg6-node-ecevvmf8   Ready      <none>   13s   v1.32.1 ### Pool mới tạo ra sẽ dùng version mới**
**pool-tgyk07om-ggzayhz3inp71wg6-node-fpxes1jr   Ready      <none>   65s   v1.30.9 ### Scale lên vẫn version cũ**
pool-tgyk07om-ggzayhz3inp71wg6-node-yv9ngyuq   Ready      <none>   23m   v1.32.1