Kubernetes 1.11: ikhtisar inovasi utama


Kubernetes 1.11 dirilis pada hari Rabu . Kami melanjutkan tradisi kami dan berbicara tentang perubahan paling signifikan, berdasarkan data dari CHANGELOG-1.11 dan berbagai masalah, menarik permintaan dan proposal desain. Apa yang baru di K8 1.11?

Jaringan


Mari kita mulai dengan jaringan, karena pengumuman Kubernetes 1.11 menandai stabilisasi resmi (yaitu, transfer ke status Ketersediaan Umum) dari dua inovasi penting yang disajikan dalam rilis sebelumnya. Yang pertama adalah load balancing layanan di dalam cluster, berdasarkan IPVS (IP Virtual Server). Peluang ini datang dari Huawei yang musim semi lalu mempresentasikan kepada masyarakat hasil pekerjaannya untuk meningkatkan penyeimbangan muatan 50+ ribu layanan menggunakan IPVS, bukan iptables. Pilihan ini dijelaskan secara logis: “Jika iptables dibuat untuk firewall dan didasarkan pada daftar aturan di kernel, maka IPVS dirancang untuk load balancing dan didasarkan pada tabel hash di kernel; selain itu, IPVS mendukung algoritma penyeimbangan beban lebih maju daripada iptables, serta sejumlah fitur berguna lainnya (misalnya, pemeriksaan status, coba lagi, dll.). "


Geser dari Scaling Kubernetes Huawei ke Mendukung presentasi 50.000 Layanan di KubeCon Europe 2017

Apa yang dipraktikkannya? “Bandwidth jaringan yang lebih baik, lebih sedikit latensi perangkat lunak [berbicara tentang waktu yang dibutuhkan untuk titik akhir baru untuk ditambahkan ke layanan - kira - kira. perev. ] dan skalabilitas yang lebih baik untuk load balancer di cluster. " Versi alpha dari mode IPVS untuk kube-proxy muncul di Kubernetes 1.8 dan telah berkembang menjadi stabil dengan rilis saat ini 1.11: meskipun secara default masih tidak diaktifkan, sudah resmi siap untuk melayani lalu lintas di kluster produksi.

Fitur matang kedua adalah CoreDNS sebagai server DNS yang digunakan oleh kluster Kubernetes. Kami menulis lebih banyak tentang solusi ini dalam tinjauan terpisah , dan singkatnya, ini adalah server DNS yang fleksibel dan mudah diperluas, awalnya didasarkan pada server web Caddy , yang menjadi penerus SkyDNS (omong-omong, kube-dns sendiri juga berdasarkan pada itu digantikan oleh CoreDNS) , ditulis dalam Go dan berfokus pada dunia cloud (aplikasi cloud). CoreDNS yang patut dicatat lainnya adalah kenyataan bahwa itu tampaknya merupakan satu-satunya file yang dapat dieksekusi dan satu-satunya proses dalam sistem. Sekarang ini bukan hanya opsi DNS lain untuk kluster Kubernetes, tetapi juga opsi default untuk kubeadm . Instruksi untuk menggunakan CoreDNS di Kubernet tersedia di sini (dan untuk Cluster Federation, di sini ).

Di antara pembaruan lainnya di "dunia" jaringan Kubernetes:

  • dalam NetworkPolicies sekarang mungkin untuk menentukan subas spesifik di ruang nama lain menggunakan namespaceSelector dan podSelector ;
  • layanan sekarang dapat mendengarkan pada port host yang sama pada antarmuka yang berbeda (ditentukan dalam --nodeport-addresses );
  • memperbaiki bug yang disebabkan oleh Kubelet saat menggunakan --node-ip berhenti melaporkan ExternalDNS , InternalDNS , dan ExternalIP .

Fasilitas penyimpanan


Diperkenalkan di Kubernetes 1.9 fitur perlindungan terhadap penghapusan PVC ( PersistentVolumeClaims ) yang digunakan oleh semua pod dan PV ( PersistentVolumes ) yang diikat ke PVC, kemudian (dalam K8 1.10) disebut StorageProtection , dinyatakan stabil.

Kemampuan untuk mengubah ukuran volume (PV) setelah memulai ulang tungku telah diterjemahkan ke dalam status beta, dan dalam versi alfa, mengubah ukuran volume secara real time telah tersedia, mis. tanpa perlu me-reboot perapian.

Untuk mendukung AWS EBS dan GCE PD, batas untuk jumlah volume maksimum yang mungkin terhubung ke host ditingkatkan, dan di plug-in AWS EBS, Azure Disk, GCE PD dan Ceph RBD menerapkan dukungan untuk penyediaan volume dinamis perangkat blok mentah. Untuk volume AWS EBS , kemampuan untuk menggunakan pod dalam mode ReadOnly juga telah ditambahkan .

Selain itu, Kubernetes 1.11 memperkenalkan versi alfa dukungan untuk batas dinamis pada volume tergantung pada jenis node, serta dukungan API untuk volume blok di driver penyimpanan eksternal CSI ( Container Storage Interface - muncul di Kubernetes 1.9 ). Selain itu, CSI menerapkan integrasi dengan mesin pendaftaran plugin Kubelet baru.

Node gugus


5 perubahan besar teratas dari rilis Kubernetes 1.11 juga termasuk transfer ke status versi beta dari konfigurasi dinamis Kubelet , yang pertama kali muncul di K8 1.8 dan memerlukan beberapa perubahan (Anda dapat melacaknya di tiket Konfigurasi Dynamic Kubelet asli ). Fitur ini memungkinkan meluncurkan konfigurasi Kubelet baru pada cluster yang aktif dan berfungsi (berlawanan dengan situasi sebelumnya, ketika pengaturan untuk Kubelet dilewatkan melalui bendera baris perintah). Untuk menggunakannya, Anda harus mengatur opsi --dynamic-config-dir (ketika Kubelet mulai).

Proyek cri-tools telah dinyatakan stabil. Ini menawarkan alat untuk administrator sistem yang memungkinkan Anda untuk menganalisis dan men-debug operasi node dalam produksi, terlepas dari runtime wadah yang digunakan. Paket-paket dengan itu ( crictl ) sekarang dikirim dengan sisa utilitas kubeadm (dalam format DEB dan RPM). Kami menulis lebih banyak tentang tujuan dan kemampuan crictl dalam artikel baru - baru ini tentang integrasi contenterd dengan Kubernetes, menggantikan Docker "tradisional".


Contoh penggunaan crictl dari dokumentasi proyek

Dukungan eksperimental untuk sysctls di Linux telah dikonversi ke status beta (diaktifkan secara default menggunakan flag fitur Sysctls ). PodSecurityPolicy dan Pod memiliki bidang khusus untuk menentukan / mengendalikan sistem .

Juga di ResourceQuota menjadi mungkin untuk menentukan kelas prioritas (dalam hal ini, kuota hanya berlaku untuk pod dengan kelas ini - lihat desain-proposal untuk detail), dan kondisi ContainersReady telah ditambahkan ke status pod.

Hak dan Keamanan


Fitur Agregasi ClusterRole yang diperkenalkan di K8s 1.9, yang memungkinkan Anda untuk menambahkan izin ke peran yang ada (termasuk yang dibuat secara otomatis), dinyatakan stabil tanpa menerima perubahan apa pun. Peran terpisah untuk cluster-autoscaler ( ClusterRole ) juga telah ditambahkan - ini digunakan sebagai ganti sistem ( cluster-admin ).

Sejumlah pekerjaan telah dilakukan untuk transparansi apa (dan mengapa) yang terjadi di dalam cluster. Secara khusus, informasi RBAC dalam log audit sekarang berisi anotasi tambahan untuk acara :

  • authorization.k8s.io/decision - allow atau forbid ;
  • authorization.k8s.io/reason - alasan yang bisa dibaca manusia untuk keputusan tersebut.

Juga di log audit ditambahkan informasi tentang akses dari PodSecurityPolicy dalam bentuk anotasi podsecuritypolicy.admission.k8s.io/admit-policy dan podsecuritypolicy.admission.k8s.io/validate-policy (kebijakan apa yang diizinkan di bawah ini?).

Utilitas Konsol


Banyak (walaupun tidak begitu signifikan, tetapi berguna!) Perbaikan disajikan dalam alat Kubernetes CLI:

  • kubectl wait baru kubectl wait saat ketika sumber daya yang ditentukan dihapus atau kondisi tertentu tercapai.
  • kubectl api-resources baru untuk melihat sumber daya:

  • Dukungan penyelesaian otomatis untuk kubectl cp .
  • Fungsi base64decode telah tersedia di base64decode Go, nama yang berbicara sendiri.
  • Menambahkan dukungan untuk flag --dry-run di kubectl patch .
  • --match-server-version menjadi global - kubectl version juga akan memperhitungkannya.
  • kubectl config view --minify sekarang mempertimbangkan flag context global.
  • kubectl apply --prune sumber daya kubectl apply --prune ditambahkan ke kubectl apply --prune CronJob .

Perubahan lainnya


  • Penjadwal ( kube-scheduler ) mempelajari cara merencanakan pod di DaemonSet (versi alpha).
  • Dimungkinkan untuk menentukan grup pengguna sistem tertentu ( RunAsGroup ) untuk kontainer di perapian (versi alpha).
  • Kemampuan untuk menghapus anak yatim (hapus anak yatim ) untuk CustomResources .
  • Peningkatan dalam dukungan API Kubernetes untuk perapian dan kontainer di Windows - menambahkan metrik untuk perapian, wadah dan sistem file dengan log, konteks scurity run_as_user , volume konstan lokal dan fstype untuk drive Azure.
  • Azure menambahkan dukungan untuk penyeimbang beban SKU standar dan IP publik.

Kompatibilitas


  • Versi etcd yang didukung adalah 3.2.18 (Kubernetes 1.10 adalah 3.1.12).
  • Versi terverifikasi Docker - dari 1.11.2 hingga 1.13.1 dan 17.03.x (belum berubah sejak rilis K8 1.10).
  • Versi Go adalah 1.10.2 (bukan 1.9.3), minimum yang didukung adalah 1.9.1.
  • Versi CNI adalah 0.6.0.
  • Versi CSI adalah 0.3.0 (bukan 0.2.0).

PS


Baca juga di blog kami:

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


All Articles