“Infrastructure as code using google cloud deployment manager to create the VM instance with docker service”

Beaubaby
3 min readMar 15, 2019

--

… นี่เป็น blog แรกของเราที่เราเขียนขึ้นมา ก่อนอื่น เราขอบอกไว้ก่อนเลยว่า เราไม่เคยเขียน blog ที่ไหนมาก่อน โดยเฉพาะอะไรที่มันเป็นสาระนี่ ยิ่งไม่เค๊ย ไม่เคย เลยจริงๆ ถ้าผิดพลาดประการใด เราขออภัยมา ​ณ ที่นี้ด้วย รวมถึงมาช่วยกันเสนอแนะได้เช่นกันนะคะ … :)

GCE management with deployment manager

จริง ๆ แล้วหลายคน คงรู้จัก และเคยใช้ google cloud platform or GCP มาบ้างแล้ว แต่เนื่องด้วย GCP มี product ต่าง ๆ มากมายเต็มไปหมดให้เราเลือกใช้ เเละจากที่ไปไล่ลาตามหา ค้นคว้าข้อมูลจากในโลก internet ไอ้เจ้า deployment manger ซึ่งเป็นหนึ่งใน product ของ GCP เนี่ย กลับมีคนใช้งานมันน้อย (เอาเป็นว่าบทความที่เป็นภาษาไทยเนี่ย เราแทบจะไม่เห็นเลยล่ะ แต่ภาษาอังกฤษก็พอมีอยู่ใช้ได้อยู่) อาจเพราะความซับซ้อนอะไรบางอย่างในด้านการใช้งาน รวมถึงผู้ใช้จะต้องมีทักษะในการอ่าน script หรือ code ต่าง ๆ พอสมควร และใช้เวลาในการศึกษา document มากอยู่ เลยทำให้คนที่ไม่ถนัดในสาย coding เนี่ย อาจจะมองว่า ใช้ GUI ก็คงจะง่ายและรวดเร็วกว่าเหมือนกัน

ดังนั้นเราจึงอยากมาอธิบายมันแบบง่าย ๆ เพื่อเป็นเเนวทางให้คนที่ไม่ถนัดในการอ่าน code หรือไม่เข้าใจว่ามันดียังไงให้ได้รับทราบ และมาลองใช้งานมันดู

ก่อนอื่น เรามาทำความรู้จัก ไอ้เจ้าที่เรียกว่า deployment manager หรือ dm กันก่อนดีกว่า … (ต่อไปเราจะใช้คำย่อนี้อ้างถึง feature นี้ละกันนะ)

Deployment manager (DM) เป็น Feature หนึ่งบน GCP ที่จะช่วยให้เราสามารถจัดการทรัพยากรบน google cloud engine or GCE เพื่อทำ automate deployment ในการสร้าง VM instance or appication โดยเรียกใช้งาน deployment ผ่าน YAML configuration file นอกจากนี้ ยังสามารถใช้ Python หรือ Jinja2 template เพื่อกำหนดค่าพารามิเตอร์ต่าง ๆ สำหรับ instance ที่ต้องการการใช้งานที่ซับซ้อนยิ่งขึ้นได้อีกด้วย ซึ่งดูได้จากแผนภาพโครงสร้างของการทำงานด้านล่างค่ะ

Google deployment-manager workflow management

ต่อไปมาเรามาเข้าสู่วิธีการสร้าง VM instance โดยใช้ deployment-manager กันเลยค่ะ …

เนื่องจาก DM สามารถใช้งานผ่าน Cloud SDK command line tools ได้ เราก็จะมาใช้งานด้วยวิธีนี้ ดังนั้น ก่อนที่จะเข้าไปทำอะไรกับ google console ผ่านทาง command line ได้นั้น ก็ต้องมี package ไว้สำหรับรัน command เหล่านั้น บน terminal ของเครื่องเราเองได้ก่อน วิธีการ install สามารถทำตาม Cloud SDK Document ได้เลยค่ะ

ต่อไปมาถึงวิธีการสร้าง template เพื่อ build VM instance บน google cloud กันเลยดีกว่าค่ะ

สิ่งที่ต้องเตรียมก่อนที่จะสร้าง template ผ่าน DM ได้นั้นต้องมีเงื่อนไขดังนี้

*** ต้องมี os image ที่ลง docker service เอาไว้เรียบร้อยแล้ว ***
โดยวิธีการคร่าว ๆ สามารถดูได้จากด้านล่างค่ะ

  • ต้องสร้าง VM instance บน GCP ก่อน ซึ่งสามารถทำได้ผ่าน console ของ google cloud ได้เลยค่ะ แต่ถ้าใครมี instance ที่สามารถใช้งานได้อยู่แล้ว ก็สามารถทำตามสเตปถัดไปได้เลย
  • เมื่อมี instance ต้นแบบเรียบร้อยแล้ว ก็ลง docker service ใน instance นั้นให้เรียบร้อย หรือถ้าใครมี instance ที่ลง docker ไว้ใช้งานเรียบร้อยอยู่แล้ว ก็ข้ามไปสเตปถัดไปได้เลย (ในตัวอย่างจะเป็นการทำงานบน linux debian os ทั้งหมด)
  • หลังจากนั้นทำการ snapshot disk ของ VM instance ต้นแบบนั้น (อย่าลืม stop instance ก่อนนะคะ)
  • แล้วก็สร้าง image ต้นแบบ จาก snapshot disk ลูกนั้นได้เลย ก็เป็นอันเสร็จขั้นตอนในการเตรียมเรียบร้อยแล้ว

ต่อไปมาถึงขั้นตอนจริงๆ แล้วที่เราจะมาทำการใช้ DM เพื่อทำ automate ในการ create VM instance ขึ้นมา ก่อนอื่นในเราต้องเตรียมไฟล์ทั้งหมดดังนี้ค่ะ

config.yaml file: เป็นไฟล์ที่ใช้ในการ deployment โดยกำหนดค่าพารามิเตอร์ต่าง ๆ ลงไป หรือกำหนดให้ไปเรียกพารามิเตอร์ในการสร้างทรัพยากรบน GCE ใต้การเขียน Python หรือ Jinja2 template ได้อีกด้วย

ซึ่งจาก code จะเห็นว่า config.yaml ได้ไปเรียกพารามิเตอร์จากไฟล์ที่ชื่อ “instance.jinja” และสร้างทรัพยากรโดยมีการเรียกใช้ startup-scripts จัดการ ในส่วนของการทำ pre-installation

instance.jinja file: เป็นไฟล์ที่มีการระบุพารามิเตอร์ของทรัพยากรต่าง ๆ ทั้ง Type ของ disk ที่ต้องการใช้, OS ที่ต้องการใช้, ค่าพารามิเตอร์ network ต่าง ๆ ซึ่งในตัวอย่างเราได้ใช้ default network

startup-script.sh file: หลักการง่าย ๆ ของไฟล์นี้คือ ใช้ทำการ pre-installation นั่นเอง (ถ้ามองผ่าน ๆ ก็ออกจะคล้าย ๆ การทำ kickstart ของ linux ล่ะจ้า ^.^)
โดยในที่นี่ startup-script ของเราได้ทำการสร้าง disk เป็นสองก้อน เพื่อที่จะเเยก docker data ออกไปไว้อีกลูก เพื่อความปลอดภัยของ data ใน container ต่าง ๆ ที่จะสร้างขึ้นด้วยค่ะ

< เพิ่มเติม: คลิ๊ก การสร้างไฟล์เพื่อใช้ในการดีพลอย >

และแล้วก็เป็นอันสิ้นสุดการเตรียม … ต่อไป ในการ deploy VM instance ใหม่จากสิ่งที่เตรียมไว้ง่ายยิ่งกว่าปอกกล้วยเข้าปาก เพียงแค่รัน command ข้างล่างนี้ ก็เป็นอันเสร็จเรียบร้อย

gcloud deployment-manager deployments create <instance name> \
--config config.yaml

สามารถดู VM instance ใหม่ของเราได้จาก GCE บน google console ได้เลย และนอกจากนี้ ยังสามารถนำไป deploy ได้หลาย ๆ instance ผ่านการสร้าง template เหล่านี้อีกด้วย

เห็นมั้ยล่ะคะว่าถ้าสำหรับสาย developer ที่ไม่อยากยุ่งยากในการมานั่งคลิ๊ก ๆ บน GUI ก็สามารถเตรียม template ต่าง ๆ ได้เป็นหลาย ๆ template แล้วนำมาดีพลอย รวมถึงสามารถแชร์ code เหล่านี้ไปให้เพื่อน ๆ ในทีม หรือเพื่อนคนอื่นใช้สร้าง infrastruce ใหม่ได้อีกด้วย

… อาจจะดูเยอะอย่างในช่วงขั้นตอนการเตรียม แต่เมื่อเตรียมครั้งแรกเสร็จเรียบร้อยแล้วหลังจากนั้นทุกอย่างก็ง่ายไปหมดเลยค่ะ… งั้นเรามาสรุปข้อดี ข้อเสียของมันสักหน่อย !!!

ข้อดี:
1. สามารถ scale instance ได้ตามใจปรารถนา
2. ใช้เวลาดีพลอยรวดเร็ว
3. สามารถแชร์ soruce code ให้ผู้อื่นนำไปใช้งานเพื่อสร้าง infrastructure ได้เหมือนกัน
4. Jinja2 template ใช้งานง่าย ไม่จำเป็นต้องเป็น developer ก็สามารถดู code แล้วอ่านออกได้ง่าย และ custom ได้เองแบบง่ายๆ เช่นกัน

ข้อเสีย:
ใช้เวลาเตรียมก่อนจะสร้าง template พอสมควร เนื่องจากต้องมี image ที่เราต้องการ

เป็นอันว่าจบขั้นตอนในการใช้งาน deployment manager เพื่อสร้าง infrastructure พร้อมทั้งมี docker service ลงไว้ตั้งแต่ต้น เพื่อสามารถ scale vm ได้เพิ่มขึ้น ประหยัดค่าใช้จ่าย ง่ายต่อการที่ developer สามารถนำไปทำงานโดยไม่ต้องเสียเวลามานั่งกดๆ ผ่าน GUI ถือว่าเหมาะ และเซฟเวลาไปเยอะเลยทีเดียวค่ะ …

…. แล้วลองไปใช้งานกันดูนะคะ ใครมีอะไรเจ๋ง ๆ มาแชร์ ก็นำมาบอกกล่าวกันได้เลย … !!!
และขอบคุณที่อ่านมาจนถึงบรรทัดสุดท้ายนะคะ ถ้าดีเดี๋ยวเราไว้กลับมาเขียนใหม่เรื่อย ๆ ตอนนี้ ประสบการณ์อาจจะยังน้อย แต่ถ้าเรามีเพิ่มเติมเมื่อไหร่เราจะมาเเชร์เพิ่มขึ้นค่ะ :)

สามารถศึกษาเพิ่มเติมได้ที่
อ้างอิง: https://cloud.google.com/deployment-manager/docs/how-to
(เอกสาร google อาจจะดูเยอะ แต่เข้าใจง่ายมากเลยทีเดียว ^^)

--

--

Beaubaby
Beaubaby

Written by Beaubaby

“Technical Project Manager / Infrastructure Consultant” who’s focusing on the agility deliverable project with valuable & the cloud native technology innovation

No responses yet