Google Compute Engine

1. บทนำ

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

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

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

ComputeEngine_128px.png

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

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 ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดแหล่งข้อมูลเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตามวิธีการ "ล้างข้อมูล" ที่ตอนท้ายของ Codelab ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

Google Cloud Shell

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

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

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

1067942a9a93f70.png

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

เมื่อเชื่อมต่อกับ 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บรรทัดคำสั่งในโค้ดแล็บนี้ ทุกอย่างที่ทำที่นี่สามารถทำได้โดยใช้คอนโซล (พร้อมใช้งานที่ 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 ไว้ ซึ่งจะมีความสำคัญในภายหลัง

ระบบจะสร้างอินสแตนซ์โดยใช้ค่าเริ่มต้นต่อไปนี้

เรียกใช้ 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 มีหลายประเภท ได้แก่

มาสร้าง Network Load Balancer ระดับภูมิภาคที่กำหนดเป้าหมายไปยังกลุ่มอินสแตนซ์กัน

$ 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 ได้ คุณอาจเริ่มต้นด้วยการดูวิดีโอนี้

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

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