1. วัตถุประสงค์
Skaffold เป็นเครื่องมือที่จัดการเวิร์กโฟลว์สำหรับการสร้าง พุช และการทำให้แอปพลิเคชันใช้งานได้ คุณใช้ Skaffold เพื่อกำหนดค่าพื้นที่ทำงานสำหรับการพัฒนาในเครื่องได้อย่างง่ายดาย เพิ่มประสิทธิภาพวงจรการพัฒนาภายใน และผสานรวมกับเครื่องมืออื่นๆ เช่น Kustomize และ Helm เพื่อช่วยจัดการไฟล์ Manifest ของ Kubernetes ได้
ในบทแนะนำนี้ คุณจะได้เรียนรู้แนวคิดหลักบางอย่างของ Skaffold ใช้เพื่อทำให้วงจรการพัฒนาภายในเป็นแบบอัตโนมัติ แล้วจึงนำแอปพลิเคชันไปใช้งาน
คุณจะได้รับสิ่งต่อไปนี้
- กำหนดค่าและเปิดใช้ Skaffold สำหรับการพัฒนาในเครื่อง
- สร้างและเรียกใช้แอปพลิเคชัน Golang อย่างง่าย
- จัดการการติดตั้งใช้งานแอปพลิเคชันในเครื่องด้วย Skaffold
- แสดงผลไฟล์ Manifest และทำให้แอปพลิเคชันใช้งานได้
2. ก่อนจะเริ่มต้น
การเตรียม Workspace
- เปิดโปรแกรมแก้ไข Cloud Shell โดยไปที่ URL ต่อไปนี้
https://shell.cloud.google.com
อนุญาตคุกกี้ของบุคคลที่สาม คลิก "เว็บไซต์ไม่ทำงาน" แล้วคลิก "อนุญาตคุกกี้"


- หากยังไม่ได้ดำเนินการ ให้โคลนแหล่งที่มาของแอปพลิเคชันในหน้าต่างเทอร์มินัลด้วยคำสั่งต่อไปนี้
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- เปลี่ยนเป็นไดเรกทอรีที่เก็บที่โคลนแล้ว
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
- ตั้งค่าพื้นที่ทำงาน Cloud Shell เป็นไดเรกทอรีปัจจุบันโดยเรียกใช้คำสั่งต่อไปนี้
cloudshell workspace .
การเตรียมโปรเจ็กต์
- ตรวจสอบว่าได้ตั้งค่าโปรเจ็กต์ Google Cloud อย่างถูกต้องโดยเรียกใช้คำสั่งต่อไปนี้
gcloud config set project {{project-id}}
3. เริ่มต้นใช้งาน Skaffold
- เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างไฟล์การกำหนดค่า Skaffold ระดับบนสุด
skaffold.yaml
cat <<EOF > skaffold.yaml
apiVersion: skaffold/v2beta21
kind: Config
metadata:
name: getting-started-kustomize
build:
tagPolicy:
gitCommit:
ignoreChanges: true
artifacts:
- image: skaffold-kustomize
context: app
docker:
dockerfile: Dockerfile
deploy:
kustomize:
paths:
- overlays/dev
profiles:
- name: staging
deploy:
kustomize:
paths:
- overlays/staging
- name: prod
deploy:
kustomize:
paths:
- overlays/prod
EOF
- เปิดไฟล์
skaffold.yamlในแผง IDE นี่คือไฟล์การกำหนดค่าระดับบนสุดที่กำหนดไปป์ไลน์ Skaffold
โปรดสังเกตรูปแบบ YAML ที่คล้ายกับ Kubernetes และส่วนต่อไปนี้ใน YAML
builddeployprofiles
ส่วนเหล่านี้จะกำหนดวิธีสร้างและติดตั้งใช้งานแอปพลิเคชัน รวมถึงโปรไฟล์สำหรับเป้าหมายการติดตั้งใช้งานแต่ละรายการ
ดูข้อมูลเพิ่มเติมเกี่ยวกับรายการขั้นตอน Skaffold ทั้งหมดได้ในเอกสารประกอบเกี่ยวกับขั้นตอนไปป์ไลน์ Skaffold
4. สร้าง
ส่วน build มีการกำหนดค่าที่กำหนดวิธีสร้างแอปพลิเคชัน ในกรณีนี้ คุณจะเห็นการกำหนดค่าวิธีจัดการแท็ก git รวมถึงส่วน artifacts ที่กำหนดรูปภาพคอนเทนเนอร์ซึ่งประกอบกันเป็นแอปพลิเคชัน
นอกจากนี้ ในส่วนนี้คุณจะเห็นข้อมูลอ้างอิงถึง Dockerfile ที่ใช้สร้างรูปภาพ นอกจากนี้ Skaffold ยังรองรับเครื่องมือบิลด์อื่นๆ เช่น Jib, Maven, Gradle, Buildpacks, Bazel และสคริปต์ที่กำหนดเอง คุณอ่านข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่านี้ได้ในเอกสารประกอบการสร้าง Skaffold
5. ทำให้ใช้งานได้
ส่วน deploy มีการกำหนดค่าที่กำหนดวิธีติดตั้งใช้งานแอปพลิเคชัน ในกรณีนี้ คุณจะเห็นตัวอย่างการติดตั้งใช้งานเริ่มต้นที่กำหนดค่า Skaffold ให้ใช้เครื่องมือ Kustomize
เครื่องมือ Kustomize มีฟังก์ชันในการสร้างไฟล์ Manifest ของ Kubernetes โดยการรวมชุดไฟล์ YAML ของคอมโพเนนต์ทั่วไป (ในไดเรกทอรี base) เข้ากับ "การซ้อนทับ" อย่างน้อย 1 รายการ ซึ่งโดยทั่วไปจะสอดคล้องกับเป้าหมายการติดตั้งใช้งานอย่างน้อย 1 รายการ ซึ่งมักจะเป็น dev, test, staging และ production หรือที่คล้ายกัน
ในตัวอย่างนี้ คุณจะเห็นการซ้อนทับ 2 รายการสำหรับเป้าหมาย 3 รายการ ได้แก่ dev, staging และ prod โดยจะใช้การซ้อนทับ dev ในระหว่างการพัฒนาในเครื่อง และใช้การซ้อนทับ staging และ prod เมื่อทำการติดตั้งใช้งานโดยใช้ Skaffold
6. โปรไฟล์
ส่วน profiles มีการกำหนดค่าที่กำหนดการกำหนดค่าการสร้าง การทดสอบ และการติดตั้งใช้งานสำหรับบริบทต่างๆ โดยปกติแล้วบริบทที่แตกต่างกันคือสภาพแวดล้อมที่แตกต่างกันในไปป์ไลน์การติดตั้งใช้งานแอปพลิเคชัน เช่น staging หรือ prod ในตัวอย่างนี้ ซึ่งหมายความว่าคุณสามารถจัดการไฟล์ Manifest ที่มีเนื้อหาแตกต่างกันสำหรับสภาพแวดล้อมเป้าหมายต่างๆ ได้อย่างง่ายดายโดยไม่ต้องกำหนดค่าบอยเลอร์เพลตซ้ำ
การกำหนดค่าในส่วน profiles สามารถแทนที่หรือแก้ไขรายการใดก็ได้จากการกำหนดค่าหลัก (เช่น ส่วน build, test หรือ deploy)
ตัวอย่างเช่น ให้เปิดไฟล์ overlays > prod > deployment.yaml โปรดสังเกตว่ามีการกำหนดค่าจำนวนรีพลิกาสำหรับแอปพลิเคชันที่นี่เป็น 3 ซึ่งจะลบล้างการกำหนดค่าพื้นฐาน
การไปยังส่วนต่างๆ ของซอร์สโค้ดของแอปพลิเคชัน
- เปิดไฟล์
app > main.goต่อไปนี้ในแผง IDE นี่คือแอปพลิเคชัน Golang แบบง่ายที่เขียนสตริงไปยังstdoutทุกวินาที - โปรดทราบว่าแอปพลิเคชันจะแสดงชื่อของพ็อด Kubernetes ที่แอปพลิเคชันทำงานอยู่ด้วย
การดู Dockerfile
- เปิดไฟล์
app > Dockerfileในแผง IDE ไฟล์นี้มีลำดับของคำสั่งเพื่อสร้างอิมเมจคอนเทนเนอร์แอปพลิเคชันสำหรับไฟล์main.goและมีการอ้างอิงในไฟล์skaffold.yamlระดับบนสุด
7. การพัฒนาด้วย Skaffold
การกำหนดค่าสภาพแวดล้อม Kubernetes
- เรียกใช้คำสั่งต่อไปนี้เพื่อให้แน่ใจว่าคลัสเตอร์ Kubernetes ในเครื่องทำงานและได้รับการกำหนดค่าแล้ว
minikube start
ซึ่งอาจใช้เวลาหลายนาที คุณควรเห็นเอาต์พุตต่อไปนี้หากคลัสเตอร์เริ่มต้นสำเร็จ
Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
- เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างเนมสเปซ Kubernetes สำหรับ
dev,stagingและprod
kubectl apply -f namespaces.yaml
คุณควรเห็นเอาต์พุตต่อไปนี้
namespace/dev created namespace/staging created namespace/prod created
การใช้ Skaffold สำหรับการพัฒนาในเครื่อง
- เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างแอปพลิเคชันและนำไปใช้งานในคลัสเตอร์ Kubernetes ในเครื่องที่ทำงานใน Cloud Shell
skaffold dev
คุณควรเห็นกระบวนการสร้างคอนเทนเนอร์แอปพลิเคชันทำงาน ซึ่งอาจใช้เวลา 1 นาที จากนั้นเอาต์พุตของแอปพลิเคชันจะทำซ้ำทุกวินาที
[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx
โปรดทราบว่าชื่อพ็อดที่แน่นอนจะแตกต่างจากเอาต์พุตทั่วไปที่ระบุไว้ข้างต้น
ทำการเปลี่ยนแปลงแอปพลิเคชัน
เมื่อแอปพลิเคชันทํางานในคลัสเตอร์ Kubernetes ในเครื่องแล้ว คุณสามารถทําการเปลี่ยนแปลงโค้ดได้ และ Skaffold จะสร้างใหม่และทําให้แอปพลิเคชันใช้งานได้ในคลัสเตอร์อีกครั้งโดยอัตโนมัติ
- เปิดไฟล์
app > main.goในแผง IDE แล้วเปลี่ยนสตริงเอาต์พุต
"Hello world from pod %s!\n"
ถึง:
"Hello Skaffold world from pod %s!\n"
เมื่อทำการเปลี่ยนแปลงแล้ว คุณควรเห็น Skaffold สร้างอิมเมจใหม่และนำไปใช้กับคลัสเตอร์อีกครั้ง โดยการเปลี่ยนแปลงในเอาต์พุตจะปรากฏในหน้าต่างเทอร์มินัล
- ตอนนี้ในไฟล์ "app > main.go" ในแผง IDE ให้เปลี่ยนบรรทัดต่อไปนี้
time.Sleep(time.Second * 1)
ถึง
time.Sleep(time.Second * 10)
อีกครั้งที่คุณควรเห็นแอปพลิเคชันที่สร้างใหม่และนำไปใช้งานอีกครั้ง โดยบรรทัดเอาต์พุตจะปรากฏทุกๆ 10 วินาที
การเปลี่ยนแปลงการกำหนดค่า Kubernetes
จากนั้นคุณจะทำการเปลี่ยนแปลงการกำหนดค่า Kubernetes และ Skaffold จะทำการติดตั้งใช้งานอีกครั้งโดยอัตโนมัติ
- เปิดไฟล์
base > deployment.yamlใน IDE แล้วเปลี่ยนบรรทัดต่อไปนี้
replicas: 1
ถึง
replicas: 2
เมื่อนำแอปพลิเคชันไปใช้งานอีกครั้ง คุณควรเห็นพ็อด 2 รายการทำงาน โดยแต่ละรายการจะมีชื่อต่างกัน
- ตอนนี้ให้เปลี่ยนบรรทัดเดียวกันในไฟล์
base > deployment.yamlกลับเป็น
replicas: 1
คุณควรเห็นพ็อด 1 รายการถูกนำออกจากบริการเพื่อให้เหลือเพียง 1 รายการ
- สุดท้าย ให้กด
Ctrl-Cในหน้าต่างเทอร์มินัลเพื่อหยุดการพัฒนา Skaffold ในเครื่อง
การตัดรุ่น
จากนั้นคุณจะสร้างรีลีสโดยสร้างอิมเมจรีลีสและติดตั้งใช้งานในคลัสเตอร์
- เรียกใช้คำสั่งต่อไปนี้เพื่อสร้างรุ่น
skaffold build --file-output artifacts.json
คำสั่งนี้จะสร้างอิมเมจสุดท้าย (หากจำเป็น) และส่งรายละเอียดรุ่นไปยังไฟล์ artifacts.json
หากต้องการใช้เครื่องมืออย่าง Cloud Deploy เพื่อติดตั้งใช้งานคลัสเตอร์ ไฟล์นี้จะมีข้อมูลการเผยแพร่ ซึ่งหมายความว่าอาร์ติแฟกต์จะเปลี่ยนแปลงไม่ได้ในเส้นทางสู่การเผยแพร่
- เรียกใช้คำสั่งต่อไปนี้เพื่อดูเนื้อหาของไฟล์
artifacts.json
cat artifacts.json | jq
โปรดทราบว่าไฟล์มีข้อมูลอ้างอิงถึงรูปภาพที่จะใช้ในการติดตั้งใช้งานขั้นสุดท้าย
การติดตั้งใช้งานในเวอร์ชันทดลองใช้
- เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งใช้งานรุ่นโดยใช้โปรไฟล์
staging
skaffold deploy --profile staging --build-artifacts artifacts.json --tail
เมื่อการติดตั้งใช้งานเสร็จสมบูรณ์แล้ว คุณควรเห็นเอาต์พุตจาก 2 พ็อดคล้ายกับเอาต์พุตต่อไปนี้
[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
- กด Ctrl-C ในหน้าต่างเทอร์มินัลเพื่อหยุดเอาต์พุตของ Skaffold
- เรียกใช้คำสั่งต่อไปนี้เพื่อดูว่าแอปพลิเคชันทำงานในคลัสเตอร์
kubectl get all --namespace staging
คุณควรเห็นชื่อพ็อดที่แตกต่างกัน 2 ชื่อ เนื่องจากโปรไฟล์ staging สำหรับแอปพลิเคชันระบุว่าควรมีรีพลิเคชัน 2 รายการในการติดตั้งใช้งาน
การติดตั้งใช้งานในเวอร์ชันที่ใช้งานจริง
- ตอนนี้ให้เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งใช้งานรุ่นโดยใช้โปรไฟล์
prod
skaffold deploy --profile prod --build-artifacts artifacts.json --tail
เมื่อการติดตั้งใช้งานเสร็จสมบูรณ์แล้ว คุณควรเห็นเอาต์พุตจากพ็อด 3 รายการคล้ายกับเอาต์พุตต่อไปนี้
[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
- กด Ctrl-C ในหน้าต่างเทอร์มินัลเพื่อหยุดเอาต์พุตของ Skaffold
คุณควรเห็นชื่อพ็อดที่แตกต่างกัน 3 ชื่อ เนื่องจากโปรไฟล์ prod สำหรับแอปพลิเคชันระบุว่าควรมีการจำลอง 3 รายการในการติดตั้งใช้งาน
- เรียกใช้คำสั่งต่อไปนี้เพื่อดูว่าแอปพลิเคชันทำงานในคลัสเตอร์
kubectl get all --namespace prod
คุณควรเห็นเอาต์พุตที่มีบรรทัดคล้ายกับบรรทัดต่อไปนี้ซึ่งแสดงการติดตั้งใช้งาน prod
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/skaffold-kustomize-prod 3/3 3 3 16m
นอกจากนี้ คุณควรเห็นพ็อดแอปพลิเคชัน 3 พ็อดทํางานอยู่
NAME READY STATUS RESTARTS AGE pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m
8. ยินดีด้วย
ยินดีด้วย คุณได้ทําUnderstanding Skaffoldแล็บเสร็จแล้ว และได้เรียนรู้วิธีกําหนดค่าและใช้ Skaffold สําหรับการพัฒนาในเครื่องและการติดตั้งใช้งานแอปพลิเคชัน
ขั้นตอนต่อไปที่ทำได้
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Skaffold
ล้างข้อมูล
- เรียกใช้คำสั่งต่อไปนี้เพื่อปิดคลัสเตอร์ในเครื่อง
minikube delete