setup canary in haproxy on kubernetes

0
332

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 😀