[ad_1]
Kubeadm là công cụ chính thức để cài đặt và duy trì một cụm dựa trên bản phân phối Kubernetes mặc định. Các cụm đã tạo không tự động nâng cấp và việc tắt cập nhật gói cho các thành phần Kubernetes là một phần của quá trình thiết lập. Điều này có nghĩa là bạn phải di chuyển cụm của mình theo cách thủ công khi có bản phát hành Kubernetes mới.
Trong bài viết này, bạn sẽ tìm hiểu các bước liên quan đến nâng cấp Kubernetes bằng cách chuyển đổi từ v1.24 sang v1.25 trên Ubuntu 22.04. Quy trình này thường tương tự đối với bất kỳ bản phát hành nhỏ nào của Kubernetes nhưng bạn phải luôn tham khảo tài liệu chính thức trước khi bắt đầu, trong trường hợp bản phát hành mới có các yêu cầu chuyên môn.
Xác định phiên bản chính xác để cài đặt
Bước đầu tiên là xác định phiên bản bạn sẽ nâng cấp lên. Bạn không thể bỏ qua các phiên bản nhỏ – ví dụ: chuyển trực tiếp từ v1.23 đến v1.25 không được hỗ trợ – vì vậy bạn nên chọn bản phát hành vá lỗi gần đây nhất cho phiên bản nhỏ theo sau bản phát hành hiện tại của cụm của bạn.
Bạn có thể khám phá phiên bản vá mới nhất bằng lệnh sau:
$ apt-cache policy kubeadm | grep 1.25 1.25.1-00 500 1.25.0-00 500
Điêu nay cho thây răng 1.25.1-00
là phiên bản mới nhất của Kubernetes v1.25. Thay thế 1.25
trong lệnh với phiên bản nhỏ mà bạn sẽ chuyển sang.
Nâng cấp Mặt phẳng điều khiển
Hoàn thành phần này trên máy đang chạy mặt phẳng điều khiển của bạn. Đừng chạm vào các nút công nhân – họ có thể tiếp tục sử dụng bản phát hành Kubernetes hiện tại của mình trong khi mặt phẳng điều khiển được cập nhật. Nếu bạn có nhiều nút mặt phẳng điều khiển, hãy chạy trình tự này trên nút đầu tiên và làm theo quy trình nút công nhân trong phần tiếp theo về các nút khác.
Cập nhật Kubeadm
Trước tiên, hãy giải phóng phần giữ trên gói Kubeadm và cài đặt phiên bản mới. Chỉ định chính xác bản phát hành được xác định trước đó để Apt không tự động lấy bản mới nhất, đây có thể là một phiên bản nhỏ không được hỗ trợ.
$ sudo apt update $ sudo apt-mark unhold kubeadm $ sudo apt install -y kubeadm=1.25.1-00
Bây giờ áp dụng lại lưu giữ để apt upgrade
không cung cấp các bản phát hành không mong muốn trong tương lai:
$ sudo apt-mark hold kubeadm kubeadm set on hold
Xác minh rằng Kubeadm hiện là phiên bản mong đợi:
$ kubeadm version --short kubeadm version: &version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.1"...
Tạo kế hoạch nâng cấp
Kubeadm tự động hóa quá trình nâng cấp máy bay điều khiển. Lần đầu tiên sử dụng upgrade plan
lệnh để thiết lập các phiên bản bạn có thể chuyển sang. Điều này sẽ kiểm tra cụm của bạn để đảm bảo rằng nó có thể chấp nhận bản phát hành mới.
$ sudo kubeadm upgrade plan
Đầu ra là khá dài nhưng nó đáng để kiểm tra chặt chẽ. Phần đầu tiên sẽ báo cáo rằng tất cả các thành phần Kubernetes sẽ nâng cấp lên số phiên bản bạn đã chọn trước đó. Các phiên bản mới cũng có thể được hiển thị cho CoreDNS và etcd.
COMPONENT CURRENT TARGET kube-apiserver v1.24.5 v1.25.1 kube-controller-manager v1.24.5 v1.25.1 kube-scheduler v1.24.5 v1.25.1 kube-proxy v1.24.5 v1.25.1 CoreDNS v1.8.6 v1.9.3 etcd 3.5.3-0 3.5.4-0
Phần cuối của đầu ra bao gồm một bảng hiển thị bất kỳ thay đổi cấu hình bắt buộc nào. Đôi khi bạn có thể cần phải thực hiện thao tác thủ công để điều chỉnh các tệp cấu hình này và cung cấp chúng cho cụm. Tham khảo tài liệu về bản phát hành của bạn nếu bạn nhận được “có” trong cột “Yêu cầu nâng cấp thủ công”.
API GROUP CURRENT VERSION PREFERRED VERSION MANUAL UPGRADE REQUIRED kubeproxy.config.k8s.io v1alpha1 v1alpha1 no kubelet.config.k8s.io v1beta1 v1beta1 no
Cụm này hiện đã sẵn sàng để nâng cấp. Kế hoạch đã xác nhận rằng Kubernetes v1.25.1 khả dụng và không cần thao tác thủ công. Kiểm tra xem bạn đã cài đặt đúng phiên bản Kubeadm chưa nếu không có gói nào được tạo hoặc xuất hiện lỗi. Bạn có thể đang cố gắng di chuyển giữa nhiều phiên bản nhỏ.
Áp dụng kế hoạch nâng cấp
Bây giờ bạn có thể hướng dẫn Kubeadm tiến hành áp dụng kế hoạch nâng cấp bằng cách chạy upgrade apply
với số phiên bản chính xác:
$ sudo kubeadm upgrade apply v1.25.1
Một lời nhắc xác nhận sẽ xuất hiện:
[upgrade/version] You have chosen to change the cluster version to "v1.25.1" [upgrade/versions] Cluster version: v1.24.5 [upgrade/versions] kubeadm version: v1.25.1 [upgrade] Are you sure you want to proceed? [y/N]:
Nhấn y
để tiếp tục nâng cấp. Quá trình này có thể mất vài phút trong khi nó kéo hình ảnh cho các thành phần mới và khởi động lại mặt phẳng điều khiển của bạn. Bạn sẽ không thể tương tác một cách đáng tin cậy với API của cụm của mình trong thời gian này nhưng mọi Pod đang chạy sẽ vẫn hoạt động trên các Node của bạn.
Cuối cùng, bạn sẽ thấy một thông báo thành công:
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.25.1". Enjoy!]
Máy bay điều khiển hiện đã được nâng cấp.
Nâng cấp nút công nhân
Bây giờ bạn có thể nâng cấp các nút công nhân của mình. Những bươc này cũng cần được thực hiện trên các nút mặt phẳng điều khiển của bạn. Nâng cấp từng nút theo trình tự để giảm thiểu ảnh hưởng của dung lượng bị xóa khỏi cụm của bạn. Các nhóm sẽ được lên lịch đến các nút khác trong khi mỗi nhóm được nâng cấp.
Đầu tiên rút nút của các Pod hiện có của nó và đặt một sợi dây thừng xung quanh nó. Thay thế tên của nút thay vì node-1
trong các lệnh sau.
$ kubectl cordon node-1 $ kubectl drain node-1
Điều này loại bỏ các Pod của nút và ngăn không cho bất kỳ nhóm mới nào được lên lịch. Nút hiện không hoạt động trong cụm của bạn.
Bản phát hành tiếp theo, trình quản lý gói giữ trên kubeadm
, kubectl
và kubelet
các gói. Cài đặt phiên bản mới của từng cái. Các phiên bản của cả ba gói phải khớp chính xác. Hãy nhớ đặt lại trạng thái lưu giữ sau khi bạn có các bản phát hành mới.
$ sudo apt update $ sudo apt-mark unhold kubeadm kubectl kubelet $ sudo apt install -y kubeadm=1.25.1-00 kubectl=1.25.1-00 kubelet=1.25.1-00 $ sudo apt-mark hold kubeadm kubectl kubelet
Tiếp theo sử dụng Kubeadm’s upgrade node
lệnh để áp dụng nâng cấp và cập nhật cấu hình nút của bạn:
$ sudo kubeadm upgrade node
Cuối cùng khởi động lại dịch vụ Kubelet và bỏ sắp xếp nút. Nó sẽ tham gia lại vào cụm và bắt đầu chấp nhận các Nhóm mới.
$ sudo systemctl daemon-reload $ sudo systemctl restart kubelet $ kubectl uncordon node-1
Kiểm tra cụm của bạn
Sau khi bạn hoàn thành nâng cấp, hãy chạy kubectl version
để kiểm tra bản phát hành đang hoạt động có khớp với mong đợi của bạn:
$ kubectl version --short Client Version: v1.25.1 ... Server Version: v1.25.1
Tiếp theo, hãy kiểm tra xem tất cả các nút của bạn có đang báo cáo phiên bản mới của chúng và đã nhập Ready
tiểu bang:
$ kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION ubuntu22 Ready control-plane 70m v1.25.1
Nâng cấp hiện đã hoàn tất.
Phục hồi sau khi nâng cấp thất bại
Đôi khi quá trình nâng cấp có thể không thành công ngay cả khi Kubeadm lập kế hoạch thành công một lộ trình và xác minh tình trạng cụm của bạn. Sự cố có thể xảy ra nếu quá trình nâng cấp bị gián đoạn hoặc một thành phần Kubernetes ngừng phản hồi. Kubeadm sẽ tự động quay lại phiên bản trước nếu điều này xảy ra.
Các upgrade apply
lệnh có thể được lặp lại một cách an toàn để thử lại một lần nâng cấp không thành công. Nó sẽ phát hiện các cách mà cụm của bạn khác với phiên bản dự kiến, cho phép nó cố gắng khôi phục cả lỗi toàn bộ và nâng cấp một phần.
Khi lặp lại lệnh không hoạt động, bạn có thể thử buộc nâng cấp bằng cách thêm --force
gắn cờ cho lệnh:
$ kubeadm upgrade apply --force
Điều này sẽ cho phép tiếp tục nâng cấp trong các tình huống thiếu hoặc không thể đáp ứng các yêu cầu nữa.
Khi thảm họa xảy ra và cụm của bạn dường như bị hỏng hoàn toàn, bạn có thể khôi phục nó bằng cách sử dụng các tệp sao lưu mà Kubeadm tự động ghi:
- Sao chép nội dung của
/etc/kubernetes/tmp/kubeadm-backup-etcd-<date>-<time>
vào của bạn/var/lib/etcd
danh mục. - Sao chép nội dung của
/etc/kubernetes/tmp/kubeadm-backup-manifests-<date>-<time>
vào của bạn/etc/kubernetes/manifests
danh mục.
Các bản sao lưu này có thể được sử dụng để khôi phục thủ công phiên bản Kubernetes trước đó về trạng thái hoạt động.
Bản tóm tắt
Việc nâng cấp Kubernetes với Kubeadm không nên quá căng thẳng. Hầu hết quá trình này được tự động hóa với sự tham gia của bạn chỉ giới hạn trong việc cài đặt các gói mới và kiểm tra kế hoạch nâng cấp.
Trước khi nâng cấp, bạn phải luôn tham khảo bảng thay đổi Kubernetes và bất kỳ tài liệu nào được xuất bản bởi các thành phần bạn sử dụng trong cụm của mình. Tất cả các giao diện mạng Pod, bộ điều khiển Ingress, nhà cung cấp dịch vụ lưu trữ và các phần bổ trợ khác đều có thể không tương thích với bản phát hành Kubernetes mới hoặc yêu cầu quy trình nâng cấp của riêng họ.
[ad_2]