Di chuyển từ Compute Engine sang Kubernetes Engine bằng Migrate cho Anthos

1. Tổng quan

Việc viết lại hoặc thiết kế lại các ứng dụng hiện có để hoạt động trên Kubernetes không phải lúc nào cũng có thể thực hiện hoặc khả thi theo cách thủ công. Migrate cho Anthos có thể giúp hiện đại hóa các ứng dụng hiện có của bạn và đưa các ứng dụng đó chạy trong Kubernetes. Trong lớp học lập trình này, bạn sẽ di chuyển một ứng dụng web hiện có được lưu trữ trên Compute Engine sang Kubernetes Engine bằng Migrate cho Anthos.

Kiến thức bạn sẽ học được

  • Cách triển khai Migrate cho Anthos trên một cụm Kubernetes
  • Cách tạo vùng chứa trong tập hợp trạng thái từ một thực thể Compute Engine hiện có
  • Cách triển khai vùng chứa cho Kubernetes và định cấu hình vùng chứa bằng trình cân bằng tải

Bạn cần có

  • Một dự án Google Cloud đã thiết lập thông tin thanh toán. Nếu chưa có tài khoản, bạn phải tạo một tài khoản.

2. Thiết lập

Lớp học lập trình này có thể chạy hoàn toàn trên Google Cloud Platform mà không cần cài đặt hay định cấu hình cục bộ.

Bật API

Trước khi bắt đầu, hãy nhớ bật các API bắt buộc trên dự án Google Cloud của bạn:

Tạo máy chủ web của phiên bản điện toán

Hãy tạo một phiên bản điện toán mà chúng ta sẽ dùng để lưu trữ máy chủ web nginx ban đầu, cùng với các quy tắc tường lửa để cho phép chúng ta xem trang đích mặc định của máy chủ web. Có một vài cách để thực hiện việc này, nhưng để dễ sử dụng, chúng ta sẽ sử dụng Cloud Shell.

Trong Cloud Shell, hãy chạy mã sau:

gcloud compute instances create webserver --zone=us-central1-a && \
gcloud compute firewall-rules create default-allow-http --allow=tcp:80 

Nửa đầu của lệnh này sẽ tạo một phiên bản Google Cloud trong vùng us-central1-a trong khi nửa thứ hai sẽ tạo một quy tắc tường lửa có tên là ‘default-allow-http' sẽ cho phép lưu lượng truy cập http vào mạng của chúng tôi.

Khi được tạo thành công, thực thể sẽ hiển thị một bảng có thông tin chi tiết về thực thể đó. Ghi lại IP bên ngoài – chúng tôi sẽ cần địa chỉ này để xác minh máy chủ web có đang chạy vào lúc khác.

a08aa5bf924b107d.png

Sau khi phiên bản được thiết lập và chạy, chúng ta có thể SSH vào phiên bản của mình từ Cloud Shell để cài đặt nginx và khởi động máy chủ web:

gcloud compute ssh --zone us-central1-a webserver

Sau khi đăng nhập vào phiên bản điện toán của chúng ta, hãy cài đặt nginx:

sudo apt install nginx

Đăng xuất khỏi phiên ssh bằng lệnh logout

Hãy xác minh rằng máy chủ web của chúng ta đang chạy bằng cách nhập IP ngoài của thực thể từ trước đó vào trình duyệt. Bạn sẽ thấy màn hình chào mừng mặc định của nginx:

5c08e3b2bd17e03.pngS

Máy chủ web này sẽ đóng vai trò là ứng dụng web cũ mà chúng tôi sẽ di chuyển sang Kubernetes bằng cách sử dụng Migrate cho Anthos.

3. Cụm Kubernetes với Migrate cho Anthos

Tiếp theo, chúng ta sẽ tạo một cụm GKE. Đây là nơi chúng tôi sẽ di chuyển máy chủ web của Compute Engine. Trong Cloud Console, hãy chạy lệnh sau:

gcloud container clusters create my-gke-cluster \
  --zone us-central1-a \
  --cluster-version 1.13 \
  --machine-type n1-standard-4 \
  --image-type "UBUNTU" \
  --num-nodes 1 \
  --enable-stackdriver-kubernetes

Hãy đợi vài phút để hoàn tất lệnh này. Sau khi tạo cụm, bạn sẽ nhận được một số kết quả kèm theo thông tin chi tiết về cụm:

c69778b8fb8ac72b.png

Tiếp theo, hãy chuyển đến GCP Marketplace (Thị trường GCP để triển khai quy trình di chuyển cho Anthos):

45f5753cae53ccb5.pngS

Trên trang trang web thương mại cho Migrate cho Anthos, hãy nhấp vào định cấu hình. Nếu được nhắc, hãy chọn dự án của bạn trong danh sách. Trang tiếp tục sẽ hiển thị một biểu mẫu với một số giá trị mặc định được nhập vào. Đảm bảo rằng cụm được chọn chính là cụm mà chúng ta vừa tạo rồi nhấp vào Triển khai:

94dc6238b2affd16.pngs

Giờ đây, Migrate cho Anthos sẽ được triển khai trên cụm kubernetes của chúng tôi. Khi triển khai xong, bạn sẽ thấy trạng thái "OK" trên trang Ứng dụng của Kubernetes Engine:

5bf601103a5335cf.png.

4. Từ thực thể điện toán đến tập hợp trạng thái

Chúng tôi đã có một cụm Kubernetes chạy Migrate cho Anthos, vì vậy, bây giờ chúng ta có thể bắt đầu quá trình di chuyển. Để triển khai thực thể điện toán cho cụm Kubenetes, chúng ta sẽ tắt phiên bản công cụ điện toán để có thể chụp nhanh các ổ đĩa. Trước khi tiếp tục, hãy ghi lại mã thực thể mà sau này chúng ta sẽ cần đến:

gcloud compute instances describe webserver --zone us-central1-a | grep ^id

Hãy tắt phiên bản điện toán của chúng ta:

gcloud compute instances stop webserver --zone us-central1-a

Bây giờ, thực thể đã dừng, chúng ta có thể chụp nhanh các ổ đĩa một cách an toàn bằng cách chạy tập lệnh sau. Hãy nhớ chèn mã dự ánmã thực thể của bạn:

python3 /google/migrate/anthos/gce-to-gke/clone_vm_disks.py \
  -p <project-id>   -i <instance-id> \
  -z us-central1-a \
  -T us-central1-a \
  -A webserver-statefulset \
  -o containerized-webserver.yaml

Với những cờ đó, clone_vm_disks.py sẽ:

  • Xác minh rằng phiên bản GCE đang tắt
  • Tạo ảnh chụp nhanh từ mỗi ổ đĩa của thực thể
  • Tạo một ổ đĩa mới từ mỗi ảnh chụp nhanh
  • Xoá bản tổng quan nhanh đã tạo
  • Tạo tệp YAML trong thư mục đang làm việc để triển khai một tập hợp trạng thái sẽ lưu trữ máy chủ web của bạn

Tệp yaml đã tạo sẽ cung cấp một tập hợp trạng thái trong cụm kubernetes, cùng với các yêu cầu xác nhận dung lượng cố định cần thiết để gắn các ổ đĩa đã sao chép vào vùng chứa máy chủ web của chúng tôi. Chúng ta có thể áp dụng những thay đổi này với kubectl:

kubectl apply -f containerized-webserver.yaml

Kiểm tra trạng thái của webserver-statefulset trên trang Workloads:

Trạng thái "Các gói đang chờ xử lý" là điều bình thường trong vài phút sau khi chạy kubectl apply. Tiếp tục khi trạng thái ghi "OK".

5. Hiển thị cụm với trình cân bằng tải

Tại thời điểm này, cụm Kubenetes của chúng ta cần phải chạy máy chủ web dưới dạng tập hợp trạng thái, nhưng chúng ta cũng cần hiển thị vùng chứa của cụm này cho một trình cân bằng tải để truy cập vào máy chủ web qua địa chỉ IP bên ngoài. Trong shell Cloud, hãy tạo một tệp mới có tên là loadbalancer.yaml với nội dung sau:

loadbalancer.yaml

apiVersion: v1
kind: Service
metadata:
  name: webserver-loadbalancer
spec:
  type: LoadBalancer
  selector:
    app: webserver-statefulset
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

Và giờ hãy áp dụng với kubectl:

kubectl apply -f loadbalancer.yaml

Chúng ta có thể sử dụng kubectl để truy xuất địa chỉ IP bên ngoài của dịch vụ webserver-container:

kubectl get services

Nếu nhập địa chỉ IP ngoài vào trình duyệt, chúng ta sẽ nhận được cùng màn hình chào mừng nginx mặc định như trước đây:

5c08e3b2bd17e03.pngS

Chúng tôi đã làm xong! Máy chủ web GCE của chúng tôi hiện đã được lưu trữ trên Kubernetes! Tuyệt vời!

6. Giám sát Stackdriver

Chỉ số

Là một dịch vụ Kubernetes được quản lý, Kubernetes Engine được đo lường tự động cho cả hoạt động ghi nhật ký và giám sát bằng Stackdriver. Hãy cùng xem một số chỉ số mà Stackdriver tự động thu thập.

Nhấp vào đường liên kết Giám sát trên trình đơn sản phẩm. Việc truy cập vào mục này lần đầu tiên từ dự án có thể mất vài phút trong khi thiết lập không gian làm việc của bạn.

Sau khi tải, hãy di chuột qua mục Tài nguyên trong ngăn bên trái rồi chọn "Kubernetes Engine MỚI" khỏi trình đơn.

4e62c8ad3f2b3fe9.pngS.

Mỗi hàng trong trang tổng quan hiển thị ở đây đại diện cho một tài nguyên Kubernetes. Bạn có thể chuyển đổi giữa chế độ xem cơ sở hạ tầng, khối lượng công việc hoặc dịch vụ bằng các đường liên kết ở phía trên trang tổng quan.

62066a9251d19843.pngS

Trong chế độ xem Workloads, hãy mở rộng "my-gke-cluster" và xem chi tiết về mặc định > webserver-statefulset > webserver-statefulset-0 > webserver-statefulset. Nhấp vào vùng chứa bộ có trạng thái máy chủ web. Tại đây, bạn sẽ thấy một vài chỉ số có sẵn do Stackdriver ghi lại, bao gồm cả mức sử dụng bộ nhớ và mức sử dụng CPU.

d054778de301429e.png

Các biểu đồ hiển thị trong trang tổng quan này là những biểu đồ mà chúng ta có thể sử dụng để tạo trang tổng quan tùy chỉnh.

Trang tổng quan tuỳ chỉnh

Stackdriver cho phép chúng tôi tạo các trang tổng quan tùy chỉnh mà chúng tôi có thể dùng để sắp xếp các biểu đồ và đồ thị cho mọi dữ liệu chỉ số có sẵn. Hãy tạo trang tổng quan tùy chỉnh để xem nhanh một số chỉ số của máy chủ web.

Trên ngăn bên trái, hãy di chuột qua Trang tổng quan, sau đó nhấp vào Tạo trang tổng quan.

56a0513efe60de3e.png.

Giờ đây, khi đã có trang tổng quan trống, chúng ta có thể thêm các chỉ số mà chúng tôi muốn theo dõi. Hãy đặt một tên hữu ích cho Trang tổng quan không có tiêu đề như "Vùng chứa máy chủ web của tôi" và nhấp vào "Thêm biểu đồ" ở trên cùng bên phải:

bd66ba91f3125028.png

Bạn có nhớ các chỉ số có sẵn không? Hãy thêm một biểu đồ về mức sử dụng CPU của vùng chứa. Trong trường Tiêu đề biểu đồ, hãy nhập "CPU Utilization" (Sử dụng CPU). Trong hộp "Find resource type and metric" (Tìm chỉ số và loại tài nguyên), nhập request_utilization rồi chọn mức sử dụng yêu cầu CPU trong danh sách đã lọc. Lựa chọn này sẽ giúp chúng tôi điền sẵn cả trường Loại tài nguyên và trường Chỉ số.

Tiếp theo, chúng ta sẽ cần lọc theo project_id (nếu có nhiều dự án) và Container_name. Trong hộp Bộ lọc, hãy nhập project_id, chọn dự án từ danh sách đã lọc rồi chọn dự án của bạn trong trường Giá trị. Chúng ta cũng cần lọc theo Container_name. Trong hộp Bộ lọc, hãy nhập container_name, chọn từ danh sách đã lọc rồi chọn webserver-statefulset trong trường Giá trị. Nhấp vào Lưu.

Giờ đây, chúng ta đã có một trang tổng quan với biểu đồ đầu tiên.

3d3d45e4357454e0.pngs

7. Chính sách về cảnh báo và kiểm tra thời gian hoạt động

Với Stackdriver, chúng tôi có thể thiết lập cảnh báo để thông báo cho chúng tôi khi có bất kỳ chỉ số nào đạt đến bất kỳ giá trị ngưỡng nào mà chúng tôi chỉ định. Ví dụ: chúng ta có thể yêu cầu Stackdriver gửi email cho chúng tôi khi mức sử dụng CPU ở bước cuối cùng vượt quá một ngưỡng nhất định trong một khoảng thời gian dài. Điều này có thể cho thấy ứng dụng của chúng ta có vấn đề. Để minh hoạ các cảnh báo này trông như thế nào, hãy thiết lập tính năng kiểm tra thời gian hoạt động rồi mô phỏng một sự cố ngừng dịch vụ.

Trong ngăn bên trái, chọn Uptime Checks (Kiểm tra thời gian hoạt động) rồi chọn Uptime Checks Overview (Tổng quan về quá trình kiểm tra thời gian hoạt động):

49368e5700274cf2.png.

Như đề xuất trên trang Kiểm tra thời gian hoạt động, hãy thiết lập quy trình kiểm tra thời gian hoạt động đầu tiên. Nhấp vào nút Thêm hoạt động kiểm tra thời gian hoạt động ở phía trên cùng bên phải của trang.

d884560f91011009.png

Trong biểu mẫu tiến hành, hãy nhập "Endpoint Uptime" (Thời gian hoạt động của thiết bị đầu cuối) làm tiêu đề và địa chỉ IP ngoài của trình cân bằng tải làm tên máy chủ.

568a8f1e27ae8417.pngS

Nhấp vào Lưu và bạn sẽ được nhắc tạo một Chính sách cảnh báo kèm theo:

f89d53a106a709f4.png

Nhấp vào Tạo chính sách thông báo.

Đặt tên là "Chính sách thời gian hoạt động thiết bị đầu cuối". Trong mục Cấu hình, hãy đặt "Điều kiện kích hoạt nếu" đến "Loạt video vi phạm bất cứ lúc nào" rồi nhấp vào lưu.

74609849348bd03e.pngs

Chúng tôi vẫn chưa hoàn tất. Tiếp theo, chúng tôi sẽ chỉ định một Kênh thông báo để chúng tôi được thông báo khi chính sách cảnh báo của chúng tôi bị vi phạm. Trong trình đơn Loại kênh thông báo thả xuống, hãy chọn Email, theo sau là địa chỉ email hợp lệ.

44c474e28a497659.pngS

Nhấp vào Thêm biểu tượng thông báo. Cuối cùng, ở cuối biểu mẫu, hãy đặt tên cho chính sách là "Thời gian hoạt động của ứng dụng web" và nhấp vào Lưu.

Để xem cảnh báo sẽ trông như thế nào, trong Bảng điều khiển Cloud, hãy mở Cloud Shell một lần nữa. Lệnh sau đây sẽ dừng chạy dịch vụ nginx trong nhóm máy chủ web của chúng tôi:

kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx -s stop"

Sau vài phút, bạn sẽ nhận được email thông báo về sự cố ngừng dịch vụ:

808ac1d75ce3681f.png.

Hãy huỷ thao tác đó. Hãy quay lại Cloud Shell, hãy khởi động lại nginx:

kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx"

Sau vài phút , bạn sẽ nhận được email Stackdriver khác, lần này với tin tốt hơn trước đây:

5b8262fbbc4877c.png.

8. Dọn dẹp

Giờ đây, khi chúng ta đã di chuyển từ GCE sang GKE bằng Migrate cho Anthos, hãy dọn dẹp dự án của mình cho tất cả các tài nguyên chúng ta đã tạo.

Xoá dự án

Nếu muốn, bạn có thể xoá toàn bộ dự án. Trong Bảng điều khiển GCP, hãy chuyển đến trang Cloud Resource Manager (Trình quản lý tài nguyên trên đám mây):

Trong danh sách dự án, hãy chọn dự án mà chúng ta đang xử lý rồi nhấp vào Xoá. Bạn sẽ được nhắc nhập mã dự án. Nhập mật khẩu và nhấp vào Tắt.

Nếu bạn muốn xoá từng thành phần, hãy chuyển sang phần tiếp theo.

Stackdriver

Trang tổng quan

Từ trang tổng quan của bạn, hãy nhấp vào biểu tượng cài đặt dc259295eb33cb42.png ở đầu trang và chọn Xóa trang tổng quan.

Chính sách cảnh báo

Trên trang Chính sách, hãy chọn Xoá trong trình đơn Thao tác 2ef75d82e76accaa.pngS ở bên phải cho từng chính sách bạn đã tạo.

Kiểm tra thời gian hoạt động

Trên trang Kiểm tra thời gian hoạt động, hãy chọn Xoá trong trình đơn Thao tác ở bên phải của mỗi lượt kiểm tra bạn đã tạo.

GCE và Kubernetes

Phiên bản Google Compute Engine

gcloud compute instances delete webserver --zone=us-central1-a

Cụm Kubernetes (bao gồm Di chuyển cho Anthos, nhóm có trạng thái và dịch vụ cân bằng tải)

gcloud container clusters delete my-gke-cluster --zone=us-central1-a

Đĩa

Tập hợp trạng thái của chúng ta sử dụng ổ đĩa chúng ta đã tạo. Sử dụng các thao tác sau để truy xuất tên:

gcloud compute disks list --filter=webserver

Sử dụng tên đĩa của bạn thay cho tên đĩa của tôi, xóa tên đĩa bằng:

gcloud compute disks delete vls-690d-webserver --zone=us-central1-a

Đã xoá tất cả dự án!

9. Xin chúc mừng!

Bạn làm tốt lắm! Bạn đã di chuyển máy chủ web từ một phiên bản GCE sang một cụm Kubernetes bằng cách sử dụng Migrate cho Anthos.

Nội dung đã đề cập

  • Chúng tôi đã di chuyển một máy chủ web từ GCE sang một cụm Kubernetes bằng cách sử dụng Migrate cho Anthos
  • Chúng tôi đã mở máy chủ web có trạng thái được thiết lập với mọi người bằng cách tiết lộ máy chủ đó thông qua dịch vụ cân bằng tải của Kubernetes.
  • Chúng tôi đã bật Stackdriver và tạo một trang tổng quan tuỳ chỉnh
  • Chúng tôi đã định cấu hình tính năng kiểm tra thời gian hoạt động cùng với chính sách cảnh báo để cho chúng tôi biết khi nào máy chủ web của chúng tôi ngừng hoạt động