หลังจากที่ใช้งานมาสักพักใหญ่ ๆ
ก็เลยมาอ่านที่มาที่ไปหน่อยว่า GitOps เป็นมาอย่างไร
จะนำมาจาก GitOps Tech
โดย GitOps เริ่มมาตั้งแต่ปี 2017 จากบริษัท Weaveworks
ซึ่งมีการพูดคุยที่เยอะมาก ๆ
รวมทั้งทำให้เกิดความสับสน
จึงทำการสรุปไว้ในบทความข้างต้น
เพื่อให้เข้าใจตรงกัน

GitOps คืออะไร

เป็นรูปแบบหนึ่งของการสร้างระบบ Continuous Delivery (CD)
สำหรับ cloud native application
มีเป้าหมายหลักคือ developer-centric experience
นั่นคือใช้เครื่องมือที่ทีมพัฒนาถนัดหรือใช้งานอยู่แล้ว
ทั้ง Git และ CD tool ต่าง ๆ

แนวคิดหลักคือ การเก็บสิ่งต่าง ๆ ที่จำเป็นต่อการสร้าง

  • Infrastructure
  • Environment
  • Automation process

ไว้ใน Git repository
ดังนั้นถ้าต้องการ deploy ระบบงานใน version ใหม่
ก็เพียงทำการ update ข้อมูลใน Git repository เท่านั้น
จะ trigger ให้การทำงานแบบอัตโนมัติขึ้นมาตาม pipeline ที่กำหนดไว้

ทำไมต้องใช้งาน GitOps

  • ง่ายต่อการ deploy ทำให้ deploy ได้เร็วและบ่อยขึ้น
  • เมื่อเกิดปัญหา สามารถ recovery กลับมาได้ง่ายและเร็วขึ้น (git revert)
  • ง่ายต่อการจัดการเรื่องของ credentail ต่าง ๆ เพราะว่า GitOps จะทำงานใน environment นั้น ๆ เลย ส่วนทีมพัฒนาไม่สามารถเข้าถึง environment ต่าง ๆ ได้
  • ทุก ๆ การเปลี่ยนแปลงจะอยู่ใน Git repository ทำให้เราเก็บ history ของการ deploy ไว้ได้ทั้งหมด ตอบโจทย์เรื่องของการ audit อย่างมาก และรู้ทั้งหมดว่าเกิดอะไรขึ้นบ้าง
  • สิ่งต่าง ๆ จะอยู๋ใน Git repository ทำให้สามารถ share ความรู้เกี่ยวกับการทำงานได้เลย ไม่ต้องกระโดดไปมาหลาย ๆ ที่ หลาย ๆ ระบบ

GitOps ทำงานอย่างไร

เริ่มจากการทำงานจะทำงานผ่าน Git repository
แบ่งออกเป็น 2 repository คือ

  • application คือ source code ต่าง ๆ ของระบบงาน และ manifest file ต่าง ๆ ในการ deploy ระบบ
  • environment configuration คือ configuration สำหรับการสร้าง infrastructure ของ environment ที่ใช้ deploy ระบบงาน เช่น messaging broker และ monitoring tool เป็นต้น รวมไปถึงเรื่องการจัดการ version อีกด้วย

การทำงานมีทั้งแบบ Push และ Pull deployment

Push deployment

คือรูปแบบการทำงานปกติของ CI/CD tool ต่าง ๆ เช่น

  • Jenkins
  • CircleCI
  • TravisCI
  • Cloud build ใน GKE

การทำงานง่าย ๆ คือ
เมื่อ Git repository มีการเปลี่ยนแปลงก็จะ trigger ให้ pipeline ทำงาน
ไปจนถึง trigger ให้ทำการ deploy
มีขั้นตอนการทำงานดังรูป

ตัวอย่างการทำงานของ Google cloud build

Pull deployment

มีความต่างตรงการ deploy
แทนที่จะทำการ trigger เพื่อ deploy เมื่อมีการเปลี่ยนแปลง
จะใช้แนวคิดของ operator เข้ามาช่วยในการทำงาน

ซึ่ง Operator จะคอยเฝ้าดูว่า
state หรือ version ของ environment repository
กับ state ของระบบที่ทำงาน deploy นั้น
เหมือนหรือต่างกันหรือไม่
ถ้าต่างกันก็จะทำการ deploy ให้ทันที

รวมทั้ง operator จะอยู่ใน enviroment เดียวกันกับการที่จะ deploy นั่นเอง
เพื่อลดปัญหาเรื่องของ permission แบบไม่ปกติ
จาก push deployment (God-mode !!)
อีกทั้งตัดปัญหาเรื่องการจัดการ credential ไปได้
แสดงดังรูป

และช่วยให้ง่ายต่อการ deploy ระบบงานในหลาย ๆ Enviroment อีกด้วย

จากแนวคิดต่าง ๆ เหล่านี้ ทำให้เกิด implementation ต่าง ๆ ตามมา

เช่น GitOps operator ใน Kubernetes cluster เช่น

ตัวอย่าง GitOps บน Kubernetes cluster ซึ่งเป็น Pull deployment

DevOps คือการเปลี่ยน culture ขององค์กร เพื่อช่วยให้คนทำงานร่วมกันได้ดีขึ้น

ส่วน GitOps คือเทคนิคในการสร้างระบบ Continuous Delivery
โดยทั้งคู่จะมีแนวคิดเหมือนกันคือ

  • Automation process
  • Self-service infrastructure

ดังนั้นการสร้าง GitOps workflow จะง่ายขึ้นเมื่อนำ DevOps มาปรับใช้งานแล้ว