
Update dan upgrade package pada setiap master dan worker
sudo apt update
sudo apt upgrade -y
Install dan konfigurasi keepalived pada setiap master
sudo apt install keepalived -y
Konfigurasi keepalived.conf master 1
global_defs {
router_id ha_multi_master
vrrp_skip_check_adv_addr
vrrp_garp_interval 0.1
vrrp_gna_interval 0.1
enable_script_security
script_user root
}
vrrp_script chk_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 2
timeout 2
fall 2
rise 2
}
vrrp_instance LB1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 103
advert_int 1
preempt_delay 180
accept
garp_master_refresh 5
garp_master_refresh_repeat 1
authentication {
auth_type P45S
auth_pass S3cR3T
}
unicast_src_ip 192.168.90.181
unicast_peer {
192.168.90.182
192.168.90.183
}
virtual_ipaddress {
192.168.90.195/24 dev eth0
}
track_script {
chk_haproxy
}
}
Konfigurasi keepalived.conf master 2
global_defs {
router_id ha_multi_master
vrrp_skip_check_adv_addr
vrrp_garp_interval 0.1
vrrp_gna_interval 0.1
enable_script_security
script_user root
}
vrrp_script chk_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 2
timeout 2
fall 2
rise 2
}
vrrp_instance LB2 {
state BACKUP
interface eth0
virtual_router_id 51
priority 102
advert_int 1
accept
garp_master_refresh 5
garp_master_refresh_repeat 1
authentication {
auth_type P45S
auth_pass S3cR3T
}
unicast_src_ip 192.168.90.182
unicast_peer {
192.168.90.181
192.168.90.183
}
virtual_ipaddress {
192.168.90.195/24 dev eth0
}
track_script {
chk_haproxy
}
}
Konfigurasi keepalived.conf master 3
global_defs {
router_id ha_multi_master
vrrp_skip_check_adv_addr
vrrp_garp_interval 0.1
vrrp_gna_interval 0.1
enable_script_security
script_user root
}
vrrp_script chk_haproxy {
script "/usr/bin/killall -0 haproxy"
interval 2
weight 2
timeout 2
fall 2
rise 2
}
vrrp_instance LB3 {
state BACKUP
interface eth0
virtual_router_id 51
priority 101
advert_int 1
accept
garp_master_refresh 5
garp_master_refresh_repeat 1
authentication {
auth_type P45S
auth_pass S3cR3T
}
unicast_src_ip 192.168.90.183
unicast_peer {
192.168.90.181
192.168.90.182
}
virtual_ipaddress {
192.168.90.195/24 dev eth0
}
track_script {
chk_haproxy
}
}
Enable dan start keepalived service pada setiap master
sudo systemctl enable keepalived
sudo systemctl start keepalived
sudo systemctl status keepalived
Install dan konfigurasi haproxy pada setiap master
sudo add-apt-repository ppa:vbernat/haproxy-3.0 -y
sudo apt update
sudo apt install -y haproxy
Konfigurasi haproxy.cfg pada setiap master
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
maxconn 5000
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 10s
timeout client 600s
timeout server 600s
timeout http-request 600s
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
listen stats
bind *:8000
mode http
stats enable
stats uri /stats
stats refresh 15s
stats hide-version
stats show-legends
stats admin if TRUE
stats realm Haproxy\ Statistics
stats auth admin:BlMkV90PjBrM26!
listen k8s
bind *:8443
mode tcp
balance roundrobin
option tcplog
option tcp-check
server master1 192.168.90.181:6443 check inter 5s fall 3 rise 2
server master2 192.168.90.182:6443 check inter 5s fall 3 rise 2
server master3 192.168.90.183:6443 check inter 5s fall 3 rise 2
Cek konfigurasi dan restart haproxy service
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
sudo systemctl restart haproxy
sudo systemctl status haproxy
Install dan konfigurasi kubernetes
Enable IPv4 packet forwarding pada setiap master dan worker
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
Enable overlay dan br_netfilter module pada setiap master dan worker
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
Disable swap pada setiap master dan worker
sudo swapoff -a
sudo sed -i -E 's/^([^#].*?\s+swap\s+sw\s+.*)$/# \1/' /etc/fstab
Set up docker apt repository pada setiap master dan worker
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
Set up kubernetes apt repository pada setiap master dan worker
sudo apt install -y apt-transport-https ca-certificates curl gnupg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.35/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.35/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list
Install package yang dibutuhkan untuk kubernetes pada setiap master dan worker
sudo apt update
sudo apt install -y kubeadm kubectl kubelet containerd.io net-tools
Hold kubeadm, kubectl, dan kubelete agar tidak auto update pada setiap master dan worker
sudo apt-mark hold kubeadm kubectl kubelet
Generate default config untuk containerd pada setiap master dan worker
sudo containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
Enable systemdcgroup pada setiap master dan worker
sudo sed -i -E 's/^(\s*)SystemdCgroup = false/\1SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl status containerd
Init kubernetes cluster, jalankan hanya pada master 1
sudo kubeadm init --pod-network-cidr=10.6.0.0/16 --control-plane-endpoint=192.168.90.195:8443 --apiserver-advertise-address=192.168.90.181 --upload-certs
Output hasil dari init cluster kubernetes (perhatikan tulisan yang diwarnai)
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
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/
You can now join any number of control-plane nodes running the following command on each as root:
kubeadm join 192.168.90.195:8443 --token 41acnb.00g7xbgains1y33u \
--discovery-token-ca-cert-hash sha256:9422778ec7af68c7c4028298c09345fe5d0d487cd51d7b45073837375e02a4a7 \
--control-plane --certificate-key e8ddd99bb9d577f3f1159f333d54169f62772ee755b3e1c67e1976fc621fc1bf
Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.90.195:8443 --token 41acnb.00g7xbgains1y33u \
--discovery-token-ca-cert-hash sha256:9422778ec7af68c7c4028298c09345fe5d0d487cd51d7b45073837375e02a4a7
Konfigurasi penggunaan kubernetes cluster, jalankan hanya pada master 1 sebagai user biasa
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Sebagai alternatif konfigurasi penggunaan kubernetes cluster, jalankan hanya pada master 1 sebagai user root
export KUBECONFIG=/etc/kubernetes/admin.conf
Install addons untuk networking dan network policy, jalankan hanya pada master 1
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.31.3/manifests/calico.yaml
Join master ke cluster kubernetes, jalankan pada master lainnya selain master 1 dan sebagai user root
kubeadm join 192.168.90.195:8443 --token 41acnb.00g7xbgains1y33u \
--discovery-token-ca-cert-hash sha256:9422778ec7af68c7c4028298c09345fe5d0d487cd51d7b45073837375e02a4a7 \
--control-plane --certificate-key e8ddd99bb9d577f3f1159f333d54169f62772ee755b3e1c67e1976fc621fc1bf
Konfigurasi penggunaan kubernetes cluster, jalankan hanya pada master lainnya, selain master 1 sebagai user biasa
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Sebagai alternatif konfigurasi penggunaan kubernetes cluster, jalankan hanya pada master lainnya, selain master 1 sebagai user root
export KUBECONFIG=/etc/kubernetes/admin.conf
Join worker ke cluster kubernetes, jalankan di semua worker sebagai user root
kubeadm join 192.168.90.195:8443 --token 41acnb.00g7xbgains1y33u \
--discovery-token-ca-cert-hash sha256:9422778ec7af68c7c4028298c09345fe5d0d487cd51d7b45073837375e02a4a7
Pengecekan status node pada cluster kubernetes, jalankan disalah satu master (rekomendasi pada master 1)
kubectl get node -o wide