ซื้อบัญชี Google Cloud: ใช้ Cloud Scheduler เพื่อเปลี่ยนเครื่องเสมือน VM โดยอัตโนมัติเป็นประจำด้วยฟังก์ชันคลาวด์
ในการทำงานและการบำรุงรักษาระบบคลาวด์ประจำวันหลายทีมจะพบกับ "หลุมดำด้านงบประมาณ" ที่เจ็บปวด:
เซิร์ฟเวอร์ไม่ทำงาน
ตัวอย่างเช่นสภาพแวดล้อมการพัฒนาของบริษัทสภาพแวดล้อมการทดสอบหรือระบบรายงานภายในมักใช้ภายใน8ถึง10ชั่วโมงของชั่วโมงการทำงานในระหว่างวันเท่านั้นแต่เนื่องจากการดำเนินการและการบำรุงรักษาขี้เกียจเกินไปที่จะโยนหรือมักจะลืมปิดเครื่องหลังเลิกงานเซิร์ฟเวอร์เหล่านี้มักจะเปิดอย่างบ้าคลั่งในพื้นหลังตลอด24ชั่วโมง365วัน
ในโหมดการเรียกเก็บเงินของ Google Cloud (GCP) เครื่องเสมือน (Compute Engine) จะคำนวณเงินตามวินาทีและข้อกำหนดอินสแตนซ์ซึ่งหมายความว่า
หากคุณไม่ปิดเครื่องหลังเลิกงานค่าใช้จ่ายเซิร์ฟเวอร์ที่สูญเปล่าตลอดทั้งคืนอาจคิดเป็นมากกว่า60% ของบิลรายเดือนของคุณโดยตรง
。
วิธีการดั้งเดิมคือการเขียนสคริปต์เชลล์ที่ซับซ้อนพร้อมกับท้องถิ่น
Cron
กำหนดเวลางานแต่เมื่อเครื่องภายในถูกตัดการเชื่อมต่อหรือตัดไฟสคริปต์จะพลาด
ในระบบนิเวศสมัยใหม่ของ Google Cloud มีการผสมผสานสีทองแบบไม่ใช้เซิร์ฟเวอร์ที่หรูหรา:
ใช้ Cloud Scheduler (Cloud Scheduler) เพื่อทำงานร่วมกับ Cloud Functions (Cloud Functions)
。เปรียบเสมือน "ตู้สวิตช์ระบบคลาวด์" อัตโนมัติเต็มรูปแบบคุณจะต้องเขียนตารางเวลาเพียงไม่กี่บรรทัดจากนั้น Google จะช่วยให้คุณเปิดและปิดเซิร์ฟเวอร์ในไม่กี่วินาทีโดยไม่ต้องใช้เซิร์ฟเวอร์ใดๆในพื้นหลัง
วันนี้เราปฏิเสธสูตรการเทศนาอย่างเป็นทางการโดยเริ่มจากการต่อสู้จริงโดยตรงและนำคุณไปสู่แนวป้องกันประหยัดเงินระดับโรงงานขนาดใหญ่
ขั้นตอนแรก: การรื้อลึก "แบบจำลองโลกสามมิติ" ของสวิตช์จับเวลาบนคลาวด์
ก่อนที่จะเขียนโค้ดด้วยมือคุณต้องสร้างแบบจำลองทางกายภาพนี้สำหรับการทำงานและการบำรุงรักษาอัตโนมัติในใจของคุณทั้งชุดของสายการประกอบประกอบด้วยสามองค์ประกอบหลัก:
Cloud Scheduler: ตัวจับเวลาที่มีการจัดการอย่างสมบูรณ์ (เทียบเท่ากับ crontab บนคลาวด์) คุณใช้ไวยากรณ์ Linux Cron มาตรฐานเพื่อบอกว่า: "โทรหาฉันตอน9โมงเช้าและโทรหาฉันตอน8โมงเย็น" มันจะส่งสัญญาณออกตรงเวลาและคลิก
ผู้ส่งสารลับ (คิวข้อความ Pub/Sub): สถานีวิทยุอินทราเน็ตที่ปลอดภัยหลังจากนาฬิกาปลุกดังขึ้นคำสั่งง่ายๆ (เช่นสตาร์ทหรือสตาร์ท) จะถูกบรรจุและส่งไปยังสถานีวิทยุบางช่อง
หุ่นยนต์ไฟฟ้า (Cloud Functions): ฟังก์ชันที่ไม่มีเซิร์ฟเวอร์ที่มีน้ำหนักเบาของ Google โดยปกติจะอยู่เฉยๆ (ต้นทุน0) เมื่อได้ยินคำสั่งที่เกี่ยวข้องในสถานีวิทยุระบบจะ "เก็บศพ" ในพื้นหลังทันทีเป็นเวลา0.5วินาทีเรียกใช้ Google Cloud API เพื่อเปิดหรือปิดเครื่องเสมือนเป้าหมายด้วยคลิกเดียวจากนั้นทำลายทางกายภาพต่อไป
ขั้นตอนที่สอง: วันก่อนการต่อสู้จริง-เปิดตัวตนทางกฎหมายสำหรับหุ่นยนต์ (IAM)
ทำให้ Cloud Functi
ก่อนที่จะย้ายเซิร์ฟเวอร์เราต้องใช้ "หลักการอำนาจขั้นต่ำ" อย่างเฉียบขาดและให้ใบอนุญาตทำงานตามกฎหมายเพื่อป้องกันไม่ให้มีอำนาจมากเกินไปและทำร้ายทรัพย์สินหลักอื่นๆโดยไม่ได้ตั้งใจ
เข้าสู่คอนโซล GCP และไปที่ "IAM และการจัดการ"-> "บัญชีบริการ (บัญชีบริการ)"
คลิก "สร้างบัญชีบริการ" และตั้งชื่อว่า vm-timer-executor
บทบาทขั้นต่ำที่แม่นยำ: ในหน้าการกำหนดบทบาทให้ค้นหาและเลือก "Compute Instance Admin (v1)" (ผู้ดูแลระบบอินสแตนซ์เครื่องเสมือน) หมายเหตุ: สำหรับการรักษาความปลอดภัยที่เข้มงวดมากขึ้นคุณสามารถปรับแต่งบทบาทที่กำหนดเองซึ่งมีเพียง compute.instances.start และ compute.instances.stop
คลิกเสร็จสิ้น.
ขั้นตอนที่สาม: แบบฝึกหัดการต่อสู้จริง1-เขียนรหัสสวิตช์หลักของ Cloud Functions
เรามาถึงสนามรบคอมพิวเตอร์หลักเราต้องการเขียนโค้ด Node.js แบบเรียบง่ายเพื่อให้สามารถรับรหัสลับและให้คำแนะนำแก่เซิร์ฟเวอร์ได้
ค้นหาและเข้าสู่หน้า Cloud Functions (Cloud Functions) แล้วคลิก "สร้างฟังก์ชัน"
การตั้งค่าพื้นฐาน: ชื่อฟังก์ชัน: vm-auto-switcher 。ภูมิภาค: เลือกภูมิภาคที่ใกล้กับเครื่องเสมือนของคุณมากที่สุด (เช่น asia-east1ไต้หวัน) ประเภททริกเกอร์ (Trigger): เลือก "Cloud Pub/Sub" จากเมนูแบบเลื่อนลงคลิกเพื่อสร้างธีมใหม่ชื่อ vm-timer-topic 。
การปรับพารามิเตอร์รันไทม์: ขยาย "รันไทม์สร้างการเชื่อมต่อและการตั้งค่าความปลอดภัย" ด้านล่างในคอลัมน์บัญชีบริการบัญชีเริ่มต้นจะต้องถูกตัดออกและเราจะต้องเลือกขั้นตอนที่สองของ vm-timer-executor อย่างถูกต้อง
คลิกถัดไปเพื่อไปที่ตัวแก้ไขโค้ดการเลือกสภาพแวดล้อมการทำงาน
Node.js 20
(หรือภาษาใดๆที่คุณคุ้นเคย)
วางไว้
Index.js
รหัสทั้งหมดในนั้นถูกล้างและรหัสควบคุมฮาร์ดคอร์ของมาตรฐานสภาพแวดล้อมการผลิตของโรงงานขนาดใหญ่ต่อไปนี้วางไว้:
จาวาสคริปต์
Const Compute = require('@google-cloud/compute');
Const compute = new Compute();
Exports.manageVmStatus = async (cloudEvent) => {
// 1.บังคับปลดแพ็คสัญญาณวิทยุเข้ารหัสที่ส่งมาจากสถานี Pub/Sub
Const base64Data = cloudEvent.data.message.data;
Const jsonS
Tring = Buffer.from(base64Data, 'base64').toString();
Const payload = JSON.parse(jsonString);
// 2.ดึงภาพวาดการออกแบบอย่างแม่นยำ: คุณต้องการย้ายเครื่องไหน? คุณต้องการให้มันทำอะไร?
Const {zone, instanceName, action } = payload;
ถ้าไม่ใช่ Zone ||! InstanceName ||! การดำเนินการ) {
Console.error ('[รายงานข้อผิดพลาดจากภัยพิบัติ] การอ้างอิงหายไป! ต้องมี zone, instanceName และ action! ');
กลับ;
}
Const zoneObj = compute.zone(zone);
Const vm = zoneObj.vm(instanceName);
Console.log ('[การเปิดใช้งานการทำงานและการบำรุงรักษาอัตโนมัติ] กำลังพยายามดำเนินการ [${action}]...') บนเครื่องเสมือนที่อยู่ใน ${zone} [${instanceName}];
ลอง {
If (action.toLowerCase() === 'start') {
// ดำเนินการบูตด้วยปุ่มเดียว
Await vm.start();
Console.log ('[ความสำเร็จ] เครื่องเสมือน [${instanceName}] คำสั่งเริ่มต้นสำเร็จแล้วและกำลังตื่นขึ้นด้วยความเร็วเต็มที่! ');
} Else if (action.toLowerCase() === 'stop') {
// ดำเนินการปิดเครื่องอย่างปลอดภัยด้วยปุ่มเดียว
Await vm.stop();
Console.log ('[ความสำเร็จ] เครื่องเสมือน [${instanceName}] คำสั่งปิดเครื่องได้รับการออกเรียบร้อยแล้วและไฟดับก็เริ่มขึ้นอย่างปลอดภัย! ');
} ไม่เช่นนั้น {
Console.warn ('[คำเตือน] คำแนะนำการใช้งานที่ไม่รู้จัก: ${action} ฟังก์ชั่นนี้สนับสนุนเฉพาะ start หรือ stop เท่านั้น ');
}
} รับผิดชอบ (ข้อผิดพลาด) {
Console.error ('[ความล้มเหลวทางกายภาพ] พบข้อผิดพลาดระหว่างการดำเนินการ: ${error.message}');
}
};
วางไว้ข้างๆ
Package.json
แก้ไขเพื่อรวม Google อย่างเป็นทางการ
การพึ่งพาไลบรารี Compute:
จาวสคริปต์อ็อบเจ็กต์เนทเวิร์ก
{
"Dependencies": {
"@Google-cloud/compute": "^ 4.0.0",
"@Google-cloud/cloudevents-conformance": "^ 0.2.2"
}
}
แก้ไข "Entry point" ที่มุมขวาบนเป็น:
ManageVmStatus
。คลิก
"การปรับใช้ (Deploy)"
。
ขั้นตอนที่สี่: แบบฝึกหัดการต่อสู้จริง2-การกำหนดค่า Cloud Scheduler เชื่อมปืนเริ่มต้นเวลาตาย
หลังจากปรับใช้ฟังก์ชันแล้วจะเป็นเหมือนตัวแทนที่รอสัญญาณลับอย่างเงียบๆตอนนี้เรากำลังจะสร้างนาฬิกาปลุกบนคลาวด์สองตัวเครื่องหนึ่งรับผิดชอบในการเรียกให้เปิดในตอนเช้าและอีกเครื่องหนึ่งรับผิดชอบในการกระตุ้นให้นอนในเวลากลางคืน
ค้นหารายการ
Cloud Scheduler (คลาวด์กำหนดการงาน)
หน้าเพจ
1.นาฬิกาปลุก1: กำหนดค่าตั้งแต่วันจันทร์ถึงวันศุกร์เวลา08:30น. ในตอนเช้า
คลิก
"สร้างงาน (Create job)"
:
ชื่อ: cron-start-dev-vm 。
ความถี่ (Frequency): อินพุตนิพจน์ Linux Cron มาตรฐาน: 30 8 * * 1-5。 (แปล: ทริกเกอร์ทุกวันจันทร์ถึงวันศุกร์เวลา8:30น.)
โซนเวลา: เลือกโซนเวลาหลักในท้องถิ่นของคุณ (เช่นเวลาเซี่ยงไฮ้ประเทศจีน)
ประเภทเป้าหมาย: เลือก Pub/Sub 。
หัวข้อ: เลือก vm-timer-topic ที่เราเพิ่งสร้าง
ร่างกายข้อความ: นี่คือ Payload หลักของหุ่นยนต์และวางคำสั่ง JSON ต่อไปนี้อย่างถูกต้อง: JSON{ "zone": "asia-east1-a", "instanceName": "my-dev-workstation", "action": "start"}
คลิกสร้าง
2.นาฬิกาปลุก2: กำหนดค่าให้ปิดเครื่องเวลา20:30น. ในตอนเย็นตั้งแต่วันจันทร์ถึงวันศุกร์
คลิกอีกครั้งเพื่อสร้างงาน:
ชื่อ: cron-stop-dev-vm 。
ความถี่ (Frequency): อินพุต30 20 * * 1-5。 (แปล: ทริกเกอร์ทุกวันจันทร์ถึงวันศุกร์เวลา20:30น.)
ประเภทเป้าหมาย: Pub/Sub ธีมยังคงเป็น vm-timer-topic 。
ร่างกายข้อความ: เปลี่ยนการดำเนินการเป็นคำสั่งปิดระบบ: JSON{ "zone": "asia-east1-a", "instanceName": "my-dev-workst
Ation ", "action ":" stop "}
คลิกสร้างจนถึงขณะนี้ลวดหนามวงปิดที่เปิดและปิดโดยอัตโนมัติได้ถูกล็อคอย่างสมบูรณ์
ขั้นตอนที่5: ฉากที่เป็นพยานถึงปาฏิหาริย์-แบบฝึกหัดทดสอบด้วยตนเอง "การกดเนื้อ"
การกำหนดค่าสิ้นสุดลงเราต้องรออย่างโง่เขลาจนถึง8:30น. ในตอนเย็นเพื่อดูว่ามันไม่ได้ผลหรือไม่? การดำเนินงานและการบำรุงรักษาของ Dachang ไม่เคยเล่นการพนันด้วยโชคและเราได้ทำการ "ทดสอบการเร่งปฏิกิริยาเทียม" ในสถานที่โดยตรง
ตรวจสอบให้แน่ใจว่าเครื่องเสมือนของคุณชื่อ my-dev-workstation อยู่ในสถานะการทำงานสีเขียว
มาที่หน้ารายการ Cloud Scheduler 。
ค้นหางาน cron-stop-dev-vm ที่รับผิดชอบในการปิดเครื่องคลิกสามจุดทางด้านขวาและเลือก "Force run" โดยไม่ลังเล
ในขณะที่คลิก Cloud Scheduler จะบังคับให้ข้ามขีดจำกัดเวลาและส่งสัญญาณปิดเครื่องไปยัง Pub/Sub
ในเวลานี้คุณตัดกลับทันที
รายการเครื่องเสมือน Compute Engine
。คุณจะพบอย่างน่าอัศจรรย์ว่าไอคอนสถานะของเซิร์ฟเวอร์ที่เปิดไฟสีเขียวจะกลายเป็นสีเหลืองทันทีโดยไม่มีการแทรกแซงด้วยตนเอง
Stopping
หลังจากนั้นไม่กี่วินาทีมันจะกลายเป็นสีเทาอย่างสมบูรณ์
Terminated
(ปิด) สถานะไฮเบอร์เนต
ไปที่ฟังก์ชัน
Logs (บันทึก)
เมื่อมองไปที่หน้าจอขนาดใหญ่มีร่องรอยของโค้ดที่เราเพิ่งเขียนไว้อย่างชัดเจน:
[ความสำเร็จ] เครื่องเสมือน [my-dev-workstation] ออกคำสั่งปิดเครื่องสำเร็จและไฟดับก็เริ่มขึ้นอย่างปลอดภัย!
。
สำเร็จลุล่วงแล้ว! จากนั้นเครื่องนี้จะเหมือนกับคนงานที่ทำงานเป็นประจำเช็คอินและเปิดเครื่องและบังคับให้นอนหลับ
ขั้นตอนที่หก: ประวัติการหลีกเลี่ยงเลือดและน้ำตาของการทำงานและการบำรุงรักษาอัตโนมัติเชิงพาณิชย์
สถาปัตยกรรมแบบไม่ใช้เซิร์ฟเวอร์นี้ใช้งานได้ง่ายมากและผลการประหยัดเงินจะเกิดขึ้นทันทีแต่เพื่อที่จะอยู่รอดอย่างมั่นคงในสภาพแวดล้อมของตลาดระดับองค์กรที่แท้จริงในฐานะหัวหน้าสถาปนิกคุณต้องเสริมสร้างขอบเขตของแผนทันทีเพื่อป้องกันหลุมที่มองไม่เห็นสองหลุมต่อไปนี้:
1.อันตรายที่ซ่อนอยู่ของ "ข้อมูลดิสก์ท้องถิ่น" (หลุมเฉพาะของ GCP)
เมื่อมือใหม่หลายคนเปิดเครื่องเสมือนพวกเขาต้องการความเร็วในการอ่านและเขียนและจะติดตั้งในเครื่อง
SSD ท้องถิ่น (Local SSD)
หรือกำหนดค่าระบบเป็นดิสก์ที่ไม่ยั่งยืน
ภัยพิบัติ: ในตรรกะพื้นฐานของ GCP หากคุณเรียก vm.stop() เพื่อทำการปิดเครื่องทางกายภาพข้อมูลทั้งหมดใน Local SSD ที่ติดตั้งบนเครื่องนี้จะถูกลบออกจากฮาร์ดแวร์ทางกายภาพโดย Google ในขณะที่ไฟฟ้าดับลบออกเฉพาะข้อมูลที่ติดตั้ง Persistent Disk เท่านั้นที่สามารถเก็บไว้ได้หลังจากปิดเครื่อง
ข้อกำหนดการหลีกเลี่ยงหลุมของสถาปนิก: สำหรับเซิร์ฟเวอร์ใดๆที่ต้องการเข้าร่วมคิวสวิตช์ตามกำหนดเวลาห้ามจัดเก็บข้อมูลสำรองเพิ่มเติมโดยเด็ดขาด
Al SSD ข้อมูลหลักชั่วคราวตรวจสอบให้แน่ใจว่าคุณไปที่สินทรัพย์ Persistent Disk ทั้งหมด
2.ระวังการร่ำไห้ของ "สุนัขทำงานล่วงเวลาตอนดึก" (กลไกฟิวส์แบบมนุษย์)
ระบบอัตโนมัติเป็นแบบฮาร์ดคอร์เกินไปและบางครั้งก็นำมาซึ่งข้อเสนอแนะเชิงลบตัวอย่างเช่นในคืนวันศุกร์เวลา08:30น. นักพัฒนาทั้งกลุ่มกำลังเปลี่ยนข้อบกพร่องในเซิร์ฟเวอร์อย่างเมามันเพื่อให้ทันโครงการฉุกเฉินด้วยเหตุนี้ Cloud Scheduler จึงทุ่มเทอย่างมากและปิดเซิร์ฟเวอร์ด้วยคลิกเดียวเป็นผลให้ครึ่งหนึ่งของรหัสที่เขียนโดยนักพัฒนาถูกตัดการเชื่อมต่อโดยตรงและสูญเสียแพ็กเก็ตและทั้งกลุ่มก็พังทลายลงโดยตรง
การปรับแต่งแบบ humanized แบบฮาร์ดคอร์: อย่าปล่อย vm.stop() ในโค้ดแบบสุ่มสี่สุ่มห้า
วิธีแก้ปัญหาขั้นสูง: ก่อนที่รหัสปิดเครื่องจะถูกเรียกใช้ให้ฟังก์ชันทำการตรวจจับภายในขั้นตอนเดียว (เช่นการตรวจสอบการใช้งาน CPU ของเซิร์ฟเวอร์ปัจจุบันหรือจำนวนการเชื่อมต่ออินทราเน็ตผ่าน SSH หรือตัวบ่งชี้การตรวจสอบ)
หากพบว่าอัตราการเข้าพักของ CPU ยังคงมากกว่า20% (หมายความว่ามีคนทำการทดสอบความเครียดหรือทำงานล่วงเวลา) ฟังก์ชันจะส่งการแจ้งเตือนการบิน/Dingding โดยอัตโนมัติ: "หากมีการตรวจสอบสัญญาณของการทำงานล่วงเวลาการปิดเครื่องในช่วงดึกจะข้ามไปโดยอัตโนมัติและความล่าช้าจะเกิดขึ้นหลังจากผ่านไปหนึ่งชั่วโมงตรวจสอบ". รหัสทิ้งความอบอุ่นไว้ซึ่งเป็นการปลูกฝังสูงสุดของสถาปนิกการดำเนินงานและการบำรุงรักษาที่เป็นผู้ใหญ่
สรุป
การใช้ GCP Cloud Scheduler เพื่อร่วมมือกับ Cloud Functions เพื่อเล่นเครื่องเสมือนอัตโนมัติในเวลาปกติสาระสำคัญระดับอุตสาหกรรมหลักคือ16คำ:
คำสั่งเวลาการจัดส่งแบบไร้สายคำสั่งฟังก์ชันฟิวส์ที่อบอุ่น
。
คุณได้อำลาสถานะเดิมของการทำเครื่องหมายทางกายภาพในอดีตโดยสิ้นเชิงและคุณต้องใช้โทรศัพท์มือถือของคุณเพื่อเชื่อมต่อ VPN เพื่อปิดเซิร์ฟเวอร์ด้วยตนเองหลังเลิกงานใช้พลังการประมวลผล Serverless ฟรีเพื่อยึดเหรียญคลาวด์ทุกเหรียญที่ไม่ควรสูญเปล่าปล่อยให้เครื่องจักรจัดการเครื่องจักรนี่คือท่าทางการประหยัดเงินที่แท้จริงและสง่างามที่สุดในยุคคลาวด์สมัยใหม่

