0
0
Lập trình
TT

Cập nhật NGINX trên Kubernetes: Hướng dẫn từng bước

Đăng vào 1 tháng trước

• 8 phút đọc

Cập nhật Rolling NGINX trên Kubernetes

Bài viết này hướng dẫn quy trình thực hiện cập nhật rolling cho một deployment NGINX trên Kubernetes để nâng cấp máy chủ web NGINX lên phiên bản 1.18. Deployment có tên là nginx-deployment đã được cập nhật để phản ánh những thay đổi gần đây từ nhóm phát triển ứng dụng.

1. Khởi động Cập nhật Rolling

Để bắt đầu quá trình cập nhật rolling, lệnh kubectl set image được sử dụng. Lệnh này thông báo cho Kubernetes cập nhật nginx-container trong nginx-deployment để sử dụng hình ảnh mới nginx:1.18. Kubernetes sau đó bắt đầu quy trình cập nhật rolling, tạo ra các pod mới với hình ảnh đã cập nhật trong khi vẫn duy trì các pod cũ, đảm bảo ứng dụng luôn sẵn sàng phục vụ.

bash Copy
thor@jumphost ~$ kubectl set image deployment/nginx-deployment nginx-container=nginx:1.18
deployment.apps/nginx-deployment image updated

2. Kiểm tra Trạng thái Rollout

Sau khi khởi động cập nhật, lệnh kubectl rollout status được sử dụng để theo dõi tiến trình. Lệnh này xác nhận rằng các pod mới đã được tạo thành công và sẵn sàng phục vụ lưu lượng truy cập.

bash Copy
thor@jumphost ~$ kubectl rollout status deployment/nginx-deployment
deployment "nginx-deployment" successfully rolled out

3. Kiểm tra Pod trong Namespace Đúng

Ban đầu, việc kiểm tra các pod bằng nhãn app=nginx không hiển thị tài nguyên nào. Điều này xảy ra vì các pod của deployment nằm trong namespace mặc định, trong khi lệnh ban đầu có thể đã tìm kiếm trong một namespace khác hoặc không xác định. Để giải quyết vấn đề này, lệnh kubectl get pods đã được chạy với tham số --all-namespaces. Lệnh này đã xác định đúng các pod và cho thấy chúng đang chạy trong namespace default.

bash Copy
thor@jumphost ~$ kubectl get pods -l app=nginx
No resources found in default namespace.
thor@jumphost ~$ kubectl get pods --all-namespaces
NAMESPACE          NAME                                 READY   STATUS    RESTARTS   AGE
default            nginx-deployment-58cf54c7f6-hzwvn    1/1     Running   0          2m43s
default            nginx-deployment-58cf54c7f6-w4wh4    1/1     Running   0          2m51s
default            nginx-deployment-58cf54c7f6-wznkx    1/1     Running   0          2m41s
kube-system        coredns-5d78c9869d-bn6v4             1/1     Running   0          13m
kube-system        coredns-5d78c9869d-g75tz             1/1     Running   0          13m
kube-system        etcd-kodekloud-control-plane         1/1     Running   0          13m
kube-system        kindnet-grrg5                        1/1     Running   0          13m
kube-system        kube-apiserver-kodekloud-control-plane   1/1     Running   0          13m
kube-system        kube-controller-manager-kodekloud-control-plane  1/1     Running   0          13m
kube-system        kube-proxy-jtxjl                     1/1     Running   0          13m
kube-system        kube-scheduler-kodekloud-control-plane   1/1     Running   0          13m
local-path-storage local-path-provisioner-6bc4bddd6b-54lws  1/1     Running   0          13m

4. Xác minh Cuối cùng

Bước cuối cùng là xác nhận rằng các pod mới thực sự đang sử dụng hình ảnh nginx:1.18 đúng. Điều này được thực hiện bằng cách sử dụng lệnh kubectl describe pod trên một trong các pod mới, nginx-deployment-58cf54c7f6-hzwvn. Kết quả hiển thị rõ ràng rằng hình ảnh của nginx-container đã được cập nhật lên phiên bản mong muốn.

bash Copy
thor@jumphost ~$ kubectl describe pod nginx-deployment-58cf54c7f6-hzwvn
Name:             nginx-deployment-58cf54c7f6-hzwvn
Namespace:        default
Priority:         0
Service Account:  default
Node:             kodekloud-control-plane/172.17.0.2
Start Time:       Tue, 23 Sep 2025 05:17:44 +0000
Labels:           app=nginx-app
                  pod-template-hash=58cf54c7f6
Annotations:      <none>
Status:           Running
IP:               10.244.0.9
IPs:
  IP:         10.244.0.9
Controlled By:  ReplicaSet/nginx-deployment-58cf54c7f6
Containers:
  nginx-container:
    Container ID:   containerd://df902a1d0ebdef8caad17cab31cddec1af4a4c5f6152b0933e6e460c8b7a9fbd
    Image:          nginx:1.18
    Image ID:       docker.io/library/nginx@sha256:e90ac5331fe095cea01b121a3627174b2e33e06e83720e9a934c7b8ccc9c55a0
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Tue, 23 Sep 2025 05:17:45 +0000
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-smr26 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  kube-api-access-smr26:
    Type:                Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:         kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:           true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  7m41s default-scheduler  Successfully assigned default/nginx-deployment-58cf54c7f6-hzwvn to kodekloud-control-plane
  Normal  Pulled     7m41s kubelet            Container image "nginx:1.18" already present on machine
  Normal  Created    7m41s kubelet            Created container nginx-container
  Normal  Started    7m40s kubelet            Started container nginx-container

Kết quả xác nhận việc cập nhật thành công và cho thấy các pod mới đang chạy và khỏe mạnh. Điều này hoàn thành quy trình cập nhật rolling cho ứng dụng NGINX.

Thực hành tốt nhất

  • Luôn kiểm tra trạng thái pod sau khi cập nhật: Duy trì việc kiểm tra thường xuyên sau mỗi cập nhật để đảm bảo rằng các pod đang hoạt động bình thường.
  • Sao lưu cấu hình: Trước khi thực hiện bất kỳ cập nhật nào, hãy đảm bảo bạn đã sao lưu cấu hình hiện tại.

Những cạm bẫy thường gặp

  • Không kiểm tra namespace: Nhiều người dùng thường quên kiểm tra namespace khi tìm kiếm các pod, dẫn đến việc không tìm thấy tài nguyên.
  • Thiếu giám sát sau cập nhật: Không theo dõi tình trạng của các pod sau khi cập nhật có thể dẫn đến việc bỏ lỡ các lỗi tiềm ẩn.

Mẹo Hiệu suất

  • Sử dụng Horizontal Pod Autoscaler để tự động điều chỉnh số lượng pod dựa trên lưu lượng truy cập.
  • Xem xét cấu hình resource requests và limits cho các container để tối ưu hóa hiệu năng.

Hỏi đáp (FAQ)

Q: Có cần phải dừng dịch vụ NGINX trước khi cập nhật không?
A: Không, với cập nhật rolling, NGINX sẽ tự động chuyển giao lưu lượng từ các pod cũ sang các pod mới mà không cần dừng dịch vụ.

Q: Làm thế nào để quay lại phiên bản cũ nếu có sự cố?
A: Bạn có thể sử dụng lệnh kubectl rollout undo deployment/nginx-deployment để quay lại phiên bản trước đó nếu cần.

Kết luận

Cập nhật rolling cho deployment NGINX trên Kubernetes là một quy trình đơn giản nhưng mạnh mẽ, giúp duy trì tính khả dụng của ứng dụng trong khi cập nhật. Đừng quên kiểm tra trạng thái và thực hiện các bước bảo trì cần thiết sau khi cập nhật để đảm bảo mọi thứ hoạt động trơn tru. Hãy thử nghiệm và áp dụng trong môi trường của bạn ngay hôm nay để nâng cao khả năng của ứng dụng!

Ghi chú quan trọng: Đảm bảo bạn đã hiểu rõ về cấu hình mạng và namespace trước khi thực hiện cập nhật để tránh những sự cố không mong muốn.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào