Cara memulai cluster Kubernetes dari awal menggunakan kubeadm dan kubectl

Kubernetes terkenal dengan kerumitannya, tetapi versi modern relatif mudah dikonfigurasi. Alat manajemen klaster resmi, Kubeadm, memberikan pengalaman otomatis untuk melepaskan level kontrol dan mencatat kontrak pekerja.

Artikel ini akan memandu Anda dalam menyiapkan cluster Kubernetes dasar dengan konfigurasi default. Ini adalah panduan “dari awal” dan harus bekerja pada host yang baru tersedia. Sistem berbasis Debian diasumsikan, tetapi Anda dapat menyesuaikan sebagian besar perintah ke manajer paket sistem operasi Anda. Langkah-langkah ini telah diuji dengan Ubuntu 22.04 dan Kubernetes v1.25.

Instal runtime kontainer

Kubernetes memerlukan runtime container yang sesuai dengan IRC untuk memulai dan menjalankan container Anda. Distribusi Kubernetes default tidak menyertakan runtime, jadi Anda harus menginstalnya sebelum melanjutkan. Kontainer adalah opsi paling populer. Ini adalah runtime yang hadir dengan versi terbaru Docker.

Anda dapat menginstal Containerd menggunakan repositori Docker yang sesuai. Pertama, tambahkan beberapa dependensi yang akan digunakan selama proses instalasi:

$ sudo apt update
$ sudo apt install -y 
   ca-certificates 
   curl 
   gnupg 
   lsb-release

Kemudian tambahkan kunci gpg repositori ke apt keyrings Catatan telepon:

$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Anda sekarang dapat menambahkan repositori yang benar untuk sistem Anda dengan menjalankan perintah ini:

$ echo 
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu 
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Perbarui daftar paket Anda untuk menyertakan konten dari repositori Docker:

$ sudo apt update

Akhirnya instal Containerd:

$ sudo apt install -y containerd.io

Pastikan layanan kontainer dimulai:

$ sudo service containerd status
 containerd.service - containerd container runtime
     Loaded: loaded (/lib/systemd/system/containerd.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-09-13 16:50:12 BST; 6s ago

Beberapa modifikasi diperlukan pada file konfigurasi containerd agar dapat bekerja dengan baik dengan Kubernetes. Pertama, ganti konten file dengan konfigurasi kontainer default:

$ sudo containerd config default > /etc/containerd/config.toml

Ini akan mengisi semua bidang konfigurasi yang tersedia dan memperbaiki beberapa masalah seperti: b:b. Nonaktifkan dukungan IRC pada pemasangan baru-baru ini.

lebih terbuka /etc/containerd/config.toml Dan cari baris berikut:

SystemdCgroup = false

Ubah nilainya menjadi true:

SystemdCgroup = true

Perubahan ini diperlukan untuk mengaktifkan dukungan penuh untuk systemd Kelola grup kontrol. Tanpa opsi ini, container sistem Kubernetes akan dimulai ulang secara berkala.

Mulai ulang penampung untuk menerapkan perubahan Anda:

$ sudo service containerd restart

Instal kubeadm, kubectl dan kubelet

Tahap kedua dari proses ini adalah menginstal alat Kubernetes. Ketiga alat ini menyediakan fungsi-fungsi berikut:

  • kubeadm Alat manajemen tingkat blok. Anda dapat menggunakannya untuk membuat grup Anda sendiri dan menambahkan node tambahan.
  • kubus Kubectl adalah CLI yang Anda gunakan untuk berinteraksi dengan cluster Kubernetes setelah aktif dan berjalan.
  • Coblet – Ini adalah proses Kubernetes yang berjalan pada node kerja kelompok. Hal ini bertanggung jawab untuk menjaga kontak dengan pesawat kontrol dan melepaskan kontainer baru bila diperlukan.

Ketiga binari tersedia dalam repositori nyaman yang dihosting oleh Google Cloud. Pertama, daftarkan gantungan kunci GPG repositori:

$ sudo curl -fsSLo /etc/apt/keyrings/kubernetes.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

Kemudian tambahkan repositori ke sumber Anda…

$ echo "deb [signed-by=/etc/apt/keyrings/kubernetes.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

… dan perbarui daftar paket Anda:

$ sudo apt update

Sekarang instal paket:

$ sudo apt install -y kubeadm kubectl kubelet

Sebaiknya “menyimpan” paket-paket ini agar apt tidak memperbaruinya secara otomatis saat Anda menjalankannya. apt upgrade. Upgrade cluster Kubernetes harus dimulai secara manual untuk menghindari downtime dan perubahan yang tidak diinginkan.

$ sudo apt-mark hold kubeadm kubectl kubelet

nonaktifkan pertukaran

Kubernetes tidak berfungsi saat swap diaktifkan. Anda harus menonaktifkan swap sebelum membuat grup Anda sendiri. Jika tidak, proses penyebaran akan dihentikan sementara menunggu kubelet dimulai.

Jalankan perintah ini untuk menonaktifkan swap:

$ sudo swapoff -a

Kemudian edit file Anda /etc/fstab File dan nonaktifkan semua tunggangan swap:

UUID=ec6efe91-5d34-4c80-b59c-cafe89cc6cb2 /               ext4    errors=remount-ro 0       1
/swapfile                                 none            swap    sw              0       0

File ini menampilkan montase dengan ekstensi swap Masuk sebagai baris terakhir. Itu harus dihapus atau diberi anotasi agar sakelar tetap nonaktif saat sistem dimulai ulang.

Unduh modul br_netfilter

ini br_netfilter Modul kernel diperlukan agar iptables dapat melihat lalu lintas dalam perjalanan. Kubeadm tidak akan mengizinkan Anda membuat grup sendiri jika modul ini tidak ada.

Anda dapat mengaktifkannya dengan perintah berikut:

$ sudo modprobe br_netfilter

Buat itu bertahan di seluruh reboot dengan menambahkannya ke daftar modul sistem Anda:

$ echo br_netfilter | sudo tee /etc/modules-load.d/kubernetes.conf

Buat grup Anda

Anda sekarang dapat membuat grup Kubernetes Anda sendiri. kabur dari kubeadm init Di komputer tempat Anda ingin menghosting pesawat kontrol:

$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16

ini --pod-network-cidr Bendera disertakan, sehingga pemetaan CIDR yang benar tersedia untuk add-on jaringan pod yang diinstal kemudian. nilai default dari 10.244.0.0/16 Ini berfungsi dalam banyak kasus, tetapi Anda mungkin perlu mengubah ruang lingkup jika Anda menggunakan lingkungan jaringan yang sangat berdedikasi.

Pembuatan blok dapat memakan waktu beberapa menit. Informasi kemajuan akan ditampilkan di perangkat Anda. Jika berhasil, Anda akan melihat pesan ini:

Your Kubernetes control-plane has initialized successfully!

Outputnya juga mencakup informasi tentang cara memulai koleksi Anda.

Siapkan file kubeconfig Anda

Pertama, salin file kubeconfig yang dibuat secara otomatis ke file Anda sendiri .kube/config catatan telepon. Atur properti file ke dirinya sendiri sehingga kubectl dapat membaca isinya dengan benar.

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

Memasang add-on jaringan pod

Kubernetes memerlukan add-on pod jaringan di cluster Anda agar node yang berfungsi dapat berfungsi secara normal. Anda harus menginstal add-on yang kompatibel secara manual untuk menyelesaikan instalasi.

Calico dan flanel adalah dua pilihan paling populer. Flanel digunakan dalam panduan ini untuk kemudahan pemasangan.

Gunakan kubectl untuk menambahkan Flanel ke grup Anda:

$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

Tunggu sebentar lalu lari kubectl get nodes di perangkat Anda. Anda akan melihat simpul Anda muncul sebagai Ready Dan Anda dapat mulai berinteraksi dengan grup Anda.

$ kubectl get nodes
NAME       STATUS   ROLES           AGE     VERSION
ubuntu22   Ready    control-plane   7m19s   v1.25.0

ketika kamu pergi kubectl get pods --all-namespacesAnda akan melihat bahwa komponen Control Plane, CoreDNS, dan Flanel semuanya berfungsi:

$ kubectl get pods --all-namespaces
NAMESPACE      NAME                               READY   STATUS    RESTARTS        AGE
kube-flannel   kube-flannel-ds-xlrk6              1/1     Running   5 (16s ago)     11m
kube-system    coredns-565d847f94-bzzkf           1/1     Running   5 (2m9s ago)    14m
kube-system    coredns-565d847f94-njrdc           1/1     Running   4 (30s ago)     14m
kube-system    etcd-ubuntu22                      1/1     Running   6 (113s ago)    13m
kube-system    kube-apiserver-ubuntu22            1/1     Running   5 (30s ago)     16m
kube-system    kube-controller-manager-ubuntu22   1/1     Running   7 (3m59s ago)   13m
kube-system    kube-proxy-r9g9k                   1/1     Running   8 (21s ago)     14m
kube-system    kube-scheduler-ubuntu22            1/1     Running   7 (30s ago)     15m

Berinteraksi dengan grup Anda

Anda sekarang dapat mulai menggunakan kubectl untuk berinteraksi dengan grup Anda. Sebelum melanjutkan, hapus warna default dari node bidang kontrol sehingga pod dapat dijadwalkan untuk menggunakannya. Kubernetes membatasi pod yang berjalan pada node level kontrol untuk menghindari pertengkaran sumber daya, tetapi pembatasan ini tidak diperlukan untuk penggunaan lokal.

$ kubectl taint node ubuntu22 node-role.kubernetes.io/control-plane:NoSchedule-
node/ubuntu22 untainted

alternatif ubuntu22 dalam perintah di atas dengan nama yang ditetapkan untuk node Anda.

Sekarang coba luncurkan pod NGINX sederhana:

$ kubectl run nginx --image nginx:latest
pod/nginx created

Terapkan dengan layanan NodePort:

$ kubectl expose pod/nginx --port 80 --type NodePort
service/nginx exposed

Temukan port host yang ditetapkan untuk layanan:

$ kubectl get services
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        18m
nginx        NodePort    10.106.44.155   <none>        80:30647/TCP   27s

Pelabuhan 30647. Permintaan HTTP ke titik akhir ini sekarang harus merespons dengan halaman arahan NGINX default:

$ curl http://localhost:30647
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

Grup Kubernetes berfungsi!

Tambahkan simpul lain

Untuk menyiapkan node kerja tambahan, pertama ulangi semua langkah di bagian dengan Buat grup Anda sendiri di setiap komputer yang ingin Anda gunakan. Containerd, kubeadm, dan kubelet harus diinstal pada setiap node. Anda juga harus memverifikasi bahwa node Anda memiliki konektivitas jaringan penuh dengan komputer yang menjalankan bidang kontrol Anda.

Selanjutnya, jalankan perintah berikut pada node pekerja baru:

kubeadm join 192.168.122.229:6443 
    --node-name node-b 
    --token <token> 
    --discovery-token-ca-cert-hash sha256:<token-ca-cert-hash>

Ganti alamat IP dengan alamat node level kontrol. Nilai <token> Dan <token-ca-cert-hash> Muncul saat balapan kubeadm init Untuk membuat rencana kontrol Anda sendiri. Anda bisa mendapatkannya kembali dengan mengikuti langkah-langkah ini.

Sinyal

kabur dari kubeadm token list pada simpul tingkat kontrol. Nilai token ditampilkan dalam file TOKEN kolom.

$ kubeadm token list
TOKEN                     TTL         EXPIRES                USAGES                   DESCRIPTION                                                EXTRA GROUPS
lkoz6v.cw1e01ckz2yqvw4u   23h         2022-09-14T19:35:03Z   authentication,signing

Sertifikat token CA hash

Jalankan perintah ini dan gunakan outputnya sebagai nilai:

$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | 
   openssl dgst -sha256 -hex | sed 's/^.* //'

Bergabunglah dengan grup

ini kubeadm join Perintah harus menghasilkan output ini jika berhasil:

$ kubeadm join 192.168.122.229:6443 
    --node-name node-b 
    --token <token> 
    --discovery-token-ca-cert-hash sha256:<token-ca-cert-hash>
[kubelet-start] Starting the kubelet[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

Pastikan node telah bergabung dengan cluster dan siap menerima pod dengan menjalankan kubectl get nodes Memerintah:

$ kubectl get nodes
NAME       STATUS   ROLES           AGE    VERSION
node-b     Ready    <none>          91s    v1.25.0
ubuntu22   Ready    control-plane   100m   v1.25.0

Node muncul dalam daftar dan memiliki Ready seperti kondisinya. Ini berarti sedang berjalan dan dapat menjadwalkan kapsul Kubernetes.

Ringkasan

Menyiapkan Kubernetes mungkin tampak menakutkan, tetapi Kubeadm mengotomatiskan sebagian besar bagian yang sulit untuk Anda. Meskipun masih ada beberapa langkah yang harus diikuti, Anda tidak akan mengalami masalah jika memastikan Anda memenuhi persyaratan dasar sebelum memulai.

Sebagian besar masalah muncul karena kurangnya runtime container untuk itu br_netfilter Modul kernel tidak ada, sakelar diaktifkan, atau kebutuhan untuk men-deploy ekstensi podnetwork telah diabaikan. Proses pemecahan masalah harus dimulai dengan menemukan kesalahan umum ini.

Kubeadm memberi Anda versi terbaru Kubernetes langsung dari proyek itu sendiri. Distro alternatif tersedia yang memungkinkan Anda menjalankan cluster node tunggal dengan satu perintah. Minikube, MicroK8s, dan K3s adalah tiga opsi populer. Meskipun umumnya mudah dikonfigurasi dan diperbarui, semuanya memiliki sedikit perbedaan dari Kubernetes hulu. Menggunakan kubeadm memberi Anda pemahaman tentang cara kerja bagian dalam Kubernetes dan dapat diterapkan ke banyak lingkungan yang berbeda.

Baca Juga!

Hemat hingga $1.300 untuk TV Samsung The Frame 4K Ultra Slim

Bingkai Samsung tidak seperti TV lain yang ada di pasaran saat ini. Ini karena itu …