
Senin
seharusnya berlangsung secara resmi
( tapi sejauh ini belum terjadi ... DIPERBARUI 06/20 : pengumuman muncul di blog K8s) Kubernetes rilis berikutnya adalah
1,15 . Menurut tradisi yang telah dikembangkan untuk blog kami, kami berbicara tentang perubahan paling signifikan dalam versi baru.
Informasi yang digunakan untuk menyiapkan bahan ini diambil dari
tabel pelacakan perangkat tambahan Kubernet ,
CHANGELOG-1.15 dan masalah terkait, tarik permintaan, serta Kubernetes Enhancement Proposals (KEP). Karena konferensi KubeCon di Shanghai akan diadakan minggu depan, rilis ini memiliki siklus 11 minggu yang lebih pendek (bukan 12 minggu), yang, bagaimanapun, tidak secara signifikan mempengaruhi jumlah perubahan signifikan. Jadi ayo pergi! ..
Gudang data
Memperkenalkan
API ExecutionHook
, yang memungkinkan Anda untuk mengeksekusi perintah pengguna secara dinamis dalam pod / wadah atau grup pod / wadah, dan dengannya pengontrol yang sesuai (
ExecutionHookController
) yang mengimplementasikan manajemen siklus hidup hook. Motivasi untuk penampilan fitur ini adalah keinginan untuk menyediakan pengguna dengan kemampuan untuk membuat / menghapus foto sesuai dengan logika aplikasi, yaitu jalankan perintah khusus aplikasi apa pun sebelum dan sesudah membuat snapshot. Diasumsikan bahwa kait seperti itu juga dapat berguna dalam situasi lain - misalnya, melakukan pembaruan, debugging, memperbarui file konfigurasi, memulai ulang wadah, mempersiapkan acara lain seperti migrasi basis data. Status saat ini - versi alfa (diharapkan akan diterjemahkan ke beta untuk rilis berikutnya), detail - dalam
KEP .
Dalam penyimpanan sesaat , yang memungkinkan Anda untuk membedakan pod / wadah tertentu jumlah ruang
bersama (penyimpanan bersama) ,
dukungan untuk kuota sistem file
telah ditambahkan . Mekanisme baru ini menggunakan
kuota proyek yang tersedia di XFS dan ext4, menyediakan pemantauan konsumsi sumber daya dan pembebanan opsional batasnya. Status saat ini - versi alfa; rencana untuk rilis di masa mendatang belum ditentukan.
Fitur baru lainnya yang diperkenalkan oleh sig-storage adalah penggunaan PVC yang ada sebagai
DataSource
untuk membuat PVC baru. Dengan kata lain, ini adalah
implementasi dari fungsi kloning volume . Klon harus dibedakan dari snapshot, karena masing-masing klon adalah volume baru dan βlengkapβ: ia dibuat sebagai salinan dari yang sudah ada, tetapi sepenuhnya mengikuti siklus hidup volume biasa (tidak seperti snapshot, meskipun mereka adalah salinan volume pada titik waktu tertentu, tetapi tidak independen) volume). Ilustrasi Peluang:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-2 namespace: myns spec: capacity: storage: 10Gi dataSource: kind: PersistentVolumeClaim name: pvc-1
Dalam hal ini, PV / PVC mandiri baru ( pvc-2
) akan dibuat yang berisi data yang sama seperti pada pvc-1
. Diindikasikan bahwa PVC baru harus memiliki namespace yang sama dengan aslinya.Batasan yang ada hanya mendukung untuk penyedia dinamis dan hanya untuk plugin CSI (mereka harus memiliki kemampuan
CLONE_VOLUME
). Baca lebih lanjut di
KEP .
Fitur-fitur berikut telah "berkembang" ke status versi beta (dan, karenanya, aktivasi di instalasi default Kubernetes):
- Fungsi ekspansi ukuran Volume yang persisten βonlineβ, mis. tanpa perlu me-restart pod menggunakan PVC yang sesuai. Untuk pertama kalinya (dalam status alpha), muncul di K8 1.11.
- Dukungan untuk variabel lingkungan untuk nama direktori yang dipasang sebagai
subPath
, yang pertama kali diperkenalkan di K8s 1.11 dan dikembangkan di masa lalu 1.14.
Tetapi proses migrasi internal plug-in lama untuk repositori yang diterapkan di dalam basis kode Kubernetes (in-tree) telah berjalan mendukung plug-in untuk antarmuka CSI baru. Diharapkan bahwa rilis 1.15 akan menyelesaikan migrasi semua plug-in dari penyedia cloud, namun
diputuskan untuk mempertahankan status versi alpha, karena fitur tergantung pada API yang diperkenalkan di K8 1.15 dan sejauh ini hanya diimplementasikan dalam versi alpha (khususnya, kita berbicara tentang peningkatan dalam dukungan Azure:
File Azure dan plugin
Azure Disk di csi-translation-lib).
Perencana
Dua inovasi penting - keduanya dalam bentuk alpha sejauh ini - tersedia di Penjadwal Kubernetes.
Yang pertama adalah
kerangka kerja perencanaan (
Kubernetes Scheduling Framework ), yang merupakan kumpulan API baru untuk plugin yang memperluas kemampuan penjadwal yang ada. Plugin dibuat di luar repositori utama (out-of-tree), tetapi dimasukkan dalam penjadwal selama kompilasi. Dengan demikian, inti fungsional dari penjadwal tetap sesederhana dan nyaman untuk mendukung mungkin, dan fitur tambahan diimplementasikan secara terpisah, tanpa banyak pembatasan bahwa
cara saat ini memperluas fitur penjadwal "menderita" dengan bantuan webhooks.
Dalam kerangka kerja baru, setiap upaya penjadwalan pod dibagi menjadi dua tahap:
- siklus penjadwalan - di mana simpul untuk pod dipilih,
- dan binding (pengikatan siklus) - di mana solusi yang dipilih diimplementasikan dalam cluster.
Pada setiap tahap ini (bersama-sama mereka juga disebut
konteks penjadwalan ), ada banyak
titik ekstensi , di mana masing-masing plugin kerangka kerja dapat dipanggil.
(Siklus hidup untuk memanggil plugin dalam Kerangka Penjadwalan.)Sebagai bagian dari versi alpha dari framework, hanya
poin Reserve ,
Unreserve dan
Prebind yang diimplementasikan . Baca lebih lanjut tentang inovasi besar-besaran ini di
KEP .
Yang kedua adalah opsi
Non-Preempting untuk PriorityClasses
.
Kelas prioritas menerima status stabil (GA) dalam rilis Kubernet terakhir, yang memengaruhi perencanaan dan pemilihan pod: pod direncanakan berdasarkan prioritas, dan jika pod tidak dapat dibuat karena kurangnya sumber daya, maka pod prioritas yang lebih rendah dapat dipadati untuk membebaskan ruang yang diperlukan.
Opsi baru -
Preempting
, didefinisikan sebagai boolean dalam struktur
PriorityClass
, berarti: jika pod menunggu perencanaannya dan memiliki
Preempting=false
,
membuatnya tidak akan mendahului pod lain. Bidang ini muncul di
PodSpec
selama proses
penerimaan pod (mirip dengan nilai
PriorityClass
). Rincian implementasi ada di
KEP .
Mesin API
Untuk
CustomResources , disajikan perbaikan yang dirancang untuk mengimplementasikan data yang disimpan dengan cara ini (dalam kerangka JSON dalam CRD) perilaku yang lebih cocok dengan API Kubernetes yang diterima secara umum (untuk objek K8 "asli"):
- penghapusan otomatis bidang yang tidak ditentukan dalam skema validasi OpenAPI - untuk detail, lihat KEP β Pemangkasan untuk Sumber Daya Kustom β;
- kemampuan untuk menetapkan nilai default untuk bidang dalam skema validasi OpenAPI v3, yang sangat penting untuk menjaga kompatibilitas API ketika menambahkan bidang baru ke objek, untuk detailnya lihat KEP β Defaulting untuk Sumber Daya Kustom β.
Kedua fitur awalnya direncanakan untuk dimasukkan dalam rilis K8 1.12, tetapi hanya sekarang mereka disajikan dalam versi alpha.
Perubahan CRD tidak terbatas pada ini:
- Publikasikan fitur CRD OpenAPI - mis. validasi CustomResources sisi-server (menggunakan skema OpenAPI v3) yang diperkenalkan dalam rilis Kubernetes terakhir - mencapai beta dan sekarang diaktifkan secara default;
- Mekanisme konversi versi untuk sumber daya CRD berdasarkan webhooks eksternal juga telah dikonversi ke beta.
Inovasi lain yang menarik disebut
penunjuk Tonton . Esensinya intinya adalah menambahkan jenis acara baru ke
Watch API -
Bookmark
. Jenis ini berarti label bahwa semua objek hingga
resourceVersion
tertentu telah diproses oleh arloji. Mekanisme seperti itu akan mengurangi beban pada kube-apiserver, mengurangi jumlah acara yang perlu diproses setiap kali arloji dimulai kembali, serta mengurangi jumlah kesalahan yang tidak diinginkan seperti
"versi sumber daya terlalu lama" . Di Kubernetes 1.15, fitur memiliki status versi alpha, dan peningkatannya ke beta diharapkan untuk rilis berikutnya.
Added EventType = "ADDED" Modified EventType = "MODIFIED" Deleted EventType = "DELETED" Error EventType = "ERROR" Bookmark EventType = "BOOKMARK"
(Kemungkinan jenis acara di Watch API.)Di Webhook Masuk:
- Menambahkan dukungan untuk pemilih objek selain pemilih namespace yang ada
- menerapkan kemampuan untuk mendaftarkan versi tertentu dari sumber daya dan menelepon ketika ada versi yang lebih lama dari sumber daya ini diubah;
- Kolom
Option
telah ditambahkan ke API AdmissionReview, opsi pelaporan untuk operasi yang sedang dilakukan.
Jaringan
Sebuah inovasi penting di bagian jaringan Kubernetes adalah apa yang disebut "
Perlindungan Penyelesai
" untuk penyeimbang beban. Sekarang sebelum menghapus sumber daya LoadBalancer, diperiksa bahwa sumber daya Layanan terkait belum sepenuhnya dihapus. Untuk melakukan ini, yang disebut finalizer dilampirkan ke setiap layanan dengan
type=LoadBalancer
: ketika layanan seperti itu dihapus, penghapusan sumber daya yang sebenarnya diblokir sampai finalizer dihapus, dan finalizer tidak dihapus sampai "penghapusan" sumber daya dari penyeimbang beban yang sesuai selesai (
service.kubernetes.io/load-balancer-cleanup
). Versi implementasi saat ini adalah versi alfa, dan detailnya dapat ditemukan di
KEP .
Selain itu:
- Plugin NodeLocal DNS Cache yang diperkenalkan di Kubernetes 1.13 dan meningkatkan kinerja DNS telah mencapai versi beta.
- Kube-proxy tidak lagi secara otomatis menghapus aturan jaringan yang dibuat sebagai akibat dari operasinya dalam mode lain (ini membutuhkan peluncuran eksplisit dari
kube-proxy --cleanup
).
CLI
Seperti biasa, ada beberapa hal kecil yang menyenangkan dalam perintah konsol untuk bekerja dengan kluster Kubernetes:
Lainnya
Di antara perubahan penting lainnya di Kubernetes 1.15:
- Dukungan Pod Disrupt Budget (PDB) telah ditambahkan untuk sumber daya / pengontrol berbasis CRD pihak ketiga (misalnya: EtcdCluster, MySQLReplicaSet ...) menggunakan subresource Skala . Sejauh ini ini adalah versi beta yang akan dibuat stabil di rilis berikutnya. Detailnya ada di KEP .
- Dua fitur untuk node / Kubelet mencapai versi beta: dukungan untuk plug-in pemantauan perangkat pihak ketiga (untuk menghapus semua pengetahuan khusus perangkat dari Kubelet, mis. Keluar-dari-pohon) dan
SupportNodePidsLimit
(isolasi PID dari node ke polong). - Dukungan untuk Modul Go telah ditambahkan dan diaktifkan secara default untuk basis kode Kubernetes (bukan Godep dan mode GOPATH, yang sudah usang).
- Dukungan untuk AWS NLB (Network Load Balancer), pertama kali diperkenalkan pada K8 1.9, telah mencapai tingkat beta. Secara khusus, dia mendapatkan kemampuan untuk mengkonfigurasi
accessLogs
, mengakhiri TLS dan LoadBalancerSourceRanges
. - Menerapkan kemampuan untuk mengonfigurasi penyedia cloud Azure dari rahasia Kubernetes (untuk ini, opsi
cloudConfigType
baru telah cloudConfigType
, salah satunya mungkin secret
). Juga, Kubelet di Azure sekarang dapat bekerja tanpa identitas Azure ( useInstanceMetadata
harus diaktifkan untuk ini). - Dalam klaster-siklus hidup, kemungkinan membuat cluster HA menggunakan kubeadm dibawa ke beta, dan mereka juga menyelesaikan langkah berikutnya (v1beta2) dalam mengatur ulang format file konfigurasi kubeadm.
- Jumlah pod dalam status menunggu dalam antrian yang berbeda ditambahkan ke metrik dari penjadwal, dan statistik tentang volume melalui metrik volume kubelet dari CSI ditambahkan.
- Pembaruan dalam perangkat lunak yang digunakan / tergantung: Go 1.12.5, cri-tools 1.14.0, etc.d 3.3.10 (versi tidak berubah untuk server, tetapi telah diperbarui untuk klien) . Versi CNI, CSI, CoreDNS tidak berubah (dalam salah satu versi alpha dari Kubernetes 1.15, itu diperbarui ke 1.5.0, tetapi kemudian bergulir kembali ke 1.3.1) , mendukung versi Docker.
PS
Baca juga di blog kami: