1. Tổng quan
Việc viết lại hoặc tái thiết kế 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ể hoặc khả thi khi thực hiện theo cách thủ công. Migrate for Anthos có thể giúp hiện đại hoá các ứng dụng hiện có và chạy các ứng dụng đó 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 cách sử dụng Migrate for Anthos.
Kiến thức bạn sẽ học được
- Cách triển khai Migrate for Anthos trên một cụm Kubernetes
- Cách tạo một vùng chứa trong một tập hợp có trạng thái từ một phiên bản Compute Engine hiện có
- Cách triển khai vùng chứa vào Kubernetes và định cấu hình vùng chứa đó bằng một trình cân bằng tải
Bạn cần có
- Một dự án trên Google Cloud có thông tin thanh toán. Nếu chưa có, bạn sẽ phải tạo một tài khoản.
2. Thiết lập
Bạn có thể chạy hoàn toàn lớp học lập trình này trên Google Cloud Platform mà không cần cài đặt hoặc đị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 cần thiết trên dự án Google Cloud của bạn:
Tạo một 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 số cách để thực hiện việc này, nhưng để dễ sử dụng, chúng ta sẽ dùng Cloud Shell.
Trong Cloud Shell, hãy chạy lệnh 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 sau sẽ tạo một quy tắc tường lửa có tên là "default-allow-http" cho phép lưu lượng truy cập http vào mạng của chúng ta.
Khi bạn tạo thành công phiên bản, một bảng chứa thông tin chi tiết về phiên bản sẽ xuất hiện. Ghi lại IP ngoài – chúng ta sẽ cần thông tin này để xác minh rằng máy chủ web đang chạy sau này.

Sau khi phiên bản này hoạt động, 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 tôi, 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 địa chỉ IP bên ngoài của phiên bản 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:

Máy chủ web này sẽ đóng vai trò là ứng dụng web cũ mà chúng ta sẽ di chuyển sang Kubernetes bằng cách sử dụng Migrate for Anthos.
3. Cụm Kubernetes có Migrate for Anthos
Tiếp theo, chúng ta sẽ tạo một cụm GKE. Đây là nơi chúng ta sẽ di chuyển máy chủ web của công cụ tính toán. 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 chờ vài phút để lệnh này hoàn tất. Sau khi tạo cụm, bạn sẽ nhận được một số đầu ra có thông tin chi tiết về cụm:

Tiếp theo, hãy chuyển đến GCP Marketplace để triển khai Migrate for Anthos:

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

Giờ đây, bạn có thể triển khai Migrate for Anthos trên cụm Kubernetes. Khi quá trình triển khai hoàn tất, bạn sẽ thấy trạng thái "OK" trên trang Ứng dụng Kubernetes Engine:

4. Từ phiên bản điện toán đến tập hợp có trạng thái
Chúng tôi có một cụm Kubernetes đang chạy Migrate for Anthos, vì vậy, giờ đây chúng tôi có thể bắt đầu quy trình di chuyển. Để triển khai phiên bản điện toán của chúng ta vào một cụm Kubernetes, chúng ta sẽ tắt phiên bản Compute Engine để có thể chụp nhanh các ổ đĩa. Trước khi tiếp tục, hãy lưu ý mã nhận dạng phiên bản. Chúng ta sẽ cần thông tin này sau:
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ờ, khi phiên bản đã 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. Đừng quên chèn mã dự án và mã 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 của bạn đang ở trạng thái tắt
- Tạo ảnh chụp nhanh từ mỗi đĩa của phiên bản
- Tạo một ổ đĩa mới từ mỗi ảnh chụp nhanh
- Xoá ảnh chụp nhanh mà ứng dụng đã tạo
- Tạo một tệp YAML trong thư mục đang hoạt động để triển khai một tập hợp có trạng thái sẽ lưu trữ máy chủ web của bạn
Tệp yaml được tạo sẽ cung cấp một tập hợp có trạng thái trong cụm kubernetes của chúng tôi, cùng với các yêu cầu về ổ đĩa liên tục 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 tôi có thể áp dụng những thay đổi này bằng kubectl:
kubectl apply -f containerized-webserver.yaml
Kiểm tra trạng thái của webserver-statefulset trên trang Workloads (Tải):
Trạng thái "Các nhóm đang chờ xử lý" trong vài phút sau khi chạy kubectl apply là điều bình thường. Tiếp tục khi trạng thái hiển thị "OK".
5. Đưa cụm vào trình cân bằng tải
Tại thời điểm này, cụm Kubenetes của chúng ta sẽ chạy máy chủ web dưới dạng một tập hợp có trạng thái, nhưng chúng ta cũng cần phải hiển thị vùng chứa của máy chủ web cho một trình cân bằng tải để truy cập vào máy chủ web thông qua một địa chỉ IP ngoài. Trong Cloud Shell, hãy tạo một tệp mới có tên 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
Giờ hãy áp dụng bằng kubectl:
kubectl apply -f loadbalancer.yaml
Chúng ta có thể dùng kubectl để truy xuất địa chỉ IP 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ẽ thấy màn hình chào mừng mặc định của nginx như trước đây:

Chúng tôi đã làm được! 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 tự động đo lường cho cả hoạt động ghi nhật ký và giám sát bằng Stackdriver. Hãy xem một số chỉ số mà Stackdriver tự động thu thập cho chúng ta.
Nhấp vào đường liên kết Giám sát trên trình đơn sản phẩm. Lần đầu tiên truy cập vào đường liên kết này từ dự án của bạn có thể mất vài phút trong khi đường liên kết thiết lập không gian làm việc.
Sau khi tải, hãy di chuột qua Resources (Tài nguyên) trong ngăn bên trái rồi chọn "Kubernetes Engine NEW" (Kubernetes Engine MỚI) trong trình đơn.

Mỗi hàng trong trang tổng quan được trình bày ở đâ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.

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

Các biểu đồ xuất hiện trong trang tổng quan này là những biểu đồ mà chúng ta có thể dùng để tạo trang tổng quan tuỳ 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 tuỳ chỉnh mà chúng tôi có thể dùng để sắp xếp biểu đồ cho mọi dữ liệu chỉ số mà chúng tôi có. Hãy tạo một trang tổng quan tuỳ 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, rồi nhấp vào Tạo trang tổng quan.

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

Bạn có nhớ các chỉ số có sẵn không? Hãy thêm một biểu đồ cho mức sử dụng CPU của vùng chứa. Trong trường Tiêu đề biểu đồ, hãy nhập "Mức sử dụng CPU". Trong hộp "Tìm chỉ số và kiểu tài nguyên", hãy nhập request_utilization rồi chọn mức sử dụng yêu cầu CPU trong danh sách được lọc. Lựa chọn này sẽ điền sẵn cả trường Loại tài nguyên và Chỉ số cho chúng tôi.
Tiếp theo, chúng ta sẽ muố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 mã này trong 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ên này trong danh sách được 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.

7. Chính sách cảnh báo và kiểm tra thời gian hoạt động
Với Stackdriver, chúng ta có thể thiết lập cảnh báo để thông báo cho chúng ta khi bất kỳ chỉ số nào đạt đến bất kỳ giá trị ngưỡng nào mà chúng ta chỉ định. Ví dụ: chúng ta có thể để Stackdriver gửi email cho chúng ta khi mức sử dụng CPU từ 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 đang gặp vấn đề. Để minh hoạ cách các cảnh báo này xuất hiện, hãy thiết lập một kiểm tra thời gian hoạt động rồi mô phỏng một sự cố ngừng hoạt động.
Trong ngăn bên trái, hãy chọn Uptime Checks (Kiểm tra thời gian hoạt động), sau đó chọn Uptime Checks Overview (Tổng quan về hoạt động kiểm tra thời gian hoạt động):

Như trang Kiểm tra thời gian hoạt động đề xuất, hãy thiết lập chế độ kiểm tra thời gian hoạt động đầu tiên. Nhấp vào nút Thêm chế độ kiểm tra thời gian hoạt động ở trên cùng bên phải của trang.
Trong biểu mẫu tiếp theo, hãy nhập "Thời gian hoạt động của điểm cuối" làm tiêu đề và địa chỉ IP ngoài của bộ cân bằng tải làm tên máy chủ.

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

Nhấp vào Tạo chính sách cảnh báo.
Hãy đặt tên cho chính sách này là "Chính sách về thời gian hoạt động của điểm cuối". Trong phần Cấu hình, hãy đặt "Điều kiện kích hoạt nếu" thành "Mọi chuỗi thời gian vi phạm" rồi nhấp vào lưu.

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

Nhấp vào Add Notification Channel (Thêm kênh 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" rồi nhấp vào Lưu.
Để xem thông báo sẽ trông như thế nào, trong Cloud Console, hãy mở lại Cloud Shell. Lệnh sau đây sẽ dừng dịch vụ nginx đang chạy trong nhóm webserver của chúng ta:
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 hoạt động:

Hãy huỷ thao tác đó. 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 một email khác của Stackdriver, lần này có tin tốt hơn trước:

8. Dọn dẹp
Giờ đây, sau khi di chuyển từ GCE sang GKE bằng Migrate for Anthos, hãy dọn dẹp dự án của chúng ta khỏi tất cả các tài nguyên mà 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 thực hiện rồi nhấp vào Xoá. Bạn sẽ được nhắc nhập mã dự án. Nhập mật khẩu rồi 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
Trên trang tổng quan, hãy nhấp vào biểu tượng cài đặt
ở đầu trang rồi chọn Xoá 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
ở bên phải cho từng chính sách mà bạn đã tạo.
Kiểm tra thời gian hoạt động
Trên trang Uptime Checks (Kiểm tra thời gian hoạt động), hãy chọn Delete (Xoá) trong trình đơn Actions (Thao tác) ở bên phải của mỗi lần kiểm tra mà 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 giải pháp Di chuyển cho Anthos, tập hợp 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 có trạng thái của chúng ta đã sử dụng một ổ đĩa mà chúng ta tạo. Sử dụng mã sau để truy xuất tên:
gcloud compute disks list --filter=webserver
Xoá ổ đĩa bằng tên ổ đĩa của bạn thay vì tên ổ đĩa của tôi bằng lệnh:
gcloud compute disks delete vls-690d-webserver --zone=us-central1-a
Đã dọn dẹp xong!
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 for 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 Migrate for Anthos
- Chúng tôi đã mở máy chủ web có trạng thái cho mọi người bằng cách hiển thị máy chủ này thông qua dịch vụ bộ cân bằng tải 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 một chế độ kiểm tra thời gian hoạt động cùng với một chính sách cảnh báo để cho chúng tôi biết khi máy chủ web của chúng tôi ngừng hoạt động
