Google Compute Engine

1. Giới thiệu

Chào tất cả các bạn, cảm ơn các bạn đã đến tham dự sự kiện hôm nay! Bạn đã sẵn sàng tìm hiểu về Google Compute Engine chưa?

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

Bạn sẽ tạo các phiên bản Compute Engine, triển khai nginx và cuối cùng là đặt một bộ cân bằng tải mạng ở phía trước. Bạn có thể tạo một phiên bản Compute Engine từ bảng điều khiển đồ hoạ hoặc từ 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 của Google. Công cụ và quy trình làm việc được cung cấp cho phép mở rộng quy mô từ các phiên bản đơn lẻ đến điện toán đám mây toàn cầu, cân bằng tải.

Các VM này khởi động nhanh, có bộ nhớ ổ đĩa lưu trữ dài lâu 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 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 sử dụng (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow, v.v.).

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

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một 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ự mà các API của Google không 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 trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. 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 (thường được xác định là PROJECT_ID). Vì vậy, nếu không thích mã này, bạn có thể tạo một mã ngẫu nhiên khác hoặc thử mã của riêng mình để xem mã đó có dùng được hay không. Sau đó, mã này sẽ "đóng băng" sau khi dự án được tạo.
  • Có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này, hãy làm theo mọi hướng dẫn "dọn dẹp" ở 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í trị giá 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 trang bị tất cả các công cụ phát triển mà bạn cần. Nền tảng này cung cấp một thư mục chính có dung lượng 5 GB và chạy trong Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Điều này có nghĩa là bạn chỉ cần một trình duyệt (có, trình duyệt này hoạt động trên Chromebook) cho lớp học lập trình này.

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

1067942a9a93f70.png

Screen Shot 2017-06-14 at 10.13.43 PM.png

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

gcloud auth list

Đầu ra của lệnh

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

Đầu ra của lệnh

[core]
project = <PROJECT_ID>

Nếu vì lý do nào đó mà dự án chưa được thiết lập, bạn chỉ cần đưa ra lệnh sau:

gcloud config set project <PROJECT_ID>

Bạn đang tìm PROJECT_ID? Kiểm tra mã nhận dạng bạn đã dùng trong các bước thiết lập hoặc tìm mã nhận dạng đó trong trang tổng quan của Cloud Console:

cc3895eeac80db2c.png

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

echo $GOOGLE_CLOUD_PROJECT

Đầu ra của lệnh

<PROJECT_ID>
  1. Cuối cùng, hãy đặ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 múi giờ khác nhau. Để biết thêm thông tin, hãy xem phần Khu vực và vùng.

3. Tạo một phiên bản 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 thao tác tại đây bằ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 có 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 vì đây là thông tin quan trọng sau này.

Phiên bản 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 phiên bản đề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 phiên bản bằng cách sử dụng cờ --zone hoặc bạn có thể đặt một vùng mặc định (như chúng ta đã làm trong quá trình thiết lập ban đầu) và bỏ qua cờ --zone.
  • Hình ảnh Debian GNU/Linux 9 (stretch) 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.
  • n1-standard-1 loại máy. Bạn có thể chọn một loại máy khác, chẳng hạn 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 phiên bản; ổ đĩa này sẽ tự động được đính kèm vào phiên bản.

Chạy gcloud compute instances create --help để xem tất cả các lựa 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 truy cập vào một số ít cổng. Vì chúng ta sẽ sớm cài đặt Nginx, nên trước tiên, hãy bậ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 là 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 thực hiện các 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ả các giá trị mặc định và tất cả các lựa chọn có sẵn, bao gồm cả khả năng áp dụng các quy tắc tường lửa dựa trên thẻ.

5. SSH vào phiên bản

Để SSH vào phiên bản qua 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 quá trình phát hành chính thức, hãy nhớ nhập một cụm mật khẩu :)

Ngoài ra, bạn cũng có thể SSH vào phiên bản này ngay từ bảng điều khiển ( console.cloud.google.com) bằng cách chuyển đến Compute Engine > Phiên bản máy ảo rồi nhấp vào SSH.

bfbc03997a41946e.png

6. Cài đặt Nginx

Đăng nhập vào myinstance (thực thể mới tạo) rồi cài đặt nginx:

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

Kiểm tra xem máy chủ có đang chạy hay không bằng cách sử dụng curl từ myinstance:

$ 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 địa chỉ IP ngoài cho phiên bản của bạn bằng cách liệt kê các phiên bản thông qua giao diện người dùng trên web:

dcc4e56e82ba2603.png

Đảm bảo bạn thoát khỏi SSH và chạy lệnh này 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 đó, hãy chuyển đến http://EXTERNAL_IP/, trong đó EXTERNAL_IP là IP công khai của myinstance và bạn sẽ thấy trang nginx:

49b52b9354041f3b.png

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

Thay vì thiết lập phiên bản mỗi lần, bạn có thể sử dụng một tập lệnh khởi động để khởi chạy phiên bản khi khởi động.

Tạo một tệp có tên là startup.sh với nội dung sau (bạn có thể dùng trình chỉnh sửa văn bản mà mình yêu thích: 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 đến http://EXTERNAL_IP/ và bạn sẽ thấy trang chủ mới. Nếu trang không xuất hiện ngay, hãy thử lại sau vài giây, có thể máy chủ 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 Mẫu phiên bản. Sau khi tạo một mẫu thực thể, bạn có thể tạo một 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 phiên bản 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 tôi có một điểm truy cập duy nhất vào tất cả các phiên bản trong một nhóm và cần thiết cho việc cân bằng tải trong các bước tiếp theo.

$ 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 phiên bản 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 phiên bản máy ảo có tên bắt đầu bằng nginx-.

Lúc này, bạn sẽ thấy tất cả các thực thể đã 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 một Trình cân bằng tải mạng

Có một số loại bộ 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 mạng theo khu vực nhắm đến nhóm phiên bản của chúng ta:

$ 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 vào bộ cân bằng tải từ trình duyệt http://IP_ADDRESS/, trong đó IP_ADDRESS là địa chỉ xuất hiện khi bạn chạy lệnh trước đó.

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

10. Dọn dẹp Cụm

Đừng quên tắt cụm của bạn, nếu không, chúng sẽ tiếp tục chạy và tích luỹ chi phí. Các lệnh sau đây sẽ xoá các phiên bản Google Compute Engine, Nhóm phiên bản, Nhóm nhắm mục tiêu và Bộ 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 về Compute Engine này!

Nhiều tính năng khác của Compute Engine

Google Compute Engine có nhiều tính năng. Bạn có thể muốn tìm hiểu kỹ một số vấn đề sau :

Google Kubernetes Engine

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

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