1. วัตถุประสงค์
Skaffold คือเครื่องมือที่จะช่วยจัดการเวิร์กโฟลว์สำหรับการสร้าง การพุช และทำให้แอปพลิเคชันของคุณใช้งานได้ คุณสามารถใช้ Skaffold เพื่อกำหนดค่าพื้นที่ทำงานการพัฒนาในเครื่อง ปรับปรุงลูปการพัฒนาภายในได้ง่ายๆ และผสานรวมกับเครื่องมืออื่นๆ เช่น Kustomize และ Helm เพื่อช่วยจัดการไฟล์ Manifest ของ Kubernetes
ในบทแนะนำนี้ คุณจะได้ศึกษาแนวคิดหลักบางอย่างของ Skaffold และใช้แนวคิดดังกล่าวเพื่อทำให้ลูปการพัฒนาภายในของคุณทำงานโดยอัตโนมัติ จากนั้นจึงนำแอปพลิเคชันไปใช้งาน
คุณจะ:
- กำหนดค่าและเปิดใช้งาน Skaffold สำหรับการพัฒนาในพื้นที่
- สร้างและเรียกใช้แอปพลิเคชันโกลังแบบง่าย
- จัดการการทำให้แอปพลิเคชันใช้งานได้ในเครื่องด้วย Skaffold
- แสดงผลไฟล์ Manifest และทำให้แอปพลิเคชันของคุณใช้งานได้
2. ก่อนจะเริ่ม
กำลังเตรียมพื้นที่ทำงาน
- เปิดเครื่องมือแก้ไข 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
build
deploy
profiles
ส่วนเหล่านี้จะอธิบายถึงวิธีสร้างและติดตั้งใช้งานแอปพลิเคชัน รวมถึงโปรไฟล์สำหรับเป้าหมายการทำให้ใช้งานได้แต่ละรายการ
อ่านเพิ่มเติมเกี่ยวกับรายการขั้นตอนทั้งหมดของ Skaffold ได้ในเอกสารประกอบของ Skaffold Pipeline Stages
4. สร้าง
ส่วน build
มีการกำหนดค่าที่ระบุวิธีสร้างแอปพลิเคชัน ในกรณีนี้ คุณสามารถดูการกำหนดค่าสำหรับวิธีจัดการแท็ก git
รวมถึงส่วน artifacts
ที่กำหนดอิมเมจคอนเทนเนอร์ที่ประกอบขึ้นเป็นแอปพลิเคชัน
นอกจากนี้ ในส่วนนี้คุณจะเห็นการอ้างอิงไปยัง Dockerfile
ที่จะใช้ในการสร้างรูปภาพด้วย นอกจากนี้ Skaffold ยังรองรับเครื่องมือสร้างอื่นๆ ด้วย เช่น Jib
, Maven
, Gradle
, Buildpacks
ที่ดำเนินการบนระบบคลาวด์, Bazel
และสคริปต์ที่กำหนดเอง อ่านข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่านี้ได้ในเอกสารประกอบของ Skaffold Build
5. ทำให้ใช้งานได้
ส่วน deploy
มีการกำหนดค่าที่ระบุวิธีทำให้แอปพลิเคชันใช้งานได้ ในกรณีนี้ คุณสามารถดูตัวอย่างการติดตั้งใช้งานเริ่มต้นที่กำหนดค่า Skaffold ให้ใช้เครื่องมือ Kustomize
ได้
เครื่องมือ Kustomize
มีฟังก์ชันการทำงานสำหรับการสร้างไฟล์ Manifest ของ Kubernetes โดยรวมชุดไฟล์ YAML ของคอมโพเนนต์ทั่วไป (ภายใต้ไดเรกทอรี base
) กับ "การวางซ้อน" อย่างน้อย 1 รายการ ซึ่งโดยทั่วไปจะสอดคล้องกับเป้าหมายการติดตั้งใช้งานอย่างน้อย 1 รายการ ซึ่งโดยปกติแล้วจะเป็น dev, test, staging และการใช้งานจริง หรือที่คล้ายกัน
ในตัวอย่างนี้ คุณจะเห็นการวางซ้อน 2 รายการสำหรับเป้าหมาย 3 รายการ ได้แก่ dev, staging และ prod ระบบจะใช้การวางซ้อน dev ระหว่างการพัฒนาในเครื่อง รวมถึงการวางซ้อน staging และ prod เมื่อติดตั้งใช้งานด้วย Skaffold
6. โปรไฟล์
ส่วน profiles
มีการกำหนดค่าที่กำหนดการกำหนดค่าบิลด์ การทดสอบ และการติดตั้งใช้งานสำหรับบริบทต่างๆ โดยทั่วไปบริบทที่แตกต่างกันจะเป็นสภาพแวดล้อมที่แตกต่างกันในไปป์ไลน์การติดตั้งใช้งานแอปพลิเคชัน เช่น staging
หรือ prod
ในตัวอย่างนี้ ซึ่งหมายความว่าคุณสามารถจัดการไฟล์ Manifest ที่เนื้อหาจำเป็นต้องแตกต่างกันสำหรับสภาพแวดล้อมเป้าหมายต่างๆ ได้อย่างง่ายดายโดยไม่ต้องกำหนดค่า Boilerplate ซ้ำ
การกำหนดค่าในส่วน 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
คุณควรเห็นกระบวนการสร้างคอนเทนเนอร์ของแอปพลิเคชันทำงานอยู่ ซึ่งอาจใช้เวลาสักครู่ จากนั้นเอาต์พุตแอปพลิเคชันจะเกิดซ้ำทุกวินาที:
[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 สร้างอิมเมจอีกครั้งและทำให้ใช้งานได้กับคลัสเตอร์อีกครั้ง โดยคุณจะเห็นการเปลี่ยนแปลงในเอาต์พุตในหน้าต่างเทอร์มินัล
- ไปที่ไฟล์ "แอป >" ด้วย 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
คุณควรเห็นพ็อดใดพ็อดหนึ่งถูกนำออกจากบริการเพื่อให้เหลือเพียงพ็อดนั้น
- สุดท้าย ให้กด
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
คุณควรเห็นเอาต์พุตที่มีบรรทัดที่คล้ายกับข้อความต่อไปนี้ซึ่งแสดงการติดตั้งใช้งานเวอร์ชันที่ใช้งานจริง
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