halo sobat sekolahlinux, kali ini aku mau membagikan tentang bagaimana cara setup haproxy pada kubernetes, oh iya sebelum lebih jauh ke materi saya akan sedikit share tentang kenapa saya install haproxy di k8s, diataranya adalah karena saya ingin melakukan canary deployment, yang sebenernya ini di ingress nginx juga sudah bisa, namun saya merasa canary di nginx ingress belum mature dan ditambah tidak ada gui monitoring secara realtime, nah di haproxy sendiri kan ada haproxy stats, yang mana saya bisa lihat monitoring trafic dari situ, oke sekian ceritanya, kita kembali lagi ke materi.
disini saya menggunakan official docker image dari haproxy, dalam implementasi kali ini saya menggunakan 3manifest module/plugin kubernetes yaitu:
- service
- deployment
- configmap
yang mana isi dari masing-masing manifest diatas seperti dibawah ini
- deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: haproxy-sekolahlinux
spec:
strategy:
type: RollingUpdate
replicas: 3
selector:
matchLabels:
app: haproxy-sekolahlinux
template:
metadata:
labels:
app: haproxy-sekolahlinux
spec:
containers:
- name: haproxy-sekolahlinux
image: haproxy:2.2.3
volumeMounts:
- name: haproxy-volume
mountPath: /usr/local/etc/haproxy
env:
- name: "RESTART-POD"
value: "1"
volumes:
- name: haproxy-volume
configMap:
name: haproxy-sekolahlinux
- service.yaml
kind: Service
apiVersion: v1
metadata:
name: haproxy-sekolahlinux-service
spec:
selector:
app: haproxy-sekolahlinux
ports:
- name: haproxy-status
protocol: TCP
port: 1937
targetPort: 1937
- name: haproxy-sekolahlinux-service
protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
- configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: haproxy-sekolahlinux
data:
haproxy.cfg: |
global
log stdout format raw local0 debug
defaults
log global
mode tcp
timeout connect 5s
timeout client 5s
timeout server 5s
listen stats
bind *:1937
mode http
stats enable
stats hide-version
stats refresh 30s
stats show-node
stats auth username:password
stats uri /stats
listen sekolahlinux-service
bind *:80
mode tcp
balance leastconn
timeout client 10800s
timeout server 10800s
server new-service new_service_cluster_ip:80 check inter 5s weight 20
server old-service old_service_cluster_ip:80 check inter 5s weight 80
nah kurang lebih isi dari ke 3 manifest haproxy yang saya gunakan seperti diatas, untuk canary nya di haproxy saya menggunakan opsi paramater weight untuk mengatur beban trafic yang masuk.
sekian tutorial kali ini, semoga bermanfaat, jika ada yang sulit di pahami silahkan bertanya di kolom komentar 😀
