Google Compute Engine

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 เริ่มจากสิ่งดีๆ ต่อไปนี้

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

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