1. บทนำ
สวัสดีทุกคน ขอขอบคุณที่มาฟังในวันนี้ พร้อมเรียนรู้เกี่ยวกับ Google Compute Engine แล้วหรือยัง
ใน Codelab นี้ เราจะมาดูการทำงานของ Compute Engine ผ่านแอปพลิเคชันตัวอย่างสำหรับ Guestbook
คุณจะได้สร้างอินสแตนซ์ Compute Engine, ทำให้ nginx ใช้งานได้ และสุดท้ายต้องใส่ตัวจัดสรรภาระงานเครือข่ายไว้ด้านหน้าสุด คุณสามารถสร้างอินสแตนซ์ Compute Engine จากคอนโซลแบบกราฟิกหรือจากบรรทัดคำสั่งก็ได้ ห้องทดลองนี้จะแนะนำวิธีดำเนินการโดยใช้บรรทัดคำสั่ง
Google Compute Engine มีเครื่องเสมือนที่ทำงานในศูนย์ข้อมูลของ Google ซึ่งเชื่อมต่อกับเครือข่ายไฟเบอร์ทั่วโลกของตน เครื่องมือและเวิร์กโฟลว์ที่นำเสนอช่วยให้คุณปรับขนาดจากอินสแตนซ์เดี่ยวไปยังการประมวลผลแบบคลาวด์ (Cloud Computing) ทั่วโลกได้
VM เหล่านี้เปิดเครื่องได้เร็ว มาพร้อมกับพื้นที่เก็บข้อมูลดิสก์ถาวร และให้ประสิทธิภาพที่สม่ำเสมอ เครื่องจักรมีหลายประเภทให้เลือก รวมถึงขนาดที่กำหนดไว้ล่วงหน้าและยังสามารถสร้างด้วยประเภทเครื่องที่กำหนดเอง ซึ่งปรับให้เหมาะกับความต้องการเฉพาะของคุณ
สุดท้าย เครื่องเสมือน Compute Engine ยังเป็นเทคโนโลยีที่ผลิตภัณฑ์ Google Cloud อื่นๆ อีกหลายอย่างใช้กัน (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow เป็นต้น)
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้และคุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งปกติระบุไว้ว่าเป็น
PROJECT_ID
) ดังนั้นหากไม่ชอบ ให้สร้างรหัสแบบสุ่มขึ้นมาอีกรหัสหนึ่ง หรือคุณจะลองใช้รหัสโปรเจ็กต์ของคุณเองแล้วดูว่ารหัสโปรเจ็กต์พร้อมใช้งานหรือไม่ แล้วก็ "แช่แข็ง" หลังจากสร้างโปรเจ็กต์แล้ว - มีค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน 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)
- หากต้องการเปิดใช้งาน Cloud Shell จาก Cloud Console เพียงคลิกเปิดใช้งาน Cloud Shell (จะใช้เวลาเพียงไม่นานในการจัดสรรและเชื่อมต่อกับสภาพแวดล้อม)
เมื่อเชื่อมต่อกับ 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
Cloud Shell ยังตั้งค่าตัวแปรสภาพแวดล้อมโดยค่าเริ่มต้นด้วย ซึ่งอาจเป็นประโยชน์เมื่อคุณเรียกใช้คำสั่งในอนาคต
echo $GOOGLE_CLOUD_PROJECT
เอาต์พุตจากคำสั่ง
<PROJECT_ID>
- สุดท้าย ให้ตั้งค่าโซนและการกำหนดค่าโปรเจ็กต์เริ่มต้น
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
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 บนเว็บ ดังนี้
ตรวจสอบว่าคุณออกจาก 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 ได้:
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 มีหลายประเภท ได้แก่
- a L3 ตัวจัดสรรภาระงานของเครือข่าย
- ตัวจัดสรรภาระงาน HTTP(S) ของ L7
ลองสร้างตัวจัดสรรภาระงานเครือข่ายระดับภูมิภาคที่กําหนดเป้าหมายเป็นอินสแตนซ์ของเรากัน
$ 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 มีชุดฟีเจอร์มากมาย คุณอาจต้องการเจาะลึกเกี่ยวกับสิ่งเหล่านี้ :
- VM ที่ยอมให้มีการขัดจังหวะชั่วคราว - https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- โหนดของผู้เช่ารายเดียว - https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU และ TPU - https://cloud.google.com/compute/docs/gpus/add-gpus
- อินสแตนซ์ Windows - https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- ทรัพยากรการติดป้ายกำกับ - https://cloud.google.com/compute/docs/labeling-resources
- การย้ายข้อมูล VM ไปยัง Compute Engine - https://cloud.google.com/compute/docs/vm-migration/
Google Kubernetes Engine
Google Kubernetes Engine (GKE) เป็นข้อเสนอ Kubernetes ที่โฮสต์และจัดการครบวงจรของ Google Cloud มี Codelab มากมายที่จะช่วยคุณเริ่มต้นใช้งาน GKE เริ่มจากสิ่งดีๆ ต่อไปนี้
- Codelab ของ Google Kubernetes Engine - https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
แสดงความคิดเห็น
- โปรดสละเวลาสักครู่เพื่อทำแบบสำรวจสั้นๆ ของเรา