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 😀