Kubernetes

Permulaan Kubernetes

Permulaan Kubernetes

Kubernetes adalah platform sumber terbuka untuk menguruskan aplikasi kontena di sekumpulan mesin fizikal atau maya. Inspirasi asal untuk Kubernetes adalah sistem Google Borg. Borg adalah sistem pengurusan kluster yang menangani ratusan ribu pekerjaan dan aplikasi di seluruh pusat data Google. Kubernetes dimaksudkan untuk menjadi versi sistem pengurusan kluster yang lebih ramah yang dapat digunakan oleh semua orang.

Populariti kontena dalam proses pengembangan perisian menjadikan Kubernetes juga popular. Dalam proses pengembangan perisian lama, aplikasi digunakan pada mesin host fizikal. Pembangun yang mengusahakan komponen aplikasi yang berbeza diperlukan untuk mengekalkan persekitaran yang padat. Kakitangan operasi dan IT diperlukan untuk mengurus pelaksanaan, konfigurasi, dan perpustakaan dengan berhati-hati. Komponen aplikasi yang berbeza boleh mengalami konflik semasa proses integrasi. Proses ini juga terdedah kepada kesalahan manusia dan kesalahan komunikasi.

Mesin maya (VM) membantu membawa beberapa tahap kebolehpercayaan untuk proses tersebut. Tetapi masih sukar untuk menguruskan aplikasi. Juga, VM mahal untuk diselenggara. Kontena mengubah landskap. Dengan kontena, pemaju yang mengusahakan komponen yang berbeza dari perisian yang sama dapat mengekalkan persekitaran yang berasingan. Bekasnya ringan, murah dan cepat. Manfaat ini menimbulkan idea untuk mengembangkan perisian menggunakan perkhidmatan mikro di mana setiap wadah melayani tugas tertentu untuk aplikasi.

Dengan meningkatnya penggunaan kontena, Kubernetes telah menjadi alat yang efektif untuk menjadwalkan dan menjalankan aplikasi di seluruh kelompok. Sebagai platform, ia dapat membebaskan para pembangun dari beban berurusan dengan mesin jenis apa pun. Daripada merancang infrastruktur yang berpusat di host dengan pertimbangan mesin fizikal atau mesin maya, pembangun boleh mula merancang infrastruktur yang berpusat pada kontena. Kubernetes menyediakan lapisan abstraksi yang diperlukan.

Bahagian 1: Konsep

Komponen Induk

Komponen induk adalah perkhidmatan kawalan untuk kluster. Komponen ini menangani keputusan dan peristiwa global. Mana-mana nod dalam kluster dapat menjalankannya. Walau bagaimanapun, menetapkan nod tertentu pada komponen ini dianggap sebagai amalan yang baik.

kube-apiserver

Kube-apiserver menyajikan API Kubernetes. API Kubernetes menerapkan antara muka RESTful. Ia berfungsi sebagai jambatan antara pelbagai komponen Kubernetes seperti pod, perkhidmatan, pengawal replikasi dan lain-lain. Ini bertanggungjawab untuk konsistensi komunikasi antara kedai etcd dan bekas yang dikerahkan.

dll

Etcd bertanggungjawab untuk menyimpan semua data kluster Kubernetes. Projek etcd dibangunkan oleh pasukan CoreOS. Ia adalah kedai nilai kunci yang diedarkan ringan dan menggunakan HTTP / JSON API. Node dalam kluster dapat menggunakan data konfigurasi dari etcd untuk mencari perkhidmatan dan pulih dari keadaan yang gagal. Oleh kerana pentingnya data, dll harus disandarkan dengan betul.

kube-pengawal-pengurus

Kube-controller-manager menjalankan pelbagai pengawal untuk memberikan perkhidmatan yang berbeza. Sebagai contoh, pengawal nod memulihkan nod yang gagal dan pengawal replikasi mengekalkan bilangan pod yang betul. Setiap pengawal berjalan sebagai utas yang berasingan dan bergantung pada maklumat dll untuk melaksanakan tugas mereka.

pengawal awan-pengurus

Pengawal awan-pengurus menyediakan pengawal khusus awan. Ia boleh dilumpuhkan di kube-controller-manager. Pengawal-pengawal-awan telah dipisahkan dari inti untuk membolehkan teras Kubernetes berkembang secara bebas daripada kod khusus penyedia awan. Pada masa lalu, kebergantungan menyebabkan masalah.

penjadual kube

Penjadual kube bertanggungjawab untuk pengagihan beban kerja. Ia memantau keperluan sumber dan memberikan node untuk pod yang baru dibuat. Ia juga menjaga kualiti keperluan perkhidmatan.

tambahan

Addons adalah pod dan perkhidmatan yang digunakan untuk menerapkan ciri kluster. Pengguna boleh menggunakan pengurus add-on untuk membuat dan mengekalkan addons. Beberapa tambahan yang penting dan berguna adalah DNS, Web UI (Dashboard), Pemantauan Sumber Container dan penebangan peringkat Cluster.

Komponen Node

Mesin pekerja di Kubernetes dipanggil nod. Komponen nod terdapat di setiap nod dan ia menangani aspek yang berbeza dari beban kerja.

kubelet

Perkhidmatan kubelet pada setiap nod adalah ejen utama. Ia melacak pod yang ditugaskan ke simpulnya melalui apiserver atau fail konfigurasi tempatan. Ia berkomunikasi dengan komponen induk untuk mengetahui permintaan kerja dan melaporkan status simpulnya.

proksi kube

Proksi kube adalah perkhidmatan proksi kecil di setiap nod untuk menangani subnetting host individu. Ia dapat melakukan pengimbangan beban dasar untuk TCP dan UDP.

tukang dok

Kubernetes terutamanya bergantung pada docker untuk menjalankan kontena. Ia mampu membina aplikasi dari gambar docker.

rkt

Kubernetes juga menyokong bekas rkt. Sokongan ini pada masa ini bersifat eksperimen.

penyelia

Penyelia boleh digunakan untuk memantau dan mengawal kubelet dan kontena.

fasih

Fluentd adalah deamon untuk menyediakan pembalakan peringkat kuster.

Beban kerja

Beban kerja Kubernetes dapat ditakrifkan sebagai berikut:

Pod

Pod adalah unit asas dalam beban kerja Kubernetes. Kontena tidak diberikan secara individu kepada hos. Kumpulan kontena, umumnya milik aplikasi, diwakili sebagai pod dan pod kemudian digunakan ke host sebagai satu unit. Sudah tentu, pod boleh mengandungi hanya satu bekas. Ini biasanya lebih biasa di Kubernetes. Walau bagaimanapun, kontena dikumpulkan bersama berdasarkan keperluan sumber dan aplikasi. Pengelompokan ini bertujuan untuk mengoptimumkan perkongsian sumber.

Pengawal

Pengawal seperti set replika, pengawal replikasi, penyebaran, set bernegara, pengumpulan sampah dan pekerjaan cron membantu menguruskan beban kerja Kubernetes. Pengawal replikasi menguruskan bilangan pod. Ia memulakan dan menghentikan pod untuk mengekalkan bilangan pod yang betul. Pengawal penerapan membantu mengubah pod dan objek penyebaran untuk mencapai keadaan penyebaran yang diinginkan.

Idea Penting Lain

Perkhidmatan

Kubernetes pod dibuat dan dimusnahkan secara berkala. Oleh itu, sukar untuk menjejaki mereka melalui alamat IP. Sifat pod yang dinamik menyukarkan mereka untuk berkomunikasi antara satu sama lain. Perkhidmatan berfungsi sebagai pengabstrakan. Ini memberikan polisi untuk mencapai kumpulan pod yang logik. Di Kubernetes, perkhidmatan adalah objek REST. Perkhidmatan mempermudah reka bentuk kontena.

Label

Label adalah kaedah yang kuat untuk mengesan dan menguruskan kumpulan komponen kerja. Label adalah pasangan nilai kunci yang berfungsi sebagai teg sewenang-wenangnya untuk membantu mendapatkan kawalan yang lebih baik terhadap fungsi sistem yang berbeza.

Bahagian 2: Projek Hands-on

Menjalankan Projek Minikube

Minikube adalah perduaan yang menyusun satu kluster Kubernetes pada mesin tempatan. Dalam projek ini, Node.aplikasi js akan diubah menjadi gambar kontena docker dan gambar akan dijalankan di Minikube.

Memasang Minikube, kubectl, Hypervisor, NodeJS dan Docker

Anda boleh memasang alat baris perintah Minikube dan Kubernetes kubectl pada Mac OS X, Linux dan Windows dengan pelbagai hypervisor. Arahan untuk sistem operasi yang berbeza boleh didapati di sini. Anda juga memerlukan NodeJS dipasang pada mesin anda untuk menjalankan aplikasi HelloWorld contoh. Anda boleh memasang docker di sini.

Memulakan Kluster

Gunakan arahan berikut untuk memulakan kluster:

$ minikube mula Memulakan Kubernetes tempatan v1.7.5 kluster… Memulakan VM… Memuat turun Minikube ISO 106.36 MB / 106.36 MB [============================================] 100.00% 0s Mendapatkan alamat IP VM… Memindahkan fail ke kluster… Menyiapkan sijil… Menyambung ke kluster… Menyiapkan kubeconfig… Memulakan komponen kluster… Kubectl kini dikonfigurasi untuk menggunakan kluster. 

Gunakan arahan di bawah untuk melihat apakah kluster berjalan dengan betul:

$ kubectl cluster-info Master Kubernetes dijalankan di https: // 192.168.99.100: 8443

Buat Gambar Aplikasi

Mari buat pelayan.fail js dengan kandungan berikut:

var http = memerlukan ('http'); var handleRequest = fungsi (permintaan, respons) konsol.log ('Permintaan yang diterima untuk URL:' + permintaan.url); tindak balas.tulisHead (200); tindak balas.tamat ('Hello World!'); ; var www = http.createServer (handleRequest); www.dengar (8080); 

Anda boleh menjalankan arahan berikut:

pelayan $ node.js

Dan periksa sama ada pelayan berjalan di http: // localhost: 8080. Anda mesti melihat "Hello World!Teks di laman web.

Tukar ke Docker Container

Dalam direktori yang sama dengan pelayan.js buat fail Dockerfile dengan teks berikut:

DARI nod: 6.9.2 pelayan EXPOSE 8080 COPY.js . Pelayan nod CMD.js 

Dockerfile akan membuat gambar yang akan bermula dari simpul: 6.9.2 gambar di Docker Hub.
Kami mahu menjalankan imej pelabuhan secara tempatan. Oleh itu, arahan berikut akan menyuruh pelabur menggunakan Deikon Minikube untuk penyimpanan gambar dok:

$ eval $ (minikube docker-env)

Anda boleh menggunakan eval $ (minikube docker-env -u) untuk menukarnya kembali ke lalai.
Sekarang mari kita membina imej pelabuhan:

$ docker build -t my-node: v1 . Menghantar konteks binaan ke Docker daemon 3.072kB Langkah 1: DARI nod: 6.9.2 6.9.2: Menarik dari perpustakaan / nod 75a822cd7888: Tarik lengkap 57de64c72267: Tarik lengkap 4306be1e8943: Tarik lengkap 871436ab7225: Tarik 0110c26a367a lengkap: Tarik 1f04fe713f1b lengkap: Tarik ac7c0b5fb553 lengkap: Tarik lengkap Digest: SHA256: 2e95be60faf429d6c97d928c762cb36f1940f4456ce4bd33fbdc34de94a5e043 Status: Masa-turun imej baru untuk nod: 6.9.2 ---> faaadb4aaf9b Langkah 2: KECUALI 8080 ---> Berjalan di da7d251b3fd5 ---> 881f9fb69b2c Melepaskan bekas perantaraan da7d251b3fd5 Langkah 3: Pelayan COPY.js . ---> 0acf61d9e75e Melepaskan bekas perantaraan 3a4025539cf6 Langkah 4: Pelayan nod CMD.js ---> Berjalan dalam 8aa9a4cbd723 ---> 41445e5c48fe Melepaskan bekas perantaraan 8aa9a4cbd723 Berjaya dibina 41445e5c48fe 

Terapkan ke Kluster
Untuk menggunakan my-node: v1, jalankan arahan berikut:

$ kubectl menjalankan my-node --image = my-node: v1 --port = 8080 penyebaran "my-node" dibuat

Ia akan membuat pod pada kluster. Kami dapat memeriksa status pod dengan arahan berikut:

$ kubectl dapatkan penyebaran NAMA DIPERLUKAN SEMASA KE-TARIKH TERSEDIA UMUR my-node 1 1 1 1 34s 
$ kubectl get pods NAMA READY STATUS RESTARTS UMUR my-node-276881918-qth5s 1/1 Berjalan 0 1m 
$ kubectl get events LASTSEEN FIRSTSEEN COUNT NAME KIND SUBOBJECT JENIS ALASAN SUMBER ALASAN 32m 32m 1 minikube Node Normal Permulaan kube-proksi, minikube Mula kube-proksi. 32m 32m 1 minikube Node Kubelet Permulaan Biasa, kubik minikube Permulaan. 32m 32m 2 minikube Node Normal NodeHasSufficientDisk kubelet, minikube Node status minikube kini: NodeHasSufficientDisk 32m 32m 2 minikube Node Normal NodeHasSufficientMemory kubelet, minikube Node Minikube status sekarang: NodeHasSufficientMemory Nikode NubeDikode Nmikik NodeDibik NodeMode NibNikik NodeDikode Nib NodeHasNoDiskPressure 32m 32m 1 minikube Node Normal NodeAllocatableEnforced kubelet, minikube Node Diperbarui Node Allocatable melintang pods 32m 32m 1 minikube Node Normal RegisteredNode controllermanager Node minikube event: Registered Node minikube in NodeController 32m 32mode Nibik NodeCode Nube Nib NodeReady 6m 6m 1 minikube Node Normal RegisteredNode controllermanager Node minikube event: Registered Node minikube in NodeController 5m 5m 1 minikube Node Normal Start kubelet, minikube Memulakan kubelet. 5m 5m 1 minikube Node Normal NodeAllocatableEnforced kubelet, minikube Dikemaskini had Node Allocatable seluruh buah 5m 5m 1 minikube Node Normal NodeHasSufficientDisk kubelet, minikube Node minikube status kini: NodeHasSufficientDisk 5m 5m 1 minikube Node Normal NodeHasSufficientMemory kubelet, minikube Node minikube status kini: NodeHasSufficientMemory Minimum 5m 5m 1 minikube Node Normal NodeHasNoDiskPressure kubelet, minikube Node status minikube kini: NodeHasNoDiskPressure 5m 5m 1 minikube Node Normal NodeNotReady kubelet, minikube Node Minikube status sekarang: NodeNotReady 5m 5m 1 minikube Nokode proxy, minibube proxy. 5m 5m 1 minikube Node Normal NodeReady kubelet, minikube Node status minikube kini: NodeReady 2m 2m 1 my-node-276881918-qth5s Pod Normal Penjadual lalai Berjadual Normal Berjaya menetapkan my-node-276881918-qth5s ke minikube 2m 2m 1 my-node -276881918-qth5s Pod Normal BerjayaMountVolume kubelet, minikube MountVolume.SetUp berjaya untuk jilid "default-token-r5pl1" 2m 2m 1 my-node-276881918-qth5s Pod spec.bekas my-node Kubelet tarik biasa, minikube Gambar kontena "my-node: v1" sudah ada pada mesin 2m 2m 1 my-node-276881918-qth5s Spesifikasi pod.kontena my-node Normal Created kubelet, minikube Created container 2m 2m 1 my-node-276881918-qth5s Spesifikasi pod.kontena my-node Normal Dimulai kubelet, minikube Bekas dimulakan 2m 2m 1 my-node-276881918 ReplikaSet Normal SuccessfulCiptakan replicaset-controller Pod yang dicipta: my-node-276881918-qth5s 2m 2m 1 my-node Deployment Normal ScalingReplicaSet deployment up replika set my-node-276881918 

Buat Perkhidmatan
Pod tidak dapat diakses. Anda harus membuat perkhidmatan agar pod dapat diakses oleh dunia. Perintah berikut harus membuat perkhidmatan yang diperlukan:

$ kubectl expose penyebaran my-node - type = LoadBalancer service "my-node" terdedah

Anda boleh menyemak status perkhidmatan seperti ini:

$ kubectl mendapatkan perkhidmatan NAMA CLUSTER-IP EXTERNAL-IP PORT (S) UMUR kubernetes 10.0.0.1  443 / TCP 34m my-node 10.0.0.213  8080: 31460 / TCP 31s 

Sekiranya anda menggunakan arahan berikut, ia akan membuka perkhidmatan di penyemak imbas web:

$ minikube service my-node Membuka perkhidmatan kubernetes default / my-node dalam penyemak imbas lalai… 

Anda boleh memeriksa apa yang berlaku dalam pod anda dengan arahan "log" - log kubectl [nameOfThePod].

$ kubectl log my-node-276881918-qth5s Permintaan yang diterima untuk URL: / Permintaan yang diterima untuk URL: / favicon.ico 

Log di atas menunjukkan permintaan yang dibuat ke pelayan.aplikasi js berjalan di kluster.

Membersihkan
Anda boleh menghapus perkhidmatan dan pod dengan arahan berikut:

$ kubectl delete service my-node service "my-node" dihapuskan $ kubectl delete deployment my-node [/ code] deployment "my-node" dihapuskan

Anda boleh menghentikan minikube:

$ minikube berhenti Menghentikan kluster Kubernetes tempatan ... Mesin dihentikan. 

Kesimpulannya

Kubernetes adalah sistem yang luas dengan kemampuan skala besar. Dokumentasi Kubernetes adalah tempat terbaik untuk belajar mengenai teknologi hebat ini.

Sambung belajar:
Dokumentasi Kubernetes: https: // kubernetes.io / dokumen

Cara memuat turun dan Mainkan Sid Meier's Civilization VI di Linux
Pengenalan permainan Civilization 6 adalah konsep moden mengenai konsep klasik yang diperkenalkan dalam siri permainan Age of Empires. Idea itu cukup ...
Cara Memasang dan Memainkan Doom di Linux
Pengenalan Doom Seri Doom berasal dari tahun 90an selepas pembebasan Doom yang asal. Ini adalah hit seketika dan sejak saat itu dan seterusnya siri pe...
Vulkan untuk Pengguna Linux
Dengan setiap kad grafik generasi baru, kami melihat pembangun permainan mendorong had kesetiaan grafik dan semakin dekat dengan fotorealisme. Tetapi ...