GNU/Linux >> Belajar Linux >  >> Linux

Panduan Lengkap untuk Pemula untuk Deployment Cluster Kubernetes di CentOS (dan Linux Lainnya)

Saya harap Anda mengenal istilah dasar Kubernetes seperti node, service, cluster karena saya tidak akan menjelaskannya di sini.

Ini adalah tutorial langkah demi langkah untuk menunjukkan kepada Anda cara men-deploy cluster Kubernetes yang siap produksi.

Produksi siap? Ya, contoh menggunakan domain sampel jadi jika Anda memiliki domain, Anda dapat mengonfigurasinya di infrastruktur yang menghadap publik. Anda juga dapat menggunakannya untuk pengujian lokal. Terserah Anda.

Saya telah menggunakan CentOS Linux dalam contoh tetapi Anda harus dapat menggunakan distribusi Linux lainnya. Kecuali untuk perintah penginstalan, langkah selanjutnya harus berlaku untuk semua.

Saya akan menggunakan cluster sederhana dari satu node master/kontrol dan dua node pekerja:

Tutorial ini dibagi menjadi dua bagian utama.

Bagian pertama pada dasarnya adalah prasyarat dan berkaitan dengan menyiapkan mesin Anda dengan melakukan hal-hal berikut:

  • Konfigurasikan nama host dengan benar di semua host
  • Matikan swap di semua node
  • Tambahkan Aturan firewall
  • Konfigurasikan IPtables
  • Nonaktifkan SELinux

Bagian kedua adalah penerapan cluster Kubernetes yang sebenarnya dan terdiri dari langkah-langkah berikut:

  • Konfigurasi Repositori Kubernetes
  • Instal kubelet, kubeadm, kubectl dan docker
  • Aktifkan dan mulai layanan kubelet dan buruh pelabuhan
  • Aktifkan penyelesaian bash
  • Buat Cluster dengan kubeadm
  • Menyiapkan jaringan Pod
  • Bergabung dengan Worker Nodes
  • Uji cluster dengan membuat test pod

Bagian 1:Mempersiapkan sistem Anda untuk penerapan cluster Kubernetes

Anda memerlukan 3 server yang berjalan di mesin virtual atau bare metal atau platform cloud seperti Linode, DigitalOcean, atau Azure.

Saya menjalankan 3 CentOS VM dengan detail berikut:

  • Node master Kubernetes - 172.42.42.230 kmaster-centos7.example.com/kmaster-centos7
  • Node pekerja Kubernetes 1 - 172.42.42.231 kworker-centos71.example.com/kworker-centos71
  • Node pekerja Kubernetes 2 - 172.42.42.232 kworker-centos72.example.com/kworker-centos72

Silakan periksa alamat IP mesin Anda dan ubah sesuai dengan itu.

Langkah 1. Konfigurasikan nama host dengan benar di semua sistem

Anda dapat menambahkan IP dan informasi subdomain yang sesuai dengan mengubah catatan DNS domain Anda.

Jika Anda tidak memiliki akses ke DNS, perbarui file /etc/hosts pada node master dan pekerja dengan informasi berikut:

[[email protected] ~]# cat /etc/hosts
127.0.0.1       kmaster-centos7.example.com     kmaster-centos7
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.42.42.230 kmaster-centos7.example.com   kmaster-centos7
172.42.42.231 kworker-centos71.example.com  kworker-centos71
172.42.42.232 kworker-centos72.example.com  kworker-centos72
[[email protected] ~]#

Ping node pekerja untuk memverifikasi bahwa perubahan hostfile berfungsi dengan baik.

Langkah 2. Matikan swap (untuk alasan kinerja)

Penjadwal Kubernetes menentukan node terbaik yang tersedia untuk men-deploy pod yang baru dibuat. Jika pertukaran memori dibiarkan terjadi pada sistem host, ini dapat menyebabkan masalah kinerja dan stabilitas dalam Kubernetes.

Karena alasan ini, Kubernetes mengharuskan Anda menonaktifkan swap di semua node:

swapoff -a

Langkah 3. Tambahkan aturan firewall

Node, container, dan pod harus dapat berkomunikasi di seluruh cluster untuk menjalankan fungsinya. Firewalld diaktifkan di CentOS secara default, jadi sebaiknya buka port yang diperlukan.

Pada master node, Anda memerlukan port ini:

  • 6443 :Server API Kubernetes :Digunakan oleh Semua
  • 2379–2380 :etcd server client API :digunakan oleh kube-apiserver, etcd
  • 10250 :Kubelet API :Digunakan oleh Self, Control plane
  • 10251 :kube-scheduler :digunakan sendiri
  • 10252 :kube-controller-manager :digunakan sendiri

Pada node pekerja, port ini diperlukan:

  • 10250 :Kubelet API :Digunakan oleh Self, Control plane
  • 30000–32767 :Layanan NodePort :digunakan oleh Semua

perintah firewall-cmd membuka port 6443 dengan cara ini:

firewall-cmd --permanent --add-port=6443/tcp

Pada master dan node pekerja, gunakan perintah di atas untuk membuka port yang diperlukan yang telah disebutkan di bagian ini.

Untuk rentang port, Anda dapat mengganti nomor port dengan rentang seperti firewall-cmd --permanent --add-port=2379-2380/tcp .

Setelah Anda menambahkan aturan firewall baru di setiap mesin, muat ulang firewall:

firewall-cmd --reload

Langkah 4. Konfigurasi iptables

Pada node master dan pekerja, pastikan bahwa br_netfilter modul kernel dimuat. Ini dapat dilakukan dengan menjalankan lsmod | grep br_netfilter . Untuk memuatnya secara eksplisit, panggil sudo modprobe br_netfilter .

Setel net.bridge.bridge-nf-call-iptables ke '1' di file konfigurasi sysctl Anda. Ini memastikan bahwa paket diproses dengan benar oleh tabel IP selama pemfilteran dan penerusan port.

[[email protected] ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF

Jalankan perintah ini agar perubahan diterapkan:

sysctl --system

Langkah 5. Nonaktifkan SELinux (untuk Red Hat dan CentOS)

Wadah yang mendasari akan diperlukan untuk mengakses sistem file host. CentOS hadir dengan SELinux (Linux yang ditingkatkan keamanan) yang diaktifkan dalam mode penegakan. Ini mungkin memblokir akses ke sistem file host.

Anda dapat menonaktifkan SELinux atau mengaturnya dalam mode permisif, yang secara efektif menonaktifkan fungsi keamanannya.

[[email protected] ~]# setenforce 0
[[email protected] ~]# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
[[email protected] ~]#

Bagian 2:Menerapkan Cluster Kubernetes

Sekarang setelah Anda mengonfigurasi pengaturan yang benar pada node master dan pekerja, sekarang saatnya untuk memulai penerapan cluster.

Langkah 1. Konfigurasikan repositori Kubernetes

Paket Kubernetes tidak tersedia dari repositori resmi CentOS 7. Langkah ini perlu dilakukan pada node master, dan setiap node pekerja.

Masukkan yang berikut dan verifikasi setelah konten ditambahkan.

[[email protected] ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Perbarui dan verifikasi bahwa repo Kubernetes telah ditambahkan ke daftar repositori:

[[email protected] ~]# yum update -y
[[email protected] ~]# yum repolist | grep -i kubernetes
!kubernetes                         Kubernetes                               570

Langkah 2. Instal kubelet, kubeadm, kubectl dan Docker

kubelet, kubeadm, kubectl tiga paket dasar beserta runtime container (yang merupakan docker di sini) diperlukan untuk menggunakan Kubernetes.

Instal paket-paket ini di setiap node:

yum install -y kubelet kubeadm kubectl docker

Langkah 3. Aktifkan dan mulai layanan kubelet dan docker

Sekarang Anda telah menginstal paket-paket yang diperlukan, aktifkan (sehingga dimulai secara otomatis pada setiap boot) kubelet dan docker pada setiap node.

Aktifkan kubelet di setiap node:

[[email protected] ~]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.

Aktifkan buruh pelabuhan di setiap node:

[[email protected] ~]# systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

Anda juga harus memulai layanan ini agar dapat segera digunakan:


[[email protected] ~]# systemctl start kubelet
[[email protected] ~]# systemctl start docker.service

Langkah 4. Aktifkan penyelesaian bash (untuk kehidupan yang lebih mudah dengan Kubernetes)

Aktifkan penyelesaian bash pada semua node sehingga Anda tidak perlu mengetikkan semua perintah secara manual. Tab akan melakukannya untuk Anda.

[[email protected] ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[[email protected] ~]# echo "source <(kubeadm completion bash)" >> ~/.bashrc
[[email protected] ~]# echo "source <(docker completion bash)" >> ~/.bashrc

Langkah 5. Buat cluster dengan kubeadm

Inisialisasi cluster dengan menjalankan perintah berikut:

kubeadm init --apiserver-advertise-address=172.42.42.230 --pod-network-cidr=10.244.0.0/16

Catatan: Itu selalu baik untuk mengatur --apiserver-advertise-address khususnya saat memulai cluster Kubernetes menggunakan kubeadm. Alamat IP yang akan diiklankan oleh Server API yang sedang didengarkannya. Jika tidak disetel, antarmuka jaringan default akan digunakan.

Sama dengan --pod-network-cidr. Tentukan rentang alamat IP untuk jaringan pod. Jika disetel, bidang kontrol akan secara otomatis mengalokasikan CIDR untuk setiap node.

Untuk opsi lebih lanjut, silakan merujuk ke tautan ini.

Di akhir output perintah kube-init, Anda dapat melihat langkah-langkah untuk menjalankan cluster:

...
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
  
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 172.42.42.230:6443 --token 22m8k4.kajx812tg74199x3 \
    --discovery-token-ca-cert-hash sha256:03baa45e2b2bb74afddc5241da8e84d16856f57b151e450bc9d52e6b35ad8d22
```

**Manage cluster as regular user:
**In the above kube-init command output you can clearly see that to start using your cluster, you need to run the following commands as a regular user:

```bash
[[email protected] ~]# mkdir -p $HOME/.kube
[[email protected] ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[[email protected] ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[[email protected] ~]#

Anda harus menjalankan perintah tersebut satu per satu untuk memulai cluster Kubernetes:

[[email protected] ~]# mkdir -p $HOME/.kube
[[email protected] ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[[email protected] ~]# chown $(id -u):$(id -g) $HOME/.kube/config

Langkah 6. Siapkan jaringan pod

Jaringan pod adalah jaringan overlay antara node pekerja. Dengan jaringan pod, wadah pada node yang berbeda berkomunikasi satu sama lain.

Ada beberapa pilihan jaringan Kubernetes yang tersedia. Gunakan perintah berikut untuk menginstal add-on jaringan pod flanel:

[[email protected] ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged created
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRole is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRole
clusterrole.rbac.authorization.k8s.io/flannel created
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
[[email protected] ~]#

Periksa status cluster dan pastikan node master (bidang kontrol) dalam keadaan siap.

[[email protected] ~]# kubectl get nodes
NAME                          STATUS   ROLES    AGE   VERSION
kmaster-centos7.example.com   Ready    master   2m    v1.19.2

Periksa juga semua pod yang berjalan di semua namespace.

kubectl get pods --all-namespaces

Langkah 7. Gabungkan node pekerja ke cluster

Lihat output yang Anda dapatkan di langkah 5 dan salin perintah yang disarankan. Jalankan pada setiap node pekerja untuk menghubungkannya ke cluster:

kubeadm join 172.42.42.230:6443 --token 22m8k4.kajx812tg74199x3 \
>     --discovery-token-ca-cert-hash sha256:03baa45e2b2bb74afddc5241da8e84d16856f57b151e450bc9d52e6b35ad8d22

Periksa kembali status cluster untuk melihat semua node pekerja telah berhasil bergabung dengan cluster dan siap untuk melayani beban kerja.

[[email protected] ~]# kubectl get nodes -o wide
NAME                           STATUS   ROLES    AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
kmaster-centos7.example.com    Ready    master   9m17s   v1.19.2   172.42.42.230   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://1.13.1
kworker-centos71.example.com   Ready    <none>   7m10s   v1.19.2   172.42.42.231   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://1.13.1
kworker-centos72.example.com   Ready    <none>   7m8s    v1.19.2   172.42.42.232   <none>        CentOS Linux 7 (Core)   3.10.0-1127.19.1.el7.x86_64   docker://1.13.1

Verifikasi semua pod yang berjalan di semua namespace:

kubectl get pods -o wide --all-namespaces

Langkah 8. Uji cluster dengan membuat test pod

Sekarang setelah Anda memiliki segalanya, saatnya untuk menguji cluster. Buat pod:

[[email protected] ~]# kubectl run mypod1 --image=httpd --namespace=default --port=80 --labels app=fronend
pod/mypod1 created

Sekarang, verifikasi status pod:

[[email protected] ~]# kubectl get pods  -o wide
NAME     READY   STATUS    RESTARTS   AGE   IP           NODE                           NOMINATED NODE   READINESS GATES
mypod1   1/1     Running   0          29s   10.244.1.2   kworker-centos71.example.com   <none>           <none>
[[email protected] ~]#

Sekarang Anda memiliki cluster Kubernetes yang berfungsi penuh dan berjalan di CentOS!

Semoga Anda menyukai tutorialnya. Jika Anda memiliki pertanyaan atau saran, silakan tinggalkan komentar dan saya akan dengan senang hati membantu.

Dan jadilah anggota Buku Pegangan Linux untuk menikmati konten eksklusif khusus anggota.


Linux
  1. Panduan pemula untuk izin Linux

  2. Panduan pemula untuk firewalld di Linux

  3. Panduan Lengkap Pemula untuk LVM di Linux

  1. Panduan Lengkap untuk Menggunakan Paket Snap Di Ubuntu dan Distribusi Linux Lainnya

  2. Apa itu Kubernetes? Panduan Lengkap

  3. Panduan Lengkap Manjaro 17.05 (Edisi GNOME), Fitur dan Langkah-langkah Instalasi

  1. Cara Menggunakan Perintah Temukan dan Temukan Di Linux:Panduan Pemula

  2. Perintah Linux - Panduan Lengkap

  3. Panduan Lengkap untuk Memasang Linux di Chromebook