Kubernetes 1.14: Tinjauan Umum Inovasi-inovasi Utama



Kubernetes - 1.14 akan dirilis malam ini. Menurut tradisi yang telah dikembangkan untuk blog kami, kami berbicara tentang perubahan kunci dalam versi baru dari produk Open Source yang luar biasa ini.

Informasi yang digunakan untuk mempersiapkan bahan ini diambil dari tabel pelacakan perangkat tambahan Kubernet , CHANGELOG-1.14 dan masalah terkait, permintaan tarik, Proposal Peningkatan Kubernetes (KEP). UPDATE (26 Maret): Pengumuman rilis resmi juga muncul di blog K8s.

Mari kita mulai dengan pengantar penting dari siklus-kluster SIG: kluster failover dinamis Kubernetes (dan lebih tepatnya, penerapan HA yang di-host-sendiri) sekarang dapat dibuat menggunakan perintah biasa (dalam konteks kluster node tunggal) kubeadm ( init dan join ) perintah. Singkatnya, untuk ini:

  • sertifikat yang digunakan oleh cluster ditransfer ke rahasia;
  • untuk kemungkinan menggunakan cluster etcd di dalam cluster K8s (mis., menyingkirkan ketergantungan eksternal yang telah ada sejauh ini), operator etcd digunakan ;
  • Pengaturan yang disarankan untuk penyeimbang beban eksternal yang menyediakan konfigurasi toleran-kesalahan didokumentasikan (di masa depan, direncanakan untuk menolak ketergantungan ini, tetapi tidak pada tahap ini).


Arsitektur cluster Kubernetes HA dibangun dengan kubeadm

Rincian implementasi dapat ditemukan dalam proposal desain . Fitur ini sangat lama ditunggu-tunggu: versi alpha diharapkan kembali di K8 1.9, tetapi hanya muncul sekarang.

API


Perintah apply dan umumnya manajemen objek deklaratif dipindahkan dari kubectl ke apiserver. Pengembang sendiri menjelaskan secara singkat keputusan mereka dengan mengatakan bahwa kubectl apply adalah bagian mendasar dari bekerja dengan konfigurasi di Kubernetes, namun, "penuh dengan bug dan sulit untuk diperbaiki", dan oleh karena itu fungsi ini perlu dikembalikan ke normal dan ditransfer ke bidang kontrol. Contoh sederhana dan ilustratif dari masalah saat ini:



Rincian implementasi ada di KEP . Ketersediaan saat ini adalah versi alpha (promosi ke beta direncanakan untuk rilis Kubernetes berikutnya).

Dalam versi alpha, kemampuan untuk menggunakan skema OpenAPI v3 untuk membuat dan menerbitkan dokumentasi OpenAPI pada CustomResources (CR) yang digunakan untuk memvalidasi (sisi server) sumber daya K8 yang ditentukan pengguna (CustomResourceDefinition, CRD) telah tersedia. Menerbitkan OpenAPI untuk CRD memungkinkan klien (misalnya, kubectl ) untuk melakukan validasi di pihak mereka (sebagai bagian dari kubectl create dan kubectl apply ) dan menerbitkan dokumentasi sesuai dengan skema ( kubectl explain ). Detailnya ada di KEP .

Log yang sudah ada sekarang terbuka dengan bendera O_APPEND (bukan O_TRUNC ) untuk menghindari hilangnya log dalam beberapa situasi dan untuk kenyamanan log truncate dengan utilitas rotasi eksternal.

Juga dalam konteks API Kubernetes, dapat dicatat bahwa di PodSandbox dan PodSandboxStatus bidang PodSandboxStatus runtime_handler untuk mempertimbangkan informasi akun tentang RuntimeClass di pod (baca lebih lanjut tentang hal itu dalam teks tentang rilis Kubernetes 1.12 , di mana kelas ini muncul sebagai versi alpha), dan di Admission Webhooks menerapkan kemampuan untuk menentukan versi AdmissionReview mereka dukung. Akhirnya, dalam aturan Admission Webhooks, Anda sekarang dapat membatasi cakupan aplikasi mereka ke lingkup namespace dan cluster.

Fasilitas penyimpanan


PersistentLocalVolumes yang memiliki status beta sejak rilis K8s 1.10 dinyatakan stabil (GA): gerbang fitur ini tidak lagi dinonaktifkan dan akan dihapus di Kubernetes 1.17.

Kemampuan untuk menggunakan variabel lingkungan dari apa yang disebut Downward API (misalnya, nama pod) untuk nama direktori yang dipasang sebagai subPath telah dikembangkan - dalam bentuk bidang subPathExpr baru, yang dengannya nama direktori yang diinginkan sekarang ditentukan. Awalnya, fitur ini muncul di Kubernetes 1.11, tetapi untuk 1.14 tetap dalam status versi alpha.

Seperti rilis Kubernet sebelumnya, banyak perubahan signifikan diperkenalkan untuk CSI (Container Storage Interface) yang berkembang pesat:

CSI


Dukungan untuk mengubah ukuran dukungan untuk volume CSI telah tersedia (sebagai bagian dari versi alfa). Untuk menggunakannya, Anda harus mengaktifkan gerbang fitur yang disebut ExpandCSIVolumes , serta keberadaan dukungan untuk operasi ini dalam driver CSI tertentu.

Fitur lain untuk CSI dalam versi alpha adalah kemampuan untuk merujuk langsung (mis., Tanpa menggunakan PV / PVC) ke volume CSI sebagai bagian dari spesifikasi pod. Ini menghilangkan pembatasan penggunaan CSI sebagai gudang data jarak jauh yang eksklusif , membuka pintu bagi mereka ke dunia volume singkat lokal . Untuk menggunakan ( contoh dari dokumentasi ), Anda harus mengaktifkan gerbang fitur CSIInlineVolume .

Ada kemajuan dalam "internal" Kubernet yang terkait dengan CSI, yang tidak begitu terlihat oleh pengguna akhir (administrator sistem) ... Saat ini, pengembang dipaksa untuk mendukung dua versi setiap plugin penyimpanan: satu "dengan mode lama", di dalam basis kode K8 (di -tree), dan yang kedua - sebagai bagian dari CSI baru (baca lebih lanjut, misalnya, di sini ) . Hal ini menyebabkan ketidaknyamanan yang dapat dimengerti yang perlu diatasi karena CSI menjadi stabil. Cukup menghentikan API yang sudah tidak digunakan dari plug-in in-tree tidak dimungkinkan karena kebijakan Kubernetes yang sesuai .

Semua ini mengarah pada fakta bahwa versi alpha mencapai proses migrasi kode internal plug-in yang diimplementasikan sebagai in-tree ke plugin CSI, karena kekhawatiran pengembang akan berkurang untuk mendukung satu versi plug-in mereka, dan kompatibilitas dengan API lama akan dipertahankan dan mereka dapat dipertahankan. menyatakan usang seperti biasa. Diharapkan pada rilis Kubernetes berikutnya (1,15), semua plugin penyedia cloud akan dimigrasi, implementasinya akan menerima status beta dan akan diaktifkan di instalasi K8 default. Lihat proposal desain untuk detailnya. Migrasi ini juga menghasilkan penolakan pembatasan untuk volume yang ditentukan oleh penyedia cloud tertentu (AWS, Azure, GCE, Cinder).

Selain itu, dukungan untuk perangkat blok CSI ( CSIBlockVolume ) telah dikonversi ke beta.

Nodes / Kubelet


Memperkenalkan versi alfa dari titik akhir baru di Kubelet, yang dirancang untuk mengembalikan metrik untuk sumber daya utama . Secara umum, jika Kubelet digunakan untuk mendapatkan statistik tentang penggunaan kontainer dari cAdvisor, sekarang data ini berasal dari runtime kontainer melalui CRI (Container Runtime Interface), tetapi kompatibilitas dengan versi lama Docker tetap dipertahankan. Sebelumnya, statistik yang dikumpulkan di Kubelet disediakan melalui REST API, tetapi sekarang menggunakan titik akhir yang terletak di /metrics/resource/v1alpha1 . Strategi jangka panjang para pengembang adalah meminimalkan set metrik yang disediakan oleh Kubelet. Omong-omong, metrik ini sendiri sekarang disebut bukan "metrik inti", tetapi "metrik sumber daya", dan digambarkan sebagai "sumber daya kelas satu, seperti cpu, dan memori".

Nuansa yang sangat menarik: terlepas dari keuntungan yang jelas dalam kinerja endpoint gRPC dibandingkan dengan kasus yang berbeda menggunakan format Prometheus (hasil dari salah satu benchmark'ov lihat di bawah) , penulis lebih suka format teks Prometheus karena kepemimpinan yang jelas dari sistem pemantauan ini di masyarakat.

β€œGRPC tidak kompatibel dengan jaringan pipa pemantauan utama. Endpoint hanya akan berguna untuk mengirimkan metrik ke Server Metrik atau memonitor komponen yang terintegrasi langsung dengannya. Saat menggunakan caching di Metrics Server, kinerja format teks Prometheus cukup baik bagi kami untuk lebih memilih Prometheus daripada gRPC, mengingat penggunaan Prometheus yang luas di komunitas. Ketika format OpenMetrics menjadi lebih stabil, kita bisa lebih dekat dengan kinerja gRPC dengan format berbasis proto. "


Salah satu tes kinerja komparatif menggunakan format gRPC dan Prometheus di titik akhir Kubelet baru untuk metrik. Lebih banyak grafik dan detail lainnya dapat ditemukan di KEP .

Di antara perubahan lainnya:

  • Kubelet sekarang menerima parameter pid=<number> dalam opsi --system-reserved dan --kube-reserved , memastikan bahwa PID yang ditentukan akan dicadangkan untuk keseluruhan sistem atau daemon sistem Kubernetes, masing-masing. Fitur ini diaktifkan ketika gerbang fitur diaktifkan, yang disebut SupportNodePidsLimit .
  • Kubelet sekarang (sekali) mencoba untuk menghentikan kontainer dalam keadaan yang tidak diketahui sebelum memulai kembali dan menghapus operasi.
  • Saat menggunakan PodPresets , informasi yang sama sekarang ditambahkan ke wadah init sebagai wadah biasa.
  • Kubelet mulai menggunakan usageNanoCores penggunaan dari penyedia statistik CRI, dan statistik jaringan ditambahkan untuk node dan wadah pada Windows.
  • Informasi tentang sistem operasi dan arsitektur sekarang direkam dalam kubernetes.io/os dan kubernetes.io/arch dari objek Node (ditransfer dari beta ke GA).
  • Kemampuan untuk menentukan grup pengguna sistem tertentu untuk kontainer di pod ( RunAsGroup , muncul di K8 1.11 ) telah berkembang ke versi beta (diaktifkan secara default).
  • du dan temukan yang digunakan dalam cAdvisor digantikan oleh implementasi Go.

CLI


Bendera -k telah ditambahkan ke cli-runtime dan kubectl untuk integrasi dengan kustomize (omong-omong, ini sekarang sedang dikembangkan di repositori terpisah), yaitu untuk memproses file YAML tambahan dari direktori kustomisasi khusus (untuk detail tentang penggunaannya, lihat KEP ):


Contoh penggunaan sederhana dari file kustomisasi (penggunaan kustomisasi yang lebih rumit dalam overlay juga dimungkinkan )

Selain itu:

  • Logo kubectl dan dokumentasinya telah diperbarui - lihat kubectl.docs.kubernetes.io .

  • kubectl create cronjob baru kubectl create cronjob perintah kubectl create cronjob telah kubectl create cronjob , nama yang berbicara untuk dirinya sendiri.
  • Dalam kubectl logs Anda sekarang dapat menggabungkan flag -f ( --follow untuk streaming log) dan -l ( --selector untuk kueri label).
  • kubectl diajarkan untuk menyalin file yang dipilih dengan kartu liar.
  • Bendera --all ditambahkan ke perintah kubectl wait untuk memilih semua sumber daya di namespace dari jenis sumber daya yang ditentukan.
  • Menyatakan mekanisme plugin stabil untuk kubectl .

Lainnya


Status Stabil (GA) menerima fitur-fitur berikut:

  • Dukungan untuk node Windows (termasuk Windows Server 2019), yang menyiratkan kemungkinan merencanakan kontainer Windows Server di Kubernetes (lihat juga KEP );
  • ReadinessGate digunakan dalam spesifikasi pod untuk menentukan kondisi tambahan yang dipertimbangkan dalam kesiapan pod;
  • Dukungan untuk halaman besar (gerbang fitur yang disebut HugePages );
  • CustomPodDNS ;
  • API PriorityClass, Prioritas Pod & Preemption .

Perubahan lain yang diperkenalkan di Kubernetes 1.14:

  • Kebijakan RBAC default tidak lagi menyediakan akses ke API discovery dan ulasan access-review untuk pengguna yang tidak diauthentikasi.
  • Dukungan resmi untuk CoreDNS disediakan hanya untuk Linux, jadi ketika menggunakan kubeadm untuk penyebarannya (CoreDNS) dalam sebuah cluster, node harus bekerja hanya di Linux (nodeSelector digunakan untuk batasan ini).
  • Konfigurasi CoreDNS default sekarang menggunakan plugin forward bukan proxy. Selain itu, readinessProbe telah ditambahkan ke CoreDNS, yang mencegah load balancing pada pod yang sesuai (tidak siap untuk layanan).
  • Di kubeadm, dalam upload-certs init atau upload-certs , dimungkinkan untuk mengunggah sertifikat yang diperlukan untuk menghubungkan bidang kontrol baru ke rahasia kubeadm-certs ( --experimental-upload-certs digunakan).
  • Untuk instalasi Windows, versi alpha dukungan untuk gMSA (Group Managed Service Account) - akun khusus di Active Directory, yang dapat digunakan oleh kontainer, telah muncul.
  • Untuk GCE , enkripsi mTLS diaktifkan antara etcd dan kube-apiserver.
  • Pembaruan dalam perangkat lunak yang digunakan / tergantung: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, dukungan Docker 18.09 di kubeadm, dan versi minimum yang didukung dari Docker API adalah 1.26.

PS


Baca juga di blog kami:

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


All Articles