Kubernet 1.15: Ikhtisar Sorotan



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:

  • Transfer kubectl get dapat menerima data dari server (dan bukan klien) untuk sepenuhnya mendukung ekstensi dinyatakan lengkap (stabil).
  • Di kubectl top ditambahkan opsi --sort-by :

     $ kubectl --kubeconfig=kubectl.kubeconfig top pod --sort=memory NAME CPU(cores) MEMORY(bytes) elasticsearch-logging-v1-psc43 2m 2406Mi hadoop-journalnode-2 13m 362Mi hodor-v0.0.5-3204531036-fqb0q 23m 64Mi kubernetes-admin-mongo-... 5m 44Mi cauth-v0.0.5-2463911897-165m8 34m 10Mi test-1440672787-kvx8h 0m 1Mi 
  • Di kubectl rollout restart menambahkan dukungan untuk DaemonSets dan StatefulSets.
  • kubeadm upgrade node baru telah kubeadm upgrade node untuk memperbarui node cluster, menggantikan (sekarang dinyatakan usang) kubeadm upgrade node config kubeadm upgrade node experimental-control-plane dan kubeadm upgrade node experimental-control-plane .
  • Perintah kubeadm alpha certs certificate-key (untuk menghasilkan kunci acak, yang kemudian dapat diteruskan ke kubeadm init --experimental-upload-certs ) dan kubeadm alpha certs check-expiration (untuk memeriksa masa berlaku sertifikat PKI lokal) kubeadm alpha certs check-expiration .
  • Perintah kubeadm config upload telah ditinggalkan karena penggantinya ( kubeadm init phase upload-config ) telah jatuh tempo.

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:

Source: https://habr.com/ru/post/id456084/


All Articles