งานย้ายฐานข้อมูลแบบ pre-upgrade
ใส่คำอธิบายกำกับให้ Job ทำงานก่อนการนำระบบออกใช้
งานย้ายฐานข้อมูลแบบ pre-upgrade เป็นบทเรียน Helm Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Helm Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Helm Academy มีบทเรียนทั้งหมด 4 บทเรียน
กรณีใช้งานจริง
ก่อนนำโค้ดแอปใหม่ออกใช้งาน สคีมาฐานข้อมูลของคุณมักต้องได้รับการย้ายก่อน ฮุก pre-upgrade เป็นจุดที่เหมาะอย่างยิ่งสำหรับการเรียกใช้การย้ายสคีมาอย่างปลอดภัย
เหตุผลที่ต้องทำก่อนนำออกใช้งาน
การทำงานเป็น pre-upgrade หมายความว่าสคีมาจะพร้อมก่อนพ็อดใหม่เริ่มทำงาน โค้ดใหม่จึงไม่ต้องติดต่อกับฐานข้อมูลเก่าที่มีโครงสร้างไม่ตรงกัน
"helm.sh/hook": pre-upgradeเริ่มด้วย Job
การย้ายสคีมาจะทำงานหนึ่งครั้งแล้วจบลง ดังนั้นให้สร้างแบบจำลองเป็น Kubernetes Job Helm จะรอให้ Job ทำงานเสร็จก่อนดำเนินการอัปเกรดต่อ
apiVersion: batch/v1
kind: Job
metadata:
name: db-migrateเพิ่มคำอธิบายกำกับฮุก
กำหนดให้ Job เป็นฮุกในเมทาดาทา คำอธิบายกำกับ helm.sh/hook ที่ตั้งค่าเป็น pre-upgrade จะเปลี่ยน Job ปกตินี้ให้เป็นฮุก
metadata:
annotations:
"helm.sh/hook": pre-upgradeเรียกใช้คำสั่งย้ายสคีมา
คอนเทนเนอร์ของ Job จะเรียกใช้เครื่องมือย้ายสคีมาของคุณ ให้ชี้ไปยังฐานข้อมูลเดียวกับที่แอปใช้ เพื่อให้การเปลี่ยนแปลงสคีมาเกิดขึ้นในที่ที่ถูกต้อง
spec:
containers:
- name: migrate
image: myapp:1.4
command: ["./migrate", "up"]อย่ารีสตาร์ตเมื่อเกิดข้อผิดพลาด
ตั้งค่า restartPolicy ของ Job เป็น Never หรือ OnFailure การย้ายสคีมาที่วนซ้ำไม่สิ้นสุดจะขัดขวางการอัปเกรดและไม่ยอมให้ Helm ดำเนินการต่อ
spec:
template:
spec:
restartPolicy: Neverสร้างแท็กอิมเมจด้วยเทมเพลต
ทำให้เครื่องมือย้ายสคีมาใช้เวอร์ชันเดียวกับแอปด้วยการสร้างแท็กผ่านเทมเพลต ใช้ .Values.image.tag เดียวกับที่การนำไปใช้งานอ่าน เพื่อให้เวอร์ชันตรงกัน
image: "myapp:{{ .Values.image.tag }}"Helm หยุดรอจนกว่าจะเสร็จ
เนื่องจากเป็นฮุก pre-upgrade Helm จะหยุดการอัปเกรดไว้จนกว่า Job จะรายงานความสำเร็จ หากการย้ายสคีมาล้มเหลว การนำออกใช้งานจะไม่เกิดขึ้น 🛑
ล้างข้อมูลหลังสำเร็จ
มิฉะนั้น Job สำหรับการย้ายสคีมาเก่าจะสะสมเพิ่มขึ้น ให้จับคู่ฮุกกับ hook-delete-policy เพื่อให้ลบ Job ที่ทำงานสำเร็จแล้ว แทนที่จะปล่อยให้เนมสเปซรก
"helm.sh/hook-delete-policy": hook-succeededชื่อที่ไม่ซ้ำช่วยได้
Job ของฮุกจะเปลี่ยนแปลงไม่ได้หลังสร้างแล้ว ดังนั้นชื่อคงที่อาจชนกันในการอัปเกรดครั้งถัดไป การใส่ .Release.Revision ไว้ในชื่อจะทำให้การทำงานแต่ละครั้งแยกจากกัน
name: db-migrate-{{ .Release.Revision }}ทดสอบด้วยการจำลองการทำงาน
ก่อนอัปเกรดจริง ให้เรนเดอร์ชาร์ตเพื่อยืนยันว่าฮุกมีลักษณะถูกต้อง dry-run จะแสดงแม니เฟสต์ Job ที่ Helm จะสร้างโดยไม่แตะต้องคลัสเตอร์
helm upgrade myapp ./mychart --dry-runตรวจสอบอย่างรวดเร็ว
คุณต้องการให้การย้ายสคีมาทำงานก่อนพ็อดแอปใหม่จะเริ่มทำงานระหว่างการอัปเกรด
ทบทวน
คุณสร้างแบบจำลองการย้ายสคีมาเป็น Job แบบ pre-upgrade ตั้งค่า restartPolicy เป็น Never และให้ Helm หยุดรอจนกว่าจะสำเร็จก่อนนำโค้ดใหม่ออกใช้งาน 🗄️
คำถามที่พบบ่อย
บทเรียน “งานย้ายฐานข้อมูลแบบ pre-upgrade” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “งานย้ายฐานข้อมูลแบบ pre-upgrade” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Helm Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Helm Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “งานย้ายฐานข้อมูลแบบ pre-upgrade”
ใส่คำอธิบายกำกับให้ Job ทำงานก่อนการนำระบบออกใช้ คุณปฏิบัติ Helm Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Helm Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Helm Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “งานย้ายฐานข้อมูลแบบ pre-upgrade” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Helm Academy นี้ได้ไหม
ได้ บทเรียน Helm Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Hook คืออะไรและทำงานเมื่อใด
- งานย้ายฐานข้อมูลแบบ pre-upgrade
- น้ำหนักและลำดับของ Hook
- นโยบายการลบ Hook