Google Compute Engine

1. Giới thiệu

Xin chào mọi người, cảm ơn các bạn đã tham gia hôm nay! Bạn đã sẵn sàng tìm hiểu về Google Compute Engine?

Trong lớp học lập trình này, chúng ta sẽ tìm hiểu cách Compute Engine hoạt động thông qua một ứng dụng lưu bút mẫu.

Bạn sẽ tạo các thực thể Compute Engine, triển khai nginx và cuối cùng là đặt một trình cân bằng tải mạng lên phía trước. Bạn có thể tạo một phiên bản Compute Engine qua bảng điều khiển đồ hoạ hoặc qua dòng lệnh. Phòng thí nghiệm này sẽ hướng dẫn bạn cách sử dụng dòng lệnh.

ComputeEngine_128px.png

Google Compute Engine cung cấp các máy ảo chạy trong các trung tâm dữ liệu của Google được kết nối với mạng cáp quang trên toàn thế giới. Bộ công cụ và quy trình công việc được cung cấp cho phép mở rộng quy mô từ từng phiên bản đơn lẻ sang điện toán đám mây cân bằng tải trên toàn cầu.

Những máy ảo này khởi động nhanh, đi kèm với bộ nhớ ổ đĩa bền vững và mang lại hiệu suất ổn định. Các máy này có nhiều cấu hình, bao gồm cả kích thước được xác định trước và cũng có thể được tạo bằng các Loại máy tuỳ chỉnh được tối ưu hoá cho nhu cầu cụ thể của bạn.

Cuối cùng, máy ảo Compute Engine cũng là công nghệ được một số sản phẩm khác của Google Cloud (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow, v.v.) sử dụng.

2. Thiết lập và yêu cầu

Thiết lập môi trường theo tiến độ riêng

  1. Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng và bạn có thể cập nhật chuỗi này bất cứ lúc nào.
  • Mã dự án phải là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (và mã này thường được xác định là PROJECT_ID). Vì vậy, nếu không thích, bạn có thể tạo một mã ngẫu nhiên khác hoặc bạn có thể thử mã của riêng mình để xem có mã này chưa. Sau đó, video sẽ được "đóng băng" sau khi tạo dự án.
  • Có giá trị thứ ba là Project Number (Số dự án) mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
  1. Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên/API trên Cloud. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên để bạn không phải chịu thanh toán ngoài hướng dẫn này, hãy làm theo mọi thao tác "dọn dẹp" hướng dẫn ở cuối lớp học lập trình. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.

Google Cloud Shell

Mặc dù bạn có thể vận hành Google Cloud và Compute Engine từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, chúng ta sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Đám mây.

Máy ảo dựa trên Debian này được tải tất cả các công cụ phát triển mà bạn cần. Dịch vụ này cung cấp thư mục gốc 5 GB ổn định và chạy trong Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Tức là tất cả những gì bạn cần để thực hiện lớp học lập trình này là một trình duyệt (vâng, trình duyệt này hoạt động trên Chromebook).

  1. Để kích hoạt Cloud Shell trong Cloud Console, bạn chỉ cần nhấp vào Kích hoạt Cloud Shell b125d9eb26a46cc5.png (chỉ mất vài phút để cấp phép và kết nối với môi trường).

1067942a9a93f70.pngS

Ảnh chụp màn hình lúc 10:13.43 chiều 14/6/2017.png

Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án đã được đặt thành PROJECT_ID.

gcloud auth list

Kết quả lệnh

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Kết quả lệnh

[core]
project = <PROJECT_ID>

Nếu vì lý do nào đó mà dự án không được thiết lập, chỉ cần phát hành lệnh sau:

gcloud config set project <PROJECT_ID>

Bạn đang tìm PROJECT_ID? Hãy xem mã nhận dạng bạn đã sử dụng ở các bước thiết lập hoặc tra cứu trong trang tổng quan Cloud Console:

cc3895eeac80db2c.png

Cloud Shell cũng đặt một số biến môi trường theo mặc định. Điều này có thể hữu ích khi bạn chạy các lệnh sau này.

echo $GOOGLE_CLOUD_PROJECT

Kết quả lệnh

<PROJECT_ID>
  1. Cuối cùng, đặt cấu hình dự án và vùng mặc định.
gcloud config set compute/zone us-central1-f

Bạn có thể chọn nhiều vùng khác nhau. Để biết thêm thông tin, hãy xem Khu vực và Vùng.

3. Tạo một thực thể Compute Engine

Như đã thảo luận trước đó, chúng ta sẽ sử dụng dòng lệnh gcloud trong lớp học lập trình này. Bạn có thể thực hiện mọi thứ ở đây bằng cách sử dụng bảng điều khiển (có tại console.cloud.google.com).

Trước tiên, hãy tạo một phiên bản với chế độ cài đặt mặc định :

$ gcloud compute instances create myinstance
Created [...].
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Ghi lại EXTERNAL_IP – việc này rất quan trọng sau.

Thực thể này được tạo bằng một số giá trị mặc định :

  • Vùng mà bạn chọn. Tất cả các thực thể đều nằm trong một vùng. Bạn có thể chọn một vùng tại thời điểm tạo thực thể bằng cách sử dụng cờ --zone hoặc đặt một vùng mặc định (như chúng ta đã làm trong bước thiết lập ban đầu) và bỏ qua cờ --zone.
  • Hình ảnh Debian GNU/Linux 9 (căng) mới nhất. Nếu bạn đang sử dụng hình ảnh tuỳ chỉnh của riêng mình, hãy cung cấp tên hình ảnh tại đây. Ví dụ: --image my-own-image.
  • Loại máy n1-standard-1. Bạn có thể chọn một loại máy khác như n1-highmem-4 hoặc n1-highcpu-6. Nếu không có loại máy được xác định trước nào phù hợp với nhu cầu của bạn, hãy sử dụng loại máy tuỳ chỉnh.
  • Một ổ đĩa lưu trữ dài lâu gốc có cùng tên với thực thể; ổ đĩa sẽ tự động được gắn vào thực thể.

Chạy gcloud compute instances create --help để xem tất cả tuỳ chọn có sẵn.

4. Bật tường lửa cho Cổng 80

Theo mặc định, Google Cloud Platform chỉ cho phép ít quyền truy cập vào cổng. Do chúng ta sắp cài đặt Nginx – trước tiên, hãy kích hoạt cổng 80 trong cấu hình tường lửa.

$ gcloud compute firewall-rules create allow-80 --allow tcp:80
Created [...].
NAME: allow-80
NETWORK: default
DIRECTION: INGRESS
PRIORITY: 1000
ALLOW: tcp:80
DENY:
DISABLED: False

Thao tác này sẽ tạo một quy tắc tường lửa có tên allow-80. Quy tắc này có danh sách mặc định gồm các khối địa chỉ IP được phép tạo kết nối đến (--source-ranges) được đặt thành 0.0.0.0/0 (Mọi nơi).

Chạy gcloud compute firewall-rules create --help để xem tất cả chế độ mặc định và tuỳ chọn có sẵn, bao gồm cả khả năng áp dụng quy tắc tường lửa dựa trên thẻ.

5. SSH vào đối tượng

Để SSH vào thực thể máy ảo từ dòng lệnh (vẫn từ Cloud Shell) :

$ gcloud compute ssh myinstance
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts.
...

yourusername@myinstance:~#

Vậy là xong! khá dễ dàng. (Trong phiên bản chính thức, hãy đảm bảo bạn nhập cụm mật khẩu :)

Ngoài ra, bạn cũng có thể truy cập vào phiên bản SSH ngay trong bảng điều khiển ( console.cloud.google.com), bằng cách chuyển đến Compute Engine > VM Instances và nhấp vào SSH.

bfbc03997a41946e.png

6. Cài đặt Nginx

Đăng nhập vào myinstance (phiên bản mới tạo) và cài đặt nginx:

$ sudo su - 
# apt update
# apt install -y nginx
# service nginx start
# exit

Kiểm tra để đảm bảo máy chủ đang chạy bằng curl từ phiên bản của tôi:

$ curl -s localhost | grep nginx
<title>Welcome to nginx!</title>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
<a href="http://nginx.org/">nginx.org</a>.<br/>
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>

Tìm IP ngoài cho thực thể máy ảo bằng cách liệt kê các thực thể thông qua giao diện người dùng web:

dcc4e56e82ba2603.png

Đảm bảo bạn đã thoát khỏi SSH và chạy lệnh sau từ Cloud Shell:

$ gcloud compute instances list
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Sau đó, chuyển đến http://EXTERNAL_IP/, trong đó EXTERNAL_IP là IP công khai của myinstance và bạn sẽ có thể thấy trang nginx:

49b52b9354041f3b.png.

7. Tập lệnh khởi động

Thay vì thiết lập thực thể mỗi lần, bạn có thể dùng tập lệnh khởi động để khởi tạo thực thể đó khi khởi động.

Tạo một tệp có tên startup.sh với nội dung sau (bạn có thể sử dụng trình soạn thảo văn bản yêu thích của mình: vim, nano hoặc emacs):

#! /bin/bash
apt-get update
apt-get install -y nginx
service nginx start
sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html

Để tạo một phiên bản máy ảo mới bằng tập lệnh khởi động này, bạn chỉ cần nhập :

$ gcloud compute instances create nginx \
         --metadata-from-file startup-script=startup.sh 
Created [...].
NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Duyệt qua http://EXTERNAL_IP/ và bạn sẽ thấy trang chủ được cập nhật. Nếu trang không hiển thị, hãy thử lại ngay sau vài giây, thì có thể máy chủ lưu trữ vẫn đang khởi động nginx.

8. Tạo một cụm máy chủ

Để tạo một cụm máy chủ, trước tiên, bạn cần tạo một Instance Template (Mẫu phiên bản). Sau khi tạo mẫu thực thể, bạn có thể tạo nhóm thực thể để quản lý số lượng thực thể cần tạo.

Trước tiên, hãy tạo một mẫu thực thể bằng tập lệnh khởi động :

$ gcloud compute instance-templates create nginx-template \
         --metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00

Thứ hai, hãy tạo một nhóm mục tiêu. Nhóm mục tiêu cho phép chúng ta có một điểm truy cập duy nhất vào tất cả các thực thể trong một nhóm và cần thiết cho việc cân bằng tải trong các bước sau này.

$ gcloud compute target-pools create nginx-pool
Created [...].
NAME: nginx-pool
REGION: us-central1
SESSION_AFFINITY: NONE
BACKUP:
HEALTH_CHECKS:

Cuối cùng, hãy tạo một nhóm thực thể bằng mẫu:

$ gcloud compute instance-groups managed create nginx-group \
         --base-instance-name nginx \
         --size 2 \
         --template nginx-template \
         --target-pool nginx-pool
Created [...].
NAME: nginx-group
LOCATION: us-central1-f
SCOPE: zone
BASE_INSTANCE_NAME: nginx
SIZE: 0
TARGET_SIZE: 2
INSTANCE_TEMPLATE: nginx-template
AUTOSCALED: no

Thao tác này sẽ tạo thêm 2 thực thể máy ảo có tên có tiền tố là nginx-.

Bây giờ, bạn đã có thể xem tất cả các bản sao đã tạo!

$ gcloud compute instances list
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx-frpl
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx-ztg4
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

9. Tạo Trình cân bằng tải mạng

Có một số loại trình cân bằng tải trong Google Cloud Platform bao gồm :

Hãy tạo một trình cân bằng tải cho mạng khu vực để nhắm đến nhóm thực thể:

$ gcloud compute forwarding-rules create nginx-lb \
         --ports 80 \
         --target-pool nginx-pool
Created [...].

$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool

Sau đó, bạn có thể truy cập trình cân bằng tải từ trình duyệt http://IP_ADDRESS/, trong đó IP_ADDRESS là địa chỉ hiển thị sau khi chạy lệnh trước đó.

Do thời hạn, hôm nay chúng tôi sẽ không tạo trình cân bằng tải HTTP.

10. Dọn dẹp Cụm

Đừng quên tắt cụm, nếu không chúng sẽ tiếp tục hoạt động và tích luỹ chi phí. Các lệnh sau đây sẽ xoá các phiên bản Google Compute Engine, Instance Group, Nhắm mục tiêu và Trình cân bằng tải.

$ gcloud compute forwarding-rules delete nginx-lb

$ gcloud compute instance-groups managed delete nginx-group

$ gcloud compute target-pools delete nginx-pool

$ gcloud compute instance-templates delete nginx-template

$ gcloud compute instances delete nginx

$ gcloud compute instances delete myinstance

$ gcloud compute firewall-rules delete allow-80

Mỗi lệnh ở trên sẽ yêu cầu bạn xác nhận việc xoá tài nguyên.

11. Tiếp theo là gì?

Xin chúc mừng, bạn đã hoàn thành lớp học lập trình này về Compute Engine!

Các tính năng khác của Compute Engine

Google Compute Engine có một bộ tính năng phong phú. Bạn có thể muốn tìm hiểu sâu hơn về một số yếu tố sau :

Google Kubernetes Engine

Google Kubernetes Engine (GKE) là giải pháp Kubernetes được lưu trữ và quản lý toàn bộ do Google Cloud cung cấp. Có một số lớp học lập trình có thể giúp bạn bắt đầu sử dụng GKE. Dưới đây là cách hay để bắt đầu với :

Gửi ý kiến phản hồi cho chúng tôi

  • Vui lòng dành chút thời gian để hoàn thành bản khảo sát rất ngắn của chúng tôi