Persiapan
Saya menggunakan tiga node VM untuk proyek lab rumah ini dengan 4 Core, Memori 4GB, dan 20GB untuk penyimpanan container dengan sistem operasi Rocky Linux 9.5 dengan kubernetes v1.32.5+k3s1 dan cri-o v1.32.
| Node Hostname | vCPU | Memory | Storage | PrivateNet |
|---|---|---|---|---|
| litekube01 | 4 Core | 4GB | 20GB | 172.16.0.111 |
| litekube02 | 4 Core | 4GB | 20GB | 172.16.0.112 |
| litekube03 | 4 Core | 4GB | 20GB | 172.16.0.113 |
Semua operasi menggunakan user
root, berhati-hatilah saat menjalankan perintah!
Pada langkah ini, eksekusi dilakukan di semua node
Opsional: Setel SElinux ke mode permissive untuk lingkungan pengembangan
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
Setel hostname statis
Siapkan environment
NODE_01=litekube01
NODE_02=litekube02
NODE_03=litekube03
NODE_IP01=172.16.0.111
NODE_IP02=172.16.0.112
NODE_IP03=172.16.0.113
kemudian tambahkan hostname statis di /etc/hosts untuk semua node.
cat <<EOF >> /etc/hosts
$NODE_IP01 $NODE_01
$NODE_IP02 $NODE_02
$NODE_IP03 $NODE_03
EOF
Tambahkan Repository dan Instal CRI-O
CRIO_VERSION=v1.32
cat <<EOF > /etc/yum.repos.d/cri-o.repo
[cri-o]
name=CRI-O
baseurl=https://download.opensuse.org/repositories/isv:/cri-o:/stable:/$CRIO_VERSION/rpm/
enabled=1
gpgcheck=1
gpgkey=https://download.opensuse.org/repositories/isv:/cri-o:/stable:/$CRIO_VERSION/rpm/repodata/repomd.xml.key
EOF
Instal paket & dependensi
dnf install -y epel-release
dnf install -y container-selinux cri-o
Unduh dan instal k3s
curl -sfL https://get.k3s.io | INSTALL_K3S_SKIP_START=true INSTALL_K3S_CHANNEL=v1.32.5+k3s1 sh -s - server
Bootsraping cluster
Eksekusi hanya di node control-plane pertama
Buat folder /etc/rancher/k3s kemudian buat file konfigurasi berdasarkan variabel environment yang telah kita definisikan sebelumnya
mkdir -p /etc/rancher/k3s
cat <<EOF | tee /etc/rancher/k3s/config.yaml
cluster-init: true
node-ip: $(hostname -I | awk '{print $1}')
write-kubeconfig-mode: "0600"
tls-san:
- "localhost"
- "127.0.0.1"
- "$NODE_01"
- "$NODE_IP01"
- "$NODE_02"
- "$NODE_IP02"
- "$NODE_03"
- "$NODE_IP03"
container-runtime-endpoint: unix:///var/run/crio/crio.sock
cluster-cidr: 10.42.0.0/16
service-cidr: 10.43.0.0/16
# Buat snapshot etcd setiap 6 jam
etcd-snapshot-schedule-cron: " */6 * * *"
# Simpan 56 snapshot etcd (setara dengan 2 minggu dengan 6 snapshot per hari)
etcd-snapshot-retention: 56
EOF
Jika semuanya sudah siap, jalankan service dan terapkan agar berjalan saat VM booting
systemctl enable --now k3s.service
Terapkan Canal CNI (Calico untuk policy dan flannel untuk networking)
curl -sSL https://raw.githubusercontent.com/projectcalico/calico/v3.30.1/manifests/canal.yaml -o $HOME/canal.yaml
sed -i 's|10.244.0.0/16|10.42.0.0/16|g' $HOME/canal.yaml
cp $HOME/canal.yaml /var/lib/rancher/k3s/server/manifests/canal.yaml
Gabung node control-plane lain ke cluster
Dapatkan token cluster di node pertama di /var/lib/rancher/k3s/server/agent-token tampilannya seperti ini
[root@litekube01 ~]# cat /var/lib/rancher/k3s/server/agent-token
K10bb908f13304637e4547ad7a40edac1c3c25165c6812c65a36f327fb99d33aa86::server:359dbfc03ab8ef930664d10adeb45397
curl -sfL https://get.k3s.io | INSTALL_K3S_SKIP_START=true INSTALL_K3S_CHANNEL=v1.32.5+k3s1 sh -s - server
Sama seperti node pertama, buat folder /etc/rancher/k3s kemudian buat file konfigurasi berdasarkan variabel environment yang telah kita definisikan sebelumnya tetapi kita menambahkan nilai token dan server.
mkdir -p /etc/rancher/k3s
cat <<EOF | tee /etc/rancher/k3s/config.yaml
server: https://$NODE_01:6443
token: K10bb908f13304637e4547ad7a40edac1c3c25165c6812c65a36f327fb99d33aa86::server:359dbfc03ab8ef930664d10adeb45397
node-ip: $(hostname -I | awk '{print $1}')
write-kubeconfig-mode: "0600"
tls-san:
- "localhost"
- "127.0.0.1"
- "$NODE_01"
- "$NODE_IP01"
- "$NODE_02"
- "$NODE_IP02"
- "$NODE_03"
- "$NODE_IP03"
container-runtime-endpoint: unix:///var/run/crio/crio.sock
cluster-cidr: 10.42.0.0/16
service-cidr: 10.43.0.0/16
# Buat snapshot etcd setiap 6 jam
etcd-snapshot-schedule-cron: " */6 * * *"
# Simpan 56 snapshot etcd (setara dengan 2 minggu dengan 6 snapshot per hari)
etcd-snapshot-retention: 56
EOF
Post Bootsraping Cluster
Pada langkah ini, eksekusi dilakukan di semua node
Perbarui PATH di file .bashrc di $HOME/.bashrc dan /etc/skel/.bashrc dengan text editor kemudian sesuaikan seperti ini:
#export PATH
export PATH=$PATH:/usr/local/bin
Buat dan tautkan atau salin file kredensial cluster.
mkdir -p $HOME/.kube
ln -s /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
Buat file konfigurasi cri-tools.
cat <<EOF > /etc/crictl.yaml
runtime-endpoint: unix:///var/run/crio/crio.sock
image-endpoint: unix:///var/run/crio/crio.sock
timeout: 10
debug: false
EOF
Instal helm versi terbaru
HELM_VER=$(curl -sL https://get.helm.sh/helm-latest-version)
HELM_FILE=helm-$HELM_VER-linux-amd64.tar.gz
curl -sSL https://get.helm.sh/helm-$HELM_VER-linux-amd64.tar.gz -o $HELM_FILE; tar -zxf $HELM_FILE
mv linux-amd64/helm /usr/local/bin
Perbarui bash completion untuk memudahkan administrasi cluster
for i in kubectl crictl helm; do
$i completion bash | tee /etc/bash_completion.d/$i > /dev/null;
done
source /usr/share/bash-completion/bash_completion
Sekarang Anda dapat mengadministrasi cluster k3s dan men-debug node kubernetes dengan crictl tampilannya seperti ini:

Agent/Worker gabung node ke cluster
Ketika kita membutuhkan penskalaan cluster horizontal, kita dapat menambahkan node agent/worker. Unduh dan instal k3s untuk agent dan salin token cluster di node pertama $NODE_01 di /var/lib/rancher/k3s/server/agent-token
curl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=v1.32.5+k3s1 sh -s - agent --server https://$NODE_01:6443 \
--token K10bb908f13304637e4547ad7a40edac1c3c25165c6812c65a36f327fb99d33aa86::server:359dbfc03ab8ef930664d10adeb45397