สำหรับ Helm Essential มี 4 ตอนนะครับ
เทคนิคการเรียนรู้
คิดบวกกับตัวเอง หลายเรา เราชื่นชมคนอื่น แต่กดดันตัวเอง ว่าทำไมไม่ได้ เราเป็นไปไม่ได้หรอก บราๆ จริงๆ แล้วมันเทคนิคที่ช่วยจะเป็นตัว Self-Talk จริงๆ มันการปรับ Mindset เราสามารถไปได้ เราขยันได้นะ (Visual to Success) และ Just do it
เรียนเจ็บ และจดจำ ติดอะไร ก็หาเลย //นึกถึงตอนตัวเองวางบัํก 55 ยิ่งทำซ้ำบ่อยๆ ตั้งคำถาม เราจะได้ Skill ติดตัวมา
- Passive Learning - ฟัง และ ค่อยๆเติมเต็ม แนวคิดแบบ ตั้งรับ จะบอกว่ามีคนป้อนก็ได้นะ
- Action Learning - แนวคิดทำให้เราเรียนเก่ง เรียน เอีะ ขยับนิ้ว พวกจดสรุป ตั้งคำถาม และลองขยี้ต่อ มี Output ออกมานะ ถ้าปรับจนมันชินเป็นนิสัยได้ จะดีมาก
ส่วนตัวผมมองเลือกตามเวลา และความเหมาะสมครับ ^____^ บางเรื่องเราไม่ต้องรู้เยอะ ลง Effort เยอะนะ เอาที่สำคัญกับเราในเวลานั้นๆ
เทคนิคการเรียนรู้ - List ที่อยากเรียน และแบ่งส่วนการเรียน (ส่วนตัวถ้าไม่อยากแบ่งเองไปฟังๆจาก หาตาม Course ใน Skoodio / Udemy) ควรเป็นเรื่องกลุ่มเดียวกัน ระดับเดียวกัน ฝึกสลับให้สมองเรียนรู้อะไรที่หลากหลาย จะได้เห็นภาพประยุกต์ โดย
- เน้น Fundamental จะได้มีของพร้อมต่อยอด
- รู้กว้างระดับนึง เรากล้าที่จะขยับสิ่งใหม่ ถ้าเราฝึกบ่อย เวลาเจอปัญหา เรืองใหม่ๆ มันจะไม่ตื่นตระหนกนะ
- อย่าเบื่อ ซึ่งคุณโจ้เองมีแนะนำ การสลับหัวข้อ ช่วยให้เราไม่เบื่อล้ากับเรื่องเดิมๆนะ สลับเรียนเรื่อง 1 2 กะดูเมะ น่าจะได้ 5555555
เรียนรู้ เพื่อรับมือกับสิ่งที่เราไม่รู้ ไม่รู้แล้ว เราจะกลัวทุกอย่าง EveryThing จิงกาเบล
Working Memory -redis ของสมอง ฝึกเพื่อช่วยให้เรารับส่งข้อมูลได้ สะสมคลัง + นอนให้เพียงพอ ถ้าฝึกบ่อยๆ จากส่วนที่จำระยะสั่น มันจะติดเป็นส่วนของ Skill จำระยะยาวได้ (เก็บในส่วน Hippocampus
Helm Introduction
Curisity Gap ผมตั้งคำถามและกัน 55
- สิ่งที่รู้ - ไม่เชิงรู้ เพราะพิมพ์หรือ Ctrl+C และ V ตาม Blog หรือ ใน Git ที่เค้าแนะนำ อยากได้ DB / Open Source อะไร ไป Google เอา และลงตามตัว Helm แปะขึ้นจบ
- สิ่งที่ไม่รู้
- การสร้าง Helm ใช้เอง เพราะเจอแบบว่า ถ้าเอา K8S ไปลงที่อื่น แล้วมา Apply ที่ละไฟล์ ลำดับมันสำคัญ
- การทำงานของ Helm ลงเป็นอย่างเดียว ไม่เคย Update ส่วนตัวเคยลงตัวนี้ calibre ไว้ตอนปี 22 น่าจะใช่แหละ V5.2 กับคอมที่บ้าน และมันอยู่แบบนั้นนานและ 5555 ยังไม่ได้ขยับไป Cluster ใหม่ที่ตั้งเองเลย 55555
นอกเรื่อง ตอนนี้จะมี Gateway API มาแทน ingress แล้วนะ Gateway API (Authen / LB/ Auto Resign ) เหมือนลองไปอ่าน ผมเข้าใจว่าแยก Role หรือ ป่าว Infra ดู kind: Gateway และ App ทำ route ดู kind: HTTPRoute
Ref: Migrating from Ingress - Kubernetes Gateway API (k8s.io)
ก่อนจะมี Helm เราทำอย่างไร ?
- แยกแต่ละ Kube Object
ข้อดี แยกส่วนกันชัดเจน Config / Secret / Deployment / HPA / PV/PVC เป็นต้น
ข้อเสีย จะมีปัญหาลำดับการ kubectl apply เจออาการผีหลอก เช่น deployment มันต้องการ configmap / secretmap ก่อน แต่เราดันไป apply deployment ก่อน มันจะหา configmap / secretmap ที่ต้องการไม่เจอ ตรงนี้ //ปกติถ้าเรา Apply ทั้ง Folder ตัว kubectl มันจะเรียงตามตัวอักษร
kubectl apply -f dev_invsapi_config.yaml kubectl apply -f dev_invsapi_secret.yaml kubectl apply -f dev_invsapi_volume.yaml kubectl apply -f dev_invsapi.yaml kubectl apply -f dev_invsapi_hpa.yaml kubectl apply -f dev_invsapi_svc.yaml kubectl apply -f dev_invsweb_config.yaml kubectl apply -f dev_invsweb_secret.yaml kubectl apply -f dev_invsweb.yaml kubectl apply -f dev_invsweb_hpa.yaml kubectl apply -f dev_invsweb_svc.yaml kubectl apply -f dev_invs_ingress.yaml
ถ้าเรา Apply ทั้ง Folder ไป ลำดับมันจะเละ ตอนนี้ที่ผมแก้อยู่ทำ Shell ครอบอีกที
dev_invs_ingress.yaml dev_invsapi.yaml << พังหา Config / Secret ไม่เจอ dev_invsapi_config.yaml dev_invsapi_hpa.yaml << พังต่อ ไม่มี Deployment dev_invsapi_secret.yaml dev_invsapi_svc.yaml dev_invsweb.yaml << พังหา Config / Secret ไม่เจอ dev_invsweb_config.yaml dev_invsweb_hpa.yaml << พังต่อ ไม่มี Deployment dev_invsweb_secret.yaml dev_invsweb_svc.yaml dev_invsapi_volume.yaml
- รวม yaml ไฟล์เดียว (all-in-one.yaml) เทรวมกัน แต่มันจะยาก
ข้อดี ทุกอย่างรวมที่เดียว
ข้อเสีย พอไฟล์มันใหญ่ ยิ่ง maintain ยาก - ผสม all-in-one.yaml แบบ 2 + patch หรือ Initial Kube Object ตามไฟล์ แบบ 1+ patch
สิ่งที่ Helm มาช่วย ?
- มันมี Template Kube Object และตั้งค่า Parameter (Value.yaml) แล้วตัว Helm มันจะแอบไปสร้างไฟล์ YAML ของ K8S Object ไว้ให้ และ Apply ให้เลย
- ถ้าใช้ Helm มันช่วยจัดการหมดเลย ตั้งแต่ Install / Upgrade / Rollback / Uninstall (ต้องทำ Step Clear ของให้ดี ถ้าใช้ของชาวบ้าน อาจจะต้องไปแกะ Code ก่อน ว่าทำอะไร) แต่ถ้าเราให้ Helm จัดการแล้ว อย่าไปจัดการเองนะ
อ๋อ และความหมายของ Helm ด้วย ตอนแรกผมไปคิดถึง Helmet หมวกเกราะนักรบ 5555
Helm เป็น package manager ของ Kube ตอนนี้เป็น Gruduate Project แล้วตอนปี 2020 เราพร้อมเอาไปใช้ใน prod ได้ ถ้าใครมาจากสาย
- Desktop App มันพวก msi ที่รวมทุกอย่างไว้
- Web ที่เหมาะสม ผมว่าจะเป็นพวก .war > container ที่ข้างในมันช่อน Step ลำดับ ความซับซ้อนไว้ข้างในหมด
Helm Component
- cli/ client อารมณ์แบบ kubectl / docker command
- Chart ชุดตัวติดตั้ง โดยจะประกอบไปด้วย
- chart.yaml คำอธิบาย chart
- value.yaml เก็บค่าที่เปิดให้แก้ ในแต่ละ Kube เดี๋ยวตัว Helm มันจะไป replace value และ apply ให้่ - Release ตัว Helm ที่เราเอามาติดตั้งแล้ว มันจะบอก revision ด้วย ให้ไว้ให้ rollback
- Repo ตัวเก็บ Chart หรือ เราทำไป Share ก็ได้ โดยที่ดังๆ
- artifacthub.io อารมณ์แบบ docker hub ที่เก็บ Container ครับ ใครทำ Chart จะ push ขึ้นไปได้
- หรือ ถ้าอยากทำ Local เก็บไว้ใช้เอง ลองไปหาๆดู ตัว Sonatype Nexus Repository รองรับ Helm ด้วยนะ - Metadata - อยู่ใน K8S Secret อ๋อที่ลอง Apply แล้วชื่อ helm_xxx ถ้าใครไปตั้ง Cluster เองใช้กันเยอะๆ ต้องดูพวกสิทธิด้วย เดี๋ยวมันลั่นได้
Helm Command
Prerequisite ก่อนจะลอง Helm ต้องมี
- ความรู้เข้าใจเรื่อง Kube กันก่อน หรือ จะลองอ่านในนี้มีจดไว้
- ติดตั้ง Kube ผมใช้ของ Docker Desktop กับ ตัว Taios ที่ Set ไว้ใน PC ที่บ้านครับ ว่าจะลองของ Rancher Desktop แต่ยังไม่มีโอกาส 55
- ติดตั้ง Helm ตามนี้ครับ https://helm.sh/docs/intro/install/ ของผมลงเป็น Windows ลงผ่านตัว chocolatey สะดวกดี
ทำความรู้จัก
- ที่เก็บ helm กันเยอะๆ artifacthub.io
helm repo add <repo_name> <repo_url>
น่าจะอารมณ์แบบ git remote addhelm repo update
(น่าจะเหมือน git fetch)
ตรวจสอบ ติดตั้ง
- helm ls บอกว่าเรามี helm อะไรบ้างลงไว้
- helm install <release_name ชื่อที่เรากำหนด> <path_to_chart ของ Repo นั้นๆที่กำหนดไว้> <param>
** ต้องอ่าน doc ให้เรียบร้อยก่อนลง
helm install nginx bitnami/nginx --version 16.0.6
helm upgrade <release_name ชื่อที่เรากำหนด> <path_to_chart ของ Repo นั้นๆที่กำหนดไว้> <param>
ขยับ version ของ chart
ติดตาม และย้อนกลับ ถ้ามันแตก
- helm history <release_name> บอกว่าใน release นั้นเรามี action อะไร เช่น install / upgrade / rollback เหมือนที่ลองเล่น มันจะเก็บไว้ 10 ver นะ พอเกินมันจะเอาออกไป เข้าใจว่ามันจะ Apply ยก Set นะ
- helm rollback <release_name> <revision_id> ย้อนไป deployment ที่ snapshot ไว้
ลองดูว่า helm ยัดอะไรมาให้ นอกจากดู doc ของ helm นั้นๆ แล้วเอา Command มา List Resource และส่องๆได้ครับ
kubectl get pod
helm status <release_name> --show-resources
kubectl get all --all-namespaces -l='app.kubernetes.io/managed-by=Helm'
เอาออก
helm uninstall <release_name>
เอา release ที่ติดตั้งไว้ออกไป
ตอนลองเล่น ระหว่างอ่าน Helm Result มีเอ๊ะด้วย เพราะ Result มันต่างๆไป มี Security Issue กับ Substituted เลยลองถามคุณโจ้ดูสรุปเป็นข้อมูลที่ทีม พัฒนาใส่มาเพิ่มครับ
Softwate ตัวอื่นๆก็มีนะ ที่ลองเล่นไปพวก redmine redmine 29.0.4 · bitnami/bitnami (artifacthub.io) / nexus-repository-manager sonatype/sonatype (artifacthub.io) แปบขึ้นได้แล้ว
QA
- Q: เราใช้ helm แบบไม่มี repo ได้ไหมครับ แบบเราทำใน บ แล้ว มันมี repo แต่ตอนส่งลูกค้า zip ตัว helm ให้ลูกค้าไป ปกติตอนนี้ zip พวก yaml + image โยน ftp ไปครับ
A: ทำ Git ได้ หรือ เอาไฟล์ tar ไปให้ แต่ถ้ามี repo จะดีกว่าเรื่องการติดตาม - Q: สมมติว่าเราไปใช้ helm ชาวบ้าน ตอน upgrade มันมีแนวๆ plan บอกอะไรจะลบ หรือ เพิ่มไหมครับ หรือ ต้องไปอ่าน doc หรือ พวก git หลักของ project นั้นๆ
A: Helm มีตัว Compare / dryrun / test ช่วย - Q: Open Source Chart เหมือนจดใน Blog และ ตัว Nexus เก็บได้เหมือนกัน
Blog ท่านอื่นๆ
- บันทึกการเรียนรู้ K3S และ Helm. Medium นี้ เป็นบันทึกการเรียนรู้ K3S… | by Nakorn Rientrakrunchai | T. T. Software Solution | Sep, 2024 | Medium
- เรียน Helm essential course — day1 | by Supanut Laddayam | myorder | Sep, 2024 | Medium
จบการเรียนวันแรกและครับ ^__^ input และ output ออกมาเป็น blog เรียบร้อบ
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.