คำตอบสำหรับคำถามนี้เราสามารถหาได้จากส่วนการปรับใช้จาก kubernetes.io
ดังนั้นทำไมฉันต้องมีตัวเลือกด้วย?
คำพูดด้านล่างจากเอกสารสำหรับ k8s v 1.14
.spec.selector
เป็นฟิลด์บังคับที่ระบุตัวเลือกป้ายกำกับสำหรับ Pod ที่กำหนดเป้าหมายโดยการปรับใช้นี้
.spec.selector
ต้องตรงกัน.spec.template.metadata.labels
มิฉะนั้น API จะถูกปฏิเสธ
ใน API เวอร์ชัน apps / v1, .spec.selector และ. metadata.labels จะไม่ใช้ค่าเริ่มต้นเป็น. spec.template.metadata.labels หากไม่ได้ตั้งค่าไว้ ดังนั้นพวกเขาจึงต้องมีการกำหนดอย่างชัดเจน นอกจากนี้โปรดทราบว่า. spec.selector จะไม่เปลี่ยนรูปหลังจากสร้าง Deployment ในแอพ / v1
การปรับใช้อาจยุติ Pods ที่มีป้ายกำกับตรงกับตัวเลือกหากเทมเพลตของพวกเขาแตกต่างจาก. spec.template หรือถ้าจำนวนรวมของ Pods ดังกล่าวเกินกว่า. spec.replicas มันจะสร้าง Pod ใหม่พร้อมกับ .sp.template หากจำนวน Pods นั้นน้อยกว่าจำนวนที่ต้องการ
ฝักกำลังเริ่มต้นแยกจากกัน แต่ต่อมาถูกนำมาอยู่ภายใต้การปรับใช้เพื่อจัดการด้วยกันไหม
พูดง่ายๆ
หมายเหตุ: คุณไม่ควรสร้างฝักอื่น ๆ ที่มีป้ายชื่อตรงกับตัวเลือกนี้ทั้งทางตรงโดยการสร้างอีกDeployment
หรือโดยการสร้างตัวควบคุมอื่น ๆ เช่นหรือReplicaSet
ReplicationController
หากคุณทำเช่นนั้นคนแรกDeployment
คิดว่ามันสร้างพ็อดอื่น ๆ เหล่านี้ Kubernetes
ไม่ได้หยุดคุณจากการทำเช่นนี้ หากคุณมีตัวควบคุมหลายตัวที่มีตัวเลือกที่ทับซ้อนกันตัวควบคุมจะต่อสู้กันเองและจะทำงานไม่ถูกต้อง