GNU/Linux >> Belajar Linux >  >> Linux

Membuat cluster Kubernetes bidang kontrol tunggal dengan kubeadm

Pendahuluan

Kubernetes adalah kluster dan orkestrasi mesin untuk kontainer Docker. Dengan kata lain Kubernetes adalah perangkat lunak atau alat open source yang digunakan untuk mengatur dan mengelola container Docker di lingkungan cluster. Kubernetes juga dikenal sebagai k8s dan dikembangkan oleh Google dan disumbangkan ke “Cloud Native Computing foundation”

Tujuan

Pengaturan cluster kubernetes ini akan memiliki 1 master node dengan CentOS 7 dan 2 node pekerja juga dikenal sebagai pelayan memiliki Server Windows 2k19 sistem operasi.

Kami akan menginstal dan mengonfigurasi cluster kubernetes pada VM datacenter untuk mengelola container Docker. Cluster ini mencakup 1 master (Linux) dan 2 node pekerja (windows), master akan mengontrol jadwal dan penerapan pod pada node pekerja.

Diagram Arsitektur Kubernetes

Beberapa Terminologi Kubernetes yang penting perlu diketahui sebelum memulai konfigurasi

ETCD (Cluster Node) :Kubernetes menggunakan “etcd” sebagai penyimpanan basis data nilai kunci. Ini menyimpan konfigurasi cluster Kubernetes di “etcd” .

kube-controller-manager: Manajer pengontrol Kubernetes adalah daemon yang menyematkan loop kontrol inti yang dikirimkan bersama Kubernetes. Di Kubernetes, pengontrol adalah loop kontrol yang mengawasi status cluster yang dibagikan melalui “apiserver” dan membuat perubahan mencoba untuk memindahkan keadaan saat ini menuju keadaan yang diinginkan. Contoh pengontrol yang dikirimkan bersama Kubernetes saat ini adalah pengontrol replikasi, pengontrol titik akhir, pengontrol namespace, dan pengontrol akun layanan

kube-apiserver :Server Kubernetes API memvalidasi dan mengonfigurasi data untuk objek api yang mencakup pod, layanan, pengontrol replikasi, dan lainnya. Server API melayani operasi REST dan menyediakan frontend ke status bersama cluster tempat semua komponen lain berinteraksi.

kube-scheduler: Penjadwal Kubernetes adalah fungsi khusus beban kerja yang kaya akan kebijakan, sadar topologi, yang secara signifikan memengaruhi ketersediaan, kinerja, dan kapasitas. Penjadwal perlu mempertimbangkan persyaratan sumber daya individu dan kolektif, persyaratan kualitas layanan, batasan perangkat keras/perangkat lunak/kebijakan, spesifikasi afinitas dan anti-afinitas, lokalitas data, interferensi antar-beban kerja, tenggat waktu, dan sebagainya.

kubelet :“kubelet” adalah “agen simpul . utama ” yang berjalan pada setiap node. Itu dapat mendaftarkan node dengan apiserver menggunakan salah satu dari:nama host; bendera untuk menimpa nama host; atau logika khusus untuk penyedia cloud.

kube-proxy :Proxy jaringan Kubernetes berjalan di setiap node. Ini mencerminkan layanan seperti yang didefinisikan dalam Kubernetes API pada setiap node dan dapat melakukan penerusan aliran TCP, UDP, dan SCTP sederhana atau penerusan TCP, UDP, dan SCTP round robin di serangkaian backend.

Deskripsi penyiapan cluster Kubernetes

Dalam penyiapan Kubernetes, kami memiliki 1 node master (CentOS 7) dan 2 node pekerja (Win 2k19). Dari master node kita dapat mengatur cluster dan node-nya menggunakan ‘kubeadm ‘dan ‘kubectl 'perintah.

Kubernetes dapat diinstal dan disebarkan menggunakan metode berikut:

  • Minikube ( Ini adalah cluster kubernetes node tunggal)
  • Kops ( Penyiapan kubernet multi node ke dalam AWS )
  • Kubeadm ( Cluster Multi Node di tempat kami sendiri)

Pada artikel ini kita akan menginstal Kubernetes 1.16 versi terbaru pada CentOS 7 / RHEL 7 dengan utilitas kubeadm. Dalam pengaturan ini kami menggunakan 1 server CentOS 7 dan 2 Windows 2k19 dengan instalasi minimal. Satu server akan bertindak sebagai node master dan dua server lainnya akan menjadi node antek atau pekerja

Pada Node Master, komponen berikut akan dipasang

  • Server API – Ini menyediakan API kubernetes menggunakan Jason / Yaml melalui http, status objek API disimpan di etcd
  • Penjadwal – Ini adalah program pada node master yang melakukan tugas penjadwalan seperti meluncurkan kontainer di node pekerja berdasarkan ketersediaan sumber daya
  • Manajer Pengontrol – Tugas Utama Manajer Pengontrol adalah memantau pengontrol replikasi dan membuat pod untuk mempertahankan status yang diinginkan.
  • dst – Ini adalah basis data pasangan nilai kunci. Ini menyimpan data konfigurasi cluster dan status cluster.
  • Utilitas Kubectl – Ini adalah utilitas baris perintah yang terhubung ke Server API pada port 6443. Ini digunakan oleh administrator untuk membuat pod, layanan, dll.

Pada Worker Nodes, komponen berikut akan dipasang

  • Kubelet – Ini adalah agen yang berjalan di setiap node pekerja, terhubung ke Docker dan menangani pembuatan, memulai, menghapus wadah.
  • Kube-Proxy – Ini mengarahkan lalu lintas ke wadah yang sesuai berdasarkan alamat IP dan nomor port dari permintaan yang masuk. Dengan kata lain kita dapat mengatakan itu digunakan untuk terjemahan port.
  • Pod – Pod dapat didefinisikan sebagai multi-tier atau grup container yang di-deploy pada satu node pekerja atau host Docker.

Langkah-Langkah Instalasi Kubernetes 1.16 di CentOS 7

Langkah 1: Setel nama host, nonaktifkan SELinux &atur firewall, dalam kasus kami firewall dan SELinux dalam keadaan dinonaktifkan dan nama host disetel sebagai kube-master. Dan pastikan semua node adalah

Langkah 2 :Konfigurasi Repositori Kubernetes

Paket Kubernetes tidak tersedia di repositori default CentOS 7 &RHEL 7, Gunakan url di bawah ini untuk mengonfigurasi repositori paketnya.

Langkah 3: Instal Kubeadm dan Docker menggunakan perintah di bawah ini

# yum install kubeadm docker -y

Kemudian mulai dan aktifkan kubectl dan buruh pelabuhan layanan menggunakan perintah di bawah ini.

# systemctl restart docker && systemctl enable docker
# systemctl restart kubelet && systemctl enable kubelet

Langkah 4 :Inisialisasi Master Kubernetes dengan 'kubeadm init'

Output dari perintah di atas akan menjadi seperti di bawah ini

Seperti yang bisa kita lihat di output bahwa kubernetes master telah berhasil diinisialisasi. Jalankan perintah di bawah ini untuk menggunakan cluster sebagai pengguna root.

Langkah 5 :Deploy jaringan pod ke cluster

Coba jalankan perintah di bawah ini untuk mendapatkan status cluster dan pod.

kubectl get nodes
kubectl get pods –all-namespaces

Untuk membuat status cluster siap dan status kube-dns berjalan, gunakan jaringan pod sehingga container dari host yang berbeda saling berkomunikasi. Jaringan POD adalah jaringan overlay antara node pekerja.

Jalankan perintah di bawah ini untuk menerapkan jaringan.

Sekarang jalankan perintah berikut untuk memverifikasi status. Seperti yang kita lihat node master sekarang dalam keadaan siap, sekarang kita akan menambahkan node pekerja ke cluster kubernetes ini.

Pemilihan dan konfigurasi Solusi Jaringan cluster Kubernetes

Setelah Anda menyiapkan master node Kubernetes, Anda siap untuk memilih solusi jaringan. Ada beberapa cara untuk membuat subnet kluster virtual dapat dirutekan di seluruh node. Pilih salah satu opsi berikut untuk Kubernetes di Windows hari ini:

  • Gunakan plugin CNI seperti Flannel untuk menyiapkan jaringan overlay untuk Anda.
  • Gunakan plugin CNI seperti Flannel untuk memprogram rute untuk Anda (menggunakan mode jaringan l2bridge).
  • Konfigurasikan sakelar smart top-of-rack (ToR) untuk merutekan subnet.

Flannel dalam mode vxlan

Flanel dalam mode vxlan dapat digunakan untuk menyiapkan jaringan overlay virtual yang dapat dikonfigurasi yang menggunakan tunneling VXLAN untuk merutekan paket antar node.

Siapkan master Kubernetes untuk Flanel

Beberapa persiapan kecil direkomendasikan pada master Kubernetes di cluster kami. Disarankan untuk mengaktifkan lalu lintas IPv4 yang dijembatani ke rantai iptables saat menggunakan Flannel. Ini dapat dilakukan dengan menggunakan perintah berikut:

# sudo sysctl net.bridge.bridge-nf-call-iptables=1

Unduh &konfigurasikan Flanel

Unduh manifes Flanel terbaru menggunakan perintah di bawah ini:

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Ada dua bagian yang harus Anda modifikasi untuk mengaktifkan backend jaringan vxlan:

  1. Dalam net-conf.json bagian kube-flannel.yml your Anda , periksa kembali:
    • Subnet cluster (mis. “10.244.0.0/16”) disetel sesuai keinginan.
    • VNI 4096 disetel di backend
    • Port 4789 disetel di backend
  2. Dalam cni-conf.json bagian kube-flannel.yml your Anda , ubah nama jaringan menjadi “vxlan0” .

Setelah menerapkan langkah-langkah di atas, net-conf.json your Anda akan terlihat sebagai berikut:

cni-conf.json akan terlihat sebagai berikut:

Luncurkan Flanel &validasi

Luncurkan Flanel menggunakan perintah

# kubectl apply -f kube-flannel.yml

Selanjutnya, karena pod Flannel berbasis Linux, terapkan patch NodeSelector Linux kami ke kube-flannel-ds DaemonSet hanya menargetkan Linux menggunakan perintah di bawah ini untuk mengunduh dan mengatur NodeSelector

# wget https://github.com/microsoft/SDN/blob/master/Kubernetes/flannel/l2bridge/manifests/node-selector-patch.yml
# kubectl patch ds/kube-flannel-ds-amd64 --patch "$(cat node-selector-patch.yml)" -n=kube-system

Setelah beberapa menit, Anda akan melihat semua pod berjalan jika jaringan pod Flannel di-deploy.

Menggabungkan node pekerja Windows ke kluster kubernetes

Setelah Anda menyiapkan node master Kubernetes dan memilih solusi jaringan yang diinginkan, Anda siap untuk bergabung dengan node Windows Server untuk membentuk sebuah cluster. Ini memerlukan beberapa persiapan pada node Windows sebelum bergabung.

Menyiapkan node Windows

Instal Docker (memerlukan reboot)

Kubernetes menggunakan Docker sebagai mesin penampungnya, jadi kita perlu menginstalnya. Anda dapat mengikuti petunjuk Dokumen resmi, petunjuk Docker, atau mencoba langkah-langkah di bawah ini:

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name Docker -ProviderName DockerMsftProvider
Restart-Computer –Force

Jika Anda berada di belakang proxy, variabel lingkungan PowerShell berikut harus ditentukan:

[Lingkungan]::SetEnvironmentVariable(“HTTP_PROXY”, “http://proxy.example.com:80/”, [EnvironmentVariableTarget]::Machine)

[Lingkungan]::SetEnvironmentVariable(“HTTPS_PROXY”, “http://proxy.example.com:443/”, [EnvironmentVariableTarget]::Machine)

Jika setelah reboot Anda melihat kesalahan berikut:

Kemudian mulai layanan buruh pelabuhan secara manual:

Pekerja buruh pelabuhan Start-Service

Siapkan Kubernetes untuk direktori Windows

Buat direktori “Kubernetes for Windows” untuk menyimpan binari Kubernetes serta skrip penerapan dan file konfigurasi apa pun.

mkdir c:\k

Salin sertifikat Kubernetes

Salin file sertifikat Kubernetes ($HOME/.kube/config ) dari master ke C:\k baru ini direktori.

Unduh binari Kubernetes

Untuk dapat menjalankan Kubernetes, Anda harus mengunduh kubectl , kubelet , dan kube-proxy binari. Anda dapat mengunduh ini dari tautan di CHANGELOG.md file rilis terbaru.

  • Misalnya, berikut adalah Binari Node v1.14.
  • Gunakan alat seperti Expand-Archive untuk mengekstrak arsip dan menempatkan biner ke C:\k\ .

(Opsional) Setup kubectl di Windows

Jika Anda ingin mengontrol cluster dari Windows, Anda dapat melakukannya menggunakan kubectl memerintah. Pertama, buat kubectl tersedia di luar C:\k\ direktori, ubah PATH variabel lingkungan:

$env:Path += ";C:\k"

Jika Anda ingin membuat perubahan ini permanen, ubah variabel di target mesin:

[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\k", [EnvironmentVariableTarget]::Machine)

Selanjutnya, kami akan memverifikasi bahwa sertifikat cluster valid. Untuk mengatur lokasi di mana kubectl mencari file konfigurasi, Anda dapat melewati --kubeconfig parameter atau ubah KUBECONFIG variabel lingkungan. Misalnya, jika konfigurasi terletak di C:\k\config :

$env:KUBECONFIG="C:\k\config"

Untuk menjadikan setelan ini permanen untuk cakupan pengguna saat ini:

[Environment]::SetEnvironmentVariable("KUBECONFIG", "C:\k\config", [EnvironmentVariableTarget]::User)

Terakhir, untuk memeriksa apakah konfigurasi telah ditemukan dengan benar, Anda dapat menggunakan:

kubectl config view

Jika Anda menerima kesalahan koneksi

Unable to connect to the server: dial tcp [::1]:8080: connectex: No connection could be made because the target machine actively refused it.

Anda harus memeriksa ulang lokasi kubeconfig atau mencoba menyalinnya lagi.

Jika Anda tidak melihat kesalahan, node sekarang siap untuk bergabung dengan cluster.

Bergabung dengan node Windows

Tergantung pada solusi jaringan yang Anda pilih, Anda dapat:

  1. Gabung node Windows Server ke kluster Flannel (vxlan atau host-gw) (Kami menggunakan solusi ini)
  2. Gabung node Windows Server ke cluster dengan sakelar ToR

Bergabung dengan cluster Flanel

Ada kumpulan skrip penerapan Flanel di repositori Microsoft ini yang membantu Anda menggabungkan node ini ke cluster.

Download script Flanel start.ps1 yang isinya harus di extract ke C:\k :

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
wget https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/start.ps1 -o c:\k\start.ps1

Dengan asumsi Anda menyiapkan node Windows Anda, dan c:\k . Anda direktori terlihat seperti di bawah ini, Anda siap untuk bergabung dengan node.

Gabung dengan node windows

Untuk menyederhanakan proses bergabung dengan node Windows, Anda hanya perlu menjalankan satu skrip Windows untuk meluncurkan kubelet , kube-proxy , flanneld , dan bergabung dengan simpul.

cd c:\k

.\start.ps1 -ManagementIP <Windows Node IP> -NetworkMode <network mode>  -ClusterCIDR <Cluster CIDR> -ServiceCIDR <Service CIDR> -KubeDnsServiceIP <Kube-dns Service IP> -LogDir <Log directory>

Setelah menjalankan ini, Anda seharusnya dapat:

  • Melihat node Windows yang bergabung menggunakan kubectl get node
  • Lihat 3 jendela powershell terbuka, satu untuk kubelet, satu untuk flanel, dan satu lagi untuk kube-proxy
  • Lihat proses host-agent untuk flanel, kubelet, dan kube-proxy yang berjalan di node


Linux
  1. Setup Cluster Kubernetes di Ubuntu 20.04 menggunakan kubeadm

  2. Cara Menguras Node di Kubernetes

  3. kubectl apply vs create:Mana yang Digunakan untuk Membuat Sumber Daya di Lingkungan Cluster Kubernetes?

  1. Cara Mengatur Cluster Kubernetes dengan Rancher

  2. Siapkan cluster Kubernetes dengan Rancher

  3. grastate.dat dengan seqno -1 pada cluster yang sehat. Mengapa?

  1. Cara Mengatur Cluster Kubernetes(k8s) di HA dengan Kubeadm

  2. Cara Mengatur Cluster OpenShift Node Tunggal di RHEL 8

  3. Komponen inti dari Cluster Kubernetes