Pemilih Node dan Afinitas
Kendalikan lokasi penjadwalan Pod menggunakan pemilih node serta aturan afinitas node dan Pod yang lebih ekspresif.
Pemilih Node dan Afinitas adalah pelajaran DevOps Bootcamp gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar DevOps Bootcamp, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus DevOps Bootcamp mencakup 4 pelajaran total.
Mengontrol Penempatan Pod
Secara bawaan, Kubernetes menjadwalkan Pod pada node apa pun yang tersedia. Namun, bagaimana jika Anda memerlukan kontrol yang lebih besar?
Terkadang, Anda perlu menjalankan Pod pada node tertentu. Mungkin node tersebut memiliki perangkat keras khusus, lisensi tertentu, atau berada di zona ketersediaan tertentu.
Pelajaran ini membahas cara mengarahkan penjadwal Kubernetes menggunakan Pemilih Node dan Afinitas Node.
Mengapa Penjadwal Perlu Diarahkan?
Bayangkan Anda memiliki Pod basis data yang perlu dijalankan pada node dengan SSD berperforma tinggi, atau aplikasi intensif GPU yang memerlukan perangkat keras tertentu.
Anda mungkin juga ingin menjauhkan Pod tertentu satu sama lain demi toleransi kesalahan, atau memastikan Pod tersebut berjalan pada node dengan sistem operasi tertentu.
Kubernetes menyediakan berbagai alat untuk menyatakan preferensi penjadwalan ini.
Node Memiliki Label
Sebelum kita dapat menentukan lokasi Pod, node perlu memiliki identitas! Kubernetes menggunakan label untuk mengidentifikasi node berdasarkan karakteristiknya.
- Label adalah pasangan kunci-nilai, seperti
disk=ssdataugpu=true. - Anda dapat menambahkan label khusus ke node menggunakan
kubectl label nodes <node-name> <key>=<value>. - Label inilah yang digunakan untuk menargetkan node tertentu sebagai tempat Pod.
Pemilih Node: Pencocokan Sederhana
Cara paling sederhana untuk membatasi Pod ke sekumpulan node tertentu adalah menggunakan nodeSelector.
Ini adalah bidang dalam spesifikasi Pod yang menerima peta pasangan kunci-nilai. Pod hanya akan dijadwalkan pada node yang memiliki semua label tersebut.
Ini seperti mengatakan, "Saya memerlukan node yang persis seperti ini."
Pemilih Node dalam Praktik
Misalkan kita memiliki node dengan label disk=ssd. Berikut cara membuat Pod hanya berjalan pada node tersebut:
apiVersion: v1
kind: Pod
metadata:
name: ssd-app
spec:
containers:
- name: my-container
image: nginx
nodeSelector:
disk: ssdAfinitas Node: Pencocokan Lanjutan
Meskipun nodeSelector mudah digunakan, aturan ini sangat ketat. Bagaimana jika Anda menginginkan node yang "diutamakan" atau aturan pencocokan yang lebih kompleks?
Afinitas Node menawarkan fleksibilitas yang lebih besar. Fitur ini memungkinkan Anda menyatakan persyaratan "lunak" atau "wajib" agar Pod ditempatkan pada node dengan label tertentu.
Fitur ini menggunakan sintaks yang lebih kuat dengan operator seperti In, NotIn, Exists, DoesNotExist, Gt, Lt.
Afinitas Wajib & Diutamakan
Afinitas node memiliki dua jenis utama:
requiredDuringSchedulingIgnoredDuringExecution: Pod harus dijadwalkan pada node yang sesuai dengan aturan. Jika tidak ada node seperti itu, Pod tidak akan dijadwalkan.preferredDuringSchedulingIgnoredDuringExecution: Penjadwal berusaha menemukan node yang sesuai dengan aturan, tetapi jika tidak ada yang tersedia, Pod tetap akan dijadwalkan di tempat lain. Ini adalah pendekatan "upaya terbaik".
Afinitas Node Wajib
Berikut Pod yang memerlukan node dengan label env=production. Jika tidak ada node seperti itu, Pod akan tetap dalam status menunggu.
apiVersion: v1
kind: Pod
metadata:
name: prod-app
spec:
containers:
- name: my-container
image: httpd
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: env
operator: In
values:
- productionAfinitas Pod: Pod Lain Juga Berpengaruh
Bagaimana jika Anda ingin menjadwalkan Pod berdasarkan lokasi Pod lain?
- Afinitas Pod: Menarik Pod ke node tempat Pod lain dengan label tertentu sudah berjalan. Berguna untuk menempatkan bersama layanan yang sering berkomunikasi.
- Anti-afinitas Pod: Menjauhkan Pod dari node tempat Pod lain dengan label tertentu berjalan. Sangat berguna untuk menyebarkan replika di beberapa node demi ketersediaan tinggi.
Anti-afinitas Pod dalam Praktik
Manifes ini memastikan bahwa tidak ada dua Pod dengan label app=my-web yang dapat dijadwalkan pada node yang sama. Hal ini meningkatkan toleransi kesalahan.
topologyKey menentukan cakupan tempat anti-afinitas berlaku, misalnya node atau zona.
apiVersion: v1
kind: Pod
metadata:
name: web-app-pod
labels:
app: my-web
spec:
containers:
- name: web-container
image: busybox
command: ["sh", "-c", "echo 'Hello from web-app'; sleep 3600"]
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app: my-web
topologyKey: "kubernetes.io/hostname"Uji Pengetahuan Anda
Anda ingin memastikan Pod basis data penting Anda tidak boleh dijadwalkan pada node dengan label zone=dev. Jenis aturan penjadwalan apa yang akan Anda gunakan untuk pengecualian ketat berdasarkan label node?
Ringkasan: Kontrol Penjadwalan
Bagus! Anda telah mempelajari berbagai cara ampuh untuk mengontrol tempat Pod Anda berjalan:
- Label Node: Pasangan kunci-nilai yang mengidentifikasi karakteristik node.
- Pemilih Node: Pencocokan sederhana dan ketat untuk menjadwalkan Pod pada node dengan label tertentu.
- Afinitas Node: Aturan yang lebih fleksibel (wajib atau diutamakan) untuk memilih node menggunakan operator.
- Afinitas/Anti-afinitas Pod: Menempatkan Pod bersama-sama atau memisahkannya berdasarkan lokasi Pod lain.
Alat-alat ini sangat penting untuk mengoptimalkan penggunaan sumber daya, memastikan toleransi kesalahan, dan memenuhi kebutuhan aplikasi tertentu.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pemilih Node dan Afinitas” gratis?
Ya — teks lengkap “Pemilih Node dan Afinitas” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus DevOps Bootcamp, upgrade ke CoddyKit PRO. Kursus DevOps Bootcamp mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pemilih Node dan Afinitas”?
Kendalikan lokasi penjadwalan Pod menggunakan pemilih node serta aturan afinitas node dan Pod yang lebih ekspresif. Kamu berlatih DevOps Bootcamp dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai DevOps Bootcamp?
Tidak diperlukan pengalaman sebelumnya. DevOps Bootcamp di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Pemilih Node dan Afinitas” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran DevOps Bootcamp ini?
Ya. Setiap pelajaran DevOps Bootcamp menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Permintaan dan Batas Sumber Daya
- Pemilih Node dan Afinitas
- Taint dan Toleration
- Prioritas dan Preemption Pod