เรียนๆจดๆ Helm#01 Introduction

สำหรับ Blog นี้จะเป็นจดๆ ที่ได้จากเรียนจาก Course Helm Esstential ของทางคุณโจโจ้@Jumpbox ครับ สำหรับวันแรกที่จดมาจะประมาณนี้ครับ

เทคนิคการเรียนรู้

คิดบวกกับตัวเอง หลายเรา เราชื่นชมคนอื่น แต่กดดันตัวเอง ว่าทำไมไม่ได้ เราเป็นไปไม่ได้หรอก บราๆ จริงๆ แล้วมันเทคนิคที่ช่วยจะเป็นตัว 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 เราทำอย่างไร ?

  1. แยกแต่ละ 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
  1. รวม yaml ไฟล์เดียว (all-in-one.yaml) เทรวมกัน แต่มันจะยาก
    ข้อดี ทุกอย่างรวมที่เดียว
    ข้อเสีย พอไฟล์มันใหญ่ ยิ่ง maintain ยาก
  2. ผสม 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

ถามคำแปล Google มาและ

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 ต้องมี

ทำความรู้จัก

  • ที่เก็บ helm กันเยอะๆ artifacthub.io
  • helm repo add <repo_name> <repo_url> น่าจะอารมณ์แบบ git remote add
  • helm 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 ท่านอื่นๆ

จบการเรียนวันแรกและครับ ^__^ input และ output ออกมาเป็น blog เรียบร้อบ


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.