Container adalah pilihan yang baik untuk menggabungkan dan menjalankan aplikasi kita sendiri. Ketika jumlah kontainer meningkat dengan cepat dan perlu mengelolanya dengan cara yang nyaman. Itulah alasan mengapa Kubernetes hadir. Kubernetes (K8s) adalah sistem sumber terbuka untuk mengotomatiskan penerapan, penskalaan, mengelola aplikasi dan layanan dalam container.
Cluster Kubernetes berisi node master dan pekerja. Node master mengontrol dan mengelola sekelompok node pekerja. Anda dapat memiliki beberapa node master untuk cluster ketersediaan tinggi.
Tutorial ini menunjukkan cara memasang cluster Kubernetes dengan kubeadm di Ubuntu 20.04.
Menyiapkan Lingkungan
- Gunakan 2 host Linux yang menjalankan Ubuntu 20.04
Menyetel alamat IP statis untuk node Master dan node Pekerja
- Node utama:192.168.1.11
- Node pekerja:192.168.1.12
- Konfigurasikan nama host untuk setiap mesin
Kami akan menggunakan node-1 sebagai master dan node-2 sebagai node pekerja.
$ sudo hostnamectl set-hostname node-1
$ sudo hostnamectl set-hostname node-2
- Nonaktifkan memori swap pada setiap node ubuntu
$ sudo swapoff -a
Tambahkan repositori Kubernetes
Kubernetes tidak tersedia di repositori default Ubuntu, jadi harus menambahkannya secara manual.
Pada Node Master dan Worker lakukan hal berikut:
Menambahkan kunci penandatanganan Kubernetes sebagai berikut:
$ sudo -i
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
Kemudian, tambahkan repo Kubernetes, jalankan:
$ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list
$ sudo mv ~/kubernetes.list /etc/apt/sources.list.d
$ sudo apt update
Menginstal alat Kubernetes
Di bagian ini, kita akan menginstal Kubeadm, cri-o, Kubelet, dan Kubernetes-cni. Semua alat ini perlu dipasang di node master dan pekerja .
Pastikan untuk menginstal versi yang direkomendasikan dan didukung. Di sini kami menginstal Kubernetes dan crio versi 1.18.
Instal Kubeadm
Kubeadm adalah alat yang merupakan bagian dari proyek Kubernetes yang membantu inisialisasi cluster Kubernetes.
Dalam tutorial ini, kita akan menginstal kubeadm versi 1.18.0-00, ketik:
$ sudo apt install -y kubeadm=1.18.0-00 --allow-unauthenticated
Catatan :Anda dapat menemukan versi spesifik dengan perintah berikut:
$ curl -s https://packages.cloud.google.com/apt/dists/kubernetes-xenial/main/binary-amd64/Packages | grep Version | awk '{print $2}'
Instal Kubectl
Kubectl
adalah alat baris perintah Kubernetes. Ini memungkinkan Anda untuk menjalankan perintah di cluster Kubernetes. Anda dapat menggunakan kubectl untuk men-deploy aplikasi, mengelola sumber daya cluster, dan melihat log.
Instal kubectl v1.18.0-00 dengan perintah berikut:
$ sudo apt install -y kubectl=1.18.0-00 --allow-unauthenticated
Instal CRI-O
CRI-O adalah antarmuka runtime kontainer (CRI) yang sesuai dengan OCI. Runtime yang paling umum digunakan adalah Docker. Sejak rilis Kubernetes 1.20, shim antarmuka runtime container (CRI) untuk Docker tidak digunakan lagi. Docker menghasilkan gambar yang bukan gambar OCI (Open Container Initiative).
Kita harus menggunakan runtime container yang sesuai dengan OCI untuk menarik dan menjalankan image OCI, terutama jika Anda menggunakan layanan Kubernetes seperti GKE, EKS, atau AKS.
Anda masih dapat menggunakan buruh pelabuhan, lalu instal menggunakan sudo apt-get install docker.io
Di sini saya akan menggunakan cri-o yang merupakan runtime yang sesuai. Jauhkan versi cri-o yang cocok dengan versi Kubernetes.
Pastikan Anda menginstal versi yang didukung.
Pertama, gunakan modprobe
perintah untuk memuat hamparan dan br_netfilter modul pada node Master dan Worker:
$ sudo modprobe overlay
$ sudo modprobe br_netfilter
Kemudian, buat file konfigurasi sysctl untuk mengaktifkan penerusan IP dan pengaturan netfilter selama reboot dengan memasukkan baris berikut ke /etc/sysctl.d/99-kubernetes-cri.conf
file pada node Master dan Worker:
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
Terapkan file konfigurasi dengan menjalankan:
$ sudo sysctl --system
Sekarang, kita tentukan OS Ubuntu dan versi cri-o sebagai berikut:
$ sudo -i
# export OS=xUbuntu_20.04
# export VERSION=1.18
Kemudian jalankan perintah berikut sebagai root
pengguna:
# echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
# echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
# curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | apt-key add -
# curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | apt-key add -
# apt update
# apt install cri-o cri-o-runc
Setelah instalasi selesai, conmon Utilitas (Pemantauan Kontainer) telah dipasang. Temukan jalur kesamaan:
$ which conmon
/usr/bin/conmon
Edit /etc/crio/crio.conf
file sebagai berikut:
...
# Path to the conmon binary, used for monitoring the OCI runtime.
conmon = "/usr/bin/conmon" #<-- Edit this line. Around line 108
...
registries = [ #<-- Edit and add registries. Around line 351
"docker.io",
"quay.io",
]
....
Aktifkan cri-o dan pastikan itu berjalan:
$ sudo systemctl daemon-reload
$ sudo systemctl enable crio
$ sudo systemctl start crio
$ sudo systemctl status crio
Keluaran:
● crio.service - Container Runtime Interface for OCI (CRI-O)
Loaded: loaded (/usr/lib/systemd/system/crio.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-12-10 15:46:37 UTC; 3 days ago
Docs: https://github.com/cri-o/cri-o
...
Instal Kubelet
Kubelet adalah agen yang berjalan di setiap node dan bertanggung jawab untuk berbicara dengan server API di master node dan mengarahkan runtime container untuk memulai beban kerja.
Konfigurasi kubelet
untuk memahami bagaimana berinteraksi dengan cri-o dengan menyisipkan baris berikut ke /etc/default/kubelet
berkas:
KUBELET_EXTRA_ARGS=--feature-gates="AllAlpha=false,RunAsGroup=true" --container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint='unix:///var/run/crio/crio.sock' --runtime-request-timeout=5m
Pada node Master dan Worker, jalankan perintah berikut untuk menginstal kubelet
:
$ sudo apt install -y kubelet=1.18.0-00 --allow-unauthenticated
Instal Kubernetes-cni
Untuk mengaktifkan jaringan container di cluster, kita harus menginstal kubernetes-cni
.
Jalankan perintah berikut:
$ sudo apt-get install -y kubernetes-cni --allow-unauthenticated
Menerapkan cluster Kubernetes
Menerapkan cluster Kubernetes melibatkan 2 langkah. Langkah pertama adalah menginisialisasi node master dan langkah kedua adalah menggabungkan node pekerja ke cluster.
Inisialisasi node master
Untuk Menginisialisasi Kubernetes pada Node master , ketik:
$ sudo kubeadm init --apiserver-advertise-address=192.168.1.11 --pod-network-cidr=10.244.0.0/16
Ini akan memakan waktu beberapa menit untuk menyelesaikannya. Setelah inisialisasi selesai, terminal akan menampilkan output sebagai berikut:
Perhatikan baris untuk bergabung dengan cluster yang ditandai di atas, akan digunakan pada langkah berikutnya untuk menggabungkan node pekerja ke cluster.
Sekarang, jalankan perintah berikut untuk membuat direktori konfigurasi Kubernetes pada node Master:
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Selanjutnya, terapkan jaringan pod ke cluster:
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Memverifikasi bahwa semua komponen Control-plane telah berhasil diinstal:
$ kubectl get pod --all-namespaces
Gabung node pekerja ke cluster
Sekarang login node pekerja dan gabungkan node pekerja ke cluster.
Pada mesin node pekerja, jalankan perintah berikut:
$ sudo kubeadm join 192.168.1.11:6443 --token 9ii02d.nsmrmu1asascv2yg \
--discovery-token-ca-cert-hash sha256:1104bf70b03a2d030ffc0a462f9dbcbcdd9975393e9a9ac2a1f18500f1b6b74e
Setelah proses bergabung selesai, kembali ke node Master, dan jalankan:
$ kubectl get node
NAME STATUS ROLES AGE VERSION
node-1 Ready master 2m37s v1.18.0
node-2 Ready none 22s v1.18.0
Untuk mendapatkan informasi lebih lanjut tentang node, ketik:
$ kubectl get node -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node-1 Ready master 9h v1.18.0 10.2.0.4 Ubuntu 20.04.1 LTS 5.4.0-1029-gcp cri-o://1.18.4
node-2 Ready none 9h v1.18.0 10.2.0.5 Ubuntu 20.04.1 LTS 5.4.0-1029-gcp cri-o://1.18.4
Outputnya menunjukkan detail master node dan node yang telah bergabung dengan cluster.
Baca Juga:Cara Install Kubernetes Lokal Menggunakan Vagrant/Minikube
Kesimpulan
Seiring dengan semakin populernya containerisasi, kebutuhan untuk mengelola beban kerja dan layanan dalam container membuat Kubernetes sangat populer. Semua sebagian besar penyedia cloud besar mulai mendukung Kubernetes terkelola yang membuat hidup lebih mudah.
Kubernetes sepenuhnya gratis dan dapat diunduh kapan saja dari repositorinya. Semoga Anda menikmati menginstal Kubernetes di Ubuntu. Anda dapat mencoba menerapkan aplikasi seperti MySQL atau WordPress di kluster K8.
Terima kasih telah membaca dan silakan tinggalkan saran Anda di bagian komentar di bawah.