Kubernetes

Menyebarkan Aplikasi pada Kluster Kubernetes

Menyebarkan Aplikasi pada Kluster Kubernetes

Dalam artikel sebelumnya kami menggunakan Kubernetes Cluster dengan satu master dan satu simpul pekerja. Kluster Kubernetes terutama berkaitan dengan dua perkara; Nod dan Pod. Pod adalah aplikasi kontena yang ingin anda gunakan pada kluster dan nod adalah pelayan komputasi individu yang bertanggungjawab untuk menguruskan kluster atau menjalankan aplikasi. Untuk mempermudah urusan, kami mulakan dengan aplikasi tanpa status dan memperkenalkan pelbagai konsep seperti label dan pemilih yang digunakan untuk mengikat pod antara satu sama lain.

Terdapat konsep penting lain seperti set replika, perkhidmatan dan penyebaran yang semuanya akan kita pelajari dalam artikel ini.


Penyebaran aplikasi tradisional

Sekiranya anda melihat pendekatan tradisional untuk menggunakan aplikasi web, skalabilitas adalah sesuatu yang harus anda pertimbangkan sebelum memulakannya. Sekiranya anda memerlukan pangkalan data yang terpisah dari bahagian depan web anda, anda lebih baik melakukannya sekarang daripada melakukannya kemudian. Adakah anda merancang untuk menjalankan lebih daripada satu aplikasi web? Lebih baik konfigurasikan pelayan Reverse Proxy terlebih dahulu.

Dengan Kubernetes pendekatan telah berubah. Penyebaran dapat dilakukan dengan mempertimbangkan keperluan semasa dan kemudian dapat dibuat skala ketika perniagaan anda berkembang. Kontainerisasi membolehkan anda mengasingkan komponen penting dari perkhidmatan web anda, walaupun ia berjalan pada satu simpul. Kemudian apabila anda membuat skala secara mendatar (yang bermaksud anda menambahkan lebih banyak pelayan ke persekitaran anda) anda hanya perlu menjaringkan lebih banyak bekas, dan Kubernetes akan menjadualkannya pada nod yang sesuai untuk anda.  Proksi terbalik? Perkhidmatan Kubernetes akan datang untuk menyelesaikan masalah itu.


Pod

Sebagai langkah pertama, mari kita buat pod. Untuk melakukan itu, kami memerlukan fail YAML yang menentukan pelbagai atribut pod.

apiVersion: v1
jenis: Pod
metadata:
nama: nginx
spesifikasi:
bekas:
- nama: nginx
gambar: nginx: 1.7.9
pelabuhan:
- bekasPort: 80

Tambahkan isi di atas dalam a polong.keladi fail dan simpan. Melihat teks di atas, anda dapat melihat bahawa baik hati sumber yang kita hasilkan adalah polong. Kami menamakannya nginx, dan gambarnya nginx: 1.7.9 yang, secara lalai, bermaksud Kubernetes akan mengambil gambar nginx yang sesuai dari gambar Docker hub yang tersedia untuk umum.

Dalam organisasi berskala besar, K8 sering dikonfigurasi untuk menunjuk pada pendaftaran peribadi dari mana ia dapat menarik gambar kontena yang sesuai.

Sekarang untuk memulakan larian pod:

$ kubectl buat -f pod.keladi

Anda tidak dapat mengakses pod dari luar kluster. Ia belum terdedah, dan ia hanya wujud sebagai soliter. Untuk memastikan bahawa ia benar-benar digunakan, jalankan:

$ kubectl dapatkan pod

Untuk menghilangkan pod bernama nginx, jalankan arahan:

$ kubectl hapuskan pod nginx

Penyebaran

Mendapatkan hanya satu pod yang berfungsi bukanlah titik Kubernetes, idealnya, adalah banyak replika pod, yang sering dijadualkan pada nod yang berlainan, jadi jika satu atau lebih nod gagal, selebihnya dari pod akan tetap ada untuk diambil menambah beban kerja tambahan.

Lebih-lebih lagi, dari sudut pandang pembangunan, kita perlu mempunyai cara untuk melancarkan pod dengan versi perisian yang lebih baru dan menjadikan pod lama tidak aktif. Sekiranya berlaku, terdapat masalah dengan pod yang lebih baru yang dapat kita gulung kembali dengan membawa kembali pod lama dan menghapus versi yang gagal. Penerapan membolehkan kita melakukan itu.

Berikut adalah kaedah yang sangat biasa untuk menentukan penggunaan:

apiVersion: aplikasi / v1beta1
baik: Penyebaran
metadata:
nama: nginx-penyebaran
spesifikasi:
replika: 2
templat:
metadata:
label:
aplikasi: nginx
spesifikasi:
bekas:
- nama: nginx
gambar: nginx: 1.7.9
pelabuhan:
- bekasPort: 80

Anda akan melihat, antara lain pasangan nilai-kunci yang:

label:
aplikasi:
nginx

Label penting untuk pengurusan kluster kerana ia membantu mengesan sejumlah besar pod dengan tugas yang sama. Pod dibuat berdasarkan arahan nod utama, dan mereka berkomunikasi dengan nod induk. Namun, kami masih memerlukan kaedah yang berkesan untuk mereka saling berbincang dan bekerjasama sebagai satu pasukan.


Perkhidmatan

Setiap pod mempunyai alamat IP dalamannya sendiri dan lapisan komunikasi seperti Flannel membantu pod untuk berkomunikasi antara satu sama lain. Alamat IP ini, bagaimanapun, sedikit berubah dan, bagaimanapun, intinya mempunyai banyak pod adalah membiarkannya boleh pakai. Pod dibunuh dan dibangkitkan dengan kerap.

Persoalan yang timbul sekarang ialah - Bagaimana pod depan akan bercakap dengan pod belakang apabila keadaan begitu dinamik dalam kelompok?

Perkhidmatan menjadi gambaran untuk mengatasi kerumitan ini. Perkhidmatan adalah satu lagi pod yang bertindak seperti penyeimbang beban antara subset pod dan selebihnya dari kumpulan Kubernetes. Ia mengikat dirinya pada semua pod yang mempunyai label khusus yang melekat padanya, misalnya, pangkalan data, dan kemudian memaparkannya untuk sisa kluster.

Sebagai contoh jika kita mempunyai perkhidmatan pangkalan data dengan 10 pod pangkalan data, beberapa pod pangkalan data dapat muncul, atau terbunuh, tetapi perkhidmatan tersebut akan memastikan bahawa kluster yang lain mendapat 'service' yang merupakan pangkalan data. Perkhidmatan juga dapat digunakan untuk mengekspos front-end ke seluruh Internet.

Inilah definisi khas perkhidmatan.

apiVersion: v1
jenis: Perkhidmatan
metadata:
nama: wordpress-mysql
label:
aplikasi: wordpress
spesifikasi:
pelabuhan:
- pelabuhan: 3306
pemilih:
aplikasi: wordpress
peringkat: mysql
klusterIP: Tiada

Pod berlabel WordPress dengan tahap mysql yang ditentukan adalah yang akan diambil oleh perkhidmatan ini dan terdedah kepada pod pelayan web untuk penyediaan WordPress khas yang dilakukan di Kubernetes.


Peringatan

Semasa menggunakan aplikasi pelbagai peringkat raksasa yang disasarkan ke pangkalan pengguna yang besar, menjadi sangat menggoda untuk menulis banyak perkhidmatan (atau perkhidmatan mikro, kerana mereka terkenal). Walaupun ini adalah penyelesaian yang elegan untuk kebanyakan kes penggunaan, perkara-perkara dengan cepat dapat dilupakan.

Perkhidmatan, seperti buah, terdedah kepada kegagalan. Satu-satunya perbezaan adalah bahawa apabila perkhidmatan gagal, banyak pod, yang berfungsi dengan sempurna, tidak berguna. Akibatnya, jika anda mempunyai hubungan antara perkhidmatan yang besar (dalaman dan luaran) dan ada yang gagal, memikirkan titik kegagalan akan menjadi mustahil.

Sebagai kaedah praktik, jika anda mempunyai visualisasi kasar dari kluster, atau jika anda boleh menggunakan perisian seperti kokpit untuk melihat kluster dan memahami hal itu, persediaan anda baik-baik saja. Kubernetes, pada akhirnya, direka untuk mengurangkan kerumitan, bukan meningkatkannya.

Buat semula butang tetikus anda secara berbeza untuk perisian yang berbeza dengan X-Mouse Button Control
Mungkin anda memerlukan alat yang dapat mengubah kawalan tetikus anda dengan setiap aplikasi yang anda gunakan. Sekiranya ini berlaku, anda boleh menc...
Kajian Tetikus Tanpa Wayar Microsoft Sculpt Touch
Saya baru-baru ini membaca mengenai Sentuhan Microsoft Sculpt tetikus tanpa wayar dan memutuskan untuk membelinya. Setelah menggunakannya sebentar, sa...
Trackpad dan Mouse Pointer pada skrin Windows AppyMouse untuk Tablet Windows
Pengguna tablet sering kehilangan penunjuk tetikus, terutama ketika mereka biasa menggunakan komputer riba. Telefon pintar dan tablet skrin sentuh dil...