รีวิว Flux บน OpenShift 4.7

Chanwit Kaewkasi
3 min readMay 14, 2021

--

พอดีได้มา maintain ตัว Flux Operator สำหรับ OpenShift ให้กับทีม Flux ของ Weaveworks เลยจะขอรีวิว Flux บน OpenShift 4.7 ซักหน่อย เพราะมีเรื่องใหม่ ๆ หลายเรื่องที่เพิ่งจะได้เรียนรู้

Operator ที่ติดตั้งบน OpenShift ได้จะต้องเป็นตัวที่พัฒนาด้วย Operator SDK โดย Operator ที่สร้างด้วย Kubebuilder ก็จะ compatible กันด้วยในระดับนึง (จริง ๆ แล้วอยากเล่าตั้งแต่เริ่มเลยว่า Kubernetes Operator คืออะไร แต่เนื้อหาคงจะมากเกินไปเลยขออนุญาตแปะเป็น link)

ตัว Flux Operator สร้างด้วย Kubebuilder เลยต้องการ YAML มาประกาศเพิ่มเพื่อให้กลายเป็น Operator ที่ติดตั้งบน OpenShift ได้ ก็เลยมีการทำโครงการ Flux2-OpenShift ขึ้นมาห่อตัว Flux Operator เดิมแล้วก็ส่งขึ้น Community Operators ที่ วิศวกรของ Red Hat ดูแลอยู่ (อันนี้เป็นตัวอย่าง PR ที่ merge แล้วของ Flux ที่เพิ่งส่งไป — check list ยาวมาก)

เวลาทดสอบบนเครื่อง local เราก็จะทดสอบด้วย Kubernetes ธรรมดา (ผมใช้ EKZ ทดสอบ) แล้วก็ติดตั้งชุด OLM ของ Operator SDK ลงใน Kubernetes จากนั้นทำการสร้าง CatalogSource, Index สุดท้ายคือ resource ชื่อ Subscription เพื่อให้ตัว local cluster ทำงานคล้ายกับติดตั้ง Operator ที่อยู่ใน OpenShift ก็จะทดสอบได้ระดับนึง

แต่จริง ๆ ก็อาจจะเจอปัญหาอยู่ดีเพราะ OpenShift คือ OpenShift แต่ว่าการทดสอบด้วย OLM แล้วผ่านก็จะเป็นเงื่อนไขที่ต่ำที่สุดที่ต้องทำก่อนส่ง PR เข้า Community Operators

หน้าตาผลการทดสอบ

จะเห็นว่าเจอ CRDs ที่ไม่ค่อยคุ้นเต็มไปหมดไม่ว่าจะเป็น “installplan” หรือ “csv” เป็นต้น

เมื่อผ่านกระบวนการตรวจสอบ ทดสอบ ตัว Operator ก็จะเข้าไปอยู่บน OperatorHub.io หน้าตาแบบนี้

Flux Operator บน OperatorHub.io

แล้วก็จะสามารถติดตั้งได้จาก OpenShift จากแท็บ OperatorHub แบบนี้

ก่อนการติดตั้ง Flux ใน OpenShift

หลังจากนั้นเมื่อกดติดตั้งแล้วก็จะได้ Flux Operator รันอยู่ใน OpenShift แบบนี้

Flux ที่ติดตั้งเรียบร้อยแล้วบน OpenShift 4.7

หลังจากนี้ GitOps ก็จะเป็นเรื่องง่ายแล้ว เพราะ UI ของ OpenShift ทำให้ Flux พร้อมใช้งานได้ทันที ในตัวอย่างผมก็จะกดสร้าง GitRepository แล้วใส่ URL ที่เก็บ YAMLs ที่ต้องการ (ในตัวอย่างเป็น repo ชื่อ podinfo ของ Stefan ที่มากับตัวติดตั้ง)

พอกดสร้างก็จะได้ Object หน้าตาแบบนี้

ถ้ากดเข้าไปดู Events ก็จะเห็นว่ามีการดึง commit จาก repo มาสำเร็จแล้ว

หลังจากนี้เราก็สร้าง resource ประเภท Kustomization เพื่อมาต่อกับ GitRepository นี้ ก็ตั้งชื่อว่า podinfo เหมือนกัน, เลือก Prune เป็น true เพื่อให้ตัว Kustomization Controller ทำ Garbage Collection ให้

เสร็จแล้วก็เลือก SourceRef เป็นประเภท GitRepository ชื่อ podinfo เหมือนกัน

แล้วก็ Scroll ลงมาอีกหน่อยเพื่อตั้งค่า Path ว่าจะให้ reconcile ตัว manifest จาก Path ไหนของ repository ใน step นี้ต้องกดลบ Health Check ออกเพราะว่าเตรียมมาเป็น Health Check ของตัวอย่างอื่น

รอแป๊บนึงจะมีข้อความลักษณะนี้บอกว่า Reconciliation สำเร็จแล้ว

พอกดไปดูที่ Namespace ชื่อ “dev” ก็จะเจอ workload ที่ดูแลด้วย GitOps รันอยู่

ซึ่งตอนนี้สามารถลองลบ Deployment พวกนี้ดูได้เลย พอลบไปซักพัก (ประมาณ 5 นาที ตามค่าที่เราตั้งไว้ที่ Kustomization Object ชื่อ podinfo — ถ้าไม่อยากรอก็สามารถตั้งเป็น 1 นาทีได้ตอนสร้าง Kustomization) ตัว Flux จะสร้าง Deployment ให้ใหม่เพื่อให้ state ของการ Operations ตรงกับที่ประกาศไว้ใน Git repository

เท่านี้เราก็มีระบบที่จัดการด้วย GitOps ไว้ใช้บน OpenShift แล้วครับ

สำหรับใครที่ไม่ชอบ GUI อยากได้การติดตั้ง Flux บน OpenShift แบบดิบ ๆ หน่อยด้วย command line สามารถอ่านจากคู่มือของ Flux ที่ผมช่วยทีม Flux เขียนไว้ได้ที่นี่ครับ https://fluxcd.io/docs/use-cases/openshift/

--

--

Chanwit Kaewkasi
Chanwit Kaewkasi

Written by Chanwit Kaewkasi

Technical Advisor at ConfigHub Inc. ex-weaveworks. Go nut since r57 (pre v1)

No responses yet