Untuk apa spec - selector - matchLabels digunakan saat membuat penempatan?

18

Dari dokumentasi Kubernetes :

Bidang pemilih menentukan cara Penyebaran menemukan Pod mana yang harus dikelola.

Tapi, saat membuat penyebaran, saya sudah menentukan templat pod sebagai bagian dari penyebaran. Jadi, mengapa saya perlu penyeleksi juga?

Apakah seharusnya digunakan seperti layanan, di mana polong sudah mulai terpisah, tetapi kemudian dibawa di bawah payung Penempatan untuk dikelola bersama?

Padi
sumber

Jawaban:

8

Jawaban untuk pertanyaan ini dapat kita temukan di bagian Penyebaran dari kubernetes.io

Jadi, mengapa saya perlu penyeleksi juga?

Kutipan di bawah ini dari dokumentasi untuk k8s v 1.14

.spec.selectoradalah bidang wajib yang menentukan pemilih label untuk Pod yang ditargetkan oleh penerapan ini.

.spec.selectorharus cocok .spec.template.metadata.labels, atau akan ditolak oleh API.

Dalam apps versi API / v1, .spec.selector dan .metadata.labels tidak default ke .spec.template.metadata.labels jika tidak disetel. Jadi mereka harus diatur secara eksplisit . Perhatikan juga bahwa .spec.selector tidak dapat diubah setelah pembuatan Penempatan di apps / v1.

Penyebaran dapat menghentikan Pod yang labelnya cocok dengan pemilih jika templatnya berbeda dari .spec.template atau jika jumlah total Pods tersebut melebihi .spec.replicas. Ini menampilkan Pods baru dengan .spec.template jika jumlah Pods kurang dari jumlah yang diinginkan.

Pod sudah dimulai secara terpisah, tetapi kemudian dibawa di bawah payung Penempatan untuk dikelola bersama?

Secara sederhana, Tidak

Catatan: Anda tidak boleh membuat pod lain yang labelnya cocok dengan pemilih ini, baik secara langsung, dengan membuat yang lain Deployment, atau dengan membuat pengontrol lain seperti a ReplicaSetatau a ReplicationController. Jika Anda melakukannya, yang pertama Deploymentberpikir bahwa itu membuat pod lainnya. Kubernetestidak menghentikan Anda dari melakukan ini. Jika Anda memiliki banyak pengontrol yang memiliki pemilih yang tumpang tindih, pengontrol akan saling bertarung dan tidak akan berperilaku dengan benar.

alexander.polomodov
sumber
5
Jadi untuk apa ini digunakan? Sepertinya Anda harus selalu membuat pemilih cocok dengan label spesifikasi ... Apakah ada beberapa kasus di mana berguna untuk tidak melakukannya?
Victor Noël
4
Tidak benar-benar menjawab pertanyaan Mengapa? - Mengapa matchLabels ada dan harus cocok .spec.template.metadata.labels? Apa gunanya itu, seperti specyang didefinisikan di bawah ini Deploymentsehingga jelas apa Pods dimulai untuk Penyebaran.
Ivan
2
Siapa pun yang menabrak diskusi ini harus memeriksa dokumentasi terbaru. Misalnya, saat ini, .spec.selector bukan bidang opsional. Ini adalah bidang wajib diisi. kubernetes.io/docs/concepts/workloads/controllers/deployment
SoftwareTheory
Terima kasih banyak atas komentar Anda. Saya berpikir bahwa dalam dokumentasi baru penulis telah memperbaiki opsional yang diperlukan, karena dalam dokumen lama bidang ini dikatakan opsional tetapi pada baris berikutnya penulis menambahkan bahwa bidang ini harus ditetapkan secara eksplisit :) Jadi, efektif bidang ini juga diperlukan
alexander.polomodov
@SoftwareTheory Ya, tetapi masih tidak menjelaskan mengapa itu diperlukan, karena template spec Pod didefinisikan di bawah ini pula.
user168317