Google Compute Engine

Google Compute Engine

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ มี.ค. 25, 2022
account_circleเขียนโดย Googler

1 บทนำ

สวัสดีทุกคน ขอขอบคุณที่มาฟังในวันนี้ พร้อมเรียนรู้เกี่ยวกับ Google Compute Engine แล้วหรือยัง

ใน Codelab นี้ เราจะมาดูการทำงานของ Compute Engine ผ่านแอปพลิเคชันตัวอย่างสำหรับ Guestbook

คุณจะได้สร้างอินสแตนซ์ Compute Engine, ทำให้ nginx ใช้งานได้ และสุดท้ายต้องใส่ตัวจัดสรรภาระงานเครือข่ายไว้ด้านหน้าสุด คุณสามารถสร้างอินสแตนซ์ Compute Engine จากคอนโซลแบบกราฟิกหรือจากบรรทัดคำสั่งก็ได้ ห้องทดลองนี้จะแนะนำวิธีดำเนินการโดยใช้บรรทัดคำสั่ง

ComputeEngine_128px.png

Google Compute Engine มีเครื่องเสมือนที่ทำงานในศูนย์ข้อมูลของ Google ซึ่งเชื่อมต่อกับเครือข่ายไฟเบอร์ทั่วโลกของตน เครื่องมือและเวิร์กโฟลว์ที่นำเสนอช่วยให้คุณปรับขนาดจากอินสแตนซ์เดี่ยวไปยังการประมวลผลแบบคลาวด์ (Cloud Computing) ทั่วโลกได้

VM เหล่านี้เปิดเครื่องได้เร็ว มาพร้อมกับพื้นที่เก็บข้อมูลดิสก์ถาวร และให้ประสิทธิภาพที่สม่ำเสมอ เครื่องจักรมีหลายประเภทให้เลือก รวมถึงขนาดที่กำหนดไว้ล่วงหน้าและยังสามารถสร้างด้วยประเภทเครื่องที่กำหนดเอง ซึ่งปรับให้เหมาะกับความต้องการเฉพาะของคุณ

สุดท้าย เครื่องเสมือน Compute Engine ยังเป็นเทคโนโลยีที่ผลิตภัณฑ์ Google Cloud อื่นๆ อีกหลายอย่างใช้กัน (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow เป็นต้น)

2 การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้และคุณอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งปกติระบุไว้ว่าเป็น PROJECT_ID) ดังนั้นหากไม่ชอบ ให้สร้างรหัสแบบสุ่มขึ้นมาอีกรหัสหนึ่ง หรือคุณจะลองใช้รหัสโปรเจ็กต์ของคุณเองแล้วดูว่ารหัสโปรเจ็กต์พร้อมใช้งานหรือไม่ แล้วก็ "แช่แข็ง" หลังจากสร้างโปรเจ็กต์แล้ว
  • มีค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

Google Cloud Shell

แม้ว่า Google Cloud และ Compute Engine จะทำงานจากระยะไกลได้จากแล็ปท็อป แต่ใน Codelab นี้ เราจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

เครื่องเสมือนแบบ Debian นี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องใน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก ซึ่งหมายความว่าสิ่งที่คุณต้องมีสำหรับ Codelab นี้คือเบราว์เซอร์ (ใช่แล้ว ทั้งหมดนี้ทำงานได้บน Chromebook)

  1. หากต้องการเปิดใช้งาน Cloud Shell จาก Cloud Console เพียงคลิกเปิดใช้งาน Cloud Shell b125d9eb26a46cc5.png (จะใช้เวลาเพียงไม่นานในการจัดสรรและเชื่อมต่อกับสภาพแวดล้อม)

1067942a9a93f70.png

Screen Shot 14-06-2017 เวลา 22.13.43 น.

เมื่อเชื่อมต่อกับ Cloud Shell คุณควรเห็นว่าตนเองผ่านการตรวจสอบสิทธิ์แล้วและโปรเจ็กต์ได้รับการตั้งค่าเป็น PROJECT_ID แล้ว

gcloud auth list

เอาต์พุตจากคำสั่ง

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

เอาต์พุตจากคำสั่ง

[core]
project = <PROJECT_ID>

หากโปรเจ็กต์ไม่ได้ตั้งค่าไว้ด้วยเหตุผลบางประการ ให้ใช้คำสั่งต่อไปนี้

gcloud config set project <PROJECT_ID>

กำลังมองหา PROJECT_ID ของคุณอยู่ใช่ไหม ตรวจสอบรหัสที่คุณใช้ในขั้นตอนการตั้งค่าหรือดูในแดชบอร์ด Cloud Console

cc3895eeac80db2c.png

Cloud Shell ยังตั้งค่าตัวแปรสภาพแวดล้อมโดยค่าเริ่มต้นด้วย ซึ่งอาจเป็นประโยชน์เมื่อคุณเรียกใช้คำสั่งในอนาคต

echo $GOOGLE_CLOUD_PROJECT

เอาต์พุตจากคำสั่ง

<PROJECT_ID>
  1. สุดท้าย ให้ตั้งค่าโซนและการกำหนดค่าโปรเจ็กต์เริ่มต้น
gcloud config set compute/zone us-central1-f

คุณเลือกโซนต่างๆ ได้หลากหลาย ดูข้อมูลเพิ่มเติมได้ที่ภูมิภาคและ โซน

3 สร้างอินสแตนซ์ Compute Engine

เราจะใช้บรรทัดคำสั่ง gcloud ใน Codelab นี้ตามที่ได้แจ้งไว้ก่อนหน้านี้ คุณจะดำเนินการทุกอย่างเสร็จสิ้นได้โดยใช้คอนโซล (อยู่ที่ console.cloud.google.com)

ขั้นแรกให้สร้างอินสแตนซ์ที่มีการตั้งค่าเริ่มต้นก่อน :

$ 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

จดบันทึก EXTERNAL_IP ซึ่งเป็นเรื่องที่สำคัญในภายหลัง

อินสแตนซ์จะสร้างขึ้นโดยใช้ค่าเริ่มต้นจำนวนหนึ่ง :

  • โซนที่เลือก อินสแตนซ์ทั้งหมดจะอยู่ในโซน คุณจะเลือกโซนในเวลาที่สร้างอินสแตนซ์ได้โดยใช้แฟล็ก --zone หรือจะตั้งค่าโซนเริ่มต้น (แบบที่เราทำในการตั้งค่าครั้งแรก) และข้ามแฟล็ก --zone ก็ได้
  • รูปภาพ Debian GNU/Linux 9 (Stretch) ล่าสุด หากใช้รูปภาพที่กำหนดเองของคุณเอง โปรดระบุชื่อรูปภาพที่นี่แทน เช่น --image my-own-image
  • ประเภทเครื่อง n1-standard-1 คุณเลือกเครื่องประเภทอื่นได้ เช่น n1-highmem-4 หรือ n1-highcpu-6 หากไม่มีประเภทเครื่องที่กำหนดไว้ล่วงหน้าตรงกับความต้องการของคุณ ให้ใช้ประเภทเครื่องที่กำหนดเอง
  • ดิสก์ถาวรรูทที่มีชื่อเดียวกันกับอินสแตนซ์ จะแนบดิสก์กับอินสแตนซ์โดยอัตโนมัติ

เรียกใช้ gcloud compute instances create --help เพื่อดูตัวเลือกทั้งหมดที่ใช้ได้

4 เปิดใช้ไฟร์วอลล์สำหรับพอร์ต 80

โดยค่าเริ่มต้น Google Cloud Platform จะอนุญาตการเข้าถึงพอร์ตเพียงไม่กี่รายการเท่านั้น เนื่องจากเราจะติดตั้ง Nginx เร็วๆ นี้ เราจึงขอเปิดใช้งานพอร์ต 80 ในการกำหนดค่าไฟร์วอลล์ก่อน

$ 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

การดำเนินการนี้จะสร้างกฎไฟร์วอลล์ชื่อ allow-80 ที่มีรายการเริ่มต้นของการบล็อกที่อยู่ IP ที่ได้รับอนุญาตให้ทำการเชื่อมต่อขาเข้า (--source-ranges) เป็น 0.0.0.0/0 (ทุกที่)

เรียกใช้ gcloud compute firewall-rules create --help เพื่อดูค่าเริ่มต้นและตัวเลือกทั้งหมดที่ใช้ได้ รวมถึงความสามารถในการใช้กฎของไฟร์วอลล์ตามแท็ก

5 SSH ไปยังอินสแตนซ์

วิธี SSH ไปยังอินสแตนซ์จากบรรทัดคำสั่ง (ยังคงมาจาก 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:~#

เท่านี้ก็เรียบร้อย ค่อนข้างง่าย (ในการใช้งานจริง โปรดตรวจสอบให้แน่ใจว่าคุณป้อนรหัสผ่าน :)

นอกจากนี้ คุณยังใช้ SSH เพื่อเข้าถึงอินสแตนซ์ได้โดยตรงจากคอนโซล ( console.cloud.google.com) โดยไปที่ Compute Engine > อินสแตนซ์ VM แล้วคลิก SSH

bfbc03997a41946e.png

6 ติดตั้ง Nginx

เข้าสู่ระบบ myinstance อินสแตนซ์ที่สร้างขึ้นใหม่และติดตั้ง nginx โดยใช้คำสั่งต่อไปนี้

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

ทดสอบว่าเซิร์ฟเวอร์กำลังทำงานโดยใช้ curl จาก 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>

ค้นหา IP ภายนอกสำหรับอินสแตนซ์โดยแสดงรายการอินสแตนซ์ผ่าน UI บนเว็บ ดังนี้

dcc4e56e82ba2603.png

ตรวจสอบว่าคุณออกจาก SSH และเรียกใช้คำสั่งนี้จาก 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

จากนั้นไปที่ http://EXTERNAL_IP/ โดยที่ EXTERNAL_IP คือ IP สาธารณะของ myinstance และคุณควรจะเห็นหน้า nginx ได้:

49b52b9354041f3b.png

7 สคริปต์เริ่มต้น

คุณใช้สคริปต์เริ่มต้นเพื่อเริ่มต้นอินสแตนซ์เมื่อเริ่มต้นทำงานแทนการตั้งค่าอินสแตนซ์ทุกครั้งได้

สร้างไฟล์ชื่อ startup.sh ที่มีเนื้อหาต่อไปนี้ (คุณสามารถใช้เครื่องมือแก้ไขข้อความที่ชื่นชอบได้: vim, nano หรือ 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

หากต้องการสร้างอินสแตนซ์ VM ใหม่ด้วยสคริปต์การเริ่มต้นนี้ เพียงพิมพ์ :

$ 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

เรียกดู http://EXTERNAL_IP/ แล้วคุณจะเห็นหน้าแรกที่อัปเดตแล้ว หากหน้าเว็บไม่แสดงขึ้น ให้ลองอีกครั้งทันทีหลังจากผ่านไป 2-3 วินาที โฮสต์อาจยังเริ่มต้น nginx อยู่

8 สร้างคลัสเตอร์ของเซิร์ฟเวอร์

หากต้องการสร้างคลัสเตอร์ของเซิร์ฟเวอร์ คุณต้องสร้างเทมเพลตอินสแตนซ์ก่อน เมื่อสร้างเทมเพลตอินสแตนซ์แล้ว คุณจะสร้างกลุ่มอินสแตนซ์เพื่อจัดการจำนวนอินสแตนซ์ที่จะสร้างได้

ขั้นแรก ให้สร้างเทมเพลตอินสแตนซ์โดยใช้สคริปต์เริ่มต้น ดังนี้

$ 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

ขั้นที่ 2 สร้างพูลเป้าหมาย พูลเป้าหมายช่วยให้เรามีจุดเข้าใช้งานเดียวไปยังอินสแตนซ์ทั้งหมดในกลุ่ม และจำเป็นสำหรับการจัดสรรภาระงานในขั้นตอนในอนาคต

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

สุดท้าย ให้สร้างกลุ่มอินสแตนซ์โดยใช้เทมเพลตดังนี้

$ 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

การดำเนินการนี้จะสร้างอินสแตนซ์ VM เพิ่มเติม 2 รายการที่มีชื่อที่ขึ้นต้นด้วย nginx-

ตอนนี้คุณควรจะเห็นอินสแตนซ์ทั้งหมดที่สร้างขึ้นแล้ว

$ 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 สร้างตัวจัดสรรภาระงานเครือข่าย

ตัวจัดสรรภาระงานใน Google Cloud Platform มีหลายประเภท ได้แก่

ลองสร้างตัวจัดสรรภาระงานเครือข่ายระดับภูมิภาคที่กําหนดเป้าหมายเป็นอินสแตนซ์ของเรากัน

$ 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

จากนั้นคุณจะไปที่ตัวจัดสรรภาระงานจากเบราว์เซอร์ http://IP_ADDRESS/ ได้ โดยที่ IP_ADDRESS คือที่อยู่ที่แสดงซึ่งเป็นผลมาจากการเรียกใช้คำสั่งก่อนหน้า

เนื่องจากช่วงเวลาดังกล่าว เราจะไม่สร้างตัวจัดสรรภาระงาน HTTP ในวันนี้

10 ล้างคลัสเตอร์

อย่าลืมปิดคลัสเตอร์ของคุณ ไม่เช่นนั้นคลัสเตอร์จะทำงานต่อและมีค่าใช้จ่ายเพิ่มเติม คำสั่งต่อไปนี้จะลบอินสแตนซ์ของ Google Compute Engine, อินสแตนซ์, กลุ่มเป้าหมาย และตัวจัดสรรภาระงาน

$ 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

คำสั่งแต่ละรายการข้างต้นควรขอให้คุณยืนยันการลบทรัพยากร

11 ขั้นตอนถัดไปคือ

ขอแสดงความยินดี คุณศึกษา Codelab ของ Compute Engine เสร็จสมบูรณ์แล้ว

ฟีเจอร์เพิ่มเติมของ Compute Engine

Google Compute Engine มีชุดฟีเจอร์มากมาย คุณอาจต้องการเจาะลึกเกี่ยวกับสิ่งเหล่านี้ :

Google Kubernetes Engine

Google Kubernetes Engine (GKE) เป็นข้อเสนอ Kubernetes ที่โฮสต์และจัดการครบวงจรของ Google Cloud มี Codelab มากมายที่จะช่วยคุณเริ่มต้นใช้งาน GKE เริ่มจากสิ่งดีๆ ต่อไปนี้

แสดงความคิดเห็น

  • โปรดสละเวลาสักครู่เพื่อทำแบบสำรวจสั้นๆ ของเรา