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.