spec-selector - matchLabels ใช้สำหรับอะไรในขณะที่สร้างการปรับใช้?


18

จากเอกสารของ Kubernetes :

ฟิลด์ตัวเลือกจะกำหนดวิธีการปรับใช้เพื่อค้นหา Pods ที่จะจัดการ

แต่เมื่อสร้างการปรับใช้ฉันได้ระบุเทมเพลตพ็อดแล้วเป็นส่วนหนึ่งของการปรับใช้ ดังนั้นทำไมฉันต้องมีตัวเลือกด้วย?

มันควรจะใช้เช่นบริการที่มีการเริ่มต้นฝักแยกต่างหาก แต่ต่อมาภายใต้การปรับใช้เพื่อจัดการร่วมกัน?

คำตอบ:


8

คำตอบสำหรับคำถามนี้เราสามารถหาได้จากส่วนการปรับใช้จาก 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ไม่ได้หยุดคุณจากการทำเช่นนี้ หากคุณมีตัวควบคุมหลายตัวที่มีตัวเลือกที่ทับซ้อนกันตัวควบคุมจะต่อสู้กันเองและจะทำงานไม่ถูกต้อง


5
แล้วมันใช้ทำอะไร? ดูเหมือนว่าคุณควรเลือกให้ตรงกับฉลากของข้อมูลจำเพาะเสมอ ... มีบางกรณีที่มีประโยชน์ที่จะไม่ทำหรือไม่?
Victor Noël

4
ไม่ตอบคำถามจริงๆหรือ - ทำไมต้องมี matchLabels และต้องตรงกัน.spec.template.metadata.labels? จุดประสงค์ของมันspecคืออะไรตามที่ได้นิยามไว้ด้านล่างแล้วDeploymentดังนั้นจึงเป็นที่ชัดเจนว่า Pods ใดบ้างที่เริ่มการปรับใช้
Ivan

2
ทุกคนที่เข้าร่วมการสนทนานี้ควรตรวจสอบเอกสารล่าสุด ตัวอย่างเช่นในปัจจุบัน. spec.selector ไม่ใช่ฟิลด์ตัวเลือก มันเป็นเขตข้อมูลที่จำเป็น kubernetes.io/docs/concepts/workloads/controllers/deployment
ซอฟต์แวร์

ขอบคุณมากสำหรับความคิดเห็นของคุณ ฉันคิดว่าในผู้เขียนเอกสารใหม่ได้แก้ไขตัวเลือกที่จำเป็นเพราะในเอกสารเก่าฟิลด์นี้บอกว่าเป็นตัวเลือก แต่ในผู้เขียนบรรทัดถัดไปเพิ่มว่าฟิลด์นี้จะต้องตั้งค่าอย่างชัดเจน :) ดังนั้นฟิลด์นี้ก็ต้องมีประสิทธิภาพ
alexander.polomodov

@ ซอฟต์แวร์ทฤษฎีใช่ แต่ก็ยังไม่สามารถอธิบายได้ว่าทำไมถึงต้องมีเนื่องจากเทมเพลต spec ของ Pod ถูกกำหนดไว้ด้านล่าง
user168317
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.