ทำ GitOps บน Google Cloud ยังไงดีนะ ?


ทำ GitOps บน Google Cloud ยังไงดีนะ ?

สวัสดีครับ สำหรับบทความนี้เราจะมาทำความรู้จัก GitOps กันว่ามันคืออะไร และสามารถนำมาทำบน Google Cloud ใช้ Service อย่างไร 

สำหรับหัวข้อหลัก ๆ ที่ ผมจะอธิบายในครั้งนี้ครับ

  • DevOps vs GitOps

  • GitOps คืออะไร?

  • Two ways to GitOps

  • การทำงานของ GitOps

  • ข้อดีของการใช้ GitOps

  • แนะนำ GitOps tools

  • Git Repository tools

  • Infrastructure as code tools

  • CI/CD tools

  • Secret Management tools

  • Observe tools

  • Enabler tools

ก่อนอื่นหลายคนคงจะสงสัยกันนะครับว่า DevOps กับ GitOps เนี่ยมีแตกต่างกันยังไงเดี๋ยวจะอธิบายก่อนเลยแล้วกัน

DevOps คือ วัฒนะธรรมอย่างนึง ที่นำ Developement (DEV) กับ System Operation (Ops) มาทำงานร่วมกันทำให้เกิดประสิทธิภาพการทำงานสูงขึ้น ส่วนมากจะ Focus ไปที่ Continuous Integration และ Continuous Delivery

GitOps คือ เทคนิคที่ใช้ Git มาจัดการระบบ Infrastructure provisioning และ Software Deployment

เพราะฉะนั้น การที่จะทำให้ระบบ หรือ องกรค์ ของเรามีประสิทธิภาพสูงสุดก็ควรนทั้ง DevOps Cuture มาใช้ และนำ GitOps เทคนิคมาใช้ร่วมกันนั่นเอง

GitOps คืออะไร?

Gitops เป็นวิธีที่ใช้ Git มา Managed พวก Infra และ Software deployment ใช้กับ Cloudnative Application ซึ่งลักษณะการทำงานจะเป็น Environment as a code ทั้งนี้ใน GitOps ก็จะจะมีส่วนผสมระหว่าง CI/CD และ Git Workflow โดยที่ผมจะแบ่งเป็นหัวข้อย่อย ๆ ได้ 5 หัวข้อ

  1. Everything as code ทุก Configuration ของระบบ หรือ โปรแกรมเป็น Code ทั้งหมด เพื่อที่จะให้ง่ายต่อการแก้ไข ดูง่ายเป็นขั้นตอน ลดความผิดพลาดของคนทำระบบ และสามารถนำไปต่อยอดในการทำ CI/CD + CO ได้

  2. Git (Single Source of Truth) ใช้ Git เป็น Single Source of Truth กล่าวคือจะเก็บทุก Configuration ไว้ใน Git ทั้งหมด เพื่อที่เราจะสามารถอ้างถึงแหล่ง Source ที่มีความน่าเชื่อถือ ดู Version ได้ Tracking Developer ได้ว่าใครเป็นคนทำอะไร ตอนไหน เวลาเกิดปัญหาจะได้แก้ไปได้เร็ว และ สามารถ Rollback ได้

  3. CI/CD + CO Pipeline 

    CI = Continuous Integration
    CD = Continuous Deployment
    CO = Continuous Operation
    การทำ CI/CD ช่วยให้ทำ Automate Pipeline ของ System ได้มีประสิทธิภาพมากยิ่งขึ้น เช่นการทำ Automate build, Automate test , Automate deploy to any environment, Automate approve เพื่อเพิ่มความต่อเนื่องในการ Develope อะไรต่าง ๆ ทั้งนี้ยังสามารถลดความผิดพลาดจาก Human Error ได้ดี ส่วนการทำ CO จะเป็นขั้นตอนการทำ Operation ต่างๆ แบบอัตโนมัติ เช่น AB/Test, Zero Downtime deployments, scheduled maintenance. จุดประสงค์ของ CO ก็คือ การกระทำต่างๆ จะไม่ผลกระทบต่อ End-User และ Rollback system ได้ง่าย

  4. Software Agent เป็นเครื่องมือ หรือ Service ที่ใช้ตรวจสอบการ และ ควบคุมการทำงานของ ระบบ ว่ามีความผิดพลาดเกิดขึ้นหรือไม่ เช่น Human Error, Misconfiguration. เครื่องมือที่ใช้ เช่น Cloud Operation, Grafana, ArgoCD

  5. Cloud Native Application เป็น Service ของ Cloud ที่มีความสามารถสเกลได้อย่างรวดเร็ว Deploy ง่าย มีลักษณะเป็น Microservice และนำ Container มาช่วย ทั้งหมดทำให้สามารถนำไปใช้บน Environment ของ Cloud เจ้าไหนก็ได้ และ เมื่อนำไปผสมกับ Devops จะทำให้การทำงานมีประสิทธิภาพมากขึ้น ยกตัวใน Google Cloud Platatformเช่น Kubernetes, Cloud Run , App Engine


Two ways to GitOps คืออะไร?

การใช้ Gitops ในการ Deployments มี 2 วิธี คือ

1. The push-based เป็นการทำ Pipeline แบบ Basic เพราะ Devops ส่วนใหญ่ก็จะใช้กัน ง่ายต่อการ Deployment หลักการทำงานจะเกิดขึ้นเมื่อเรามีการ Push Code ไปที่ Git Repository จากนั้นจะ Deploy ไปที่ Target Environment

2. The Pull-based เป็นการ Pipeline ที่คล้าย ๆ กับ Push-based เพียงแต่เปลี่ยนจาก Push เป็น Pull ส่วนมากใช้กับพวก Kubernetes และจำเป็นต้องมี Agents เฉพาะ ในที่นี้จะเรียกว่า Operator มีหน้าที่กำหนดและ ควบคุมทิศทางในการ Deployments ทั้งหมด นอกจากนี้ยังมีความสามารถในการทำ Alerts ไปที่ต่าง ๆ เช่น Slack, Email เป็นต้น

ตัวอย่างการทำงานของ GitOps

ผมจะมาอธิบายขั้นตอนการทำงานตามนี้ครับ

1. เมื่อ Dev มีการ Commit Code ไปที่ Code repo จะทำ trigger build pipeline ผ่าน CI แล้ว Push ไปที่ Docker registry

2. ในฝั่ง Operator ก็เหมือนกันเมื่อมีการแก้ไข Config ของพวก Infrastructure อะไรต่างๆ ก็จะ Commit ไปที่ Cluster repo

3. Deployment Agent ในที่นี้จะเป็นตัว Operator ซึ่งมีหน้าที่จัดการ Deployments system เราไปยัง Environment ต่าง ๆ และมีหน้าที่เช็ค Cluster config และ Docker image ไม่ Out of date เป็นตัวล่าสุดอยู่ เสมอ ซึ่งก่อนที่จะ Deployments จะต้องการจัดการ

  • Pull Docker image ล่าสุดจาก Docker Registry

  • Sync Infrastructure Configuration (YAML) จาก Cluster repo

4. ทำการ Deployments ไปยัง Environment ที่ต้องการ และ ทำ Notification ไปที่ Channel ต่าง ๆ

ข้อดีของการใช้ GitOps

  • Developer สามารถ Deploy features ต่าง ๆ ไปยัง Environment ต่างๆ ง่ายขึ้นโดยที่ไม่ต้องกังวลถึง Infrastructure

  • Deployments ไปยัง Environment ต่างเช่น Test, Production ได้อย่างมีประสิทธิภาพ

  • สามารถทำ Zero Downtime Deployments ได้

  • ลดการ Click การกด Manual ต่าง ๆ จากที่เราเคยทำ เช่นกด UI, Command ต่างๆ

  • สามารถทำ Version Control ได้ง่ายขึ้นการอัพเดทอะไรไปที่ Git สามารถทำ Version ได้

  • สามารถทำ Disaster recovery , Rollback application หรือ System ได้อย่างมีประสิทธิภาพ ไม่ต้องกังวลเวลา Server หรือ Application ที่อัพเดท Bug หรือ Fail

  • ทุกๆ การเปลี่ยนแปลงมี Logging ดูได้ทั้งหมดว่าใครทำอะไร ตอนไหน Tracking ได้ตรงจุด

  • Reduce human error

GitOps tools

ในส่วนนี้จะมายกตัวอย่าง และ อธิบายเครื่องมือที่จำเป็นต้องใช้ใน GitOps ครับ ซึ่งผมจะแบ่งออกเป็น 6 อย่าง ดังนี้

  • Git Repository tools

  • Infrastructure as code tools

  • CI/CD tools

  • Secret Management tools

  • Observe tools

  • Enabler tools

Git Repository tools

เป็นเครื่องมือที่ขาดไม่ได้เลยในการทำ GitOps เพราะ เราจะทำเก็บทุกอย่างไว้ที่นี่ เช่น Application Code, Doker Config file, Infrastructure as code file. สามารถดู Version Control ได้ ดู History ต่างๆ ในการทำงานได้ ทำให้ Tracking application หรือ System ของเราได้มีประสิทธิภาพมากยิ่งขึ้น

Git Repository มีทั้งแบบ Cloud Source Repo, SaaS, Self-hosted ซึ่งสามารถตัดสินใจเลือกใช้ได้ตามความเหมาะสม หรือ ความต้องการของเราดูได้จากตารางนี้

Google Cloud Repository

ในบทความนี้ผมจะมาอธิบายเพิ่มเติม และ แนะนำ เกี่ยวกับ Git Repository บน Google Cloud Platform ซึ่งมีชื่อเรียกว่า “Google Cloud Repository”

ซึ่งเจ้าตัว “Google Cloud Repository” เอาไว้ทำอะไร ง่าย ๆ เลยก็เหมือน 3rd party git repository ทั่วไป ความสามารถเหมือน ๆ กัน แต่เป็น Google Managed Service ก็คือ Google เป็นคนดูแลระบบทุกอย่างให้เลย และที่ส่วนมากใช้กันก็คือนำมาใช้ร่วมกับ Service บน Google Cloud ตัวอื่น เช่น ถ้าเรา Implements GitOps ที่ Google Cloud ก็ควรใช้ “Google Cloud Repository” ดีที่สุดเพราะ การ Authentication ผ่าน Goolge Cloud มีความปลอดภัยสูง ไม่ต้องเชื่อมต่อกับ Network ภายนอก

ค่าใช้จ่ายของ Google Cloud Repository ดูได้ตามตารางนี้เลย

Infrastructure as Code tools

เป็นเครื่องที่ขาดไม่ได้สำหรับการทำ GitOps เช่นกันครับ เพราะในการทำ GitOps ทุกอย่างต้องเป็น Code ไม่ว่าจะเป็น Application, System, Infrastructure. ซึ่งการทำ Infrastructure เป็น Code จะเรียกว่า “Infrastructure as Code” ซึ่งถ้าดูตามรูปที่ผมประกอบมาจะมีเครื่องมือที่ใช้ทำ ในที่นี้ถ้าใช้บน Google Cloud Platform ผมขอแนะนำให้ใช้ Deloyment Manager ครับ แต่จะใช้ตัวอื่นก็ได้เช่นกัน เพราะ Google Support ทั้งหมดครับแล้วแต่ความถนัดของท่านเลย

ผมขออธิบายเกี่ยวกับคำว่า Declarative กับ imperative ก่อนนะครับเพราะสำคัญเหมือนกันอยากให้เข้าใจ Concept กันก่อน ซึ่งการทำ GitOps จะใช้แบบ Declarative นะครับ

เอาง่ายๆ เลยนะครับ Declarative จะเป็นลักษณะ Statement เช่น Script, Json, Yaml, terraform templates. ส่วน imperative จะเป็นพวก Command เช่น SSH, Kubectl, bash เป็นต้นครับ

ประโยชน์ในการทำ Infrastructure as Code ตามรูปนี้เลยครับ

Deployment Manager

ในบทความนี้ผมจะมาอธิบายเพิ่มเติม และ แนะนำ เกี่ยวกับ IAC บน Google Cloud Platform ซึ่งมีชื่อเรียกว่า “Deployment Manager”

ซึ่งเจ้าตัว “Deployment Manager” ก็เป็น Infrastructure as Code ตัวนึงที่เหมาะสำหรับใช้ร่วมกับ Service อื่น ๆ บน Google Cloud Platform มี Service ให้เลือกใช้ครบ อีกทั้งยังมี Document ประกอบอีกด้วย โดย “Deployment Manager” รองรับ Python หรือ Jinja2 เป็น Configuration ได้อีกด้วย และเป็น Declarative format เหมาะสำหรับใช้ทำ GitOps เลย และที่สำคัญใช้ “Free”

CI/CD Automation Tools

เป็นเครื่องที่ขาดไม่ได้สำหรับการทำ GitOps เช่นกันครับ เพราะในการทำ Automate Deployment ที่ GitOps ต้องการจำเป็นต้องมีเครื่อง CI/CD Automate ครับ ในที่นี้ถ้าใช้ใน Pull-based deployment หรือที่ GitOps ใช้ๆ กันจะเรียกว่า Operator ได้เช่นกันครับในรูปนี้ที่เราคุ้นตาในการทำ GitOps จะมี ArgoCD, Flux ใช่ไหมครับ แต่ถ้าอยู่ในแวดวง DevOps ก็น่าจะเคยเห็น Jenkins เครื่องมือที่ดี และ อยู่กับชาว DevOps มานานนั่นแหละครับ ซึ่งเครื่องมือเหล่าสามารถรองรับ Trigger และนำ IAC และ Application Code อื่นๆ ของเราไป Deploy ไปยัง Environment ที่เราต้องการ ซึ่งถ้าใน Google Cloud ตัวที่มีความสามารถครอบคุมดังกล่าวจะมีชื่อว่า “Google Cloud Build”

อ่านเพิ่มเติม ทำความรู้จักกับ CI/CD services บน Google Cloud


Cloud Build

ในบทความนี้ผมจะมาอธิบายเพิ่มเติม และ แนะนำ เกี่ยวกับ Service สารพัดประโยชน์ที่สามารถทำ CI/CD บน Google Cloud Platform ซึ่งมีชื่อเรียกว่า “Cloud Build”

“Cloud Build” เป็น Service ที่ Google เรียกว่า Serverless CI/CD Platform หมายความว่าเราไม่ต้องสนใจด้านอื่น ๆ เลย เพียงกำหนัด spec ให้มันแล้วใช้งานพวก Scaling, Security, และ อื่นๆ Google ดูแลให้ทั้งหมด โดยการทำ Automate CI/CD จะง่ายขึ้น ทำงานผ่าน Configuration file (YAML) โดยการทำงานของมันจะทำงานผ่านการ Trigger ของ Git Event เช่น Push, Pull นอกจากนี้ก็ทำงานผ่านพวก Google service เช่น Cloud Pub/Sub หรือจะเป็นพวก WebHook ต่าง ๆ ก็ได้เช่นกัน ซึ่งค่าบริการของมันเริ่มต้นที่สเปคเริ่มต้นจะให้ใช้ฟรีที่ 120 นาที ต่อวัน จากนั้นจะคิด 0.003$ ต่อ Minute Build ที่เหลือดูตามตารางในรูปได้

Secret Management tools

การทำงานของ GitOps อยากที่อธิบายไปข้างต้นว่าเราจะเก็บทุก Configuration ไว้ที่ Git Repository เพื่อให้เป็น Single Source of Truth แต่เราจะทำการจัดกับพวก Secret Data ยังไง เช่น Password ต่าง ๆ , Key ต่าง ๆ ที่สำคัญ ไม่สามารถเผยแพร่ได้ โดยท่าปกติก็อาจทำการเข้ารหัสไว้ซึ่งยุ่งยากในการทำ ถอดรหัสอีก ผมจึงเสนอพวกตัวช่วยในการจัดการพวก Secret Management ต่าง ๆ ดูตามรูปได้เลยมีความสามารถคล้าย ๆ กัน ถนัดตัวไหนสนใจตัวไหนไปหาข้อมูลต่อได้เลย

ซึ่งถ้าใน Google Cloud ตัวที่มีความสามารถครอบคุมดังกล่าวจะมีชื่อว่า “Secret Manager”

Secret Manager

ในบทความนี้ผมจะมาอธิบายเพิ่มเติม และ แนะนำ เกี่ยวกับ Service ที่เอาไว้จัดการกับ Sensitive Data ต่าง ๆ บน Google Cloud Platform ซึ่งมีชื่อเรียกว่า “Secret Manager”

“Secret Manager” เป็น Service ที่ขาดไม่ได้ในการจัดการข้อมูลพวก Sensitive Data ซึ่ง Fuction ค่อนข้างครบ เช่น การ Encrypted file ต่าง ๆ, Logging, Notification เป็นต้น ซึ่งการใช้งานค่อยข้างง่ายมีไฟล์ แล้วก็ใช้คำสั่งบรรทัดเดียว หรือจะกดไม่กี่ Click บน Google Cloud Web UI ก็เรียบร้อย และยังสามารถทำงานร่วมกับ Cloud IAM ได้อีกด้วยทำให้กำหนดสิทธิการเข้าถึงได้ง่ายยิ่งขึ้น ซึ่งค่าบริการก็คิดจะตามตารางนี้

Observe tools

ในการทำ GitOps เครื่องมือที่จำเป็นอีกอย่างคือ Observe tools เอาไว้ดู Logging, Monitor ระบบ ต่างๆ ของเรา ทั้งนี้ต้องรองรับการทำงานระดับ Microservice และ Kubernetes อีกด้วย เพื่อที่จะ Monitor ระบบของเราเวลามีปัญหาได้ทัน และดูประสิทธิภาพการทำงานของระบบออกเป็นข้อมูลกราฟ รูปภาพประกอบ อีกทั้งควรมี Logging ไว้ Track ถึงปัญหาต่างๆ ได้ ซึ่งถ้าใน Google Cloud ตัวที่มีความสามารถครอบคุมดังกล่าวจะมีชื่อว่า “Cloud Operations”


Google Cloud's operations suite (formerly Stackdriver)

แต่ก่อนเราอาจคุ้นชินกับ Service ที่ชื่อ Stackdriver แต่ตอนนี้ Google ได้เปลี่ยนชื่อ Service เป็น “Google Cloud Operations” แล้ว

“Cloud Operations” เป็น Service ของ Google ที่เอาไว้จัดการดูแลพวก Logging,Monitoring โดยมีความสามารถหลากหลาย เช่น การเก็บ Metric log จาก service อื่นๆ ซึ่งทำเป็น Custom metric ได้, สามารถทำ Dashboard ไว้ Monitor service ได้, ทำ Notification Alert ต่างๆ ได้, ใช้ Trace system หา latency ของ service ได้ และ อื่นๆ อีกมากเยอะใช้สะดวกมาก ๆ ถ้าใช้ Service ของ Google Cloud อยู่แล้วไม่ควรพลาดครับ

ค่าบริการของ Service สามารถอ้างอิงได้จากรูปตารางนะครับ

ทำความรู้จักกับเทคโนโลยีอื่นๆ บน Google Cloud กับกิจกรรม webinar

ลงทะเบียนเข้าร่วมฟรี ! คลิกที่นี่

Enabler tools

สุดท้ายนี้ขอแนะนำเครื่องมือในการ GitOps เพิ่มเติม

  • KubeStack เป็น GitOps Framework เอาทำ Infrastructure automation จากทีม Terraform

  • Werf เป็น CLI tools เอาไว้ Build และ Deploy image ไป ที่ Kubernetes ได้ง่ายขึ้น

  • Terragrunt เอาไว้ Management Terraform Code สามารถทำเป็น Remote Config ได้

  • Weave Ignite The GitOps VM

GitOps เป็นเทคนิคที่ช่วยให้การทำงานของเราเป็นระบบมากยิ่งขึ้น ทุกอย่างจะเขียนเป็น Code ซึ่งทำให้มีความแม่นยำสูง และจะถูกเก็บไว้ที่ Git ซึ่งเป็น Single source of truth ซึ่งทำให้สามารถทำ Version control ได้ ทำ Rollback ได้ และ ทุกๆการเปลี่ยนแปลงของ Code หรือ ระบบก็สามารถ Tracking ได้ว่าใครทำอะไร ตอนไหนอย่างไร

การทำ GitOps บน Google Cloud นั้นสามารถทำได้ มีเครื่องมือที่ทดแทนเครื่องมือ Third party ทั้งหมด เราสามารถนำเครื่องมือ Third party มาใช้ร่วมกันเพื่อให้เกิดประสิทธิภาพสูงได้ ไม่จำเป็นต้องใช้ Service บน Google Cloud อย่างเดียว

Service หลัก ๆ ที่ใช้ทำ GitOps บน Google Cloud คือ Cloud Build เอาไว้ทำ CI/CD, Git ใช้ Cloud Repository, IAC ใช้ Deployment Manager, Observe ใช้ Cloud Operation และ การเก็บ Sensitive data ใช้ Secret Manager ซึ่งสามารถนำไปใช้กับ Google Cloud Native Service ได้ เช่น Kubernetes, Cloud Run ได้ง่าย

ก็จบก็ไปแล้วนะครับสำหรับบทความนี้ หวังว่าจะเข้าใจเรื่อง GitOps มากขึ้นนะครับ ถ้ามีโอกาสอาจจะมาเขียนบนความทำ Demo เกี่ยว GitOps ที่เป็น Usecase ที่น่าสนใจอีกที บทความนี้ถ้าผิดพลาด หรือ ตกหล่นอะไรไป ขออภัยนะครับ มีความคำถามหรือสงสัยอะไรคอมเม้นกันได้ครับ

ขอบคุณครับ

Written by Thanatip Suwanchundee

Cloud Ace Thailand

Make It Now!

หากคุณสนต้องการคำปรึกษา Cloud Ace Thailand พร้อมให้บริการที่จะสนับสนุนคุณตั้งแต่ การให้คำปรึกษา จนถึงการออกแบบระบบ ติดตั้งระบบ ย้ายระบบ ในฐานะ Google Cloud Partner ที่มีความเชี่ยวชาญ และได้รับรางวัล Service partner of the year ในปี 2019

ติดต่อเรา th_sales@cloud-ace.com

.