Plugin Perangkat
Kubernetes v1.10
beta
- Nama dari versi ini mengandung string
beta
(misalnyav2beta3
). - Kode yang ada sudah melalui mekanisme testing yang cukup baik. Menggunakan fitur ini dianggap cukup aman. Fitur ini diekspos secara default.
- Ketersediaan untuk fitur secara menyeluruh tidak akan dihapus, meskipun begitu detail untuk suatu fitur bisa saja berubah.
- Skema dan/atau semantik dari suatu obyek mungkin saja berubah tanpa memerhatikan kompatibilitas pada rilis beta selanjutnya. Jika hal ini terjadi, kami akan menyediakan suatu instruksi untuk melakukan migrasi di versi rilis selanjutnya. Hal ini bisa saja terdiri dari penghapusan, pengubahan, ataupun pembuatan obyek API. Proses pengubahan mungkin saja membutuhkan pemikiran yang matang. Dampak proses ini bisa saja menyebabkan downtime aplikasi yang bergantung pada fitur ini.
- Kami mohon untuk mencoba versi beta yang kami sediakan dan berikan masukan terhadap fitur yang kamu pakai! Apabila fitur tersebut sudah tidak lagi berada di dalam tingkatan beta perubahan yang kami buat terhadap fitur tersebut bisa jadi tidak lagi dapat digunakan
Kubernetes menyediakan kerangka kerja plugin perangkat sehingga kamu dapat memakainya untuk memperlihatkan sumber daya perangkat keras sistem ke dalam KubeletAgen yang dijalankan pada setiap node di klaster dan bertugas memastikan kontainer dijalankan di dalam pod. .
Daripada menkustomisasi kode Kubernetes itu sendiri, vendor dapat mengimplementasikan plugin perangkat yang di-deploy secara manual atau sebagai DaemonSetEnsures a copy of a Pod is running across a set of nodes in a cluster. . Perangkat yang dituju termasuk GPU, NIC berkinerja tinggi, FPGA, adaptor InfiniBand, dan sumber daya komputasi sejenis lainnya yang perlu inisialisasi dan setelan spesifik vendor.
- Pendaftaran plugin perangkat
- Implementasi plugin perangkat
- Deployment plugin perangkat
- Kecocokan API
- Mengawasi Sumber Daya Plugin Perangkat
- Integrasi Plugin Perangkat dengan Topology Manager
- Contoh plugin perangkat
- Selanjutnya
Pendaftaran plugin perangkat
Kubelet mengekspor servis gRPC Registration
:
service Registration {
rpc Register(RegisterRequest) returns (Empty) {}
}
Plugin perangkat bisa mendaftarkan dirinya sendiri dengan kubelet melalui servis gRPC. Dalam pendaftaran, plugin perangkat perlu mengirim:
- Nama Unix socket-nya.
- Versi API Plugin Perangkat yang dipakai.
ResourceName
yang ingin ditunjukkan.ResourceName
ini harus mengikuti skema penamaan sumber daya ekstensi sebagaivendor-domain/tipe-sumber-daya
. (Contohnya, NVIDIA GPU akan dinamainvidia.com/gpu
.)
Setelah registrasi sukses, plugin perangkat mengirim daftar perangkat yang diatur
ke kubelet, lalu kubelet kemudian bertanggung jawab untuk mengumumkan sumber daya tersebut
ke peladen API sebagai bagian pembaruan status node kubelet.
Contohnya, setelah plugin perangkat mendaftarkan hardware-vendor.example/foo
dengan kubelet
dan melaporkan kedua perangkat dalam node dalam kondisi sehat, status node diperbarui
untuk menunjukkan bahwa node punya 2 perangkat “Foo” terpasang dan tersedia.
Kemudian, pengguna dapat meminta perangkat dalam spesifikasi Kontainer seperti meminta tipe sumber daya lain, dengan batasan berikut:
- Sumber daya ekstensi hanya didukung sebagai sumber daya integer dan tidak bisa overcommitted.
- Perangkat tidak bisa dibagikan antar Kontainer.
Semisal klaster Kubernetes menjalankan plugin perangkat yang menunjukkan sumber daya hardware-vendor.example/foo
pada node tertentu. Berikut contoh Pod yang meminta sumber daya itu untuk menjalankan demo beban kerja:
---
apiVersion: v1
kind: Pod
metadata:
name: demo-pod
spec:
containers:
- name: demo-container-1
image: k8s.gcr.io/pause:2.0
resources:
limits:
hardware-vendor.example/foo: 2
#
# Pod ini perlu 2 perangkat perangkat-vendor.example/foo
# dan hanya dapat menjadwalkan ke Node yang bisa memenuhi
# kebutuhannya.
#
# Jika Node punya lebih dari 2 perangkat tersedia,
# maka kelebihan akan dapat digunakan Pod lainnya.
Implementasi plugin perangkat
Alur kerja umum dari plugin perangkat adalah sebagai berikut:
Inisiasi. Selama fase ini, plugin perangkat melakukan inisiasi spesifik vendor dan pengaturan untuk memastikan perangkat pada status siap.
Plugin memulai servis gRPC, dengan Unix socket pada lokasi
/var/lib/kubelet/device-plugins/
, yang mengimplementasi antarmuka berikut:service DevicePlugin { // ListAndWatch mengembalikan aliran dari List of Devices // Kapanpun Device menyatakan perubahan atau kehilangan Device, ListAndWatch // mengembalikan daftar baru rpc ListAndWatch(Empty) returns (stream ListAndWatchResponse) {} // Allocate dipanggil saat pembuatan kontainer sehingga Device // Plugin dapat menjalankan operasi spesifik perangkat dan menyuruh Kubelet // dari operasi untuk membuat Device tersedia di kontainer rpc Allocate(AllocateRequest) returns (AllocateResponse) {} }
Plugin mendaftarkan dirinya sendiri dengan kubelet melalui Unix socket pada lokasi host
/var/lib/kubelet/device-plugins/kubelet.sock
.Seteleh sukses mendaftarkan dirinya sendiri, plugin perangkat berjalan dalam mode peladen, dan selama itu dia tetap mengawasi kesehatan perangkat dan melaporkan balik ke kubelet terhadap perubahan status perangkat. Dia juga bertanggung jawab untuk melayani request gRPC
Allocate
. SelamaAllocate
, plugin perangkat dapat membuat persiapan spesifik-perangkat; contohnya, pembersihan GPU atau inisiasi QRNG. Jika operasi berhasil, plugin perangkat mengembalikanAllocateResponse
yang memuat konfigurasi runtime kontainer untuk mengakses perangkat teralokasi. Kubelet memberikan informasi ini ke runtime kontainer.
Menangani kubelet yang restart
Plugin perangkat diharapkan dapat mendeteksi kubelet yang restart dan mendaftarkan dirinya sendiri kembali dengan
instance kubelet baru. Pada implementasi sekarang, sebuah instance kubelet baru akan menghapus semua socket Unix yang ada
di dalam /var/lib/kubelet/device-plugins
ketika dijalankan. Plugin perangkat dapat mengawasi penghapusan
socket Unix miliknya dan mendaftarkan dirinya sendiri kembali ketika hal tersebut terjadi.
Deployment plugin perangkat
Kamu dapat melakukan deploy sebuah plugin perangkat sebagai DaemonSet, sebagai sebuah paket untuk sistem operasi node-mu, atau secara manual.
Direktori canonical /var/lib/kubelet/device-plugins
membutuhkan akses berprivilese,
sehingga plugin perangkat harus berjalan dalam konteks keamanan dengan privilese.
Jika kamu melakukan deploy plugin perangkat sebagai DaemonSet, /var/lib/kubelet/device-plugins
harus dimuat sebagai VolumeSebuah direktori yang mengandung data, dapat diakses o;eh kontainer-kontainer di dalam pod.
pada
PodSpec
plugin.
Jika kamu memilih pendekatan DaemonSet, kamu dapat bergantung pada Kubernetes untuk meletakkan Pod plugin perangkat ke Node, memulai-ulang Pod daemon setelah kegagalan, dan membantu otomasi pembaruan.
Kecocokan API
Dukungan pada plugin perangkat Kubernetes sedang dalam beta. API dapat berubah hingga stabil, dalam cara yang tidak kompatibel. Sebagai proyek, Kubernetes merekomendasikan para developer plugin perangkat:
- Mengamati perubahan pada rilis mendatang.
- Mendukung versi API plugin perangkat berbeda untuk kompatibilitas-maju/mundur.
Jika kamu menyalakan fitur DevicePlugins dan menjalankan plugin perangkat pada node yang perlu diperbarui ke rilis Kubernetes dengan versi API plugin yang lebih baru, perbarui plugin perangkatmu agar mendukung kedua versi sebelum membarui para node ini. Memilih pendekatan demikian akan menjamin fungsi berkelanjutan dari alokasi perangkat selama pembaruan.
Mengawasi Sumber Daya Plugin Perangkat
Kubernetes v1.15
beta
- Nama dari versi ini mengandung string
beta
(misalnyav2beta3
). - Kode yang ada sudah melalui mekanisme testing yang cukup baik. Menggunakan fitur ini dianggap cukup aman. Fitur ini diekspos secara default.
- Ketersediaan untuk fitur secara menyeluruh tidak akan dihapus, meskipun begitu detail untuk suatu fitur bisa saja berubah.
- Skema dan/atau semantik dari suatu obyek mungkin saja berubah tanpa memerhatikan kompatibilitas pada rilis beta selanjutnya. Jika hal ini terjadi, kami akan menyediakan suatu instruksi untuk melakukan migrasi di versi rilis selanjutnya. Hal ini bisa saja terdiri dari penghapusan, pengubahan, ataupun pembuatan obyek API. Proses pengubahan mungkin saja membutuhkan pemikiran yang matang. Dampak proses ini bisa saja menyebabkan downtime aplikasi yang bergantung pada fitur ini.
- Kami mohon untuk mencoba versi beta yang kami sediakan dan berikan masukan terhadap fitur yang kamu pakai! Apabila fitur tersebut sudah tidak lagi berada di dalam tingkatan beta perubahan yang kami buat terhadap fitur tersebut bisa jadi tidak lagi dapat digunakan
Dalam rangka mengawasi sumber daya yang disediakan plugin perangkat, agen monitoring perlu bisa
menemukan kumpulan perangkat yang terpakai dalam node dan mengambil metadata untuk mendeskripsikan
pada kontainer mana metrik harus diasosiasikan. Metrik prometheus
diekspos oleh agen pengawas perangkat harus mengikuti
Petunjuk Instrumentasi Kubernetes,
mengidentifikasi kontainer dengan label prometheus pod
, namespace
, dan container
.
Kubelet menyediakan servis gRPC untuk menyalakan pencarian perangkat yang terpakai, dan untuk menyediakan metadata untuk perangkat berikut:
// PodResourcesLister adalah layanan yang disediakan kubelet untuk menyediakan informasi tentang
// sumber daya node yang dikonsumsi Pod dan kontainer pada node
service PodResourcesLister {
rpc List(ListPodResourcesRequest) returns (ListPodResourcesResponse) {}
}
Servis gRPC dilayani lewat socket unix pada /var/lib/kubelet/pod-resources/kubelet.sock
.
Agen pengawas untuk sumber daya plugin perangkat dapat di-deploy sebagai daemon, atau sebagai DaemonSet.
Direktori canonical /var/lib/kubelet/pod-resources
perlu akses berprivilese,
sehingga agen pengawas harus berjalan dalam konteks keamanan dengan privilese. Jika agen pengawas perangkat berjalan
sebagai DaemonSet, /var/lib/kubelet/pod-resources
harus dimuat sebagai
VolumeSebuah direktori yang mengandung data, dapat diakses o;eh kontainer-kontainer di dalam pod.
pada plugin
PodSpec.
Dukungan untuk “servis PodResources” butuh gerbang fitur
KubeletPodResources
untuk dinyalakan. Mulai dari Kubernetes 1.15 nilai bawaannya telah dinyalakan.
Integrasi Plugin Perangkat dengan Topology Manager
Kubernetes v1.17
alpha
- Nama dari versi ini mengandung string
alpha
(misalnya,v1alpha1
). - Bisa jadi terdapat bug. Secara default fitur ini tidak diekspos.
- Ketersediaan untuk fitur yang ada bisa saja dihilangkan pada suatu waktu tanpa pemberitahuan sebelumnya.
- API yang ada mungkin saja berubah tanpa memperhatikan kompatibilitas dengan versi perangkat lunak sebelumnya.
- Hanya direkomendasikan untuk klaster yang digunakan untuk tujuan testing.
Topology Manager adalah komponen Kubelet yang membolehkan sumber daya untuk dikoordinasi secara selaras dengan Topology. Untuk melakukannya, API Plugin Perangkat telah dikembangkan untuk memasukkan struct TopologyInfo
.
message TopologyInfo {
repeated NUMANode nodes = 1;
}
message NUMANode {
int64 ID = 1;
}
Plugin Perangkat yang ingin memanfaatkan Topology Manager dapat mengembalikan beberapa struct TopologyInfo sebagai bagian dari pendaftaran perangkat, bersama dengan ID perangkat dan status kesehatan perangkat. Manajer perangkat akan memakai informasi ini untuk konsultasi dengan Topology Manager dan membuat keputusan alokasi sumber daya.
TopologyInfo
mendukung kolom nodes
yang bisa nil
(sebagai bawaan) atau daftar node NUMA. Ini membuat Plugin Perangkat mengumumkan apa saja yang bisa meliputi node NUMA.
Contoh struct TopologyInfo
untuk perangkat yang dipopulate oleh Plugin Perangkat:
pluginapi.Device{ID: "25102017", Health: pluginapi.Healthy, Topology:&pluginapi.TopologyInfo{Nodes: []*pluginapi.NUMANode{&pluginapi.NUMANode{ID: 0,},}}}
Contoh plugin perangkat
Berikut beberapa contoh implementasi plugin perangkat:
- Plugin perangkat AMD GPU
- Plugin perangkat Intel untuk perangkat GPU, FPGA, dan QuickAssist Intel
- Plugin perangkat KubeVirt untuk virtualisasi hardware-assisted
- Plugin perangkat NVIDIA GPU
- Perlu nvidia-docker versi 2.0 yang memungkinkan untuk menjalakan kontainer Docker yang memuat GPU.
- Plugin perangkat NVIDIA GPU untuk Container-Optimized OS
- Plugin perangkat RDMA
- Plugin perangkat Solarflare
- Plugin perangkat SR-IOV Network
- Plugin perangkat Xilinx FPGA untuk perangkat Xilinx FPGA
Selanjutnya
- Pelajari bagaimana menjadwalkan sumber daya GPU dengan plugin perangkat
- Pelajari bagaimana mengumumkan sumber daya ekstensi pada node
- Baca tentang penggunaan akselerasi perangkat keras untuk ingress TLS dengan Kubernetes
- Pelajari tentang Topology Manager
Masukan
Apakah halaman ini berguna?
Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on Stack Overflow. Open an issue in the GitHub repo if you want to report a problem or suggest an improvement.